[lld] r187645 - [PECOFF] A symbol with symbol with section number 0 and non-zero value represents a BSS atom.

Rui Ueyama ruiu at google.com
Tue Aug 6 08:48:44 PDT 2013


On Tue, Aug 6, 2013 at 8:16 AM, Shankar Easwaran <shankare at codeaurora.org>wrote:

>  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> <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
>

The MS COFF only says that such a symbol is a common symbol and does not
give any definition for that, but I'd think it refers to this definition.
I'll make a change accordingly. Thank you for the info!


>   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> <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> <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> <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> <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 listllvm-commits at cs.uiuc.eduhttp://lists.cs.uiuc.edu/**mailman/listinfo/llvm-commits<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/bcbd6d14/attachment.html>


More information about the llvm-commits mailing list