summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authortmm <tmm@FreeBSD.org>2002-12-02 18:56:30 +0000
committertmm <tmm@FreeBSD.org>2002-12-02 18:56:30 +0000
commitbcf5c2745def03a4aaf50c4922ff92b0876f603b (patch)
tree057f022ecd75e843b2aa8456ec10a9f3e67b77fa /sys
parent4a3df4315b40dd8b587485a2f6489e99b18ef593 (diff)
downloadFreeBSD-src-bcf5c2745def03a4aaf50c4922ff92b0876f603b.zip
FreeBSD-src-bcf5c2745def03a4aaf50c4922ff92b0876f603b.tar.gz
Remove a workaround for a binutils bug that was fixed in the recent
import, as it breaks the relocation kernel modules built with the new binutils. Note that this, together with the binutils import, marks a kernel module flag day on sparc64: modules built with the old binutils will not work with new kernels and vice versa. Mismatches will result in panics. Approved by: re
Diffstat (limited to 'sys')
-rw-r--r--sys/sparc64/sparc64/elf_machdep.c23
1 files changed, 4 insertions, 19 deletions
diff --git a/sys/sparc64/sparc64/elf_machdep.c b/sys/sparc64/sparc64/elf_machdep.c
index e4860c8..592be48 100644
--- a/sys/sparc64/sparc64/elf_machdep.c
+++ b/sys/sparc64/sparc64/elf_machdep.c
@@ -240,7 +240,6 @@ int
elf_reloc(linker_file_t lf, const void *data, int type)
{
const Elf_Rela *rela;
- const Elf_Sym *sym;
Elf_Addr relocbase;
Elf_Half *where32;
Elf_Addr *where;
@@ -272,24 +271,10 @@ elf_reloc(linker_file_t lf, const void *data, int type)
value = rela->r_addend;
if (RELOC_RESOLVE_SYMBOL(rtype)) {
- /*
- * Work around what appears to be confusion between binutils
- * and the v9 ABI. LO10 and HI22 relocations are listed as
- * S + A, but for STB_LOCAL symbols it seems that the value
- * in the Elf_Sym refered to by the symbol index is wrong,
- * instead the value is in the addend field of the Elf_Rela
- * record. So if the symbol is local don't look it up, just
- * use the addend as its value and add in the relocbase.
- */
- sym = elf_get_sym(lf, symidx);
- if (ELF_ST_BIND(sym->st_info) == STB_LOCAL)
- value += relocbase;
- else {
- addr = elf_lookup(lf, symidx, 1);
- if (addr == 0)
- return (-1);
- value += addr;
- }
+ addr = elf_lookup(lf, symidx, 1);
+ if (addr == 0)
+ return (-1);
+ value += addr;
}
if (RELOC_PC_RELATIVE(rtype))
OpenPOWER on IntegriCloud