[llvm] r327101 - Don't treat .symver as a regular alias definition.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 8 19:13:37 PST 2018


Author: rafael
Date: Thu Mar  8 19:13:37 2018
New Revision: 327101

URL: http://llvm.org/viewvc/llvm-project?rev=327101&view=rev
Log:
Don't treat .symver as a regular alias definition.

This patch starts simplifying the handling of .symver.

For now it just moves the responsibility for creating an alias down to
the streamer. With that the asm streamer can pass a .symver unchanged,
which is nice since gas cannot parse "foo at bar = zed".

In a followup I hope to move the handling down to the writer so that
we don't need special hacks for avoiding breaking names with @@@ on
windows.

Modified:
    llvm/trunk/include/llvm/MC/MCELFStreamer.h
    llvm/trunk/lib/MC/MCAsmStreamer.cpp
    llvm/trunk/lib/MC/MCELFStreamer.cpp
    llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp
    llvm/trunk/lib/Object/RecordStreamer.cpp
    llvm/trunk/test/MC/ARM/comment.s

Modified: llvm/trunk/include/llvm/MC/MCELFStreamer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCELFStreamer.h?rev=327101&r1=327100&r2=327101&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCELFStreamer.h (original)
+++ llvm/trunk/include/llvm/MC/MCELFStreamer.h Thu Mar  8 19:13:37 2018
@@ -51,6 +51,8 @@ public:
                         unsigned ByteAlignment) override;
 
   void emitELFSize(MCSymbol *Symbol, const MCExpr *Value) override;
+  void emitELFSymverDirective(MCSymbol *Alias,
+                              const MCSymbol *Aliasee) override;
 
   void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
                              unsigned ByteAlignment) override;

Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=327101&r1=327100&r2=327101&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Thu Mar  8 19:13:37 2018
@@ -130,6 +130,9 @@ public:
 
   void ChangeSection(MCSection *Section, const MCExpr *Subsection) override;
 
+  void emitELFSymverDirective(MCSymbol *Alias,
+                              const MCSymbol *Aliasee) override;
+
   void EmitLOHDirective(MCLOHType Kind, const MCLOHArgs &Args) override;
   void EmitLabel(MCSymbol *Symbol, SMLoc Loc = SMLoc()) override;
 
@@ -414,6 +417,15 @@ void MCAsmStreamer::ChangeSection(MCSect
   }
 }
 
+void MCAsmStreamer::emitELFSymverDirective(MCSymbol *Alias,
+                                           const MCSymbol *Aliasee) {
+  OS << ".symver ";
+  Aliasee->print(OS, MAI);
+  OS << ", ";
+  Alias->print(OS, MAI);
+  EmitEOL();
+}
+
 void MCAsmStreamer::EmitLabel(MCSymbol *Symbol, SMLoc Loc) {
   MCStreamer::EmitLabel(Symbol, Loc);
 

Modified: llvm/trunk/lib/MC/MCELFStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCELFStreamer.cpp?rev=327101&r1=327100&r2=327101&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCELFStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCELFStreamer.cpp Thu Mar  8 19:13:37 2018
@@ -337,6 +337,12 @@ void MCELFStreamer::emitELFSize(MCSymbol
   cast<MCSymbolELF>(Symbol)->setSize(Value);
 }
 
+void MCELFStreamer::emitELFSymverDirective(MCSymbol *Alias,
+                                           const MCSymbol *Aliasee) {
+  const MCExpr *Value = MCSymbolRefExpr::create(Aliasee, getContext());
+  EmitAssignment(Alias, Value);
+}
+
 void MCELFStreamer::EmitLocalCommonSymbol(MCSymbol *S, uint64_t Size,
                                           unsigned ByteAlignment) {
   auto *Symbol = cast<MCSymbolELF>(S);

Modified: llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp?rev=327101&r1=327100&r2=327101&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp Thu Mar  8 19:13:37 2018
@@ -771,9 +771,6 @@ bool ELFAsmParser::ParseDirectiveSymver(
 
   MCSymbol *Alias = getContext().getOrCreateSymbol(AliasName);
   MCSymbol *Sym = getContext().getOrCreateSymbol(Name);
-  const MCExpr *Value = MCSymbolRefExpr::create(Sym, getContext());
-
-  getStreamer().EmitAssignment(Alias, Value);
   getStreamer().emitELFSymverDirective(Alias, Sym);
   return false;
 }

Modified: llvm/trunk/lib/Object/RecordStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/RecordStreamer.cpp?rev=327101&r1=327100&r2=327101&view=diff
==============================================================================
--- llvm/trunk/lib/Object/RecordStreamer.cpp (original)
+++ llvm/trunk/lib/Object/RecordStreamer.cpp Thu Mar  8 19:13:37 2018
@@ -114,5 +114,7 @@ void RecordStreamer::EmitCommonSymbol(MC
 
 void RecordStreamer::emitELFSymverDirective(MCSymbol *Alias,
                                             const MCSymbol *Aliasee) {
+  const MCExpr *Value = MCSymbolRefExpr::create(Aliasee, getContext());
+  EmitAssignment(Alias, Value);
   SymverAliasMap[Aliasee].push_back(Alias);
 }

Modified: llvm/trunk/test/MC/ARM/comment.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/comment.s?rev=327101&r1=327100&r2=327101&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/comment.s (original)
+++ llvm/trunk/test/MC/ARM/comment.s Thu Mar  8 19:13:37 2018
@@ -34,9 +34,9 @@ far:
 @CHECK-NOT: @
 
 @CHECK-LABEL: bar:
- at CHECK: bar1 at zed = defined1
- at CHECK: bar3@@zed = defined2
- at CHECK: bar5@@@zed = defined3
+ at CHECK: .symver defined1, bar1 at zed
+ at CHECK: .symver defined2, bar3@@zed
+ at CHECK: .symver defined3, bar5@@@zed
 
 @ Make sure we did not mess up the parser state and it still lexes
 @ comments correctly by excluding the @ in normal symbols




More information about the llvm-commits mailing list