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.k...@gmail.com <mailto:raj.k...@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.k...@gmail.com
    <mailto:raj.k...@gmail.com>
     > <mailto:raj.k...@gmail.com <mailto:raj.k...@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
     >      >
     >

--
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to