busybox/busybox_ldscript.README.txt
<<
>>
Prefs
   1/* Add SORT_BY_ALIGNMENT to linker script (found in busybox_unstripped.out):
   2##  .rodata : { *(.rodata SORT_BY_ALIGNMENT(.rodata.*) .gnu.linkonce.r.*) }
   3##  .data   : { *(.data SORT_BY_ALIGNMENT(.data.*) .gnu.linkonce.d.*) }
   4##  .bss    : { *(.bss SORT_BY_ALIGNMENT(.bss.*) .gnu.linkonce.b.*) }
   5## This will eliminate most of the padding (~3kb).
   6## Hmm, "ld --sort-section alignment" should do it too.
   7##
   8## There is a ld hack which is meant to decrease disk usage
   9## at the cost of more RAM usage (??!!) in standard ld script:
  10##  . = ALIGN (0x1000) - ((0x1000 - .) & (0x1000 - 1)); . = DATA_SEGMENT_ALIGN (0x1000, 0x1000);
  11## Replace it with:
  12##  . = ALIGN (0x1000); . = DATA_SEGMENT_ALIGN (0x1000, 0x1000);
  13## to unconditionally align .data to the next page boundary,
  14## instead of "next page, plus current offset in this page"
  15*/
  16
  17/* To reduce the number of VMAs each bbox process has,
  18## move *(.bss SORT_BY_ALIGNMENT(.bss.*) ...)
  19## part from .bss : {...} block to .data : { ... } block.
  20## (This usually increases .data section by only one page).
  21## Result:
  22##
  23##    text data  bss     dec    hex filename
  24## 1050792  560 7580 1058932 102874 busybox.bss
  25## 1050792 8149    0 1058941 10287d busybox.nobss
  26##
  27## $ exec busybox.bss pmap $$
  28## 0000000008048000    1028K r-xp  /path/to/busybox.bss
  29## 0000000008149000       8K rw-p  /path/to/busybox.bss
  30## 000000000814b000       4K rw-p    [ anon ]  <---- this VMA is eliminated
  31## 00000000085f5000       4K ---p  [heap]
  32## 00000000085f6000       4K rw-p  [heap]
  33## 00000000f7778000       8K rw-p    [ anon ]
  34## 00000000f777a000      12K r--p  [vvar]
  35## 00000000f777d000       8K r-xp  [vdso]
  36## 00000000ff7e9000     132K rw-p  [stack]
  37##
  38## $ exec busybox.nobss pmap $$
  39## 0000000008048000    1028K r-xp  /path/to/busybox.nobss
  40## 0000000008149000      12K rw-p  /path/to/busybox.nobss
  41## 00000000086f0000       4K ---p  [heap]
  42## 00000000086f1000       4K rw-p  [heap]
  43## 00000000f7783000       8K rw-p    [ anon ]
  44## 00000000f7785000      12K r--p  [vvar]
  45## 00000000f7788000       8K r-xp  [vdso]
  46## 00000000ffac0000     132K rw-p  [stack]
  47*/
  48