forked from OSchip/llvm-project
[PECOFF] A symbol with symbol with section number 0 and non-zero value represents a BSS atom.
llvm-svn: 187645
This commit is contained in:
parent
470059472a
commit
8344be8407
|
@ -161,6 +161,20 @@ private:
|
|||
// Filter non-defined atoms, and group defined atoms by its section.
|
||||
SectionToSymbolsT definedSymbols;
|
||||
for (const coff_symbol *sym : symbols) {
|
||||
// A symbol with section number 0 and non-zero value represents an
|
||||
// uninitialized data. I don't understand why there are two ways to define
|
||||
// an uninitialized data symbol (.bss and this way), but that's how COFF
|
||||
// works.
|
||||
if (sym->SectionNumber == llvm::COFF::IMAGE_SYM_UNDEFINED &&
|
||||
sym->Value > 0) {
|
||||
StringRef name = _symbolName[sym];
|
||||
uint32_t size = sym->Value;
|
||||
auto *atom = new (_alloc) COFFBSSAtom(*this, name, sym, size, 0);
|
||||
result.push_back(atom);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Skip if it's not for defined atom.
|
||||
if (sym->SectionNumber == llvm::COFF::IMAGE_SYM_ABSOLUTE ||
|
||||
sym->SectionNumber == llvm::COFF::IMAGE_SYM_UNDEFINED)
|
||||
continue;
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
---
|
||||
header:
|
||||
Machine: IMAGE_FILE_MACHINE_I386
|
||||
Characteristics: [ ]
|
||||
sections:
|
||||
- Name: .text
|
||||
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
|
||||
Alignment: 4
|
||||
SectionData: ""
|
||||
- Name: .data
|
||||
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
|
||||
Alignment: 4
|
||||
SectionData: 03000000
|
||||
symbols:
|
||||
- Name: .text
|
||||
Value: 0
|
||||
SectionNumber: 1
|
||||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_NULL
|
||||
StorageClass: IMAGE_SYM_CLASS_STATIC
|
||||
NumberOfAuxSymbols: 1
|
||||
AuxiliaryData: 000000000000000000000000000000000000
|
||||
- Name: .data
|
||||
Value: 0
|
||||
SectionNumber: 2
|
||||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_NULL
|
||||
StorageClass: IMAGE_SYM_CLASS_STATIC
|
||||
NumberOfAuxSymbols: 1
|
||||
AuxiliaryData: 040000000000000000000000000000000000
|
||||
- Name: _bssdata1
|
||||
Value: 4
|
||||
SectionNumber: 0
|
||||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_NULL
|
||||
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
||||
- Name: _bssdata2
|
||||
Value: 4
|
||||
SectionNumber: 0
|
||||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_NULL
|
||||
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
||||
...
|
|
@ -0,0 +1,22 @@
|
|||
# RUN: yaml2obj %p/Inputs/bss-undef.obj.yaml > %t.obj
|
||||
#
|
||||
# RUN: lld -flavor link /out:%t /subsystem:console /force -- %t.obj \
|
||||
# RUN: && llvm-readobj -sections %t | FileCheck %s
|
||||
|
||||
CHECK: Section {
|
||||
CHECK: Number: 2
|
||||
CHECK-NEXT: Name: .bss
|
||||
CHECK-NEXT: VirtualSize: 0x0
|
||||
CHECK-NEXT: VirtualAddress: 0x2000
|
||||
CHECK-NEXT: RawDataSize: 512
|
||||
CHECK-NEXT: PointerToRawData: 0x0
|
||||
CHECK-NEXT: PointerToRelocations: 0x0
|
||||
CHECK-NEXT: PointerToLineNumbers: 0x0
|
||||
CHECK-NEXT: RelocationCount: 0
|
||||
CHECK-NEXT: LineNumberCount: 0
|
||||
CHECK-NEXT: Characteristics [
|
||||
CHECK-NEXT: IMAGE_SCN_CNT_UNINITIALIZED_DATA
|
||||
CHECK-NEXT: IMAGE_SCN_MEM_READ
|
||||
CHECK-NEXT: IMAGE_SCN_MEM_WRITE
|
||||
CHECK-NEXT: ]
|
||||
CHECK-NEXT: }
|
Loading…
Reference in New Issue