[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