diff options
author | jake <jake@FreeBSD.org> | 2003-01-21 03:51:53 +0000 |
---|---|---|
committer | jake <jake@FreeBSD.org> | 2003-01-21 03:51:53 +0000 |
commit | af44b943190022b6e5913fa5cfcf67ee73d6384b (patch) | |
tree | f60efc6507e51a9845450c26679e39d1c97f60ae /usr.sbin/kldxref/kldxref.c | |
parent | 990294caa29532bfacf879f6d766999cab2c761c (diff) | |
download | FreeBSD-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.c | 5 |
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'; |