Skip to content
  • Guenter Roeck's avatar
    scripts/kallsyms.c: ignore symbol type 'n' · 51962a9d
    Guenter Roeck authored
    gcc on aarch64 may emit synbols of type 'n' if the kernel is built with
    '-frecord-gcc-switches'.  In most cases, those symbols are reported with
    nm as
    
    	000000000000000e n $d
    
    and with objdump as
    
    	0000000000000000 l    d  .GCC.command.line	0000000000000000 .GCC.command.line
    	000000000000000e l       .GCC.command.line	0000000000000000 $d
    
    Those symbols are detected in is_arm_mapping_symbol() and ignored.
    However, if "--prefix-symbols=<prefix>" is configured as well, the
    situation is different.  For example, in efi/libstub, arm64 images are
    built with
    
    	'--prefix-alloc-sections=.init --prefix-symbols=__efistub_'.
    
    In combination with '-frecord-gcc-switches', the symbols are now reported
    by nm as:
    
    	000000000000000e n __efistub_$d
    and by objdump as:
    	0000000000000000 l    d  .GCC.command.line	0000000000000000 .GCC.command.line
    	000000000000000e l       .GCC.command.line	0000000000000000 __efistub_$d
    
    Those symbols are no longer ignored and included in the base address
    calculation.  This results in a base address of 000000000000000e, which
    in turn causes kallsyms to abort with
    
        kallsyms failure:
    	relative symbol value 0xffffff900800a000 out of range in relative mode
    
    The problem is seen in little endian arm64 builds with CONFIG_EFI
    enabled and with '-frecord-gcc-switches' set in KCFLAGS.
    
    Explicitly ignore symbols of type 'n' since those are clearly debug
    symbols.
    
    Link: http://lkml.kernel.org/r/1507136063-3139-1-git-send-email-linux@roeck-us.net
    
    
    Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Acked-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    51962a9d