aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-10-08 12:28:08 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2009-10-08 12:28:08 +0200
commita7bb3c1396056248a71ea188f217de3f4876947e (patch)
tree88a5740d874fd62765f630531fff13d6c7f9a81d
parent57ce977a9700e2f78c92b15805ac6ca430e21f14 (diff)
downloadbusybox-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.c2
-rw-r--r--archival/cpio.c2
-rw-r--r--archival/lzop.c2
-rw-r--r--docs/keep_data_small.txt31
-rw-r--r--libbb/dump.c2
-rw-r--r--miscutils/hdparm.c2
-rw-r--r--runit/svlogd.c2
-rw-r--r--shell/hush.c4
-rw-r--r--shell/math.c2
-rw-r--r--util-linux/ipcs.c2
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
588static 588static NOINLINE
589void mainQSort3(uint32_t* ptr, 589void 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. */
120static int cpio_o(void) 120static 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
78static int lzo1x_optimize(uint8_t *in, unsigned in_len, 78static 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
222Set CONFIG_EXTRA_CFLAGS="-fno-inline-functions-called-once",
223produce "make bloatcheck", see the biggest auto-inlined functions.
224Now, set CONFIG_EXTRA_CFLAGS back to "", but add NOINLINE
225to some of these functions. In 1.16.x timeframe, the results were
226(annotated "make bloatcheck" output):
227
228function old new delta
229expand_vars_to_list - 1712 +1712 win
230lzo1x_optimize - 1429 +1429 win
231arith_apply - 1326 +1326 win
232read_interfaces - 1163 +1163 loss, leave w/o NOINLINE
233logdir_open - 1148 +1148 win
234check_deps - 1148 +1148 loss
235rewrite - 1039 +1039 win
236run_pipe 358 1396 +1038 win
237write_status_file - 1029 +1029 almost the same, leave w/o NOINLINE
238dump_identity - 987 +987 win
239mainQSort3 - 921 +921 win
240parse_one_line - 916 +916 loss
241summarize - 897 +897 almost the same
242do_shm - 884 +884 win
243cpio_o - 863 +863 win
244subCommand - 841 +841 loss
245receive - 834 +834 loss
246
247855 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
99static void rewrite(priv_dumper_t *dumper, FS *fs) 99static 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
1188static void dump_identity(const struct hd_driveid *id) 1188static 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
606static unsigned logdir_open(struct logdir *ld, const char *fn) 606static 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! */
2154static int expand_vars_to_list(o_string *output, int n, char *arg, char or_mask) 2154static 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 */
3753static int run_pipe(struct pipe *pi) 3753static 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 */
296static int 296static NOINLINE int
297arith_apply(operator op, v_n_t *numstack, v_n_t **numstackptr, a_e_h_t *math_hooks) 297arith_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
118static void do_shm(void) 118static 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;