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

Re: Help on build failure of patchelf on mips variants



On 5 April 2016 at 19:33, James Cowgill <jcowgill@debian.org> 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.

-- 

Saludos,
Felipe Sateler


Reply to: