svn commit: trunk/busybox: libbb scripts shell

vda at busybox.net vda at busybox.net
Fri Apr 11 11:27:29 UTC 2008


Author: vda
Date: 2008-04-11 04:27:29 -0700 (Fri, 11 Apr 2008)
New Revision: 21706

Log:
fix build with gcc -combine



Modified:
   trunk/busybox/libbb/ptr_to_globals.c
   trunk/busybox/scripts/Makefile.IMA
   trunk/busybox/shell/ash_ptr_hack.c


Changeset:
Modified: trunk/busybox/libbb/ptr_to_globals.c
===================================================================
--- trunk/busybox/libbb/ptr_to_globals.c	2008-04-11 10:54:37 UTC (rev 21705)
+++ trunk/busybox/libbb/ptr_to_globals.c	2008-04-11 11:27:29 UTC (rev 21706)
@@ -5,7 +5,20 @@
  * Licensed under GPLv2, see file LICENSE in this tarball for details.
  */
 
+struct globals;
+
+#ifndef GCC_COMBINE
+
 /* We cheat here. It is declared as const ptr in libbb.h,
  * but here we make it live in R/W memory */
-struct globals;
 struct globals *ptr_to_globals;
+
+#else
+
+/* gcc -combine will see through and complain */
+/* Using alternative method which is more likely to break
+ * on weird architectures, compilers, linkers and so on */
+struct globals *const ptr_to_globals __attribute__ ((section (".data")));
+
+#endif
+

Modified: trunk/busybox/scripts/Makefile.IMA
===================================================================
--- trunk/busybox/scripts/Makefile.IMA	2008-04-11 10:54:37 UTC (rev 21705)
+++ trunk/busybox/scripts/Makefile.IMA	2008-04-11 11:27:29 UTC (rev 21706)
@@ -145,8 +145,10 @@
 lib-all-y += $(patsubst %,libbb/%,$(sort $(lib-y)))
 lib-y:=
 
-busybox: $(usage_stuff)
-	$(CC) $(CPPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) --combine $(WHOLE_PROGRAM) \
+busybox: $(usage_stuff) include/applet_tables.h
+	$(CC) $(CPPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) \
+		-DGCC_COMBINE=1 \
+		--combine $(WHOLE_PROGRAM) \
 		-funit-at-a-time -Wno-error -std=gnu99  \
 		-o $(@)_unstripped $(lib-all-y:.o=.c) \
 		-Wl,--start-group -lcrypt -lm -Wl,--end-group
@@ -154,7 +156,13 @@
 	-$(STRIP) -s -R .note -R .comment -R .version $@
 
 applets/usage:
-	$(HOSTCC) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer      -I$(srctree)/include -o applets/usage applets/usage.c
+	$(HOSTCC) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -I$(srctree)/include -o applets/usage applets/usage.c
+
+applets/applet_tables:
+	$(HOSTCC) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -I$(srctree)/include -o applets/applet_tables applets/applet_tables.c
+
 include/usage_compressed.h: $(srctree)/include/usage.h applets/usage
 	$(srctree)/applets/usage_compressed include/usage_compressed.h applets
 
+include/applet_tables.h: $(srctree)/include/applets.h
+	applets/applet_tables include/applet_tables.h

Modified: trunk/busybox/shell/ash_ptr_hack.c
===================================================================
--- trunk/busybox/shell/ash_ptr_hack.c	2008-04-11 10:54:37 UTC (rev 21705)
+++ trunk/busybox/shell/ash_ptr_hack.c	2008-04-11 11:27:29 UTC (rev 21706)
@@ -5,12 +5,25 @@
  * Licensed under GPLv2, see file LICENSE in this tarball for details.
  */
 
-/* We cheat here. They are declared as const ptr in ash.c,
- * but here we make them live in R/W memory */
 struct globals_misc;
 struct globals_memstack;
 struct globals_var;
 
+#ifndef GCC_COMBINE
+
+/* We cheat here. They are declared as const ptr in ash.c,
+ * but here we make them live in R/W memory */
 struct globals_misc     *ash_ptr_to_globals_misc;
 struct globals_memstack *ash_ptr_to_globals_memstack;
 struct globals_var      *ash_ptr_to_globals_var;
+
+#else
+
+/* gcc -combine will see through and complain */
+/* Using alternative method which is more likely to break
+ * on weird architectures, compilers, linkers and so on */
+struct globals_misc     *const ash_ptr_to_globals_misc __attribute__ ((section (".data")));
+struct globals_memstack *const ash_ptr_to_globals_memstack __attribute__ ((section (".data")));
+struct globals_var      *const ash_ptr_to_globals_var __attribute__ ((section (".data")));
+
+#endif




More information about the busybox-cvs mailing list