summaryrefslogtreecommitdiffstats
path: root/sys/amd64
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2015-10-07 18:07:27 -0300
committerRenato Botelho <renato@netgate.com>2015-10-07 18:07:27 -0300
commit945ed01c4bae06169f63978e43029c04d4abd731 (patch)
tree5cd3ae372187bd25416aeec230f31242c3729be7 /sys/amd64
parent8aae621ec1e941b8f27411df1bace42778e61b99 (diff)
parent36b47c3278c31b909b37616c58ccf4f148a9e47c (diff)
downloadFreeBSD-src-945ed01c4bae06169f63978e43029c04d4abd731.zip
FreeBSD-src-945ed01c4bae06169f63978e43029c04d4abd731.tar.gz
Merge branch 'stable/10' into devel
Diffstat (limited to 'sys/amd64')
-rw-r--r--sys/amd64/amd64/elf_machdep.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/sys/amd64/amd64/elf_machdep.c b/sys/amd64/amd64/elf_machdep.c
index 23fa39b..f9ba30d 100644
--- a/sys/amd64/amd64/elf_machdep.c
+++ b/sys/amd64/amd64/elf_machdep.c
@@ -167,6 +167,7 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbase, const void *data,
Elf_Size rtype, symidx;
const Elf_Rel *rel;
const Elf_Rela *rela;
+ int error;
switch (type) {
case ELF_RELOC_REL:
@@ -202,29 +203,29 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbase, const void *data,
break;
case R_X86_64_64: /* S + A */
- addr = lookup(lf, symidx, 1);
+ error = lookup(lf, symidx, 1, &addr);
val = addr + addend;
- if (addr == 0)
+ if (error != 0)
return -1;
if (*where != val)
*where = val;
break;
case R_X86_64_PC32: /* S + A - P */
- addr = lookup(lf, symidx, 1);
+ error = lookup(lf, symidx, 1, &addr);
where32 = (Elf32_Addr *)where;
val32 = (Elf32_Addr)(addr + addend - (Elf_Addr)where);
- if (addr == 0)
+ if (error != 0)
return -1;
if (*where32 != val32)
*where32 = val32;
break;
case R_X86_64_32S: /* S + A sign extend */
- addr = lookup(lf, symidx, 1);
+ error = lookup(lf, symidx, 1, &addr);
val32 = (Elf32_Addr)(addr + addend);
where32 = (Elf32_Addr *)where;
- if (addr == 0)
+ if (error != 0)
return -1;
if (*where32 != val32)
*where32 = val32;
@@ -241,8 +242,8 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbase, const void *data,
case R_X86_64_GLOB_DAT: /* S */
case R_X86_64_JMP_SLOT: /* XXX need addend + offset */
- addr = lookup(lf, symidx, 1);
- if (addr == 0)
+ error = lookup(lf, symidx, 1, &addr);
+ if (error != 0)
return -1;
if (*where != addr)
*where = addr;
OpenPOWER on IntegriCloud