[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