Print this page
10908 Simplify SMAP relocations with krtld

*** 2178,2196 **** --- 2178,2206 ---- 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;
*** 3032,3044 **** --- 3042,3064 ---- } 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)