Diff for /np2/i386c/ia32/cpu_mem.c between versions 1.33 and 1.34

version 1.33, 2012/01/08 19:09:40 version 1.34, 2012/02/05 22:19:47
Line 46  check_limit_upstairs(descriptor_t *sdp,  Line 46  check_limit_upstairs(descriptor_t *sdp, 
   
         len--;          len--;
         end = offset + len;          end = offset + len;
         limit = SEG_IS_32BIT(sdp) ? 0xffffffff : 0x0000ffff;  
   
         if (SEG_IS_DATA(sdp) && SEG_IS_EXPANDDOWN_DATA(sdp)) {          if (SEG_IS_DATA(sdp) && SEG_IS_EXPANDDOWN_DATA(sdp)) {
                 /* expand-down data segment */                  /* expand-down data segment */
                   limit = SEG_IS_32BIT(sdp) ? 0xffffffff : 0x0000ffff;
                 if (sdp->u.seg.limit == 0) {                  if (sdp->u.seg.limit == 0) {
                         /*                          /*
                          *   32bit       16bit                           *   32bit       16bit
Line 93  check_limit_upstairs(descriptor_t *sdp,  Line 93  check_limit_upstairs(descriptor_t *sdp, 
                 }                  }
         } else {          } else {
                 /* expand-up data or code segment */                  /* expand-up data or code segment */
                 if (sdp->u.seg.limit == limit) {                  if (sdp->u.seg.limit == 0xffffffff) {
                         /*                          /*
                          *   32bit       16bit                           *  16/32bit
                          * +-------+   +-------+ FFFFFFFFh                           * +-------+ FFFFFFFFh
                          * |       |   |       |                           * |       |
                          * |       |   +  [1]  + 0000FFFFh                           * |       |
                          * | valid |   |       |                           * | valid |
                          * |       |   +-------+ 0000FFFFh - len - 1                           * |       |
                          * |       |   | valid |                           * |       |
                          * +-------+   +-------+ 00000000h                           * +-------+ 00000000h
                          */                           */
                         if (!SEG_IS_32BIT(sdp)) {                          sdp->flag |= CPU_DESC_FLAG_WHOLEADR;
                                 if ((len > limit)               /* len check */  
                                  || (offset + len > limit)) {   /* [1] */  
                                         goto exc;  
                                 }  
                         } else {  
                                 sdp->flag |= CPU_DESC_FLAG_WHOLEADR;  
                         }  
                 } else {                  } else {
                         /*                          /*
                          *   32bit       16bit                           *  16/32bit
                          * +-------+   +-------+ FFFFFFFFh                           * +-------+ FFFFFFFFh
                          * |       |   |       |                           * |       |
                          * |       |   +.......+ 0000FFFFh                           * |       |
                          * |  [1]  |   |  [1]  |                           * |  [1]  |
                          * +.......+   +.......+ seg.limit                           * +.......+ seg.limit
                          * |       |   |       |                           * |       |
                          * +-------+   +-------+ seg.limit - len - 1                           * +-------+ seg.limit - len - 1
                          * | valid |   | valid |                           * | valid |
                          * +-------+   +-------+ 00000000h                           * +-------+ 00000000h
                          */                           */
                         if ((len > sdp->u.seg.limit)            /* len check */                          if ((len > sdp->u.seg.limit)            /* len check */
                          || (end < offset)                      /* wrap check */                           || (end < offset)                      /* wrap check */

Removed from v.1.33  
changed lines
  Added in v.1.34


RetroPC.NET-CVS <cvs@retropc.net>