[LLVMdev] [LLD] support for dlltool generated libs in COFF/PECOFF
Martell Malone
martellmalone at gmail.com
Fri Jul 24 02:52:09 PDT 2015
After some more digging and creating a few testcases in lld I have narrowed
it down to
The fact that dlltool generates
Contents of section .idata$7:
0000 55534552 33322e64 6c6c0000 USER32.dll..
Where as lld expects
Contents of section .idata$6:
0000 55534552 33322e64 6c6c0000 USER32.dll..
I recreated the hello64.test using dlltool for the lib and here is the
asm dump of the final exe
hello64gnu.exe: file format COFF-x86-64
Disassembly of section .text:
.text:
3000: ff 25 26 f0 ff ff jmpq *-4058(%rip)
3006: 90 nop
3007: 90 nop
3008: ff 25 26 f0 ff ff jmpq *-4058(%rip)
300e: 90 nop
300f: 90 nop
3010: 48 83 ec 28 subq $40, %rsp
3014: 48 c7 c1 00 00 00 00 movq $0, %rcx
301b: 48 8d 15 e4 df ff ff leaq -8220(%rip), %rdx
3022: 4c 8d 05 d7 df ff ff leaq -8233(%rip), %r8
3029: 41 b9 00 00 00 00 movl $0, %r9d
302f: e8 d4 ff ff ff callq -44
3034: b9 00 00 00 00 movl $0, %ecx
3039: e8 c2 ff ff ff callq -62
So I am fairly certain this is the cause.
Many Thanks
Martell
On Thu, Jul 23, 2015 at 4:22 PM, Martell Malone <martellmalone at gmail.com>
wrote:
> I forgot to attach the notes.txt with the objdump.
>
>
> On Thu, Jul 23, 2015 at 3:55 PM, Martell Malone <martellmalone at gmail.com>
> wrote:
>
>> Hi again rui, :)
>>
>> I've got all the patches into llvm and clang for supporting mingw-w64 via
>> compiler-rt and now we are able to build a full mingw-w64 toolchain without
>> gcc :)
>> With great help from yaron and rnk.
>>
>> I've CC'd them as they might have interest in seeing this target through
>> with me to the end :)
>>
>> So I have again turned my attention to LLD so that we can also remove ld
>> as a depend for this target
>>
>> Previously I raised the issue that while lld would infact link exe's for
>> me the issue was the sections were malformed and thus crashed on launch.
>>
>> I've done some debugging reguarding this and discovered it is due to
>> differences between what MSVC's lib.exe and binutils dlltool produces
>>
>> I have attached a very simple .def file and generated libs via dlltool
>> along with an objdump -s log of the lib.exe version
>>
>> I don't know too much about the internals of lld to be able to tell the
>> exact cause of the problem but there are 3 specific differences I noted.
>>
>> 1. With dlltool each object has the name of a compiled .o file this is
>> the one it generates when building the code section
>> With lib each object has the dll name
>>
>> 2. With dlltool section 7 is used for the dll name and the function names
>> with lib section 6 is used
>>
>> 3. Other differences are that there is no debug section with dlltool and
>> the text section comes first rather than last with lib (that probably
>> doesn't matter much though)
>>
>> Please see attached notes.txt with objdump's of both libs
>>
>> Can could you give me your thoughts on this and how best we support both
>> layouts in COFF/PECOFF ?
>>
>> What source files should I be looking at to patch this or is this
>> something you can support with very little effort ?
>>
>> I don't know if you would be opposed to supporting this or not being
>> honest dlltool should generate libs using the same section number as
>> lib.exe but we can't exactly change that now because existing toolchains
>> and libs have already been built with this and changing that would break
>> them.
>>
>> If you are opposed I would like you to still tell me what I have to
>> change to get it working after I do that I can narrow the scope for getting
>> a patch up streamed into binutils to fix this :)
>>
>> Kind Regards
>> Martell
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150724/af052fa0/attachment.html>
More information about the llvm-dev
mailing list