• Nathan Chancellor's avatar
    s390/boot: workaround current 'llvm-objdump -t -j ...' behavior · 7f115ff4
    Nathan Chancellor authored
    When building with OBJDUMP=llvm-objdump, there are a series of warnings
    from the section comparisons that arch/s390/boot/Makefile performs
    between vmlinux and arch/s390/boot/vmlinux:
    
      llvm-objdump: warning: section '.boot.preserved.data' mentioned in a -j/--section option, but not found in any input file
      llvm-objdump: warning: section '.boot.data' mentioned in a -j/--section option, but not found in any input file
      llvm-objdump: warning: section '.boot.preserved.data' mentioned in a -j/--section option, but not found in any input file
      llvm-objdump: warning: section '.boot.data' mentioned in a -j/--section option, but not found in any input file
    
    The warning is a little misleading, as these sections do exist in the
    input files. It is really pointing out that llvm-objdump does not match
    GNU objdump's behavior of respecting '-j' / '--section' in combination
    with '-t' / '--syms':
    
      $ s390x-linux-gnu-objdump -t -j .boot.data vmlinux.full
    
      vmlinux.full:     file format elf64-s390
    
      SYMBOL TABLE:
      0000000001951000 l     O .boot.data     0000000000003000 sclp_info_sccb
      00000000019550e0 l     O .boot.data     0000000000000001 sclp_info_sccb_valid
      00000000019550e2 g     O .boot.data     0000000000001000 early_command_line
      ...
    
      $ llvm-objdump -t -j .boot.data vmlinux.full
    
      vmlinux.full:   file format elf64-s390
    
      SYMBOL TABLE:
      0000000000100040 l     O .text  0000000000000010 dw_psw
      0000000000000000 l    df *ABS*  0000000000000000 main.c
      00000000001001b0 l     F .text  00000000000000c6 trace_event_raw_event_initcall_level
      0000000000100280 l     F .text  0000000000000100 perf_trace_initcall_level
      ...
    
    It may be possible to change llvm-objdump's behavior to match GNU
    objdump's behavior but the difficulty of that task has not yet been
    explored. The combination of '$(OBJDUMP) -t -j' is not common in the
    kernel tree on a whole, so workaround this tool difference by grepping
    for the sections in the full symbol table output in a similar manner to
    the sed invocation. This results in no visible change for GNU objdump
    users while fixing the warnings for OBJDUMP=llvm-objdump, further
    enabling use of LLVM=1 for ARCH=s390 with versions of LLVM that have
    support for s390 in ld.lld and llvm-objcopy.
    Reported-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    Closes: https://lore.kernel.org/20240219113248.16287-C-hca@linux.ibm.com/
    Link: https://github.com/ClangBuiltLinux/linux/issues/859Signed-off-by: default avatarNathan Chancellor <nathan@kernel.org>
    Link: https://lore.kernel.org/r/20240220-s390-work-around-llvm-objdump-t-j-v1-1-47bb0366a831@kernel.orgSigned-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    7f115ff4
Makefile 5.2 KB