Re: [PATCH 00/21] objtool: vmlinux.o and CLANG LTO support

From: Sedat Dilek
Date: Fri Jan 15 2021 - 00:21:00 EST


On Fri, Jan 15, 2021 at 5:51 AM Sedat Dilek <sedat.dilek@xxxxxxxxx> wrote:
>
> On Thu, Jan 14, 2021 at 8:40 PM Josh Poimboeuf <jpoimboe@xxxxxxxxxx> wrote:
> >
> > Add support for proper vmlinux.o validation, which will be needed for
> > Sami's upcoming x86 LTO set. (And vmlinux validation is the future for
> > objtool anyway, for other reasons.)
> >
> > This isn't 100% done -- most notably, crypto still needs to be supported
> > -- but I think this gets us most of the way there.
> >
> > This can also be found at
> >
> > git://git.kernel.org/pub/scm/linux/kernel/git/jpoimboe/linux.git objtool-vmlinux
> >
> > And for more testing it can be combined with Sami's x86 LTO patches:
> >
> > https://github.com/samitolvanen/linux clang-lto
> >
> >
> >
> > Josh Poimboeuf (21):
> > objtool: Fix seg fault in BT_FUNC() with fake jump
> > objtool: Fix error handling for STD/CLD warnings
> > objtool: Fix retpoline detection in asm code
> > objtool: Fix ".cold" section suffix check for newer versions of GCC
> > objtool: Support retpoline jump detection for vmlinux.o
> > x86/ftrace: Add UNWIND_HINT_FUNC annotation for ftrace_stub
> > objtool: Assume only ELF functions do sibling calls
> > objtool: Add asm version of STACK_FRAME_NON_STANDARD
> > objtool: Combine UNWIND_HINT_RET_OFFSET and UNWIND_HINT_FUNC
> > objtool: Add xen_start_kernel() to noreturn list
> > objtool: Move unsuffixed symbol conversion to a helper function
> > objtool: Add CONFIG_CFI_CLANG support
> > x86/xen: Support objtool validation in xen-asm.S
> > x86/xen: Support objtool vmlinux.o validation in xen-head.S
> > x86/xen/pvh: Convert indirect jump to retpoline
> > x86/ftrace: Support objtool vmlinux.o validation in ftrace_64.S
> > x86/acpi: Convert indirect jump to retpoline
> > x86/acpi: Support objtool validation in wakeup_64.S
> > x86/power: Convert indirect jumps to retpolines
> > x86/power: Move restore_registers() to top of the file
> > x86/power: Support objtool validation in hibernate_asm_64.S
> >
> > arch/x86/include/asm/unwind_hints.h | 13 +---
> > arch/x86/kernel/acpi/Makefile | 1 -
> > arch/x86/kernel/acpi/wakeup_64.S | 5 +-
> > arch/x86/kernel/ftrace_64.S | 8 +--
> > arch/x86/lib/retpoline.S | 2 +-
> > arch/x86/platform/pvh/head.S | 3 +-
> > arch/x86/power/Makefile | 1 -
> > arch/x86/power/hibernate_asm_64.S | 105 ++++++++++++++--------------
> > arch/x86/xen/Makefile | 1 -
> > arch/x86/xen/xen-asm.S | 29 +++++---
> > arch/x86/xen/xen-head.S | 5 +-
> > include/linux/objtool.h | 13 +++-
> > tools/include/linux/objtool.h | 13 +++-
> > tools/objtool/arch/x86/decode.c | 4 +-
> > tools/objtool/arch/x86/special.c | 2 +-
> > tools/objtool/check.c | 91 +++++++++++++-----------
> > tools/objtool/check.h | 12 +++-
> > tools/objtool/elf.c | 87 +++++++++++++++++------
> > tools/objtool/elf.h | 2 +-
> > 19 files changed, 241 insertions(+), 156 deletions(-)
> >
> > --
> > 2.29.2
> >
>
> I tried this series on top of clang-cfi and it segfaults here.
>
> + info OBJTOOL vmlinux.o
> + [ != silent_ ]
> + printf %-7s %s\n OBJTOOL vmlinux.o
> OBJTOOL vmlinux.o
> + tools/objtool/objtool orc generate --duplicate --mcount --vmlinux
> --no-fp --no-unreachable --retpoline --uaccess vmlinux.o
> Segmentation fault
> + on_exit
> + [ 139 -ne 0 ]
> + cleanup
> + rm -f .btf.*
> + rm -f .tmp_System.map
> + rm -f .tmp_initcalls.lds
> + rm -f .tmp_symversions.lds
> + rm -f .tmp_vmlinux*
> + rm -f System.map
> + rm -f vmlinux
> + rm -f vmlinux.o
> make[3]: *** [Makefile:1213: vmlinux] Error 139
>

I did:

$ git diff scripts/link-vmlinux.sh
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index 2d0b28758aa5..cd0948bd29ea 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -142,7 +142,8 @@ objtool_link()
objtoolopt="${objtoolopt} --uaccess"
fi
info OBJTOOL ${1}
- tools/objtool/objtool ${objtoolcmd} ${objtoolopt} ${1}
+ info OBJTOOL SEGFAULTS
+ ##tools/objtool/objtool ${objtoolcmd} ${objtoolopt} ${1}
fi
}

To save the vmlinux* files and archived them in case you want me to look at it.
Give me clear instructions, Thanks.

- Sedat -