Small cleanups and fixes in preparation for fixing _GLOBAL_OFFSET_TABLE_.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116848 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2010-10-19 19:31:37 +00:00
parent 2312842de0
commit bd70118f16

View 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;