diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-03-15 22:48:35 +0300 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-03-15 22:48:35 +0300 |
commit | bff32ce4d5a22fe7664f77c96f281fe3b02a9c75 (patch) | |
tree | 820b303027a64c7ce81bc084ce30140792b36d3a | |
parent | 1cc70225e7bfee447543ea38b08c7caeb6492c8b (diff) |
gzip: Improve ptr_to_globals trick, allowing gcc
to optimize better. -480 bytes.
-rw-r--r-- | archival/gzip.c | 4 | ||||
-rw-r--r-- | include/libbb.h | 5 | ||||
-rw-r--r-- | libbb/messages.c | 3 |
3 files changed, 8 insertions, 4 deletions
diff --git a/archival/gzip.c b/archival/gzip.c index 6af6c1886..c2333e3b1 100644 --- a/archival/gzip.c +++ b/archival/gzip.c @@ -2045,8 +2045,8 @@ int gzip_main(int argc, char **argv) } #endif - ptr_to_globals = xzalloc(sizeof(struct globals) + sizeof(struct globals2)); - ptr_to_globals++; + PTR_TO_GLOBALS = xzalloc(sizeof(struct globals) + sizeof(struct globals2)) + + sizeof(struct globals); G2.l_desc.dyn_tree = G2.dyn_ltree; G2.l_desc.static_tree = G2.static_ltree; G2.l_desc.extra_bits = extra_lbits; diff --git a/include/libbb.h b/include/libbb.h index 90fb0ad91..d68519dfa 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -804,7 +804,10 @@ extern char bb_common_bufsiz1[BUFSIZ+1]; /* This struct is deliberately not defined. */ /* See docs/keep_data_small.txt */ struct globals; -extern struct globals *ptr_to_globals; +/* Magic prevents this from going into rodata */ +/* If you want to assign a value, use PTR_TO_GLOBALS = xxx */ +extern struct globals *const ptr_to_globals; +#define PTR_TO_GLOBALS (*(struct globals**)&ptr_to_globals) /* You can change LIBBB_DEFAULT_LOGIN_SHELL, but don't use it, * use bb_default_login_shell and following defines. diff --git a/libbb/messages.c b/libbb/messages.c index 1a10a8c9e..12a165ad7 100644 --- a/libbb/messages.c +++ b/libbb/messages.c @@ -57,4 +57,5 @@ WTMP_FILE; char bb_common_bufsiz1[BUFSIZ+1]; struct globals; -struct globals *ptr_to_globals; +/* Make it reside in R/W memory: */ +struct globals *const ptr_to_globals __attribute__ ((section (".data"))); |