[PATCH] [mc-coff] Resolve aliases when emitting COFF relocations

Reid Kleckner rnk at google.com
Fri Jul 12 18:04:19 PDT 2013


Ping.


On Tue, Jul 2, 2013 at 3:02 PM, Reid Kleckner <rnk at google.com> wrote:

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


More information about the llvm-commits mailing list