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
This commit is contained in:
Mark Johnston 2014-11-25 06:43:17 +00:00
parent 4dc3495501
commit db4ce668b2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=275011

View File

@ -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