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();
  }
  
  /*