gzip: new GZIP_BIG_MEM option
[oweals/busybox.git] / docs / keep_data_small.txt
index 3ddbd81a4944c3d44be494e78bbeabe4a5e011d3..21d732674c64f3a456b7ca7d992234b053fe0465 100644 (file)
@@ -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
@@ -99,9 +99,9 @@ and then declare that ptr_to_globals is a pointer to it:
 
 ptr_to_globals is declared as constant pointer.
 This helps gcc understand that it won't change, resulting in noticeably
-smaller code. In order to assign it, use PTR_TO_GLOBALS macro:
+smaller code. In order to assign it, use SET_PTR_TO_GLOBALS macro:
 
-       PTR_TO_GLOBALS = xzalloc(sizeof(G));
+       SET_PTR_TO_GLOBALS(xzalloc(sizeof(G)));
 
 Typically it is done in <applet>_main().
 
@@ -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.