Ed,

Edward Pilatowicz wrote:
On Wed, Dec 16, 2009 at 10:46:57AM -0700, Jerry Jelinek wrote:
Ed,

I've posted an updated webrev to address your comments.

http://cr.opensolaris.org/~gjelinek/webrev.6768950/


usr/src/uts/intel/brand/sn1/sn1_brand_asm.s

- i'd think the "is 0 <= syscall <= MAX" check would have to be
  done after CHECK_FOR_NATIVE().

It is.  I added it to the CHECK_FOR_INTERPOSITION macro which is
called after the CHECK_FOR_NATIVE in the CALLBACK_PROLOGUE.

- CALC_TABLE_ADDR() a little clunky.  (it has seperate 32 and 64
  versions, it assumes the syscall number is in eax/rax, and it has a
  side effect of munging the syscall number.)  how about defining just one
  version of CALC_TABLE_ADDR() as:
---8<---
#define CALC_TABLE_ADDR(sysnum, rv)                                             
\
        GET_P_BRAND_DATA(%rsp, 1, rv)   /* get p_brand_data ptr */;             
\
        mov     SPD_HANDLER(rv), rv     /* get p_brand_data->spd_handler ptr 
*/;\
        shl     $4, sysnum              /* syscall_num * 16 */;                 
\
        add     sysnum, result          /* calc JMP table address */;           
\
        shr     $4, sysnum              /* syscall_num / 16 */
---8<---

Since we don't care about preserving the syscall number that extra
instruction has no value.  However, I'll take another shot at trying
to streamline this a bit.

Thanks,
Jerry


_______________________________________________
zones-discuss mailing list
zones-discuss@opensolaris.org

Reply via email to