Re: Help on build failure of patchelf on mips variants

Felipe Sateler <[email protected]>
Newsgroups gmane.linux.debian.ports.mips
Message-ID <CAAfdZj8UfKPZrf86E0WLnmXp_JM6cvZBADY3g56txsSq187yAg@mail.gmail.com>
On 5 April 2016 at 19:33, James Cowgill <[email protected]> wrote:
> Hi,
>
> On Tue, 2016-04-05 at 16:13 -0300, Felipe Sateler wrote:
>> I'm currently at a loss on why does patchelf fail to build (or rather,
>> it fails its testsuite) on all mips variants[1].
>>
>> Patchelf modifies ELF binaries, to add/remove RPATH and other
>> sections. On all mips variants, some tests fail. From what I can tell,
>> the loader complains that the new (altered) file has an invalid
>> MIPS.abiflags section, and yet from what I can tell both the original
>> and altered binaries have the same (as reported by readelf).
>>
>> I have printed some more logs at the upstream issue tracker:
>> https://github.com/NixOS/patchelf/issues/82
>>
>> Any help would be appreciated. I'd rather not remove patchelf from mips.
>
> I had a go at using patchelf on a hello world executable and the
> executable immediately segfaulted.

What command did you use?

> From 'readelf -e':
>
> Before:
>   [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
>   [ 3] .MIPS.abiflags    MIPS_ABIFLAGS   00400188 000188 000018 18   A  0   0  8
>
>   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
>   ABIFLAGS       0x000188 0x00400188 0x00400188 0x00018 0x00018 R   0x8
>
> After:
>   [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
>   [ 1] .MIPS.abiflags    MIPS_ABIFLAGS   003fc174 000174 000018 18   A  0   0  4
>
>   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
>   ABIFLAGS       0x004188 0x00400188 0x00400188 0x00018 0x00018 R   0x8
>
> Here the ABIFLAGS segment (this is a special MIPS specific segment
> type) is wrong after running patchelf. The offset and virtaddr are not
> the same as the values used in the section header. Infact they don't
> seem to point to any section at all. This is probably causing the
> dynamic linker to read some garbage, causing the segfault.

Thanks, that is indeed different on each executable.

>
> If I recall, the ABIFLAGS were first read by glibc 2.22 which might be
> why it only recently started failing.

That would explain it, yes. Thanks for this datum.


> Also this page will be useful for anyone trying to fix this bug. It
> contains the "spec" for the abiflags section:

Patchelf is not supposed to touch sections it doesn't modify. Because
patchelf reorders sections, maybe it needs to modify that too.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.