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

*** 695,704 **** --- 695,705 ---- { int i; uint32_t inst; uint8_t *instp; char sym[128]; + struct modctl *modp; extern int _smap_enable_patch_count; extern int _smap_disable_patch_count; if (disable_smap != 0)
*** 728,739 **** VERIFY(instp != 0); inst = (instp[3] << 24) | (SMAP_STAC_INSTR & 0x00ffffff); hot_patch_kernel_text((caddr_t)instp, inst, 4); } ! hot_patch_kernel_text((caddr_t)smap_enable, SMAP_CLAC_INSTR, 4); ! hot_patch_kernel_text((caddr_t)smap_disable, SMAP_STAC_INSTR, 4); setcr4(getcr4() | CR4_SMAP); smap_enable(); } /* --- 729,747 ---- VERIFY(instp != 0); inst = (instp[3] << 24) | (SMAP_STAC_INSTR & 0x00ffffff); hot_patch_kernel_text((caddr_t)instp, inst, 4); } ! /* ! * Hotinline calls to smap_enable and smap_disable within ! * unix module. Hotinlines in other modules are done on ! * mod_load(). ! */ ! modp = mod_hold_by_name("unix"); ! do_hotinlines(modp->mod_mp); ! mod_release_mod(modp); ! setcr4(getcr4() | CR4_SMAP); smap_enable(); } /*