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]

 



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...


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