forked from OSchip/llvm-project
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
This commit is contained in:
parent
7f536bcf22
commit
fc056950aa
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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.");
|
||||
}
|
||||
|
|
|
@ -1,6 +1,14 @@
|
|||
; RUN: llc -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck %s
|
||||
; RUN: llc -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck %s
|
||||
|
||||
; RUN: llc -mtriple powerpc-ibm-aix-xcoff -filetype=obj -o %t.o < %s
|
||||
; RUN: llvm-readobj --section-headers --file-header %t.o | \
|
||||
; RUN: FileCheck --check-prefix=OBJ %s
|
||||
|
||||
; RUN: not llc -mtriple powerpc64-ibm-aix-xcoff -filetype=obj < %s 2>&1 | \
|
||||
; RUN: FileCheck --check-prefix=OBJ64 %s
|
||||
; OBJ64: LLVM ERROR: 64-bit XCOFF object files are not supported yet.
|
||||
|
||||
@a = internal global i32 0, align 4
|
||||
@b = internal global i64 0, align 8
|
||||
@c = internal global i16 0, align 2
|
||||
|
@ -8,3 +16,32 @@
|
|||
; CHECK: .lcomm a,4,a,2
|
||||
; CHECK-NEXT: .lcomm b,8,b,3
|
||||
; CHECK-NEXT: .lcomm c,2,c,1
|
||||
|
||||
; OBJ: File: {{.*}}aix-xcoff-lcomm.ll.tmp.o
|
||||
; OBJ-NEXT: Format: aixcoff-rs6000
|
||||
; OBJ-NEXT: Arch: powerpc
|
||||
; OBJ-NEXT: AddressSize: 32bit
|
||||
; OBJ-NEXT: FileHeader {
|
||||
; OBJ-NEXT: Magic: 0x1DF
|
||||
; OBJ-NEXT: NumberOfSections: 1
|
||||
; OBJ-NEXT: TimeStamp:
|
||||
; OBJ-NEXT: SymbolTableOffset: 0x3C
|
||||
; OBJ-NEXT: SymbolTableEntries: 6
|
||||
; OBJ-NEXT: OptionalHeaderSize: 0x0
|
||||
; OBJ-NEXT: Flags: 0x0
|
||||
; OBJ-NEXT: }
|
||||
; OBJ-NEXT: Sections [
|
||||
; OBJ-NEXT: Section {
|
||||
; OBJ-NEXT: Index: 1
|
||||
; OBJ-NEXT: Name: .bss
|
||||
; OBJ-NEXT: PhysicalAddress: 0x0
|
||||
; OBJ-NEXT: VirtualAddress: 0x0
|
||||
; OBJ-NEXT: Size: 0x14
|
||||
; OBJ-NEXT: RawDataOffset: 0x0
|
||||
; OBJ-NEXT: RelocationPointer: 0x0
|
||||
; OBJ-NEXT: LineNumberPointer: 0x0
|
||||
; OBJ-NEXT: NumberOfRelocations: 0
|
||||
; OBJ-NEXT: NumberOfLineNumbers: 0
|
||||
; OBJ-NEXT: Type: STYP_BSS (0x80)
|
||||
; OBJ-NEXT: }
|
||||
; OBJ-NEXT: ]
|
||||
|
|
Loading…
Reference in New Issue