• Tiezhu Yang's avatar
    objtool: Check local label in read_unwind_hints() · e91c5e4c
    Tiezhu Yang authored
    
    
    When update the latest upstream gcc and binutils, it generates some
    objtool warnings on LoongArch, like this:
    
      arch/loongarch/kernel/entry.o: warning: objtool: ret_from_fork+0x0: unreachable instruction
    
    We can see that the reloc sym name is local label instead of section
    in relocation section '.rela.discard.unwind_hints', in this case, the
    reloc sym type is STT_NOTYPE instead of STT_SECTION. Let us check it
    to not return -1, then use reloc->sym->offset instead of reloc addend
    which is 0 to find the corresponding instruction.
    
    Here are some detailed info:
    [fedora@linux 6.8.test]$ gcc --version
    gcc (GCC) 14.0.1 20240129 (experimental)
    [fedora@linux 6.8.test]$ as --version
    GNU assembler (GNU Binutils) 2.42.50.20240129
    [fedora@linux 6.8.test]$ readelf -r arch/loongarch/kernel/entry.o | grep -A 3 "rela.discard.unwind_hints"
    Relocation section '.rela.discard.unwind_hints' at offset 0x3a8 contains 7 entries:
      Offset          Info           Type           Sym. Value    Sym. Name + Addend
    000000000000  000a00000063 R_LARCH_32_PCREL  0000000000000000 .Lhere_1 + 0
    00000000000c  000b00000063 R_LARCH_32_PCREL  00000000000000a8 .Lhere_50 + 0
    Signed-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
    Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
    e91c5e4c
check.c 111 KB