[llvm-dev] lld-link with MSVC6 object files

Paul Moran via llvm-dev
2019-10-01T11:18:17Z

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>