[llvm-commits] [llvm] r148364 - in /llvm/trunk: include/llvm/MC/MCAsmBackend.h lib/MC/MCAssembler.cpp lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp

Jim Grosbach grosbach at apple.com
Tue Jan 17 16:23:57 PST 2012


Author: grosbach
Date: Tue Jan 17 18:23:57 2012
New Revision: 148364

URL: http://llvm.org/viewvc/llvm-project?rev=148364&view=rev
Log:
Move some ARM specific MCAssmebler bits into the ARMAsmBackend.

Modified:
    llvm/trunk/include/llvm/MC/MCAsmBackend.h
    llvm/trunk/lib/MC/MCAssembler.cpp
    llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp

Modified: llvm/trunk/include/llvm/MC/MCAsmBackend.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAsmBackend.h?rev=148364&r1=148363&r2=148364&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCAsmBackend.h (original)
+++ llvm/trunk/include/llvm/MC/MCAsmBackend.h Tue Jan 17 18:23:57 2012
@@ -17,12 +17,15 @@
 
 namespace llvm {
 class MCAsmLayout;
+class MCAssembler;
 class MCELFObjectTargetWriter;
 class MCFixup;
+class MCFragment;
 class MCInst;
 class MCInstFragment;
 class MCObjectWriter;
 class MCSection;
+class MCValue;
 template<typename T>
 class SmallVectorImpl;
 class raw_ostream;
@@ -87,6 +90,13 @@
   /// getFixupKindInfo - Get information on a fixup kind.
   virtual const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const;
 
+  /// processFixupValue - Target hook to adjust the literal value of a fixup
+  /// if necessary. The default does nothing.
+  virtual void processFixupValue(const MCAssembler &Asm,
+                                 const MCAsmLayout &Layout,
+                                 const MCFixup &Fixup, const MCFragment *DF,
+                                 MCValue &Target, uint64_t &Value) {}
+
   /// @}
 
   /// ApplyFixup - Apply the \arg Value for given \arg Fixup into the provided

Modified: llvm/trunk/lib/MC/MCAssembler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAssembler.cpp?rev=148364&r1=148363&r2=148364&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCAssembler.cpp (original)
+++ llvm/trunk/lib/MC/MCAssembler.cpp Tue Jan 17 18:23:57 2012
@@ -273,13 +273,10 @@
 
   Value = Target.getConstant();
 
-  bool IsThumb = false;
   if (const MCSymbolRefExpr *A = Target.getSymA()) {
     const MCSymbol &Sym = A->getSymbol().AliasedSymbol();
     if (Sym.isDefined())
       Value += Layout.getSymbolOffset(&getSymbolData(Sym));
-    if (isThumbFunc(&Sym))
-      IsThumb = true;
   }
   if (const MCSymbolRefExpr *B = Target.getSymB()) {
     const MCSymbol &Sym = B->getSymbol().AliasedSymbol();
@@ -302,12 +299,8 @@
     Value -= Offset;
   }
 
-  // ARM fixups based from a thumb function address need to have the low
-  // bit set. The actual value is always at least 16-bit aligned, so the
-  // low bit is normally clear and available for use as an ISA flag for
-  // interworking.
-  if (IsThumb)
-    Value |= 1;
+  // Let the backend adjust the fixup value if necessary.
+  Backend.processFixupValue(*this, Layout, Fixup, DF, Target, Value);
 
   return IsResolved;
 }

Modified: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp?rev=148364&r1=148363&r2=148364&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp (original)
+++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp Tue Jan 17 18:23:57 2012
@@ -22,6 +22,7 @@
 #include "llvm/MC/MCSectionMachO.h"
 #include "llvm/MC/MCAsmBackend.h"
 #include "llvm/MC/MCSubtargetInfo.h"
+#include "llvm/MC/MCValue.h"
 #include "llvm/Object/MachOFormat.h"
 #include "llvm/Support/ELF.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -101,6 +102,20 @@
     return Infos[Kind - FirstTargetFixupKind];
   }
 
+  /// processFixupValue - Target hook to process the literal value of a fixup
+  /// if necessary.
+  void processFixupValue(const MCAssembler &Asm, const MCAsmLayout &Layout,
+                         const MCFixup &Fixup, const MCFragment *DF,
+                         MCValue &Target, uint64_t &Value) {
+    // Some fixups to thumb function symbols need the low bit (thumb bit)
+    // twiddled.
+    if (const MCSymbolRefExpr *A = Target.getSymA()) {
+      const MCSymbol &Sym = A->getSymbol().AliasedSymbol();
+      if (Asm.isThumbFunc(&Sym))
+        Value |= 1;
+    }
+  }
+
   bool MayNeedRelaxation(const MCInst &Inst) const;
 
   bool fixupNeedsRelaxation(const MCFixup &Fixup,





More information about the llvm-commits mailing list