[lld] r187645 - [PECOFF] A symbol with symbol with section number 0 and non-zero value represents a BSS atom.
Shankar Easwaran
shankare at codeaurora.org
Mon Aug 5 20:58:19 PDT 2013
Isnt this supposed to be meant for common symbols ?
On 8/2/2013 12:25 AM, Rui Ueyama wrote:
> Author: ruiu
> Date: Fri Aug 2 00:25:31 2013
> New Revision: 187645
>
> URL: http://llvm.org/viewvc/llvm-project?rev=187645&view=rev
> Log:
> [PECOFF] A symbol with symbol with section number 0 and non-zero value represents a BSS atom.
>
> Added:
> lld/trunk/test/pecoff/Inputs/bss-undef.obj.yaml
> lld/trunk/test/pecoff/bss-undef.test
> Modified:
> lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
>
> Modified: lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp?rev=187645&r1=187644&r2=187645&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp Fri Aug 2 00:25:31 2013
> @@ -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;
>
> Added: lld/trunk/test/pecoff/Inputs/bss-undef.obj.yaml
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/bss-undef.obj.yaml?rev=187645&view=auto
> ==============================================================================
> --- lld/trunk/test/pecoff/Inputs/bss-undef.obj.yaml (added)
> +++ lld/trunk/test/pecoff/Inputs/bss-undef.obj.yaml Fri Aug 2 00:25:31 2013
> @@ -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
> +...
>
> Added: lld/trunk/test/pecoff/bss-undef.test
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/bss-undef.test?rev=187645&view=auto
> ==============================================================================
> --- lld/trunk/test/pecoff/bss-undef.test (added)
> +++ lld/trunk/test/pecoff/bss-undef.test Fri Aug 2 00:25:31 2013
> @@ -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: }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation
More information about the llvm-commits
mailing list