fix build with gcc -combine
authorDenis Vlasenko <vda.linux@googlemail.com>
Fri, 11 Apr 2008 11:27:29 +0000 (11:27 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Fri, 11 Apr 2008 11:27:29 +0000 (11:27 -0000)
libbb/ptr_to_globals.c
scripts/Makefile.IMA
shell/ash_ptr_hack.c

index f8ccbf142185c60db3acb4abc84297063b893cea..48cf8d86cf855c92bea0da7b3743296e35966e31 100644 (file)
@@ -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
+
index 762e25292a960e3fc9c2636df5c884d3526f66d8..d24651787ff13263fda807f27ac85883abed8c9a 100644 (file)
@@ -145,8 +145,10 @@ include libbb/Kbuild
 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 @@ busybox: $(usage_stuff)
        -$(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
index 490b73b6db8e42d5a66766aba6bb860d82480b49..68d90729259ff4ffaf5419922142c55552e940df 100644 (file)
@@ -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