Print this page
104 Bring back lx brand

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/intel/ia32/os/desctbls.c
          +++ new/usr/src/uts/intel/ia32/os/desctbls.c
↓ open down ↓ 149 lines elided ↑ open up ↑
 150  150  struct interposing_handler {
 151  151          int ih_inum;
 152  152          gate_desc_t ih_interp_desc;
 153  153          gate_desc_t ih_default_desc;
 154  154  };
 155  155  
 156  156  /*
 157  157   * The brand infrastructure interposes on two handlers, and we use one as a
 158  158   * NULL signpost.
 159  159   */
 160      -static struct interposing_handler brand_tbl[2];
      160 +static struct interposing_handler brand_tbl[3];
 161  161  
 162  162  /*
 163  163   * software prototypes for default local descriptor table
 164  164   */
 165  165  
 166  166  /*
 167  167   * Routines for loading segment descriptors in format the hardware
 168  168   * can understand.
 169  169   */
 170  170  
↓ open down ↓ 795 lines elided ↑ open up ↑
 966  966          set_gatesegd(&idt[T_GPFLT], &gptrap, KCS_SEL, SDT_SYSIGT, TRP_KPL, 0);
 967  967          set_gatesegd(&idt[T_PGFLT], &pftrap, KCS_SEL, SDT_SYSIGT, TRP_KPL, 0);
 968  968          set_gatesegd(&idt[T_EXTERRFLT], &ndperr, KCS_SEL, SDT_SYSIGT, TRP_KPL,
 969  969              0);
 970  970          set_gatesegd(&idt[T_ALIGNMENT], &achktrap, KCS_SEL, SDT_SYSIGT,
 971  971              TRP_KPL, 0);
 972  972          set_gatesegd(&idt[T_MCE], &mcetrap, KCS_SEL, SDT_SYSIGT, TRP_KPL, 0);
 973  973          set_gatesegd(&idt[T_SIMDFPE], &xmtrap, KCS_SEL, SDT_SYSIGT, TRP_KPL, 0);
 974  974  
 975  975          /*
      976 +         * install "int80" handler at, well, 0x80.
      977 +         */
      978 +        set_gatesegd(&idt0[T_INT80], &sys_int80, KCS_SEL, SDT_SYSIGT, TRP_UPL,
      979 +            0);
      980 +
      981 +        /*
 976  982           * install fast trap handler at 210.
 977  983           */
 978  984          set_gatesegd(&idt[T_FASTTRAP], &fasttrap, KCS_SEL, SDT_SYSIGT, TRP_UPL,
 979  985              0);
 980  986  
 981  987          /*
 982  988           * System call handler.
 983  989           */
 984  990  #if defined(__amd64)
 985  991          set_gatesegd(&idt[T_SYSCALLINT], &sys_syscall_int, KCS_SEL, SDT_SYSIGT,
↓ open down ↓ 4 lines elided ↑ open up ↑
 990  996              TRP_UPL, 0);
 991  997  #endif  /* __i386 */
 992  998  
 993  999          /*
 994 1000           * Install the DTrace interrupt handler for the pid provider.
 995 1001           */
 996 1002          set_gatesegd(&idt[T_DTRACE_RET], &dtrace_ret, KCS_SEL,
 997 1003              SDT_SYSIGT, TRP_UPL, 0);
 998 1004  
 999 1005          /*
1000      -         * Prepare interposing descriptor for the syscall handler
1001      -         * and cache copy of the default descriptor.
     1006 +         * Prepare interposing descriptors for the branded "int80"
     1007 +         * and syscall handlers and cache copies of the default
     1008 +         * descriptors.
1002 1009           */
1003      -        brand_tbl[0].ih_inum = T_SYSCALLINT;
1004      -        brand_tbl[0].ih_default_desc = idt0[T_SYSCALLINT];
     1010 +        brand_tbl[0].ih_inum = T_INT80;
     1011 +        brand_tbl[0].ih_default_desc = idt0[T_INT80];
     1012 +        set_gatesegd(&(brand_tbl[0].ih_interp_desc), &brand_sys_int80, KCS_SEL,
     1013 +            SDT_SYSIGT, TRP_UPL, 0);
1005 1014  
     1015 +        brand_tbl[1].ih_inum = T_SYSCALLINT;
     1016 +        brand_tbl[1].ih_default_desc = idt0[T_SYSCALLINT];
     1017 +
1006 1018  #if defined(__amd64)
1007      -        set_gatesegd(&(brand_tbl[0].ih_interp_desc), &brand_sys_syscall_int,
     1019 +        set_gatesegd(&(brand_tbl[1].ih_interp_desc), &brand_sys_syscall_int,
1008 1020              KCS_SEL, SDT_SYSIGT, TRP_UPL, 0);
1009 1021  #elif defined(__i386)
1010      -        set_gatesegd(&(brand_tbl[0].ih_interp_desc), &brand_sys_call,
     1022 +        set_gatesegd(&(brand_tbl[1].ih_interp_desc), &brand_sys_call,
1011 1023              KCS_SEL, SDT_SYSIGT, TRP_UPL, 0);
1012 1024  #endif  /* __i386 */
1013 1025  
1014      -        brand_tbl[1].ih_inum = 0;
     1026 +        brand_tbl[2].ih_inum = 0;
1015 1027  }
1016 1028  
1017 1029  #if defined(__xpv)
1018 1030  
1019 1031  static void
1020 1032  init_idt(gate_desc_t *idt)
1021 1033  {
1022 1034          init_idt_common(idt);
1023 1035  }
1024 1036  
↓ open down ↓ 365 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX