<div dir="ltr">On Tue, Aug 6, 2013 at 8:16 AM, Shankar Easwaran <span dir="ltr"><<a href="mailto:shankare@codeaurora.org" target="_blank">shankare@codeaurora.org</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"><div class="im">
<div>On 8/5/2013 11:06 PM, Rui Ueyama wrote:<br>
</div>
<blockquote type="cite">
<pre>On Mon, Aug 5, 2013 at 8:58 PM, Shankar Easwaran <a href="mailto:shankare@codeaurora.org" target="_blank"><shankare@codeaurora.org></a>wrote:
</pre>
<blockquote type="cite">
<pre>Isnt this supposed to be meant for common symbols ?
</pre>
</blockquote>
<pre>I guess it's the correct terminology, but I don't know much about it. Is
this different from atoms for BSS?
</pre>
</blockquote></div>
This is the definition for ELF common symbols (extracted from Ian's
blog) :-<br>
<br>
<span>A section index of<span> </span></span><code style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:left;font-style:normal;font-weight:normal;line-height:18.71875px;color:rgb(102,102,102);text-transform:none;white-space:normal;font-family:monospace;word-spacing:0px">SHN_COMMON</code><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:left;font-style:normal;display:inline!important;font-weight:normal;float:none;line-height:18.71875px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:normal;font-family:'Lucida Grande','Lucida Sans Unicode',Verdana,Arial,sans-serif;word-spacing:0px"><span> </span>(</span><code style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:left;font-style:normal;font-weight:normal;line-height:18.71875px;color:rgb(102,102,102);text-transform:none;white-space:normal;font-family:monospace;word-spacing:0px">0xfff2</code><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:left;font-style:normal;display:inline!important;font-weight:normal;float:none;line-height:18.71875px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:normal;font-family:'Lucida Grande','Lucida Sans Unicode',Verdana,Arial,sans-serif;word-spacing:0px">) 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</span></div></blockquote><div><br></div><div>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!</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000"><br>
<blockquote type="cite">
<pre></pre>
<blockquote type="cite"><div class="im">
<pre>On 8/2/2013 12:25 AM, Rui Ueyama wrote:
</pre>
</div><blockquote type="cite">
<pre>Author: ruiu
Date: Fri Aug 2 00:25:31 2013
New Revision: 187645
URL: <a href="http://llvm.org/viewvc/llvm-**project?rev=187645&view=rev" target="_blank">http://llvm.org/viewvc/llvm-**project?rev=187645&view=rev</a><a href="http://llvm.org/viewvc/llvm-project?rev=187645&view=rev" target="_blank"><http://llvm.org/viewvc/llvm-project?rev=187645&view=rev></a>
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: <a href="http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**" target="_blank">http://llvm.org/viewvc/llvm-**project/lld/trunk/lib/**</a>
ReaderWriter/PECOFF/**ReaderCOFF.cpp?rev=187645&r1=**
187644&r2=187645&view=diff<a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp?rev=187645&r1=187644&r2=187645&view=diff" target="_blank"><http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp?rev=187645&r1=187644&r2=187645&view=diff></a>
==============================**==============================**
==================
--- 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: <a href="http://llvm.org/viewvc/llvm-**project/lld/trunk/test/pecoff/**" target="_blank">http://llvm.org/viewvc/llvm-**project/lld/trunk/test/pecoff/**</a>
Inputs/bss-undef.obj.yaml?rev=**187645&view=auto<a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/bss-undef.obj.yaml?rev=187645&view=auto" target="_blank"><http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/bss-undef.obj.yaml?rev=187645&view=auto></a>
==============================**==============================**
==================
--- 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: <a href="http://llvm.org/viewvc/llvm-**project/lld/trunk/test/pecoff/**" target="_blank">http://llvm.org/viewvc/llvm-**project/lld/trunk/test/pecoff/**</a>
bss-undef.test?rev=187645&**view=auto<a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/bss-undef.test?rev=187645&view=auto" target="_blank"><http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/bss-undef.test?rev=187645&view=auto></a>
==============================**==============================**
==================
--- 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
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a>
<a href="http://lists.cs.uiuc.edu/**mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/**mailman/listinfo/llvm-commits</a><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank"><http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits></a>
</pre>
</blockquote><div class="im">
<pre>--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted
by the Linux Foundation
</pre>
</div></blockquote>
<pre></pre>
</blockquote><div class="im">
<br>
<br>
<pre cols="72">--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation</pre>
</div></div>
</blockquote></div><br></div></div>