diff options
author | Mark Johnston <markj@FreeBSD.org> | 2024-07-10 21:21:54 +0000 |
---|---|---|
committer | Mark Johnston <markj@FreeBSD.org> | 2024-07-10 21:21:54 +0000 |
commit | 7bbcbd43c53b49360969ca82b152fd6d971e9055 (patch) | |
tree | 7a8bddf43cafebb48e72c10c3fa4cb1e59df34e1 | |
parent | f6372351da07ae101d5a22a2bb2bdb2753da2b40 (diff) | |
download | src-7bbcbd43c53b49360969ca82b152fd6d971e9055.tar.gz src-7bbcbd43c53b49360969ca82b152fd6d971e9055.zip |
libdtrace: Compute the relocation offset for all non-ET_REL objects
The use of an ifdef here most likely carries over from when the dtrace
port only worked on x86 platforms.
MFC after: 2 weeks
Sponsored by: Innovate UK
-rw-r--r-- | cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c index 6fb9b0f84769..2a0386c33124 100644 --- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c +++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c @@ -1251,19 +1251,21 @@ dt_module_update(dtrace_hdl_t *dtp, struct kld_file_stat *k_stat) * [Text][R/O data][R/W data][Dynamic][BSS][Non loadable] */ dmp->dm_text_size = dmp->dm_data_va - dmp->dm_text_va; -#if defined(__i386__) - /* - * Find the first load section and figure out the relocation - * offset for the symbols. The kernel module will not need - * relocation, but the kernel linker modules will. - */ - for (i = 0; gelf_getphdr(dmp->dm_elf, i, &ph) != NULL; i++) { - if (ph.p_type == PT_LOAD) { - dmp->dm_reloc_offset = k_stat->address - ph.p_vaddr; - break; + + if (!is_elf_obj) { + /* + * Find the first load section and figure out the relocation + * offset for the symbols. The kernel module will not need + * relocation, but the kernel linker modules will. + */ + for (i = 0; gelf_getphdr(dmp->dm_elf, i, &ph) != NULL; i++) { + if (ph.p_type == PT_LOAD) { + dmp->dm_reloc_offset = + k_stat->address - ph.p_vaddr; + break; + } } } -#endif if (dmp->dm_info.objfs_info_primary) dmp->dm_flags |= DT_DM_PRIMARY; |