Zachary Turner via llvm-dev
2019-Sep-30 22:01 UTC
[llvm-dev] lld-link with MSVC6 object files
I would expect it to be able to link the object file, even if it ignored debug info. It's a bit strange that it complains about bad file magic. It might be tricky to get debug information working and produce a valid PDB file since that is pretty old and the format has changed both with how it was stored in the object file itself as well as the format of the PDB file. My guess is that the "magic" it's complaining about is not the magic of the object file itself but rather the first 4 bytes of the .debug$S (or was it the .debug$T?) section. Perhaps a simple fix in this case is that instead of erroring out if we encounter an "older" magic, we just link as if debug info was not present to begin with. This will at least make it work. If you want to actually consume the debug info though, you're in for a fun ride :) On Mon, Sep 30, 2019 at 2:19 PM Paul Moran via llvm-dev < llvm-dev at lists.llvm.org> wrote:> It sounds like perhaps it might mostly work with some tweaks - given its > complaining about bad file magic. I'll see if I can get lld-link to build > locally and hack out the magic checks to see if it works. > > On Mon, Sep 30, 2019 at 10:14 PM David Blaikie <dblaikie at gmail.com> wrote: > >> >> >> On Mon, Sep 30, 2019 at 2:07 PM Paul Moran <bankybooks at gmail.com> wrote: >> >>> MSVC 6 is 1998 not 1989 :) >>> >> >> Ah, I just glanced briefly at the Wikipedia article ( >> https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B ) & misread the >> "C 6.0" and didn't notice it was distinct from "Visual C++ 6.0" - thanks >> for the catch! >> >> >>> >>> The latest MSVC linker can link these object files. Is this just because >>> it has support for C13 types and some other code path for whatever MSVC6 >>> uses? After some digging around it appears to be this format: >>> >>> >>> https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#coff-file-header-object-and-image >>> >>> >>> Which is COFF object file format? Does lld link support this format? >>> >> >> COFF is still the windows object file format, and the Windows support in >> lld is COFF support, yeah. I guess there might be some format variations >> that haven't been implemented in lld, though. It's mostly an "on demand" >> sort of approach. >> >> >>> >>> >>> On Mon, Sep 30, 2019 at 7:39 PM Alexandre Ganea < >>> alexandre.ganea at ubisoft.com> wrote: >>> >>>> The CodeView library in LLVM only supports Codeview C13 types, that is, >>>> MSVC 7.0 / Visual Studio 2002 or after. >>>> >>>> >>>> >>>> *De :* llvm-dev <llvm-dev-bounces at lists.llvm.org> *De la part de* >>>> David Blaikie via llvm-dev >>>> *Envoyé :* September 30, 2019 2:38 PM >>>> *À :* Paul Moran <bankybooks at gmail.com>; Rui Ueyama <ruiu at google.com> >>>> *Cc :* llvm-dev at lists.llvm.org >>>> *Objet :* Re: [llvm-dev] lld-link with MSVC6 object files >>>> >>>> >>>> >>>> MSVC 6 as in the Visual Studio released in 1989? Yes, I imagine that's >>>> a bit outside the intended support window. >>>> >>>> >>>> >>>> On Mon, Sep 30, 2019 at 11:18 AM Paul Moran via llvm-dev < >>>> llvm-dev at lists.llvm.org> wrote: >>>> >>>> Hi, >>>> >>>> >>>> >>>> I have a question about lld-link. What obj file formats should it >>>> support? When I try to use an obj from msvc 6.0 it complains that the file >>>> magic is not valid. >>>> >>>> >>>> >>>> However when running llvm-objdump it reports: >>>> >>>> >>>> >>>> test1.obj: file format COFF-i386 >>>> >>>> Disassembly of section .text: >>>> 0000000000000000 _main: >>>> 0: 68 00 00 00 00 pushl $0 >>>> 5: e8 00 00 00 00 calll 0 <_main+0xa> >>>> a: 83 c4 04 addl $4, %esp >>>> d: 33 c0 xorl %eax, %eax >>>> >>>> f: c3 retl >>>> >>>> >>>> >>>> Thanks, >>>> >>>> Paul >>>> >>>> >>>> >>>> _______________________________________________ >>>> LLVM Developers mailing list >>>> llvm-dev at lists.llvm.org >>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>>> >>>> _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190930/cf381580/attachment.html>
Out of curiosity, why do you want to use lld-link with a compiler that was released 20 years ago? On Tue, Oct 1, 2019 at 7:02 AM Zachary Turner via llvm-dev < llvm-dev at lists.llvm.org> wrote:> I would expect it to be able to link the object file, even if it ignored > debug info. It's a bit strange that it complains about bad file magic. > > It might be tricky to get debug information working and produce a valid > PDB file since that is pretty old and the format has changed both with how > it was stored in the object file itself as well as the format of the PDB > file. > > My guess is that the "magic" it's complaining about is not the magic of > the object file itself but rather the first 4 bytes of the .debug$S (or was > it the .debug$T?) section. Perhaps a simple fix in this case is that > instead of erroring out if we encounter an "older" magic, we just link as > if debug info was not present to begin with. > > This will at least make it work. If you want to actually consume the > debug info though, you're in for a fun ride :) > > On Mon, Sep 30, 2019 at 2:19 PM Paul Moran via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> It sounds like perhaps it might mostly work with some tweaks - given its >> complaining about bad file magic. I'll see if I can get lld-link to build >> locally and hack out the magic checks to see if it works. >> >> On Mon, Sep 30, 2019 at 10:14 PM David Blaikie <dblaikie at gmail.com> >> wrote: >> >>> >>> >>> On Mon, Sep 30, 2019 at 2:07 PM Paul Moran <bankybooks at gmail.com> wrote: >>> >>>> MSVC 6 is 1998 not 1989 :) >>>> >>> >>> Ah, I just glanced briefly at the Wikipedia article ( >>> https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B ) & misread the >>> "C 6.0" and didn't notice it was distinct from "Visual C++ 6.0" - thanks >>> for the catch! >>> >>> >>>> >>>> The latest MSVC linker can link these object files. Is this just >>>> because it has support for C13 types and some other code path for whatever >>>> MSVC6 uses? After some digging around it appears to be this format: >>>> >>>> >>>> https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#coff-file-header-object-and-image >>>> >>>> >>>> Which is COFF object file format? Does lld link support this format? >>>> >>> >>> COFF is still the windows object file format, and the Windows support in >>> lld is COFF support, yeah. I guess there might be some format variations >>> that haven't been implemented in lld, though. It's mostly an "on demand" >>> sort of approach. >>> >>> >>>> >>>> >>>> On Mon, Sep 30, 2019 at 7:39 PM Alexandre Ganea < >>>> alexandre.ganea at ubisoft.com> wrote: >>>> >>>>> The CodeView library in LLVM only supports Codeview C13 types, that >>>>> is, MSVC 7.0 / Visual Studio 2002 or after. >>>>> >>>>> >>>>> >>>>> *De :* llvm-dev <llvm-dev-bounces at lists.llvm.org> *De la part de* >>>>> David Blaikie via llvm-dev >>>>> *Envoyé :* September 30, 2019 2:38 PM >>>>> *À :* Paul Moran <bankybooks at gmail.com>; Rui Ueyama <ruiu at google.com> >>>>> *Cc :* llvm-dev at lists.llvm.org >>>>> *Objet :* Re: [llvm-dev] lld-link with MSVC6 object files >>>>> >>>>> >>>>> >>>>> MSVC 6 as in the Visual Studio released in 1989? Yes, I imagine that's >>>>> a bit outside the intended support window. >>>>> >>>>> >>>>> >>>>> On Mon, Sep 30, 2019 at 11:18 AM Paul Moran via llvm-dev < >>>>> llvm-dev at lists.llvm.org> wrote: >>>>> >>>>> Hi, >>>>> >>>>> >>>>> >>>>> I have a question about lld-link. What obj file formats should it >>>>> support? When I try to use an obj from msvc 6.0 it complains that the file >>>>> magic is not valid. >>>>> >>>>> >>>>> >>>>> However when running llvm-objdump it reports: >>>>> >>>>> >>>>> >>>>> test1.obj: file format COFF-i386 >>>>> >>>>> Disassembly of section .text: >>>>> 0000000000000000 _main: >>>>> 0: 68 00 00 00 00 pushl $0 >>>>> 5: e8 00 00 00 00 calll 0 <_main+0xa> >>>>> a: 83 c4 04 addl $4, %esp >>>>> d: 33 c0 xorl %eax, %eax >>>>> >>>>> f: c3 retl >>>>> >>>>> >>>>> >>>>> Thanks, >>>>> >>>>> Paul >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> LLVM Developers mailing list >>>>> llvm-dev at lists.llvm.org >>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>>>> >>>>> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20191001/fb6c6bee/attachment.html>
I have the most edge of edge use cases :). I am recovering the lost source code to an application built with MSVC 6. However because I want to produce byte for byte exact output I need to ensure that the import table is in the same order as the original binary. Since the MSVC6 linker has no way of doing this I figured I could hack this feature into lld-link. I need to also set the PDB path in the debug data but a newer version of the MS linker can do this and I believe lld-link already supports this too. On Tue, Oct 1, 2019 at 8:58 AM Rui Ueyama <ruiu at google.com> wrote:> Out of curiosity, why do you want to use lld-link with a compiler that was > released 20 years ago? > > On Tue, Oct 1, 2019 at 7:02 AM Zachary Turner via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> I would expect it to be able to link the object file, even if it ignored >> debug info. It's a bit strange that it complains about bad file magic. >> >> It might be tricky to get debug information working and produce a valid >> PDB file since that is pretty old and the format has changed both with how >> it was stored in the object file itself as well as the format of the PDB >> file. >> >> My guess is that the "magic" it's complaining about is not the magic of >> the object file itself but rather the first 4 bytes of the .debug$S (or was >> it the .debug$T?) section. Perhaps a simple fix in this case is that >> instead of erroring out if we encounter an "older" magic, we just link as >> if debug info was not present to begin with. >> >> This will at least make it work. If you want to actually consume the >> debug info though, you're in for a fun ride :) >> >> On Mon, Sep 30, 2019 at 2:19 PM Paul Moran via llvm-dev < >> llvm-dev at lists.llvm.org> wrote: >> >>> It sounds like perhaps it might mostly work with some tweaks - given its >>> complaining about bad file magic. I'll see if I can get lld-link to build >>> locally and hack out the magic checks to see if it works. >>> >>> On Mon, Sep 30, 2019 at 10:14 PM David Blaikie <dblaikie at gmail.com> >>> wrote: >>> >>>> >>>> >>>> On Mon, Sep 30, 2019 at 2:07 PM Paul Moran <bankybooks at gmail.com> >>>> wrote: >>>> >>>>> MSVC 6 is 1998 not 1989 :) >>>>> >>>> >>>> Ah, I just glanced briefly at the Wikipedia article ( >>>> https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B ) & misread the >>>> "C 6.0" and didn't notice it was distinct from "Visual C++ 6.0" - thanks >>>> for the catch! >>>> >>>> >>>>> >>>>> The latest MSVC linker can link these object files. Is this just >>>>> because it has support for C13 types and some other code path for whatever >>>>> MSVC6 uses? After some digging around it appears to be this format: >>>>> >>>>> >>>>> https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#coff-file-header-object-and-image >>>>> >>>>> >>>>> Which is COFF object file format? Does lld link support this format? >>>>> >>>> >>>> COFF is still the windows object file format, and the Windows support >>>> in lld is COFF support, yeah. I guess there might be some format variations >>>> that haven't been implemented in lld, though. It's mostly an "on demand" >>>> sort of approach. >>>> >>>> >>>>> >>>>> >>>>> On Mon, Sep 30, 2019 at 7:39 PM Alexandre Ganea < >>>>> alexandre.ganea at ubisoft.com> wrote: >>>>> >>>>>> The CodeView library in LLVM only supports Codeview C13 types, that >>>>>> is, MSVC 7.0 / Visual Studio 2002 or after. >>>>>> >>>>>> >>>>>> >>>>>> *De :* llvm-dev <llvm-dev-bounces at lists.llvm.org> *De la part de* >>>>>> David Blaikie via llvm-dev >>>>>> *Envoyé :* September 30, 2019 2:38 PM >>>>>> *À :* Paul Moran <bankybooks at gmail.com>; Rui Ueyama <ruiu at google.com> >>>>>> *Cc :* llvm-dev at lists.llvm.org >>>>>> *Objet :* Re: [llvm-dev] lld-link with MSVC6 object files >>>>>> >>>>>> >>>>>> >>>>>> MSVC 6 as in the Visual Studio released in 1989? Yes, I imagine >>>>>> that's a bit outside the intended support window. >>>>>> >>>>>> >>>>>> >>>>>> On Mon, Sep 30, 2019 at 11:18 AM Paul Moran via llvm-dev < >>>>>> llvm-dev at lists.llvm.org> wrote: >>>>>> >>>>>> Hi, >>>>>> >>>>>> >>>>>> >>>>>> I have a question about lld-link. What obj file formats should it >>>>>> support? When I try to use an obj from msvc 6.0 it complains that the file >>>>>> magic is not valid. >>>>>> >>>>>> >>>>>> >>>>>> However when running llvm-objdump it reports: >>>>>> >>>>>> >>>>>> >>>>>> test1.obj: file format COFF-i386 >>>>>> >>>>>> Disassembly of section .text: >>>>>> 0000000000000000 _main: >>>>>> 0: 68 00 00 00 00 pushl $0 >>>>>> 5: e8 00 00 00 00 calll 0 <_main+0xa> >>>>>> a: 83 c4 04 addl $4, %esp >>>>>> d: 33 c0 xorl %eax, %eax >>>>>> >>>>>> f: c3 retl >>>>>> >>>>>> >>>>>> >>>>>> Thanks, >>>>>> >>>>>> Paul >>>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> LLVM Developers mailing list >>>>>> llvm-dev at lists.llvm.org >>>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>>>>> >>>>>> _______________________________________________ >>> LLVM Developers mailing list >>> llvm-dev at lists.llvm.org >>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20191001/a4a4ce73/attachment.html>