diff options
author | marcel <marcel@FreeBSD.org> | 2002-10-15 05:40:07 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2002-10-15 05:40:07 +0000 |
commit | e92a3178463f8ffde179f9d77416f32fb7b6aea7 (patch) | |
tree | 62b0f9ee69593eec2bec443afbb561961105257f /sys/sys/linker.h | |
parent | 5080f0df6b88d0e04a6189469de8e98a34d8ad1a (diff) | |
download | FreeBSD-src-e92a3178463f8ffde179f9d77416f32fb7b6aea7.zip FreeBSD-src-e92a3178463f8ffde179f9d77416f32fb7b6aea7.tar.gz |
Fix kernel module loading on ia64. Cross-module function calls
were improperly relocated due to faulty logic in lookup_fdesc()
in elf_machdep.c. The symbol index (symidx) was bogusly used for
load modules other than the one the relocation applied to. This
resulted in bogus bindings and consequently runtime failures.
The fix is to use the symbol index only for the module being
relocated and to use the symbol name for look-ups in the
modules in the dependent list. As such, we need a function to
return the symbol name given the linker file and symbol index.
Diffstat (limited to 'sys/sys/linker.h')
-rw-r--r-- | sys/sys/linker.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/sys/linker.h b/sys/sys/linker.h index bd45a69..d15a387 100644 --- a/sys/sys/linker.h +++ b/sys/sys/linker.h @@ -231,6 +231,7 @@ extern int kld_debug; int elf_reloc(linker_file_t _lf, const void *_rel, int _type); Elf_Addr elf_lookup(linker_file_t, Elf_Word, int); const Elf_Sym *elf_get_sym(linker_file_t _lf, Elf_Word _symidx); +const char *elf_get_symname(linker_file_t _lf, Elf_Word _symidx); /* values for type */ #define ELF_RELOC_REL 1 |