summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorJason Liu <jasonliu.development@gmail.com>2019-08-27 15:14:45 +0000
committerJason Liu <jasonliu.development@gmail.com>2019-08-27 15:14:45 +0000
commitfc056950aa0216cc1bca9bdf56fc912963e34d78 (patch)
tree7a01aea1af8b711e6db6bf9a07735c99828a1bad /llvm/lib
parent7f536bcf22074f819d74b99966c4aa32b332a124 (diff)
downloadbcm5719-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.cpp10
-rw-r--r--llvm/lib/MC/XCOFFObjectWriter.cpp7
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.");
}
OpenPOWER on IntegriCloud