[llvm] r212899 - MC: Let non-temporary COFF aliases be in symtab
Rafael EspĂndola
rafael.espindola at gmail.com
Mon Jul 21 11:27:25 PDT 2014
thanks!
On 13 July 2014 00:31, David Majnemer <david.majnemer at gmail.com> wrote:
> Author: majnemer
> Date: Sat Jul 12 23:31:19 2014
> New Revision: 212899
>
> URL: http://llvm.org/viewvc/llvm-project?rev=212899&view=rev
> Log:
> MC: Let non-temporary COFF aliases be in symtab
>
> MC was aping a binutils bug where aliases would default their linkage to
> private instead of internal.
>
> I've sent a patch to the binutils maintainers and they've recently
> applied it to the GNU assembler sources.
>
> This fixes PR20152.
>
> Differential Revision: http://reviews.llvm.org/D4395
>
> Modified:
> llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
> llvm/trunk/test/MC/COFF/alias.s
> llvm/trunk/test/MC/COFF/lset0.s
>
> Modified: llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp?rev=212899&r1=212898&r2=212899&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp (original)
> +++ llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp Sat Jul 12 23:31:19 2014
> @@ -153,7 +153,7 @@ public:
> void MakeSymbolReal(COFFSymbol &S, size_t Index);
> void MakeSectionReal(COFFSection &S, size_t Number);
>
> - bool ExportSymbol(MCSymbolData const &SymbolData, MCAssembler &Asm);
> + bool ExportSymbol(const MCSymbol &Symbol, MCAssembler &Asm);
>
> bool IsPhysicalSection(COFFSection *S);
>
> @@ -456,10 +456,13 @@ void WinCOFFObjectWriter::DefineSymbol(M
>
> // If no storage class was specified in the streamer, define it here.
> if (coff_symbol->Data.StorageClass == 0) {
> - bool external = ResSymData.isExternal() || !ResSymData.Fragment;
> -
> - coff_symbol->Data.StorageClass =
> - external ? COFF::IMAGE_SYM_CLASS_EXTERNAL : COFF::IMAGE_SYM_CLASS_STATIC;
> + bool IsExternal =
> + ResSymData.isExternal() ||
> + (!ResSymData.getFragment() && !ResSymData.getSymbol().isVariable());
> +
> + coff_symbol->Data.StorageClass = IsExternal
> + ? COFF::IMAGE_SYM_CLASS_EXTERNAL
> + : COFF::IMAGE_SYM_CLASS_STATIC;
> }
>
> if (!Base) {
> @@ -546,16 +549,24 @@ void WinCOFFObjectWriter::MakeSymbolReal
> S.Index = Index;
> }
>
> -bool WinCOFFObjectWriter::ExportSymbol(MCSymbolData const &SymbolData,
> +bool WinCOFFObjectWriter::ExportSymbol(const MCSymbol &Symbol,
> MCAssembler &Asm) {
> // This doesn't seem to be right. Strings referred to from the .data section
> // need symbols so they can be linked to code in the .text section right?
>
> - // return Asm.isSymbolLinkerVisible(SymbolData.getSymbol());
> + // return Asm.isSymbolLinkerVisible(Symbol);
> +
> + // Non-temporary labels should always be visible to the linker.
> + if (!Symbol.isTemporary())
> + return true;
> +
> + // Absolute temporary labels are never visible.
> + if (!Symbol.isInSection())
> + return false;
>
> // For now, all non-variable symbols are exported,
> // the linker will sort the rest out for us.
> - return SymbolData.isExternal() || !SymbolData.getSymbol().isVariable();
> + return !Symbol.isVariable();
> }
>
> bool WinCOFFObjectWriter::IsPhysicalSection(COFFSection *S) {
> @@ -689,7 +700,7 @@ void WinCOFFObjectWriter::ExecutePostLay
> DefineSection(Section);
>
> for (MCSymbolData &SD : Asm.symbols())
> - if (ExportSymbol(SD, Asm))
> + if (ExportSymbol(SD.getSymbol(), Asm))
> DefineSymbol(SD, Asm, Layout);
> }
>
>
> Modified: llvm/trunk/test/MC/COFF/alias.s
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/alias.s?rev=212899&r1=212898&r2=212899&view=diff
> ==============================================================================
> --- llvm/trunk/test/MC/COFF/alias.s (original)
> +++ llvm/trunk/test/MC/COFF/alias.s Sat Jul 12 23:31:19 2014
> @@ -46,7 +46,7 @@ weak_aliased_to_external = external2
> // CHECK-NEXT: AuxSymbolCount: 0
> // CHECK-NEXT: }
> // CHECK-NEXT: Symbol {
> -// CHECK-NEXT: Name: global_aliased_to_external
> +// CHECK: Name: global_aliased_to_external
> // CHECK-NEXT: Value: 0
> // CHECK-NEXT: Section: (0)
> // CHECK-NEXT: BaseType: Null (0x0)
> @@ -90,7 +90,7 @@ weak_aliased_to_external = external2
> // CHECK-NEXT: StorageClass: WeakExternal (0x69)
> // CHECK-NEXT: AuxSymbolCount: 1
> // CHECK-NEXT: AuxWeakExternal {
> -// CHECK-NEXT: Linked: external2 (13)
> +// CHECK-NEXT: Linked: external2
> // CHECK-NEXT: Search: Library (0x2)
> // CHECK-NEXT: Unused: (00 00 00 00 00 00 00 00 00 00)
> // CHECK-NEXT: }
>
> Modified: llvm/trunk/test/MC/COFF/lset0.s
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/lset0.s?rev=212899&r1=212898&r2=212899&view=diff
> ==============================================================================
> --- llvm/trunk/test/MC/COFF/lset0.s (original)
> +++ llvm/trunk/test/MC/COFF/lset0.s Sat Jul 12 23:31:19 2014
> @@ -1,12 +1,11 @@
> -// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s -o - | llvm-nm - | FileCheck %s
> +// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s -o - | llvm-nm - | FileCheck %s --check-prefix=GLOBAL
> +// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s -o - | llvm-nm - | FileCheck %s --check-prefix=LOCAL
>
> not_global = 123
> global = 456
> .globl global
> -.Llocal = 789
> +Llocal = 789
>
> -// CHECK-NOT: not_global
> -// CHECK-NOT: Llocal
> -// CHECK: global
> -// CHECK-NOT: not_global
> -// CHECK-NOT: Llocal
> +// LOCAL-NOT: local
> +// GLOBAL: A global
> +// GLOBAL: a not_global
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list