[Nix-dev] ldconfig problem with patchelf and 64-bit libs

Tim Crowder timrc at alumni.caltech.edu
Thu May 6 18:31:53 CEST 2010


Yes, ldconfig is the only thing I've seen complain so far.
Executables that I've tried work against it.
readelf, objdump, nm, ldd, ... seem happy with it.

I have a bit more info now. The LOAD entry that patchelf
creates has 4k page alignment, but the others are all 1M.
And so, the file offset and physical/virtual only line up
modulo 4k. If I pad the file with junk out to the place they'd
line up modulo 1M, then ldconfig is happy. A bit shorter and
it complains. But of course, I don't want the library to be 10x
the size it needs.

Anyways, it seems like ldconfig is either assuming that those
pages all load with the same alignment, or worse, all load with 1M
alignment. I haven't seen anything in the ELF spec that requires
this though.

Any thoughts on how to work around this?

Thanks!

-timrc


On 05/06/2010 07:50 AM, Lluís Batlle i Rossell wrote:
> I used patchelf with x86_64 libraries, but I did not use ldconfig with them.
> For what I tried, all worked.
>
> Do those x86_64 libraries patchelf'ed fail *only* according to ldconfig?
>
> On Wed, May 05, 2010 at 02:18:17PM -0700, Tim Crowder wrote:
>    
>> I'm using patchelf to add rpath to some libraries, both 32 and 64-bit.
>> They both seem to work with executables, but ldconfig complains
>> about the 64-bit lib:
>>     /sbin/ldconfig: file ./liblwes64.so is truncated
>> I've looked at the section offsets and sizes, etc, and I didn't yet
>> find anything that
>> points past the end-of-file. Also, readelf hasn't complained about anything.
>> I'm including the file listing and some readelf output.
>>
>> Any idea what might be wrong?
>> Let me know if there's any other info I can provide...
>>
>> Thanks!
>>
>> -timrc
>>
>> =================================================================================
>>
>> [crowdert at chiefredbull:lwes-rel4-64]ls -l
>> -rwxr-xr-x  1 crowdert 188976 May  4 17:19 liblwes64.so
>>
>> [crowdert at chiefredbull:lwes-rel4-64]readelf -WhSl liblwes64.so
>> [~/work/pst/lwes/tmp/rpath]
>> ELF Header:
>>    Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
>>    Class:                             ELF64
>>    Data:                              2's complement, little endian
>>    Version:                           1 (current)
>>    OS/ABI:                            UNIX - System V
>>    ABI Version:                       0
>>    Type:                              DYN (Shared object file)
>>    Machine:                           Advanced Micro Devices X86-64
>>    Version:                           0x1
>>    Entry point address:               0x4a50
>>    Start of program headers:          184320 (bytes into file)
>>    Start of section headers:          165352 (bytes into file)
>>    Flags:                             0x0
>>    Size of this header:               64 (bytes)
>>    Size of program headers:           56 (bytes)
>>    Number of program headers:         6
>>    Size of section headers:           64 (bytes)
>>    Number of section headers:         37
>>    Section header string table index: 32
>>
>> Section Headers:
>>    [Nr] Name              Type            Address          Off
>> Size   ES Flg Lk Inf Al
>>    [ 0]                   NULL            0000000000000000 000000
>> 000000 00      0   0  0
>>    [ 1] .hash             HASH            0000000000000158 000158
>> 0006e8 04   A  2   0  8
>>    [ 2] .dynsym           DYNSYM          0000000000000840 000840
>> 0016c8 18   A 36  13  8
>>    [ 3] .gnu.version      VERSYM          0000000000002e18 002e18
>> 0001e6 02   A  2   0  2
>>    [ 4] .gnu.version_r    VERNEED         0000000000003000 003000
>> 000030 00   A 36   1  8
>>    [ 5] .rela.dyn         RELA            0000000000003030 003030
>> 000528 18   A  2   0  8
>>    [ 6] .rela.plt         RELA            0000000000003558 003558
>> 000c78 18   A  2   8  8
>>    [ 7] .init             PROGBITS        00000000000041d0 0041d0
>> 000018 00  AX  0   0  4
>>    [ 8] .plt              PROGBITS        00000000000041e8 0041e8
>> 000860 10  AX  0   0  4
>>    [ 9] .text             PROGBITS        0000000000004a50 004a50
>> 006578 00  AX  0   0 16
>>    [10] .fini             PROGBITS        000000000000afc8 00afc8
>> 00000e 00  AX  0   0  4
>>    [11] .rodata           PROGBITS        000000000000afe0 00afe0
>> 000e77 00   A  0   0 32
>>    [12] .eh_frame_hdr     PROGBITS        000000000000be58 00be58
>> 00047c 00   A  0   0  4
>>    [13] .eh_frame         PROGBITS        000000000000c2d8 00c2d8
>> 000ffc 00   A  0   0  8
>>    [14] .ctors            PROGBITS        000000000010d2d8 00d2d8
>> 000010 00  WA  0   0  8
>>    [15] .dtors            PROGBITS        000000000010d2e8 00d2e8
>> 000010 00  WA  0   0  8
>>    [16] .jcr              PROGBITS        000000000010d2f8 00d2f8
>> 000008 00  WA  0   0  8
>>    [17] .data.rel.ro      PROGBITS        000000000010d300 00d300
>> 000058 00  WA  0   0  8
>>    [18] .got              PROGBITS        000000000010d508 00d508
>> 000140 08  WA  0   0  8
>>    [19] .got.plt          PROGBITS        000000000010d648 00d648
>> 000440 08  WA  0   0  8
>>    [20] .data             PROGBITS        000000000010da88 00da88
>> 000030 00  WA  0   0  8
>>    [21] .bss              NOBITS          000000000010dab8 00dab8
>> 0000a0 00  WA  0   0  8
>>    [22] .comment          PROGBITS        0000000000000000 00dab8
>> 0002b0 00      0   0  1
>>    [23] .debug_aranges    PROGBITS        0000000000000000 00dd68
>> 0001e0 00      0   0  1
>>    [24] .debug_pubnames   PROGBITS        0000000000000000 00df48
>> 001174 00      0   0  1
>>    [25] .debug_info       PROGBITS        0000000000000000 00f0bc
>> 007bad 00      0   0  1
>>    [26] .debug_abbrev     PROGBITS        0000000000000000 016c69
>> 001420 00      0   0  1
>>    [27] .debug_line       PROGBITS        0000000000000000 018089
>> 001d0c 00      0   0  1
>>    [28] .debug_frame      PROGBITS        0000000000000000 019d98
>> 0013c0 00      0   0  8
>>    [29] .debug_str        PROGBITS        0000000000000000 01b158
>> 001cec 01  MS  0   0  1
>>    [30] .debug_loc        PROGBITS        0000000000000000 01ce44
>> 00ace9 00      0   0  1
>>    [31] .debug_ranges     PROGBITS        0000000000000000 027b2d
>> 000960 00      0   0  1
>>    [32] .shstrtab         STRTAB          0000000000000000 02848d
>> 000154 00      0   0  1
>>    [33] .symtab           SYMTAB          0000000000000000 028f28
>> 001ec0 18     34  98  8
>>    [34] .strtab           STRTAB          0000000000000000 02ade8
>> 0014f3 00      0   0  1
>>    [35] .dynamic          DYNAMIC         000000000010e150 02d150
>> 0001c0 10  WA 36   0  8
>>    [36] .dynstr           STRTAB          000000000010e310 02d310
>> 000f1e 00   A  0   0  8
>> Key to Flags:
>>    W (write), A (alloc), X (execute), M (merge), S (strings)
>>    I (info), L (link order), G (group), x (unknown)
>>    O (extra OS processing required) o (OS specific), p (processor specific)
>>
>> Program Headers:
>>    Type           Offset   VirtAddr           PhysAddr
>> FileSiz  MemSiz   Flg Align
>>    LOAD           0x000000 0x0000000000000000 0x0000000000000000
>> 0x00d2d4 0x00d2d4 R E 0x100000
>>    GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000
>> 0x000000 0x000000 RW  0x8
>>    GNU_EH_FRAME   0x00be58 0x000000000000be58 0x000000000000be58
>> 0x00047c 0x00047c R   0x4
>>    LOAD           0x00d2d8 0x000000000010d2d8 0x000000000010d2d8
>> 0x0007e0 0x000880 RW  0x100000
>>    LOAD           0x02d000 0x000000000010e000 0x000000000010e000
>> 0x001230 0x001230 RW  0x1000
>>    DYNAMIC        0x02d150 0x000000000010e150 0x000000000010e150
>> 0x0001c0 0x0001c0 RW  0x8
>>
>>   Section to Segment mapping:
>>    Segment Sections...
>>     00     .hash .dynsym .gnu.version .gnu.version_r .rela.dyn
>> .rela.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame
>>     01
>>     02     .eh_frame_hdr
>>     03     .ctors .dtors .jcr .data.rel.ro .got .got.plt .data .bss
>>     04     .dynamic
>>     05     .dynamic
>>
>>
>> _______________________________________________
>> nix-dev mailing list
>> nix-dev at cs.uu.nl
>> https://mail.cs.uu.nl/mailman/listinfo/nix-dev
>>      




More information about the nix-dev mailing list