On Wed, Oct 14, 2020 at 4:04 PM Kees Cook <keescook@xxxxxxxxxxxx> wrote: > > On Sun, Oct 04, 2020 at 07:57:20PM -0700, Kees Cook wrote: > > Under some circumstances, the compiler generates .ctors.* sections. This > > is seen doing a cross compile of x86_64 from a powerpc64el host: > > > > x86_64-linux-gnu-ld: warning: orphan section `.ctors.65435' from `kernel/trace/trace_clock.o' being > > placed in section `.ctors.65435' > > x86_64-linux-gnu-ld: warning: orphan section `.ctors.65435' from `kernel/trace/ftrace.o' being > > placed in section `.ctors.65435' > > x86_64-linux-gnu-ld: warning: orphan section `.ctors.65435' from `kernel/trace/ring_buffer.o' being > > placed in section `.ctors.65435' > > > > Include these orphans along with the regular .ctors section. > > > > Reported-by: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> > > Tested-by: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> > > Fixes: 83109d5d5fba ("x86/build: Warn on orphan section placement") > > Signed-off-by: Kees Cook <keescook@xxxxxxxxxxxx> > > Ping -- please take this for tip/urgent, otherwise we're drowning sfr in > warnings. :) > > -Kees > > > --- > > v2: brown paper bag version: fix whitespace for proper backslash alignment > > --- > > include/asm-generic/vmlinux.lds.h | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > > index 5430febd34be..b83c00c63997 100644 > > --- a/include/asm-generic/vmlinux.lds.h > > +++ b/include/asm-generic/vmlinux.lds.h > > @@ -684,6 +684,7 @@ > > #ifdef CONFIG_CONSTRUCTORS > > #define KERNEL_CTORS() . = ALIGN(8); \ > > __ctors_start = .; \ > > + KEEP(*(SORT(.ctors.*))) \ > > KEEP(*(.ctors)) \ > > KEEP(*(SORT(.init_array.*))) \ > > KEEP(*(.init_array)) \ > > -- > > 2.25.1 > > > > -- > Kees Cook > > -- > You received this message because you are subscribed to the Google Groups "Clang Built Linux" group. > To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@xxxxxxxxxxxxxxxx. > To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/202010141603.49EA0CE%40keescook. I think it would be great to figure out why these .ctors.* .dtors.* are generated. ~GCC 4.7 switched to default to .init_array/.fini_array if libc supports it. I have some refactoring in this area of Clang as well (e.g. https://reviews.llvm.org/D71393) And I am not sure SORT(.init_array.*) or SORT(.ctors.*) will work. The correct construct is SORT_BY_INIT_PRIORITY(.init_array.*)