[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
Tue Aug 6 08:16:04 PDT 2013
On 8/5/2013 11:06 PM, Rui Ueyama wrote:
> On Mon, Aug 5, 2013 at 8:58 PM, Shankar Easwaran <shankare at codeaurora.org>wrote:
>
>> Isnt this supposed to be meant for common symbols ?
>
> I guess it's the correct terminology, but I don't know much about it. Is
> this different from atoms for BSS?
This is the definition for ELF common symbols (extracted from Ian's blog) :-
A section index of|SHN_COMMON|(|0xfff2|) indicates a common symbol.
Common symbols were invented to handle Fortran common blocks, and they
are also often used for uninitialized global variables in C. A common
symbol has unusual semantics. Common symbols have a value of zero, but
set the size field to the desired size. If one object file has a common
symbol and another has a definition, the common symbol is treated as an
undefined reference. If there is no definition for a common symbol, the
program linker acts as though it saw a definition initialized to zero of
the appropriate size. Two object files may have common symbols of
different sizes, in which case the program linker will use the largest
size. I
>
>> 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<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<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<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: 000000000000000000000000000000**000000
>>> + - Name: .data
>>> + Value: 0
>>> + SectionNumber: 2
>>> + SimpleType: IMAGE_SYM_TYPE_NULL
>>> + ComplexType: IMAGE_SYM_DTYPE_NULL
>>> + StorageClass: IMAGE_SYM_CLASS_STATIC
>>> + NumberOfAuxSymbols: 1
>>> + AuxiliaryData: 040000000000000000000000000000**000000
>>> + - 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<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<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
>>
>>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130806/984d60e5/attachment.html>
More information about the llvm-commits
mailing list