diff options
author | markj <markj@FreeBSD.org> | 2014-11-25 06:43:17 +0000 |
---|---|---|
committer | markj <markj@FreeBSD.org> | 2014-11-25 06:43:17 +0000 |
commit | f9f6c7d3fe74511a721d7c49086c8df9d610aacc (patch) | |
tree | 79fee1dd1b8153de5011f5c310074a3a00427d06 /cddl/contrib/opensolaris/lib/libdtrace/common | |
parent | 45aaf263aa437f434aee1c67a7c3b071997e7b1b (diff) | |
download | FreeBSD-src-f9f6c7d3fe74511a721d7c49086c8df9d610aacc.zip FreeBSD-src-f9f6c7d3fe74511a721d7c49086c8df9d610aacc.tar.gz |
The module load address always needs to be included when setting the dm_*_va
fields of dt_module_t. Previously, this was only done on architectures where
kernel modules have type ET_REL; this change fixes that. As a result, symbol
name resolution in the stack() action now works properly for kernel modules
on i386.
Reported by: Shrikanth Kamath <shrikanth07@gmail.com>
Tested by: Shrikanth Kamath
Discussed with: avg
MFC after: 2 weeks
Diffstat (limited to 'cddl/contrib/opensolaris/lib/libdtrace/common')
-rw-r--r-- | cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c index e3905c1..9dd52b5 100644 --- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c +++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c @@ -1211,13 +1211,13 @@ dt_module_update(dtrace_hdl_t *dtp, struct kld_file_stat *k_stat) #if defined(__FreeBSD__) if (sh.sh_size == 0) continue; - if (is_elf_obj && (sh.sh_type == SHT_PROGBITS || - sh.sh_type == SHT_NOBITS)) { + if (sh.sh_type == SHT_PROGBITS || sh.sh_type == SHT_NOBITS) { alignmask = sh.sh_addralign - 1; mapbase += alignmask; mapbase &= ~alignmask; sh.sh_addr = mapbase; - dmp->dm_sec_offsets[elf_ndxscn(sp)] = sh.sh_addr; + if (is_elf_obj) + dmp->dm_sec_offsets[elf_ndxscn(sp)] = sh.sh_addr; mapbase += sh.sh_size; } #endif |