Print this page
9059 Simplify SMAP relocations with krtld
Portions contributed by: John Levon <john.levon@joyent.com>

*** 2177,2195 **** --- 2177,2205 ---- 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; while (lp) { tmp = lp; lp = lp->next; 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)) { vmem_free(ksyms_arena, mp->symspace, mp->symsize); ksyms_exported = 1;
*** 3031,3043 **** --- 3041,3063 ---- } 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 * not a primary object, it's an error. * (Primary objects may take more than * one pass to resolve)