Re: Fix and simplify -z noreloc-overflow" linker check in arch/x86/boot/compressed/Makefile

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Mar 18, 2019 at 10:46 AM Masahiro Yamada
<yamada.masahiro@xxxxxxxxxxxxx> wrote:
>
> Hi Sedat,
>
>
> On Wed, Mar 13, 2019 at 5:52 PM Sedat Dilek <sedat.dilek@xxxxxxxxx> wrote:
> >
> > On Tue, Mar 12, 2019 at 5:06 PM Masahiro Yamada
> > <yamada.masahiro@xxxxxxxxxxxxx> wrote:
> > >
> > > On Tue, Mar 12, 2019 at 6:13 PM Sedat Dilek <sedat.dilek@xxxxxxxxx> wrote:
> > > >
> > > > Hi Masahiro Yamada,
> > > >
> > > > do you have an idea how to fix this properly - as for example LLD
> > > > hasn't this option?
> > > > Speaking of the shell-line.
> > > > I mean use the method "call ld-option".
> > > >
> > > > The below should be if $linker supports z noreloc-overflow then set
> > > > -pie together with --no-dynamic-linker.
> > > > AFAICS this is for x86-64-only?
> > > >
> > > > Is it possible to simplify and have have one single line...?
> > >
> > >
> > > Sorry, I do not understand.
> > >
> > > Could you clarify what you want to achieve?
> > >
> > >
> > > Thanks.
> > >
> > >
> > >
> > >
> > >
> > >
> > > > KBUILD_LDFLAGS += $(call ld-option, -pie) $(call ld-option, --no-dynamic-linker)
> > > >
> > > > [ arch/x86/boot/compressed/Makefile ]
> > > >
> > > > KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE)
> > > > # Compressed kernel should be built as PIE since it may be loaded at any
> > > > # address by the bootloader.
> > > > ifeq ($(CONFIG_X86_32),y)
> > > > KBUILD_LDFLAGS += $(call ld-option, -pie) $(call ld-option, --no-dynamic-linker)
> >
> > See below.
> >
> > > > else
> > > > # To build 64-bit compressed kernel as PIE, we disable relocation
> > > > # overflow check to avoid relocation overflow error with a new linker
> > > > # command-line option, -z noreloc-overflow.
> >
> > > > KBUILD_LDFLAGS += $(shell $(LD) --help 2>&1 | grep -q "\-z noreloc-overflow" \
> > > >         && echo "-z noreloc-overflow -pie --no-dynamic-linker")
> >
> > First of all, I would like to have the "-z noreloc-overflow" checked
> > via "call ld-option".
> > Where I have problems is how to check the following, "-pie
> > --no-dynamic-linker" shall be set if "-z noreloc-overflow" is
> > available.
> > According to the comments, this is for the  CONFIG_X86_64 case.
> >
> > ifeq ($(CONFIG_X86_64),y)
> > KBUILD_LDFLAGS += $(call ld-option, -z noreloc-overflow)
>
>
> Is this equivalent to
>    $(LD) --help 2>&1 | grep -q "\-z noreloc-overflow" ... ?
>
>
>
>
>
> > if z-noreloc-oevrflow-ld-option-is-available
> > KBUILD_LDFLAGS += $(call ld-option, -pie) $(call ld-option, --no-dynamic-linker)
> > endif # z-noreloc-oevrflow-ld-option-is-available
> > endif # CONFIG_X86_64
> >
> > As we have the 2nd check for the CONFIG_X86_32 case already, I asked
> > myself if it is possible to use it at one single place.
> >
> > KBUILD_LDFLAGS += $(call ld-option, -pie) $(call ld-option, --no-dynamic-linker)
>
>
> If you want to factor out the -pie --no-dynamic-linker tests,
> the following may work.
>
> It is not very clean...
>

Hehe.
Thanks for taking care!

- sed@ -

>
> ifeq ($(CONFIG_X86_64),y)
> KBUILD_LDFLAGS = $(shell $(LD) --help 2>&1 | grep -q "\-z noreloc-overflow" \
>        && echo "-z noreloc-overflow")
> endif
>
> ifneq ($(filter noreloc-overflow,$(KBUILD_LDFLAGS))$(CONFIG_X86_32),)
> KBUILD_LDFLAGS += $(call ld-option, -pie) $(call ld-option, --no-dynamic-linker)
> endif
>
>
>
>
> Perhaps, testing flags in Kconfig might make it a bit cleaner,
> but I am not sure.
>
>
> Masahiro
>
>
> > Is this now clearer?
> >
> > Regards,
> > - Sedat -
> >
> > > > endif
> > > > LDFLAGS_vmlinux := -T
> > > >
> > > > If you need more infos let me know.
> > > >
> > > > Thanks.
> > > >
> > > > Regards,
> > > > - Sedat -
> > > >
> > > > Link: https://github.com/ClangBuiltLinux/linux/issues/411
> > >
> > >
> > >
> > > --
> > > Best Regards
> > > Masahiro Yamada
>
>
>
> --
> Best Regards
> Masahiro Yamada



[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux