<div dir="ltr">Ping.<div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jul 2, 2013 at 3:02 PM, Reid Kleckner <span dir="ltr"><<a href="mailto:rnk@google.com" target="_blank">rnk@google.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This is consistent with the ELF object writer.<br>
<br>
Add some COFF tests that relocate against an alias.<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D1079" target="_blank">http://llvm-reviews.chandlerc.com/D1079</a><br>
<br>
Files:<br>
  lib/MC/WinCOFFObjectWriter.cpp<br>
  test/MC/COFF/alias.s<br>
<br>
Index: lib/MC/WinCOFFObjectWriter.cpp<br>
===================================================================<br>
--- lib/MC/WinCOFFObjectWriter.cpp<br>
+++ lib/MC/WinCOFFObjectWriter.cpp<br>
@@ -636,8 +636,9 @@<br>
                                            uint64_t &FixedValue) {<br>
   assert(Target.getSymA() != NULL && "Relocation must reference a symbol!");<br>
<br>
-  const MCSymbol *A = &Target.getSymA()->getSymbol();<br>
-  MCSymbolData &A_SD = Asm.getSymbolData(*A);<br>
+  const MCSymbol &Symbol = Target.getSymA()->getSymbol();<br>
+  const MCSymbol &A = Symbol.AliasedSymbol();<br>
+  MCSymbolData &A_SD = Asm.getSymbolData(A);<br>
<br>
   MCSectionData const *SectionData = Fragment->getParent();<br>
<br>
Index: test/MC/COFF/alias.s<br>
===================================================================<br>
--- /dev/null<br>
+++ test/MC/COFF/alias.s<br>
@@ -0,0 +1,102 @@<br>
+// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s -o - | llvm-readobj -t | FileCheck %s<br>
+<br>
+_foo:<br>
+_bar = _foo<br>
+<br>
+        .globl _foo2<br>
+_foo2 = _bar2<br>
+<br>
+        .globl _bar3<br>
+_foo3:<br>
+_bar3 = _foo3<br>
+<br>
+       .weak   _bar4<br>
+_bar4 = _foo4<br>
+<br>
+// Generate relocs against the above aliases.<br>
+        .long _bar<br>
+        .long _foo2<br>
+        .long _bar3<br>
+        .long _bar4<br>
+<br>
+// FIXME: To reviewer, please provide guidance on how to improve this test.<br>
+<br>
+// CHECK:      Symbols [<br>
+// CHECK-NEXT:   Symbol {<br>
+// CHECK-NEXT:     Name: .text<br>
+// CHECK-NEXT:     Value: 0<br>
+// CHECK-NEXT:     Section: .text (1)<br>
+// CHECK-NEXT:     BaseType: Null (0x0)<br>
+// CHECK-NEXT:     ComplexType: Null (0x0)<br>
+// CHECK-NEXT:     StorageClass: Static (0x3)<br>
+// CHECK-NEXT:     AuxSymbolCount: 1<br>
+// CHECK:        }<br>
+// CHECK:        Symbol {<br>
+// CHECK-NEXT:     Name: _foo<br>
+// CHECK-NEXT:     Value: 0<br>
+// CHECK-NEXT:     Section: .text (1)<br>
+// CHECK-NEXT:     BaseType: Null (0x0)<br>
+// CHECK-NEXT:     ComplexType: Null (0x0)<br>
+// CHECK-NEXT:     StorageClass: Static (0x3)<br>
+// CHECK-NEXT:     AuxSymbolCount: 0<br>
+// CHECK-NEXT:   }<br>
+// CHECK-NEXT:   Symbol {<br>
+// CHECK-NEXT:     Name: _foo2<br>
+// CHECK-NEXT:     Value: 0<br>
+// CHECK-NEXT:     Section:  (0)<br>
+// CHECK-NEXT:     BaseType: Null (0x0)<br>
+// CHECK-NEXT:     ComplexType: Null (0x0)<br>
+// CHECK-NEXT:     StorageClass: External (0x2)<br>
+// CHECK-NEXT:     AuxSymbolCount: 0<br>
+// CHECK-NEXT:   }<br>
+// CHECK-NEXT:   Symbol {<br>
+// CHECK-NEXT:     Name: _bar2<br>
+// CHECK-NEXT:     Value: 0<br>
+// CHECK-NEXT:     Section:  (0)<br>
+// CHECK-NEXT:     BaseType: Null (0x0)<br>
+// CHECK-NEXT:     ComplexType: Null (0x0)<br>
+// CHECK-NEXT:     StorageClass: External (0x2)<br>
+// CHECK-NEXT:     AuxSymbolCount: 0<br>
+// CHECK-NEXT:   }<br>
+// CHECK-NEXT:   Symbol {<br>
+// CHECK-NEXT:     Name: _bar3<br>
+// CHECK-NEXT:     Value: 0<br>
+// CHECK-NEXT:     Section: .text (1)<br>
+// CHECK-NEXT:     BaseType: Null (0x0)<br>
+// CHECK-NEXT:     ComplexType: Null (0x0)<br>
+// CHECK-NEXT:     StorageClass: Static (0x3)<br>
+// CHECK-NEXT:     AuxSymbolCount: 0<br>
+// CHECK-NEXT:   }<br>
+// CHECK-NEXT:   Symbol {<br>
+// CHECK-NEXT:     Name: _foo3<br>
+// CHECK-NEXT:     Value: 0<br>
+// CHECK-NEXT:     Section: .text (1)<br>
+// CHECK-NEXT:     BaseType: Null (0x0)<br>
+// CHECK-NEXT:     ComplexType: Null (0x0)<br>
+// CHECK-NEXT:     StorageClass: Static (0x3)<br>
+// CHECK-NEXT:     AuxSymbolCount: 0<br>
+// CHECK-NEXT:   }<br>
+// CHECK-NEXT:   Symbol {<br>
+// CHECK-NEXT:     Name: _bar4<br>
+// CHECK-NEXT:     Value: 0<br>
+// CHECK-NEXT:     Section:  (0)<br>
+// CHECK-NEXT:     BaseType: Null (0x0)<br>
+// CHECK-NEXT:     ComplexType: Null (0x0)<br>
+// CHECK-NEXT:     StorageClass: WeakExternal (0x69)<br>
+// CHECK-NEXT:     AuxSymbolCount: 1<br>
+// CHECK-NEXT:     AuxWeakExternal {<br>
+// CHECK-NEXT:       Linked: _foo4 (9)<br>
+// CHECK-NEXT:       Search: Library (0x2)<br>
+// CHECK-NEXT:       Unused: (00 00 00 00 00 00 00 00 00 00)<br>
+// CHECK-NEXT:     }<br>
+// CHECK-NEXT:   }<br>
+// CHECK-NEXT:   Symbol {<br>
+// CHECK-NEXT:     Name: _foo4<br>
+// CHECK-NEXT:     Value: 0<br>
+// CHECK-NEXT:     Section:  (0)<br>
+// CHECK-NEXT:     BaseType: Null (0x0)<br>
+// CHECK-NEXT:     ComplexType: Null (0x0)<br>
+// CHECK-NEXT:     StorageClass: External (0x2)<br>
+// CHECK-NEXT:     AuxSymbolCount: 0<br>
+// CHECK-NEXT:   }<br>
+// CHECK-NEXT: ]<br>
</blockquote></div><br></div></div>