Small cleanups and fixes in preparation for fixing _GLOBAL_OFFSET_TABLE_.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 19 Oct 2010 19:31:37 +0000 (19:31 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 19 Oct 2010 19:31:37 +0000 (19:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116848 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/ELFObjectWriter.cpp

index adaecc0c025b2aefa787de118cf4956776b74226..b6b71be7dec05dba27ea0cea9309639771c1ce13 100644 (file)
@@ -703,9 +703,16 @@ void ELFObjectWriterImpl::RecordRelocation(const MCAssembler &Asm,
       // instead?
       case X86::reloc_signed_4byte:
       case X86::reloc_pcrel_4byte:
+      case FK_Data_4:
         switch (Modifier) {
         default:
           llvm_unreachable("Unimplemented");
+        case MCSymbolRefExpr::VK_None:
+          if (Symbol->getName() == "_GLOBAL_OFFSET_TABLE_")
+            Type = ELF::R_386_GOTPC;
+          else
+            Type = ELF::R_386_32;
+          break;
         case MCSymbolRefExpr::VK_GOT:
           Type = ELF::R_386_GOT32;
           break;
@@ -714,12 +721,6 @@ void ELFObjectWriterImpl::RecordRelocation(const MCAssembler &Asm,
           break;
         }
         break;
-      case FK_Data_4:
-        if (Symbol->getName() == "_GLOBAL_OFFSET_TABLE_")
-          Type = ELF::R_386_GOTPC;
-        else
-          Type = ELF::R_386_32;
-        break;
       case FK_Data_2: Type = ELF::R_386_16; break;
       case X86::reloc_pcrel_1byte:
       case FK_Data_1: Type = ELF::R_386_8; break;
@@ -761,11 +762,14 @@ ELFObjectWriterImpl::getSymbolIndexInSymbolTable(const MCAssembler &Asm,
 
 static bool isInSymtab(const MCAssembler &Asm, const MCSymbolData &Data,
                        bool Used) {
+  if (Used)
+    return true;
+
   const MCSymbol &Symbol = Data.getSymbol();
   if (!Asm.isSymbolLinkerVisible(Symbol) && !Symbol.isUndefined())
     return false;
 
-  if (!Used && Symbol.isTemporary())
+  if (Symbol.isTemporary())
     return false;
 
   return true;