• Vasily Gorbik's avatar
    s390/decompressor: rework uncompressed image info collection · 369f91c3
    Vasily Gorbik authored
    The kernel decompressor has to know several bits of information about
    uncompressed image. Currently this info is collected by running "nm" on
    uncompressed vmlinux + "sed" and producing sizes.h file. This method
    worked well, but it has several disadvantages. Obscure symbols name
    pattern matching is fragile. Adding new values makes pattern even
    longer. Logic is spread across code and make file. Limited ability to
    adjust symbols values (currently magic lma value of 0x100000 is always
    subtracted). Apart from that same pieces of information (and more)
    would be needed for early memory detection and features like KASLR
    outside of boot/compressed/ folder where sizes.h is generated.
    
    To overcome limitations new "struct vmlinux_info" has been introduced
    to include values needed for the decompressor and the rest of the
    boot code. The only static instance of vmlinux_info is produced during
    vmlinux link step by filling in struct fields by the linker (like it is
    done with input_data in boot/compressed/vmlinux.scr.lds.S). This way
    individual values could be adjusted with all the knowledge linker has
    and arithmetic it supports. Later .vmlinux.info section (which contains
    struct vmlinux_info) is transplanted into the decompressor image and
    dropped from uncompressed image altogether.
    
    While doing that replace "compressed/vmlinux.scr.lds.S" linker
    script (whose purpose is to rename .data section in piggy.o to
    .rodata.compressed) with plain objcopy command. And simplify
    decompressor's linker script.
    Reviewed-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    369f91c3
vmlinux.lds.S 1.19 KB