• Zhangjin Wu's avatar
    riscv: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION · c828856b
    Zhangjin Wu authored
    Select CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION for RISC-V, allowing
    the user to enable dead code elimination. In order for this to work,
    ensure that we keep the alternative table by annotating them with KEEP.
    
    This boots well on qemu with both rv32_defconfig & rv64 defconfig, but
    it only shrinks their builds by ~1%, a smaller config is thereforce
    customized to test this feature:
    
              | rv32                   | rv64
      --------|------------------------|---------------------
       No DCE | 4460684                | 4893488
          DCE | 3986716                | 4376400
       Shrink |  473968 (~10.6%)       |  517088 (~10.5%)
    
    The config used above only reserves necessary options to boot on qemu
    with serial console, more like the size-critical embedded scenes:
    
      - rv64 config: https://pastebin.com/crz82T0s
      - rv32 config: rv64 config + 32-bit.config
    
    Here is Jisheng's original commit-msg:
    When trying to run linux with various opensource riscv core on
    resource limited FPGA platforms, for example, those FPGAs with less
    than 16MB SDRAM, I want to save mem as much as possible. One of the
    major technologies is kernel size optimizations, I found that riscv
    does not currently support HAVE_LD_DEAD_CODE_DATA_ELIMINATION, which
    passes -fdata-sections, -ffunction-sections to CFLAGS and passes the
    --gc-sections flag to the linker.
    
    This not only benefits my case on FPGA but also benefits defconfigs.
    Here are some notable improvements from enabling this with defconfigs:
    
    nommu_k210_defconfig:
       text    data     bss     dec     hex
    1112009  410288   59837 1582134  182436     before
     962838  376656   51285 1390779  1538bb     after
    
    rv32_defconfig:
       text    data     bss     dec     hex
    8804455 2816544  290577 11911576 b5c198     before
    8692295 2779872  288977 11761144 b375f8     after
    
    defconfig:
       text    data     bss     dec     hex
    9438267 3391332  485333 13314932 cb2b74     before
    9285914 3350052  483349 13119315 c82f53     after
    Signed-off-by: default avatarZhangjin Wu <falcon@tinylab.org>
    Co-developed-by: default avatarJisheng Zhang <jszhang@kernel.org>
    Signed-off-by: default avatarJisheng Zhang <jszhang@kernel.org>
    Reviewed-by: default avatarGuo Ren <guoren@kernel.org>
    Tested-by: default avatarBin Meng <bmeng@tinylab.org>
    Reviewed-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
    Tested-by: Nick Desaulniers <ndesaulniers@google.com> # build
    Link: https://lore.kernel.org/r/20230523165502.2592-5-jszhang@kernel.orgSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    c828856b
vmlinux.lds.S 3.11 KB