diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-10-08 12:28:08 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-10-08 12:28:08 +0200 |
commit | a7bb3c1396056248a71ea188f217de3f4876947e (patch) | |
tree | 88a5740d874fd62765f630531fff13d6c7f9a81d | |
parent | 57ce977a9700e2f78c92b15805ac6ca430e21f14 (diff) | |
download | busybox-w32-a7bb3c1396056248a71ea188f217de3f4876947e.tar.gz busybox-w32-a7bb3c1396056248a71ea188f217de3f4876947e.tar.bz2 busybox-w32-a7bb3c1396056248a71ea188f217de3f4876947e.zip |
*: code shrink via NOINLINE
function old new delta
expand_vars_to_list - 2118 +2118
lzo1x_optimize - 1429 +1429
run_pipe 358 1775 +1417
arith_apply - 1335 +1335
mainQSort3 - 1198 +1198
logdir_open - 1163 +1163
rewrite - 1039 +1039
dump_identity - 987 +987
do_shm - 884 +884
cpio_o - 863 +863
cpio_main 1450 560 -890
ipcs_main 3442 2523 -919
bb_dump_dump 2611 1488 -1123
process_dev 4572 3405 -1167
logdirs_reopen 1308 86 -1222
arith 2084 707 -1377
mainSort 2622 1202 -1420
do_lzo_compress 2276 799 -1477
run_list 2491 943 -1548
expand_variables 2280 135 -2145
------------------------------------------------------------------------------
(add/remove: 9/0 grow/shrink: 1/10 up/down: 12433/-13288) Total: -855 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | archival/bz/blocksort.c | 2 | ||||
-rw-r--r-- | archival/cpio.c | 2 | ||||
-rw-r--r-- | archival/lzop.c | 2 | ||||
-rw-r--r-- | docs/keep_data_small.txt | 31 | ||||
-rw-r--r-- | libbb/dump.c | 2 | ||||
-rw-r--r-- | miscutils/hdparm.c | 2 | ||||
-rw-r--r-- | runit/svlogd.c | 2 | ||||
-rw-r--r-- | shell/hush.c | 4 | ||||
-rw-r--r-- | shell/math.c | 2 | ||||
-rw-r--r-- | util-linux/ipcs.c | 2 |
10 files changed, 41 insertions, 10 deletions
diff --git a/archival/bz/blocksort.c b/archival/bz/blocksort.c index 0e73ffeba..f70c3701d 100644 --- a/archival/bz/blocksort.c +++ b/archival/bz/blocksort.c | |||
@@ -585,7 +585,7 @@ uint8_t mmed3(uint8_t a, uint8_t b, uint8_t c) | |||
585 | #define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT) | 585 | #define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT) |
586 | #define MAIN_QSORT_STACK_SIZE 100 | 586 | #define MAIN_QSORT_STACK_SIZE 100 |
587 | 587 | ||
588 | static | 588 | static NOINLINE |
589 | void mainQSort3(uint32_t* ptr, | 589 | void mainQSort3(uint32_t* ptr, |
590 | uint8_t* block, | 590 | uint8_t* block, |
591 | uint16_t* quadrant, | 591 | uint16_t* quadrant, |
diff --git a/archival/cpio.c b/archival/cpio.c index bb578577d..ef228990a 100644 --- a/archival/cpio.c +++ b/archival/cpio.c | |||
@@ -117,7 +117,7 @@ static off_t cpio_pad4(off_t size) | |||
117 | 117 | ||
118 | /* Return value will become exit code. | 118 | /* Return value will become exit code. |
119 | * It's ok to exit instead of return. */ | 119 | * It's ok to exit instead of return. */ |
120 | static int cpio_o(void) | 120 | static NOINLINE int cpio_o(void) |
121 | { | 121 | { |
122 | static const char trailer[] ALIGN1 = "TRAILER!!!"; | 122 | static const char trailer[] ALIGN1 = "TRAILER!!!"; |
123 | struct name_s { | 123 | struct name_s { |
diff --git a/archival/lzop.c b/archival/lzop.c index b4757e86d..5f2744d91 100644 --- a/archival/lzop.c +++ b/archival/lzop.c | |||
@@ -75,7 +75,7 @@ static void copy3(uint8_t* ip, const uint8_t* m_pos, unsigned off) | |||
75 | #define TEST_IP (ip < ip_end) | 75 | #define TEST_IP (ip < ip_end) |
76 | #define TEST_OP (op <= op_end) | 76 | #define TEST_OP (op <= op_end) |
77 | 77 | ||
78 | static int lzo1x_optimize(uint8_t *in, unsigned in_len, | 78 | static NOINLINE int lzo1x_optimize(uint8_t *in, unsigned in_len, |
79 | uint8_t *out, unsigned *out_len, | 79 | uint8_t *out, unsigned *out_len, |
80 | void* wrkmem UNUSED_PARAM) | 80 | void* wrkmem UNUSED_PARAM) |
81 | { | 81 | { |
diff --git a/docs/keep_data_small.txt b/docs/keep_data_small.txt index 2ddbefa10..2ba24e4a1 100644 --- a/docs/keep_data_small.txt +++ b/docs/keep_data_small.txt | |||
@@ -214,3 +214,34 @@ Result (non-static busybox built against glibc): | |||
214 | text data bss dec hex filename | 214 | text data bss dec hex filename |
215 | 634416 2736 23856 661008 a1610 busybox | 215 | 634416 2736 23856 661008 a1610 busybox |
216 | 632580 2672 22944 658196 a0b14 busybox_noalign | 216 | 632580 2672 22944 658196 a0b14 busybox_noalign |
217 | |||
218 | |||
219 | |||
220 | Keeping code small | ||
221 | |||
222 | Set CONFIG_EXTRA_CFLAGS="-fno-inline-functions-called-once", | ||
223 | produce "make bloatcheck", see the biggest auto-inlined functions. | ||
224 | Now, set CONFIG_EXTRA_CFLAGS back to "", but add NOINLINE | ||
225 | to some of these functions. In 1.16.x timeframe, the results were | ||
226 | (annotated "make bloatcheck" output): | ||
227 | |||
228 | function old new delta | ||
229 | expand_vars_to_list - 1712 +1712 win | ||
230 | lzo1x_optimize - 1429 +1429 win | ||
231 | arith_apply - 1326 +1326 win | ||
232 | read_interfaces - 1163 +1163 loss, leave w/o NOINLINE | ||
233 | logdir_open - 1148 +1148 win | ||
234 | check_deps - 1148 +1148 loss | ||
235 | rewrite - 1039 +1039 win | ||
236 | run_pipe 358 1396 +1038 win | ||
237 | write_status_file - 1029 +1029 almost the same, leave w/o NOINLINE | ||
238 | dump_identity - 987 +987 win | ||
239 | mainQSort3 - 921 +921 win | ||
240 | parse_one_line - 916 +916 loss | ||
241 | summarize - 897 +897 almost the same | ||
242 | do_shm - 884 +884 win | ||
243 | cpio_o - 863 +863 win | ||
244 | subCommand - 841 +841 loss | ||
245 | receive - 834 +834 loss | ||
246 | |||
247 | 855 bytes saved in total. | ||
diff --git a/libbb/dump.c b/libbb/dump.c index 2e777c358..bef485eff 100644 --- a/libbb/dump.c +++ b/libbb/dump.c | |||
@@ -96,7 +96,7 @@ static NOINLINE int bb_dump_size(FS *fs) | |||
96 | return cur_size; | 96 | return cur_size; |
97 | } | 97 | } |
98 | 98 | ||
99 | static void rewrite(priv_dumper_t *dumper, FS *fs) | 99 | static NOINLINE void rewrite(priv_dumper_t *dumper, FS *fs) |
100 | { | 100 | { |
101 | enum { NOTOKAY, USEBCNT, USEPREC } sokay; | 101 | enum { NOTOKAY, USEBCNT, USEPREC } sokay; |
102 | PR *pr, **nextpr = NULL; | 102 | PR *pr, **nextpr = NULL; |
diff --git a/miscutils/hdparm.c b/miscutils/hdparm.c index 0917b4175..65c11ec79 100644 --- a/miscutils/hdparm.c +++ b/miscutils/hdparm.c | |||
@@ -1185,7 +1185,7 @@ static const char BuffType[] ALIGN1 = | |||
1185 | "unknown""\0" "1Sect""\0" "DualPort""\0" "DualPortCache" | 1185 | "unknown""\0" "1Sect""\0" "DualPort""\0" "DualPortCache" |
1186 | ; | 1186 | ; |
1187 | 1187 | ||
1188 | static void dump_identity(const struct hd_driveid *id) | 1188 | static NOINLINE void dump_identity(const struct hd_driveid *id) |
1189 | { | 1189 | { |
1190 | int i; | 1190 | int i; |
1191 | const unsigned short *id_regs = (const void*) id; | 1191 | const unsigned short *id_regs = (const void*) id; |
diff --git a/runit/svlogd.c b/runit/svlogd.c index 34ceadf72..b7fd15262 100644 --- a/runit/svlogd.c +++ b/runit/svlogd.c | |||
@@ -603,7 +603,7 @@ static void logdir_close(struct logdir *ld) | |||
603 | ld->processor = NULL; | 603 | ld->processor = NULL; |
604 | } | 604 | } |
605 | 605 | ||
606 | static unsigned logdir_open(struct logdir *ld, const char *fn) | 606 | static NOINLINE unsigned logdir_open(struct logdir *ld, const char *fn) |
607 | { | 607 | { |
608 | char buf[128]; | 608 | char buf[128]; |
609 | unsigned now; | 609 | unsigned now; |
diff --git a/shell/hush.c b/shell/hush.c index 3012a1f73..ec38023ff 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
@@ -2151,7 +2151,7 @@ static char *expand_pseudo_dquoted(const char *str) | |||
2151 | * to be filled). This routine is extremely tricky: has to deal with | 2151 | * to be filled). This routine is extremely tricky: has to deal with |
2152 | * variables/parameters with whitespace, $* and $@, and constructs like | 2152 | * variables/parameters with whitespace, $* and $@, and constructs like |
2153 | * 'echo -$*-'. If you play here, you must run testsuite afterwards! */ | 2153 | * 'echo -$*-'. If you play here, you must run testsuite afterwards! */ |
2154 | static int expand_vars_to_list(o_string *output, int n, char *arg, char or_mask) | 2154 | static NOINLINE int expand_vars_to_list(o_string *output, int n, char *arg, char or_mask) |
2155 | { | 2155 | { |
2156 | /* or_mask is either 0 (normal case) or 0x80 - | 2156 | /* or_mask is either 0 (normal case) or 0x80 - |
2157 | * expansion of right-hand side of assignment == 1-element expand. | 2157 | * expansion of right-hand side of assignment == 1-element expand. |
@@ -3750,7 +3750,7 @@ static int checkjobs_and_fg_shell(struct pipe* fg_pipe) | |||
3750 | * backgrounded: cmd & { list } & | 3750 | * backgrounded: cmd & { list } & |
3751 | * subshell: ( list ) [&] | 3751 | * subshell: ( list ) [&] |
3752 | */ | 3752 | */ |
3753 | static int run_pipe(struct pipe *pi) | 3753 | static NOINLINE int run_pipe(struct pipe *pi) |
3754 | { | 3754 | { |
3755 | static const char *const null_ptr = NULL; | 3755 | static const char *const null_ptr = NULL; |
3756 | int i; | 3756 | int i; |
diff --git a/shell/math.c b/shell/math.c index d75bcae3a..3791b84bc 100644 --- a/shell/math.c +++ b/shell/math.c | |||
@@ -293,7 +293,7 @@ arith_lookup_val(v_n_t *t, a_e_h_t *math_hooks) | |||
293 | /* "applying" a token means performing it on the top elements on the integer | 293 | /* "applying" a token means performing it on the top elements on the integer |
294 | * stack. For a unary operator it will only change the top element, but a | 294 | * stack. For a unary operator it will only change the top element, but a |
295 | * binary operator will pop two arguments and push a result */ | 295 | * binary operator will pop two arguments and push a result */ |
296 | static int | 296 | static NOINLINE int |
297 | arith_apply(operator op, v_n_t *numstack, v_n_t **numstackptr, a_e_h_t *math_hooks) | 297 | arith_apply(operator op, v_n_t *numstack, v_n_t **numstackptr, a_e_h_t *math_hooks) |
298 | { | 298 | { |
299 | v_n_t *numptr_m1; | 299 | v_n_t *numptr_m1; |
diff --git a/util-linux/ipcs.c b/util-linux/ipcs.c index 920125708..c8c6d76fa 100644 --- a/util-linux/ipcs.c +++ b/util-linux/ipcs.c | |||
@@ -115,7 +115,7 @@ static void print_perms(int id, struct ipc_perm *ipcp) | |||
115 | } | 115 | } |
116 | 116 | ||
117 | 117 | ||
118 | static void do_shm(void) | 118 | static NOINLINE void do_shm(void) |
119 | { | 119 | { |
120 | int maxid, shmid, id; | 120 | int maxid, shmid, id; |
121 | struct shmid_ds shmseg; | 121 | struct shmid_ds shmseg; |