summaryrefslogtreecommitdiffstats
path: root/usr.sbin/kldxref/kldxref.c
diff options
context:
space:
mode:
authorjake <jake@FreeBSD.org>2003-01-21 03:51:53 +0000
committerjake <jake@FreeBSD.org>2003-01-21 03:51:53 +0000
commitaf44b943190022b6e5913fa5cfcf67ee73d6384b (patch)
treef60efc6507e51a9845450c26679e39d1c97f60ae /usr.sbin/kldxref/kldxref.c
parent990294caa29532bfacf879f6d766999cab2c761c (diff)
downloadFreeBSD-src-af44b943190022b6e5913fa5cfcf67ee73d6384b.zip
FreeBSD-src-af44b943190022b6e5913fa5cfcf67ee73d6384b.tar.gz
Fix kldxref on sparc64 by allowing non-trivial relocations to be performed
on variables read out of raw kld files. Unlike other platforms the value will be in an Elf_Rela, not in the data section of the elf file. Submitted by: Hartmut Brandt <brandt@fokus.gmd.de> PR: 46730 Tested on: alpha (obrien), i386, sparc64
Diffstat (limited to 'usr.sbin/kldxref/kldxref.c')
-rw-r--r--usr.sbin/kldxref/kldxref.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/usr.sbin/kldxref/kldxref.c b/usr.sbin/kldxref/kldxref.c
index e631ecc..c3b5593 100644
--- a/usr.sbin/kldxref/kldxref.c
+++ b/usr.sbin/kldxref/kldxref.c
@@ -229,10 +229,11 @@ read_kld(char *filename, char *kldname)
check(ef_lookup_symbol(&ef, "__stop_set_" MDT_SETNAME, &sym));
finish = sym->st_value;
entries = (finish - start) / sizeof(void *);
- check(ef_seg_read_entry(&ef, start, sizeof(*p) * entries, (void**)&p));
+ check(ef_seg_read_entry_rel(&ef, start, sizeof(*p) * entries,
+ (void**)&p));
orgp = p;
while(entries--) {
- check(ef_seg_read(&ef, (Elf_Off)*p, sizeof(md), &md));
+ check(ef_seg_read_rel(&ef, (Elf_Off)*p, sizeof(md), &md));
p++;
check(ef_seg_read(&ef, (Elf_Off)md.md_cval, sizeof(cval), cval));
cval[MAXMODNAME] = '\0';
OpenPOWER on IntegriCloud