[llvm] r206355 - COFF: add support for .file symbols

Timur Iskhodzhanov timurrrr at google.com
Thu Apr 17 00:46:43 PDT 2014


Thanks!
17 апр. 2014 г. 10:43 пользователь "Saleem Abdulrasool" <
compnerd at compnerd.org> написал:

> On Wed, Apr 16, 2014 at 1:37 AM, Timur Iskhodzhanov <timurrrr at google.com>wrote:
>
>> Worked around in r206363.
>> Please revisit when you have time!
>>
>
> Restored the original assertion with a more compatible representation in
> SVN r206445.
>
> Thanks for the interim fix!
>
>
>> 2014-04-16 12:23 GMT+04:00 Timur Iskhodzhanov <timurrrr at google.com>:
>> > VS2013 doesn't seem to like that:
>> > lib\MC\WinCOFFObjectWriter.cpp(636) : error C2070: 'unknown': illegal
>> > sizeof operand
>> > lib\MC\WinCOFFObjectWriter.cpp(637) : error C2338: size mismatch for
>> > COFF::AuxiliaryFile::FileName
>> >
>> > 2014-04-16 8:15 GMT+04:00 Saleem Abdulrasool <compnerd at compnerd.org>:
>> >> Author: compnerd
>> >> Date: Tue Apr 15 23:15:32 2014
>> >> New Revision: 206355
>> >>
>> >> URL: http://llvm.org/viewvc/llvm-project?rev=206355&view=rev
>> >> Log:
>> >> COFF: add support for .file symbols
>> >>
>> >> Add support for emitting .file records.  This is mostly a quality of
>> >> implementation change (more complete support for COFF file emission)
>> that was
>> >> noticed while working on COFF file emission for Windows on ARM.
>> >>
>> >> A .file record is emitted as a symbol with storage class FILE (103)
>> and the name
>> >> ".file".  A series of auxiliary format 4 records follow which contain
>> the file
>> >> name.  The filename is stored as an ANSI string and is padded with
>> NULL if the
>> >> length is not a multiple of COFF::SymbolSize (18).
>> >>
>> >> Added:
>> >>     llvm/trunk/test/MC/COFF/file.s
>> >> Modified:
>> >>     llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
>> >>     llvm/trunk/lib/MC/WinCOFFStreamer.cpp
>> >>
>> >> Modified: llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
>> >> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp?rev=206355&r1=206354&r2=206355&view=diff
>> >>
>> ==============================================================================
>> >> --- llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp (original)
>> >> +++ llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp Tue Apr 15 23:15:32 2014
>> >> @@ -633,6 +633,35 @@ void WinCOFFObjectWriter::ExecutePostLay
>> >>    // "Define" each section & symbol. This creates section & symbol
>> >>    // entries in the staging area.
>> >>
>> >> +  static_assert(sizeof(COFF::AuxiliaryFile::FileName) ==
>> COFF::SymbolSize,
>> >> +                "size mismatch for COFF::AuxiliaryFile::FileName");
>> >> +  for (auto FI = Asm.file_names_begin(), FE = Asm.file_names_end();
>> >> +       FI != FE; ++FI) {
>> >> +    // round up to calculate the number of auxiliary symbols required
>> >> +    unsigned Count = (FI->size() + COFF::SymbolSize) /
>> COFF::SymbolSize;
>> >> +
>> >> +    COFFSymbol *file = createSymbol(".file");
>> >> +    file->Data.StorageClass = COFF::IMAGE_SYM_CLASS_FILE;
>> >> +    file->Aux.resize(Count);
>> >> +
>> >> +    unsigned Offset = 0;
>> >> +    unsigned Length = FI->size();
>> >> +    for (auto & Aux : file->Aux) {
>> >> +      Aux.AuxType = ATFile;
>> >> +
>> >> +      if (Length > COFF::SymbolSize) {
>> >> +        memcpy(Aux.Aux.File.FileName, FI->c_str() + Offset,
>> COFF::SymbolSize);
>> >> +        Length = Length - COFF::SymbolSize;
>> >> +      } else {
>> >> +        memcpy(Aux.Aux.File.FileName, FI->c_str() + Offset, Length);
>> >> +        memset(&Aux.Aux.File.FileName[Length], 0, COFF::SymbolSize -
>> Length);
>> >> +        Length = 0;
>> >> +      }
>> >> +
>> >> +      Offset = Offset + COFF::SymbolSize;
>> >> +    }
>> >> +  }
>> >> +
>> >>    for (MCAssembler::const_iterator i = Asm.begin(), e = Asm.end(); i
>> != e; i++)
>> >>      DefineSection(*i);
>> >>
>> >>
>> >> Modified: llvm/trunk/lib/MC/WinCOFFStreamer.cpp
>> >> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFStreamer.cpp?rev=206355&r1=206354&r2=206355&view=diff
>> >>
>> ==============================================================================
>> >> --- llvm/trunk/lib/MC/WinCOFFStreamer.cpp (original)
>> >> +++ llvm/trunk/lib/MC/WinCOFFStreamer.cpp Tue Apr 15 23:15:32 2014
>> >> @@ -266,8 +266,7 @@ void WinCOFFStreamer::EmitTBSSSymbol(con
>> >>  }
>> >>
>> >>  void WinCOFFStreamer::EmitFileDirective(StringRef Filename) {
>> >> -  // Ignore for now, linkers don't care, and proper debug
>> >> -  // info will be a much large effort.
>> >> +  getAssembler().addFileName(Filename);
>> >>  }
>> >>
>> >>  // TODO: Implement this if you want to emit .comment section in COFF
>> obj files.
>> >>
>> >> Added: llvm/trunk/test/MC/COFF/file.s
>> >> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/file.s?rev=206355&view=auto
>> >>
>> ==============================================================================
>> >> --- llvm/trunk/test/MC/COFF/file.s (added)
>> >> +++ llvm/trunk/test/MC/COFF/file.s Tue Apr 15 23:15:32 2014
>> >> @@ -0,0 +1,17 @@
>> >> +// RUN: llvm-mc -triple i686-windows -filetype obj %s -o - |
>> llvm-objdump -t - \
>> >> +// RUN:   | FileCheck %s -check-prefix CHECK-PRINT
>> >> +
>> >> +       .file "null-padded.asm"
>> >> +// CHECK-PRINT: .file
>> >> +// CHECK-PRINT-NEXT: AUX null-padded.asm{{$}}
>> >> +
>> >> +       .file "eighteen-chars.asm"
>> >> +
>> >> +// CHECK-PRINT: .file
>> >> +// CHECK-PRINT-NEXT: AUX eighteen-chars.asm{{$}}
>> >> +
>> >> +       .file "multiple-auxiliary-entries.asm"
>> >> +
>> >> +// CHECK-PRINT: .file
>> >> +// CHECK-PRINT-NEXT: AUX multiple-auxiliary-entries.asm{{$}}
>> >> +
>> >>
>> >>
>> >> _______________________________________________
>> >> llvm-commits mailing list
>> >> llvm-commits at cs.uiuc.edu
>> >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>
>
> --
> Saleem Abdulrasool
> compnerd (at) compnerd (dot) org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140417/cc1c5661/attachment.html>


More information about the llvm-commits mailing list