|
|
| version 1.26, 2012/01/08 08:05:47 | version 1.27, 2012/01/08 08:19:22 |
|---|---|
| Line 238 cpu_stack_push_check(UINT16 s, descripto | Line 238 cpu_stack_push_check(UINT16 s, descripto |
| len--; | len--; |
| start = sp - len; | start = sp - len; |
| limit = SEG_IS_32BIT(sdp) ? 0xffffffff : 0x0000ffff; | limit = SEG_IS_32BIT(sdp) ? 0xffffffff : 0x0000ffff; |
| VERBOSE(("cpu_stack_push_check: start=0x%08x, limit=0x%08x", start, limit)); | |
| if (SEG_IS_EXPANDDOWN_DATA(sdp)) { | if (SEG_IS_EXPANDDOWN_DATA(sdp)) { |
| /* expand-down stack */ | /* expand-down stack */ |
| VERBOSE(("cpu_stack_push_check: expand-down stack")); | |
| if (!SEG_IS_32BIT(sdp)) { | if (!SEG_IS_32BIT(sdp)) { |
| if (sp > limit) { /* [*] */ | if (sp > limit) { /* [*] */ |
| goto exc; | goto exc; |
| Line 287 cpu_stack_push_check(UINT16 s, descripto | Line 285 cpu_stack_push_check(UINT16 s, descripto |
| } | } |
| } else { | } else { |
| /* expand-up stack */ | /* expand-up stack */ |
| VERBOSE(("cpu_stack_push_check: expand-up stack")); | |
| if (sdp->u.seg.limit == limit) { | if (sdp->u.seg.limit == limit) { |
| /* | /* |
| * 32bit 16bit | * 32bit 16bit |
| Line 323 cpu_stack_push_check(UINT16 s, descripto | Line 320 cpu_stack_push_check(UINT16 s, descripto |
| */ | */ |
| if ((len > sdp->u.seg.limit) /* len check */ | if ((len > sdp->u.seg.limit) /* len check */ |
| || (start > sp) /* wrap check */ | || (start > sp) /* wrap check */ |
| || (sp > sdp->u.seg.limit)) { /* [1] */ | || (sp > sdp->u.seg.limit + 1)) { /* [1] */ |
| goto exc; | goto exc; |
| } | } |
| } | } |