[LLVMdev] [LLD] support for dlltool generated libs in COFF/PECOFF
Martell Malone
martellmalone at gmail.com
Thu Jul 23 08:22:08 PDT 2015
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/20150723/8a676e7c/attachment.html>
-------------- next part --------------
There are 3 differences I can see from the 2 libs
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
llvm-objdump doesn't work on the msvc lib because it doesn't recogonise the machine type (0x14c)
which means it is intel x86 target luckily this is handled in binutils however :)
I'll submit a patch to llvm to fix all 4 targets for this x86 x64 arm and aarch64
Here are the 2 outputs from objdump
$ llvm-objdump -s libuser32.a
dykgt.o: file format COFF-i386
Contents of section .idata$4:
0000 00000000 ....
Contents of section .idata$5:
0000 00000000 ....
Contents of section .idata$7:
0000 55534552 33322e64 6c6c0000 USER32.dll..
dykgh.o: file format COFF-i386
Contents of section .idata$2:
0000 00000000 00000000 00000000 00000000 ................
0010 00000000 ....
dykgs00001.o: file format COFF-i386
Contents of section .text:
0000 ff250000 00009090 .%......
Contents of section .idata$7:
0000 00000000 ....
Contents of section .idata$5:
0000 00000000 ....
Contents of section .idata$4:
0000 00000000 ....
Contents of section .idata$6:
0000 01004d65 73736167 65426f78 5700 ..MessageBoxW.
dykgs00000.o: file format COFF-i386
Contents of section .text:
0000 ff250000 00009090 .%......
Contents of section .idata$7:
0000 00000000 ....
Contents of section .idata$5:
0000 00000000 ....
Contents of section .idata$4:
0000 00000000 ....
Contents of section .idata$6:
0000 00004d65 73736167 65426f78 4100 ..MessageBoxA.
$ objdump -s user32.lib
In archive user32.lib:
USER32.dll: file format pe-i386
Contents of section .debug$S:
0000 02000000 11000900 00000000 0a555345 .............USE
0010 5233322e 646c6c27 00131007 00000003 R32.dll'........
0020 00000000 0000000c 0000007d 79124d69 ...........}y.Mi
0030 63726f73 6f667420 28522920 4c494e4b crosoft (R) LINK
Contents of section .idata$2:
0000 00000000 00000000 00000000 00000000 ................
0010 00000000 ....
Contents of section .idata$6:
0000 55534552 33322e64 6c6c0000 USER32.dll..
USER32.dll: file format pe-i386
Contents of section .debug$S:
0000 02000000 11000900 00000000 0a555345 .............USE
0010 5233322e 646c6c27 00131007 00000003 R32.dll'........
0020 00000000 0000000c 0000007d 79124d69 ...........}y.Mi
0030 63726f73 6f667420 28522920 4c494e4b crosoft (R) LINK
Contents of section .idata$3:
0000 00000000 00000000 00000000 00000000 ................
0010 00000000 ....
USER32.dll: file format pe-i386
Contents of section .debug$S:
0000 02000000 11000900 00000000 0a555345 .............USE
0010 5233322e 646c6c27 00131007 00000003 R32.dll'........
0020 00000000 0000000c 0000007d 79124d69 ...........}y.Mi
0030 63726f73 6f667420 28522920 4c494e4b crosoft (R) LINK
Contents of section .idata$5:
0000 00000000 ....
Contents of section .idata$4:
0000 00000000 ....
USER32.dll: file format pei-i386
Contents of section .idata$4:
0000 00000000 ....
Contents of section .idata$5:
0000 00000000 ....
Contents of section .idata$6:
0000 00004d65 73736167 65426f78 41000000 ..MessageBoxA...
Contents of section .text:
0000 ff250000 00009090 .%......
USER32.dll: file format pei-i386
Contents of section .idata$4:
0000 00000000 ....
Contents of section .idata$5:
0000 00000000 ....
Contents of section .idata$6:
0000 01004d65 73736167 65426f78 57000000 ..MessageBoxW...
Contents of section .text:
0000 ff250000 00009090 .%......
More information about the llvm-dev
mailing list