X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=docs%2Fkeep_data_small.txt;h=21d732674c64f3a456b7ca7d992234b053fe0465;hb=c2a06db69de7562024524a89a7b0f0f7e61c5999;hp=2ddbefa10aa3cde76a3700d9353432319953a761;hpb=574f2f43948bb21d6e4187936ba5a5afccba25f6;p=oweals%2Fbusybox.git diff --git a/docs/keep_data_small.txt b/docs/keep_data_small.txt index 2ddbefa10..21d732674 100644 --- a/docs/keep_data_small.txt +++ b/docs/keep_data_small.txt @@ -59,7 +59,7 @@ wait Example 1 One example how to reduce global data usage is in -archival/libunarchive/decompress_unzip.c: +archival/libarchive/decompress_unzip.c: /* This is somewhat complex-looking arrangement, but it allows * to place decompressor state either in bss or in @@ -145,6 +145,11 @@ one of above methods is not worth the resulting code obfuscation. If you have less than ~300 bytes of global data - don't bother. + Finding non-shared duplicated strings + +strings busybox | sort | uniq -c | sort -nr + + gcc's data alignment problem The following attribute added in vi.c: @@ -214,3 +219,38 @@ Result (non-static busybox built against glibc): text data bss dec hex filename 634416 2736 23856 661008 a1610 busybox 632580 2672 22944 658196 a0b14 busybox_noalign + + + + Keeping code small + +Set CONFIG_EXTRA_CFLAGS="-fno-inline-functions-called-once", +produce "make bloatcheck", see the biggest auto-inlined functions. +Now, set CONFIG_EXTRA_CFLAGS back to "", but add NOINLINE +to some of these functions. In 1.16.x timeframe, the results were +(annotated "make bloatcheck" output): + +function old new delta +expand_vars_to_list - 1712 +1712 win +lzo1x_optimize - 1429 +1429 win +arith_apply - 1326 +1326 win +read_interfaces - 1163 +1163 loss, leave w/o NOINLINE +logdir_open - 1148 +1148 win +check_deps - 1148 +1148 loss +rewrite - 1039 +1039 win +run_pipe 358 1396 +1038 win +write_status_file - 1029 +1029 almost the same, leave w/o NOINLINE +dump_identity - 987 +987 win +mainQSort3 - 921 +921 win +parse_one_line - 916 +916 loss +summarize - 897 +897 almost the same +do_shm - 884 +884 win +cpio_o - 863 +863 win +subCommand - 841 +841 loss +receive - 834 +834 loss + +855 bytes saved in total. + +scripts/mkdiff_obj_bloat may be useful to automate this process: run +"scripts/mkdiff_obj_bloat NORMALLY_BUILT_TREE FORCED_NOINLINE_TREE" +and select modules which shrank.