summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/krtld/kobj.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/krtld/kobj.c')
-rw-r--r--usr/src/uts/common/krtld/kobj.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/usr/src/uts/common/krtld/kobj.c b/usr/src/uts/common/krtld/kobj.c
index 32c61e5c64..4f8997adfc 100644
--- a/usr/src/uts/common/krtld/kobj.c
+++ b/usr/src/uts/common/krtld/kobj.c
@@ -2180,6 +2180,7 @@ static void
free_module_data(struct module *mp)
{
struct module_list *lp, *tmp;
+ hotinline_desc_t *hid, *next;
int ksyms_exported = 0;
lp = mp->head;
@@ -2189,6 +2190,15 @@ free_module_data(struct module *mp)
kobj_free((char *)tmp, sizeof (*tmp));
}
+ /* release hotinlines */
+ hid = mp->hi_calls;
+ while (hid != NULL) {
+ next = hid->hid_next;
+ kobj_free(hid->hid_symname, strlen(hid->hid_symname) + 1);
+ kobj_free(hid, sizeof (hotinline_desc_t));
+ hid = next;
+ }
+
rw_enter(&ksyms_lock, RW_WRITER);
if (mp->symspace) {
if (vmem_contains(ksyms_arena, mp->symspace, mp->symsize)) {
@@ -3034,8 +3044,18 @@ do_symbols(struct module *mp, Elf64_Addr bss_base)
if (sp->st_shndx == SHN_UNDEF) {
resolved = 0;
+ /*
+ * Skip over sdt probes and smap calls,
+ * they're relocated later.
+ */
if (strncmp(name, sdt_prefix, strlen(sdt_prefix)) == 0)
continue;
+#if defined(__x86)
+ if (strcmp(name, "smap_enable") == 0 ||
+ strcmp(name, "smap_disable") == 0)
+ continue;
+#endif /* defined(__x86) */
+
/*
* If it's not a weak reference and it's