[ELF] - Do not call fatal() in Target.cpp, call error() instead.

We probably would want to avoid fatal() if we can in context of librarification,
but for me reason of that patch is to help D27900 go.

D27900 changes errors reporting to something like
error: text1
note: text2
note: text3

where hint used to provide additional information about location. In that case
I can't just call fatal() because user will not see notes after that what adds additional complication to handle.
So It is good to switch fatal() to error() where it is possible.

Also it adds testcase with broken relocation number. 
Previously we did not have any, It checks that error() instead of fatal() works fine.

Differential revision: https://reviews.llvm.org/D27973

llvm-svn: 290239
This commit is contained in:
George Rimar 2016-12-21 08:21:34 +00:00
parent 4fb6e79c65
commit dcf5b72e20
3 changed files with 38 additions and 7 deletions

View File

@ -870,7 +870,7 @@ void X86_64TargetInfo<ELFT>::relocateOne(uint8_t *Loc, uint32_t Type,
write64le(Loc, Val);
break;
default:
fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
}
}
@ -1039,7 +1039,7 @@ void PPCTargetInfo::relocateOne(uint8_t *Loc, uint32_t Type,
or32be(Loc, Val & 0x3FFFFFC);
break;
default:
fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
}
}
@ -1217,7 +1217,7 @@ void PPC64TargetInfo::relocateOne(uint8_t *Loc, uint32_t Type,
break;
}
default:
fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
}
}
@ -1468,7 +1468,7 @@ void AArch64TargetInfo::relocateOne(uint8_t *Loc, uint32_t Type,
or32AArch64Imm(Loc, Val);
break;
default:
fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
}
}
@ -1578,7 +1578,7 @@ void AMDGPUTargetInfo::relocateOne(uint8_t *Loc, uint32_t Type,
write32le(Loc, Val >> 32);
break;
default:
fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
}
}
@ -1888,7 +1888,7 @@ void ARMTargetInfo::relocateOne(uint8_t *Loc, uint32_t Type,
(Val & 0x00ff)); // imm8
break;
default:
fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
}
}
@ -2336,7 +2336,7 @@ void MipsTargetInfo<ELFT>::relocateOne(uint8_t *Loc, uint32_t Type,
applyMipsPcReloc<E, 32, 0>(Loc, Type, Val);
break;
default:
fatal(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type));
}
}

Binary file not shown.

View File

@ -0,0 +1,31 @@
## invalid-relocation-x64.elf contains relocations with invalid relocation number.
## Next yaml code was used to create initial binary. After that it
## was modified with hex-editor to replace known relocations with fake ones,
## that have 0x98 and 0x98 numbers.
!ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
OSABI: ELFOSABI_FREEBSD
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC ]
- Name: .rela.text
Type: SHT_RELA
Link: .symtab
Info: .text
Relocations:
- Offset: 0x0000000000000000
Symbol: ''
Type: R_X86_64_NONE
- Offset: 0x0000000000000000
Symbol: ''
Type: R_X86_64_NONE
# RUN: not ld.lld %p/Inputs/invalid-relocation-x64.elf -o %t2 2>&1 | FileCheck %s
# CHECK: unrecognized reloc 152
# CHECK: unrecognized reloc 153