[yocto] prelink-cross with -fno-plt
Khem Raj
raj.khem at gmail.com
Fri May 24 23:30:05 PDT 2019
On Fri, May 24, 2019 at 6:58 PM Shane Peelar <lookatyouhacker at gmail.com> wrote:
>
> Great! Would you be willing to accept a patch that makes arch-x86_64.c handle that condition like the other arches?
>
yes certainly.
> -Shane
>
> On Fri, May 24, 2019 at 12:27 PM Khem Raj <raj.khem at gmail.com> wrote:
>>
>>
>>
>> On 5/24/19 8:10 AM, Shane Peelar wrote:
>> > I did some reading into the sources in other architectures. The closest
>> > match, arch_i386.c, makes the write conditional as you say.
>> > So do other arches, including |arch_arm.c, |arch_sh.c, |arch-mips.c,
>> > |arch-s390.c, |arch-s390x.c, and |arch-ia64.c.||||||
>> > ||||||
>> > ||||||
>> > Notably, |||||||arch-cris.c||||||| has the same assert as
>> > |||||||arch-x86_64.c||||||| instead of the conditional.
>> >
>> > The code roughly looks like follows:||||||||||||||
>> > ||||||||||||||
>> > |||||||
>> > |||||||
>> > 1. Check for dso->info[DT_PLTGOT]. If it does not exist, return 0
>> > 2. Call addr_to_sec on dso->info[DT_PLTGOT], return 1 if error
>> > 3. Look for the section named ".plt" in the ELF.
>> > 4. If the section cannot be found, return 0
>> > 5. Otherwise, write the address of .plt + constant (dependent on arch)
>> > to got[1]||||||||||||||
>> > ||||||||||||||
>> > |||||||
>> > |||||||
>> > In |||||||arch-x86_64.c and arch-cris.c|||||||, step (4) above is an
>> > assert:|||||||
>> >
>> > |||||||1. Check for dso->info[DT_PLTGOT]. If it does not exist, return 0
>> > 2. Call addr_to_sec on dso->info[DT_PLTGOT], return 1 if error
>> > 3. Look for the section named ".plt" in the ELF.
>> > 4. Assert that the section was found
>> > 5. Write the address of .plt + constant (dependent on arch) to got[1]
>> >
>> > I tested out making the assert conditional and nothing seemed to break
>> > at least.
>> > |||||||
>> > |||||||
>>
>> It seems ok to me.
>>
>> >
>> > On Fri, May 24, 2019 at 12:08 AM Khem Raj <raj.khem at gmail.com
>> > <mailto:raj.khem at gmail.com>> wrote:
>> >
>> >
>> >
>> > On 5/23/19 7:53 PM, Shane Peelar wrote:
>> > > Any of them on the system pretty much, and yes they are also
>> > built with
>> > > -fno-plt.
>> >
>> > OK, I think its better to them conditionally check for .plt section,
>> > can you describe more of whats going on when sections are checked.
>> >
>> > >
>> > > On Thu, May 23, 2019 at 9:59 PM Khem Raj <raj.khem at gmail.com
>> > <mailto:raj.khem at gmail.com>
>> > > <mailto:raj.khem at gmail.com <mailto:raj.khem at gmail.com>>> wrote:
>> > >
>> > >
>> > >
>> > > On 5/23/19 8:05 AM, Shane Peelar wrote:
>> > > > Hi Everyone @ the Yocto project,
>> > > >
>> > > > I'm Shane Peelar, a PhD Candidate at the University of
>> > Windsor.
>> > > > I'm writing to you about prelink-cross, as part of the
>> > Yocto project.
>> > > > Specifically, I'm looking at using it with executables
>> > built using
>> > > > `-fno-plt` under GCC.
>> > > > I wasn't quite sure where to send this email to, so I
>> > figured I'd
>> > > try
>> > > > here. If there's a better place to send this, please let
>> > me know.
>> > > >
>> > > > Right now, prelink-cross seems to fail an assertion in
>> > > arch-x86_64.c,
>> > > > line 421, when
>> > > > using it with an executable built with `-fno-plt`:
>> > > >
>> > > > ...
>> > > > assert (i < dso->ehdr.e_shnum)
>> > > > ...
>> > > >
>> > > > This snippet seems to be looking for the ".plt" section and,
>> > > since it
>> > > > can't find it, the assertion fires. This makes sense
>> > because in
>> > > > `-fno-plt` executables, the `.plt` section is missing
>> > entirely.
>> > > > I'm not an expert on ELF stuff, although I am learning
>> > quickly. It
>> > > > looks like
>> > > > this code wants to write into GOT[1] the address of ".plt"
>> > + 0x16 --
>> > > > since ".plt" doesn't
>> > > > exist, does it make sense to just change this assert to an if
>> > > statement
>> > > > like so:
>> > > >
>> > > > ...
>> > > > if (i < dso->ehdr.e_shnum)
>> > > > { ... }
>> > > > ...
>> > > >
>> > > > and skip over that part? Or is this a real error
>> > condition for
>> > > > prelink-cross and it really should not continue? The
>> > executable in
>> > > > question is also non-PIE, if that makes a difference.
>> > > >
>> > >
>> > > what shared libs is this linking to ? are they also built with
>> > > -fno-plt ?
>> > >
>> > > > Thanks for your time,
>> > > > Shane
>> > > >
>> > >
>> >
More information about the yocto
mailing list