*: remove remaining instances of ".data" hack
authorDenis Vlasenko <vda.linux@googlemail.com>
Tue, 22 Apr 2008 00:08:27 +0000 (00:08 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Tue, 22 Apr 2008 00:08:27 +0000 (00:08 -0000)
coreutils/Kbuild
coreutils/test.c
libbb/Kbuild
libbb/appletlib.c
libbb/lineedit.c
libbb/ptr_to_globals.c

index 253eb6da8aa8b5e10654415429e18f7825d35010..cb4543912c23ab3287e2366c616d0aa08d728b44 100644 (file)
@@ -71,10 +71,10 @@ lib-$(CONFIG_SYNC)      += sync.o
 lib-$(CONFIG_TAC)       += tac.o
 lib-$(CONFIG_TAIL)      += tail.o
 lib-$(CONFIG_TEE)       += tee.o
-lib-$(CONFIG_TEST)      += test.o
-lib-$(CONFIG_ASH)       += test.o # used by ash
-lib-$(CONFIG_HUSH)      += test.o # used by hush
-lib-$(CONFIG_MSH)       += test.o # used by msh
+lib-$(CONFIG_TEST)      += test.o test_ptr_hack.o
+lib-$(CONFIG_ASH)       += test.o test_ptr_hack.o # used by ash
+lib-$(CONFIG_HUSH)      += test.o test_ptr_hack.o # used by hush
+lib-$(CONFIG_MSH)       += test.o test_ptr_hack.o # used by msh
 lib-$(CONFIG_TOUCH)     += touch.o
 lib-$(CONFIG_TR)        += tr.o
 lib-$(CONFIG_TRUE)      += true.o
index 2f5b6b8a1868816163cb44e31dd5f8f182c4ce97..3c725a2454f09b19cc153521c994817429c10609 100644 (file)
@@ -159,7 +159,7 @@ typedef int arith_t;
 
 
 /* We try to minimize both static and stack usage. */
-struct statics {
+struct test_statics {
        char **t_wp;
        const struct t_op *t_wp_op;
        gid_t *group_array;
@@ -167,11 +167,10 @@ struct statics {
        jmp_buf leaving;
 };
 
-/* Make it reside in writable memory, yet make compiler understand
- * that it is not going to change. */
-static struct statics *const ptr_to_statics __attribute__ ((section (".data")));
+/* See test_ptr_hack.c */
+extern struct test_statics *const test_ptr_to_statics;
 
-#define S (*ptr_to_statics)
+#define S (*test_ptr_to_statics)
 #define t_wp            (S.t_wp         )
 #define t_wp_op         (S.t_wp_op      )
 #define group_array     (S.group_array  )
@@ -179,11 +178,11 @@ static struct statics *const ptr_to_statics __attribute__ ((section (".data")));
 #define leaving         (S.leaving      )
 
 #define INIT_S() do { \
-       (*(struct statics**)&ptr_to_statics) = xzalloc(sizeof(S)); \
+       (*(struct test_statics**)&test_ptr_to_statics) = xzalloc(sizeof(S)); \
        barrier(); \
 } while (0)
 #define DEINIT_S() do { \
-       free(ptr_to_statics); \
+       free(test_ptr_to_statics); \
 } while (0)
 
 static arith_t primary(enum token n);
index 3a68efc288b0f6e88c7ee1f6d60223a9cf51b51d..d943628aa9a9284ae627cf856c457d692941ae6c 100644 (file)
@@ -50,7 +50,7 @@ lib-y += inode_hash.o
 lib-y += isdirectory.o
 lib-y += kernel_version.o
 lib-y += last_char_is.o
-lib-y += lineedit.o
+lib-y += lineedit.o lineedit_ptr_hack.o
 lib-y += llist.o
 lib-y += login.o
 lib-y += make_directory.o
index ed7d3912ba4cfb149d3d0fad40b7f526eb4fe317..90fca8c13e92a409b7d2b268c643836b35035e2c 100644 (file)
@@ -177,11 +177,6 @@ int find_applet_by_name(const char *name)
 }
 
 
-#ifdef __GLIBC__
-/* Make it reside in R/W memory: */
-int *const bb_errno __attribute__ ((section (".data")));
-#endif
-
 void lbb_prepare(const char *applet
                USE_FEATURE_INDIVIDUAL(, char **argv))
                                MAIN_EXTERNALLY_VISIBLE;
index 4ba61c14353cef1c48907ab0f359a39c3e117ceb..6de66ba83e3b151fa2d894e4c11bd336da3a2945 100644 (file)
@@ -74,7 +74,7 @@ static const char null_str[] ALIGN1 = "";
 #endif
 
 /* We try to minimize both static and stack usage. */
-struct statics {
+struct lineedit_statics {
        line_input_t *state;
 
        volatile unsigned cmdedit_termw; /* = 80; */ /* actual terminal width */
@@ -120,11 +120,10 @@ struct statics {
 #endif
 };
 
-/* Make it reside in writable memory, yet make compiler understand
- * that it is not going to change. */
-static struct statics *const ptr_to_statics __attribute__ ((section (".data")));
+/* See lineedit_ptr_hack.c */
+extern struct lineedit_statics *const lineedit_ptr_to_statics;
 
-#define S (*ptr_to_statics)
+#define S (*lineedit_ptr_to_statics)
 #define state            (S.state           )
 #define cmdedit_termw    (S.cmdedit_termw   )
 #define previous_SIGWINCH_handler (S.previous_SIGWINCH_handler)
@@ -145,7 +144,7 @@ static struct statics *const ptr_to_statics __attribute__ ((section (".data")));
 #define delbuf           (S.delbuf          )
 
 #define INIT_S() do { \
-       (*(struct statics**)&ptr_to_statics) = xzalloc(sizeof(S)); \
+       (*(struct lineedit_statics**)&lineedit_ptr_to_statics) = xzalloc(sizeof(S)); \
        barrier(); \
        cmdedit_termw = 80; \
        USE_FEATURE_EDITING_FANCY_PROMPT(num_ok_lines = 1;) \
@@ -163,7 +162,7 @@ static void deinit_S(void)
        if (home_pwd_buf != null_str)
                free(home_pwd_buf);
 #endif
-       free(ptr_to_statics);
+       free(lineedit_ptr_to_statics);
 }
 #define DEINIT_S() deinit_S()
 
index 48cf8d86cf855c92bea0da7b3743296e35966e31..5f30e2a64c6d5421aea07a10551d4cf24d6b9945 100644 (file)
@@ -5,6 +5,8 @@
  * Licensed under GPLv2, see file LICENSE in this tarball for details.
  */
 
+#include <errno.h>
+
 struct globals;
 
 #ifndef GCC_COMBINE
@@ -13,12 +15,21 @@ struct globals;
  * but here we make it live in R/W memory */
 struct globals *ptr_to_globals;
 
+#ifdef __GLIBC__
+int *bb_errno;
+#endif
+
+
 #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")));
 
+#ifdef __GLIBC__
+int *const bb_errno __attribute__ ((section (".data")));
 #endif
 
+#endif