diff options
author | Jason Liu <jasonliu.development@gmail.com> | 2019-08-27 15:14:45 +0000 |
---|---|---|
committer | Jason Liu <jasonliu.development@gmail.com> | 2019-08-27 15:14:45 +0000 |
commit | fc056950aa0216cc1bca9bdf56fc912963e34d78 (patch) | |
tree | 7a01aea1af8b711e6db6bf9a07735c99828a1bad /llvm/lib | |
parent | 7f536bcf22074f819d74b99966c4aa32b332a124 (diff) | |
download | bcm5719-llvm-fc056950aa0216cc1bca9bdf56fc912963e34d78.tar.gz bcm5719-llvm-fc056950aa0216cc1bca9bdf56fc912963e34d78.zip |
Handle local commons for XCOFF object file writing
Summary:
Adds support for emitting common local global symbols to an XCOFF object file.
Local commons are emitted into the .bss section with a storage class of
C_HIDEXT.
Patch by: daltenty
Reviewers: sfertile, hubert.reinterpretcast
Differential Revision: https://reviews.llvm.org/D66097
llvm-svn: 370070
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/MC/MCXCOFFStreamer.cpp | 10 | ||||
-rw-r--r-- | llvm/lib/MC/XCOFFObjectWriter.cpp | 7 |
2 files changed, 13 insertions, 4 deletions
diff --git a/llvm/lib/MC/MCXCOFFStreamer.cpp b/llvm/lib/MC/MCXCOFFStreamer.cpp index 5880c3d814a..760bdefd424 100644 --- a/llvm/lib/MC/MCXCOFFStreamer.cpp +++ b/llvm/lib/MC/MCXCOFFStreamer.cpp @@ -10,11 +10,12 @@ // //===----------------------------------------------------------------------===// -#include "llvm/MC/MCXCOFFStreamer.h" +#include "llvm/BinaryFormat/XCOFF.h" #include "llvm/MC/MCAsmBackend.h" #include "llvm/MC/MCCodeEmitter.h" #include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCSymbolXCOFF.h" +#include "llvm/MC/MCXCOFFStreamer.h" #include "llvm/Support/TargetRegistry.h" using namespace llvm; @@ -72,7 +73,8 @@ MCStreamer *llvm::createXCOFFStreamer(MCContext &Context, return S; } -void MCXCOFFStreamer::EmitXCOFFLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, - unsigned ByteAlign) { - report_fatal_error("Emission of local commons not implemented yet."); +void MCXCOFFStreamer::EmitXCOFFLocalCommonSymbol(MCSymbol *Symbol, + uint64_t Size, + unsigned ByteAlignment) { + EmitCommonSymbol(Symbol, Size, ByteAlignment); } diff --git a/llvm/lib/MC/XCOFFObjectWriter.cpp b/llvm/lib/MC/XCOFFObjectWriter.cpp index d4dfd467976..e831d3e763f 100644 --- a/llvm/lib/MC/XCOFFObjectWriter.cpp +++ b/llvm/lib/MC/XCOFFObjectWriter.cpp @@ -235,6 +235,13 @@ void XCOFFObjectWriter::executePostLayoutBinding( break; } report_fatal_error("Unhandled mapping of read-write csect to section."); + case XCOFF::XMC_BS: + assert(XCOFF::XTY_CM == MCSec->getCSectType() && + "Mapping invalid csect. CSECT with bss storage class must be " + "common type."); + BSSCsects.emplace_back(MCSec); + WrapperMap[MCSec] = &BSSCsects.back(); + break; default: report_fatal_error("Unhandled mapping of csect to section."); } |