[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