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