diff options
| -rw-r--r-- | lld/ELF/Target.cpp | 14 | ||||
| -rw-r--r-- | lld/test/ELF/invalid/Inputs/invalid-relocation-x64.elf | bin | 0 -> 559 bytes | |||
| -rw-r--r-- | lld/test/ELF/invalid/invalid-relocation-x64.s | 31 |
3 files changed, 38 insertions, 7 deletions
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp index d50bd4e76e5..c0fcd95878d 100644 --- a/lld/ELF/Target.cpp +++ b/lld/ELF/Target.cpp @@ -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)); } } diff --git a/lld/test/ELF/invalid/Inputs/invalid-relocation-x64.elf b/lld/test/ELF/invalid/Inputs/invalid-relocation-x64.elf Binary files differnew file mode 100644 index 00000000000..25df2944614 --- /dev/null +++ b/lld/test/ELF/invalid/Inputs/invalid-relocation-x64.elf diff --git a/lld/test/ELF/invalid/invalid-relocation-x64.s b/lld/test/ELF/invalid/invalid-relocation-x64.s new file mode 100644 index 00000000000..a8c38fc05a2 --- /dev/null +++ b/lld/test/ELF/invalid/invalid-relocation-x64.s @@ -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 |

