01 /*----------------------------------------------------------------*/ 02 /* trap01.c assert/abort test Keven Miller 03/17/2011 */ 03 /*----------------------------------------------------------------*/ 04 #ifdef __mpexl 05 #pragma list off 06 #endif 07 #include <stdio.h> 08 #include <stdlib.h> 09 #include <signal.h> 10 #include <assert.h> 11 #include <setjmp.h> 12 13 int test; 14 jmp_buf trpbuf; 15 16 void trapsig (int sig) 17 { 18 printf ("Trap sig %d -- do cleanup\n", sig); 19 if (test == 2) longjmp (trpbuf, 1); 20 } 21 22 int main ( int ac, char *av[]) 23 { 24 int jmpval; 25 26 printf ("---Trap01 assert(0) test.\n"); 27 printf ("Run with no parm, let assert() do abort\n"); 28 printf ("Run with parm 1, trap SIGABRT from abort()\n"); 29 printf ("Run with parm 2, trap SIGABRT, longjmp back\n"); 30 31 if (ac > 1) 32 { 33 signal (SIGABRT, &trapsig); 34 test = atoi (av [1]); 35 } 36 37 printf ("\nAssert test %d\n", test); 38 jmpval = setjmp (trpbuf); 39 if (! jmpval) 40 { 41 assert (0); 42 } 43 printf ("Return from assert (0) --Done\n"); 44 return 0; 45 } 46 /*----------------------------------------------------------------*/
Comment | MPE Session |
---|---|
Compile command Compile options Link with RL; Not XL. So we can replace abort() Run with no parm Expected output from assert() abort() calls QUIT Run with parm "1" ??where is our trapsig message?? Did we even trap?? Run with parm "2" ??No trapsig?? longjmp must have worked -- no QUIT |
Fox 11: Fox 11: Fox 11:ccxllk trap01,trap01.pub CCOPTS=-Aa -C +e +w1 SAT MAR 19 2011 6:48 AM Copyright Hewlett-Packard Co. 1984. PAGE 1 HP C/iX HP31506 A.05.19 "TRAP01" 1 0 # 1 "TRAP01.C.KEVENM" 1 0 /*----------------------------------------------------------------*/ 2 0 /* trap01.c assert/abort test Keven Miller 03/17/2011 */ 3 0 /*----------------------------------------------------------------*/ 4 0 5 0 #pragma list off Clean compile HP Link Editor/iX (HP30315A.06.17) Copyright Hewlett-Packard Co 1986 LinkEd> link from=$oldpass;rl=libc.lib.sys,libcansi.lib.sys;& >>>>>>> TO=trap01.pub;SHARE;CAP=IA,BA Clean Link VERSION C.60.02 Copyright (C) Hewlett-Packard 1987. All Rights Reserved. TRAP01.PUB.KEVENM SOM #1 @(#) HP30315 A.05.10 95/02/08 NRT0 Startup routine MAX STACK SIZE: 393216 MAX HEAP SIZE: 81920000 CAPABILITIES: BA,IA UNSAT PROC NAME: ENTRY NAME: LIBRARY SEARCH LIST: Fox 11: Fox 11: Fox 11:trap01.pub ---Trap01 assert(0) test. Run with no parm, let assert() do abort Run with parm 1, trap SIGABRT from abort() Run with parm 2, trap SIGABRT, longjmp back Assert test 0 Assertion failed: 0, file TRAP01.C.KEVENM, line 41 **** PROCESS QUIT; PARAM = 0 ABORT: TRAP01.PUB.KEVENM NM SYS a.00ab34a0 dbg_abort_trace+$24 NM PROG 6c9.00014214 _raise+$c4 Program terminated in an error state. (CIERR 976) Fox 11: Fox 11: Fox 11:showjcw CIERROR = 976 JCW = FATAL0 CJCW = FATAL0 Fox 11: Fox 11: Fox 11:trap01.pub 1 ---Trap01 assert(0) test. Run with no parm, let assert() do abort Run with parm 1, trap SIGABRT from abort() Run with parm 2, trap SIGABRT, longjmp back Assert test 1 Assertion failed: 0, file TRAP01.C.KEVENM, line 41 **** PROCESS QUIT; PARAM = 0 ABORT: TRAP01.PUB.KEVENM NM SYS a.00ab34a0 dbg_abort_trace+$24 NM PROG 6c9.0000a944 _abort+$40 Program terminated in an error state. (CIERR 976) Fox 11: Fox 11: Fox 11:showjcw CIERROR = 976 JCW = FATAL0 CJCW = FATAL0 Fox 11: Fox 11: Fox 11:trap01.pub 2 ---Trap01 assert(0) test. Run with no parm, let assert() do abort Run with parm 1, trap SIGABRT from abort() Run with parm 2, trap SIGABRT, longjmp back Assert test 2 Assertion failed: 0, file TRAP01.C.KEVENM, line 41 Fox 11: Fox 11: Fox 11:showjcw CIERROR = 0 JCW = 0 CJCW = 0 Fox 11: Fox 11: |
Comment | MPE Session |
---|---|
Note the name equivalences __assert = _assert Verify __assert calls abort Disassemble abort() Value = 32768 = FATAL0 Call _cleanup() Call _closefds() Call raise() with parm 6 = SIGABRT String "CJCW" Our JCW value FATAL0 Call PUTJCW Call QUIT with parm 0 Again, note dual names abort = _abort |
Fox 11: Fox 11:run trap01.pub;debug DEBUG/iX C.16.01 DEBUG Intrinsic at: 6c9.0000a294 ?$START$ $1 ($57) nmdebug > dc __assert+108,2 USER $1dc.a6ef4 000a6ef4 _assert+$108 e85b0aed BL abort,2 000a6ef8 _assert+$10c 08000240 OR 0,0,0 $2 ($57) nmdebug > dc abort,14 USER $1dc.9e470 0009e470 abort 6bc23fd9 STW 2,-20(0,30) 0009e474 abort+$4 37de0080 LDO 64(30),30 0009e478 abort+$8 d7e219ff ZDEPI 1,16,1,31 0009e47c abort+$c e84c1798 BL _cleanup,2 0009e480 abort+$10 67df3f9d STH 31,-50(0,30) 0009e484 abort+$14 e8401320 BL _close_fds,2 0009e488 abort+$18 08000240 OR 0,0,0 0009e48c abort+$1c e8481bcc BL _raise,2 0009e490 abort+$20 341a000c LDO 6(0),26 0009e494 abort+$24 2b601000 ADDIL $800,27,1 0009e498 abort+$28 343a09a0 LDO 1232(1),26 0009e49c abort+$2c 37d93f9d LDO -50(30),25 0009e4a0 abort+$30 e85f1d4d BL ?_exit+$1c,2 0009e4a4 abort+$34 37d83f99 LDO -52(30),24 0009e4a8 abort+$38 e85f1f45 BL ?abort+$1c,2 0009e4ac abort+$3c 0800025a OR 0,0,26 0009e4b0 abort+$40 4bc23f59 LDW -84(0,30),2 0009e4b4 abort+$44 e840c000 BV 0(2) 0009e4b8 abort+$48 37de3f81 LDO -64(30),30 0009e4bc determine_access 081a025c OR 26,0,28 $3 ($57) nmdebug > dc _abort USER $1dc.9e470 0009e470 abort 6bc23fd9 STW 2,-20(0,30) $4 ($57) nmdebug > |
01 /*----------------------------------------------------------------*/ 02 /* cabort.c Keven Miller 16 Aug 2010 */ 03 /* CCOPTS "-Aa -C +w1 +O2" */ 04 /*----------------------------------------------------------------*/ 05 #pragma list off 06 07 #define proc 08 09 #pragma intrinsic PUTJCW 10 #pragma intrinsic QUIT 11 12 proc void _abort (void) 13 { 14 short jstat; 15 unsigned short jval; 16 17 #ifdef ORG 18 19 jval = 0x8000; /* 32768 FATAL */ 20 _cleanup (); 21 _close_fds (); 22 _raise (6); 23 24 #else 25 26 _raise (6); 27 _cleanup (); 28 _close_fds (); 29 jval = 0x8000; /* 32768 FATAL */ 30 31 #endif 32 33 PUTJCW ("CJCW ", &jval, &jstat); 34 QUIT (0); 35 } 36 /*----------------------------------------------------------------*/
Comment | MPE Session |
---|---|
Create NMOBJ of our _abort Build trap01 linking in our _abort link with cao, then the RL Run with no parm assert(), then QUIT Run with parm "1" assert() !! trapsig !! Hurray !! then QUIT Run with parm "2" assert() !! trapsig !! and back to main !! |
Fox 11: Fox 11: Fox 11:setvar ccopts "-Aa +e +w1 +O2" Fox 11:ccxl cabort,cao CCOPTS=-Aa +e +w1 +O2 SAT MAR 19 2011 6:59 AM Copyright Hewlett-Packard Co. 1984. PAGE 1 HP C/iX HP31506 A.05.19 "CABORT" 1 0 # 1 "CABORT.AUTOCHNG.KEVENM" 1 0 2 0 3 0 4 0 5 0 #pragma list off Clean compile Fox 11: Fox 11: Fox 11:setvar ccopts "-Aa +e +w1" Fox 11:setvar linkobj ",cao" Fox 11:ccxllk trap01,trap01.pub CCOPTS=-Aa +e +w1 SAT MAR 19 2011 7:02 AM Copyright Hewlett-Packard Co. 1984. PAGE 1 HP C/iX HP31506 A.05.19 "TRAP01" 1 0 # 1 "TRAP01.C.KEVENM" 1 0 2 0 3 0 4 0 5 0 #pragma list off Clean compile HP Link Editor/iX (HP30315A.06.17) Copyright Hewlett-Packard Co 1986 LinkEd> link from=$oldpass,cao;rl=libc.lib.sys,libcansi.lib.sys;& >>>>>>> TO=trap01.pub;SHARE;CAP=IA,BA Clean Link VERSION C.60.02 Copyright (C) Hewlett-Packard 1987. All Rights Reserved. TRAP01.PUB.KEVENM SOM #1 @(#) HP30315 A.05.10 95/02/08 NRT0 Startup routine MAX STACK SIZE: 393216 MAX HEAP SIZE: 81920000 CAPABILITIES: BA,IA UNSAT PROC NAME: ENTRY NAME: LIBRARY SEARCH LIST: Fox 11: Fox 11: Fox 11:trap01.pub ---Trap01 assert(0) test. Run with no parm, let assert() do abort Run with parm 1, trap SIGABRT from abort() Run with parm 2, trap SIGABRT, longjmp back Assert test 0 Assertion failed: 0, file TRAP01.C.KEVENM, line 41 **** PROCESS QUIT; PARAM = 0 ABORT: TRAP01.PUB.KEVENM NM SYS a.00ab34a0 dbg_abort_trace+$24 NM PROG 315.0000a7b0 _raise+$c4 Program terminated in an error state. (CIERR 976) Fox 11: Fox 11: Fox 11:showjcw CIERROR = 976 JCW = FATAL0 CJCW = FATAL0 Fox 11: Fox 11: Fox 11:trap01.pub 1 ---Trap01 assert(0) test. Run with no parm, let assert() do abort Run with parm 1, trap SIGABRT from abort() Run with parm 2, trap SIGABRT, longjmp back Assert test 1 Assertion failed: 0, file TRAP01.C.KEVENM, line 41 Trap sig 6 -- do cleanup **** PROCESS QUIT; PARAM = 0 ABORT: TRAP01.PUB.KEVENM NM SYS a.00ab34a0 dbg_abort_trace+$24 NM PROG 315.0000a4b4 _abort+$44 Program terminated in an error state. (CIERR 976) Fox 11: Fox 11: Fox 11:showjcw CIERROR = 976 JCW = FATAL0 CJCW = FATAL0 Fox 11: Fox 11: Fox 11:trap01.pub 2 ---Trap01 assert(0) test. Run with no parm, let assert() do abort Run with parm 1, trap SIGABRT from abort() Run with parm 2, trap SIGABRT, longjmp back Assert test 2 Assertion failed: 0, file TRAP01.C.KEVENM, line 41 Trap sig 6 -- do cleanup Return from assert (0) --Done Fox 11: Fox 11: Fox 11:showjcw CIERROR = 976 JCW = 0 CJCW = 0 Fox 11: Fox 11: |
Comment | MPE Session |
---|---|
Our new _abort() Call raise() first with parm 6 = SIGABRT Then the rest of the abort routine |
Fox 11:run trap01.pub;debug DEBUG/iX C.16.01 DEBUG Intrinsic at: 315.0000a294 ?$START$ $1 ($52) nmdebug > dc _abort,15 PROG $315.a474 0000a474 _abort 6bc23fd9 STW 2,-20(0,30) 0000a478 _abort+$4 37de0080 LDO 64(30),30 0000a47c _abort+$8 e84004d8 BL _raise,2 0000a480 _abort+$c 341a000c LDO 6(0),26 0000a484 _abort+$10 e8400830 BL _cleanup,2 0000a488 _abort+$14 08000240 OR 0,0,0 0000a48c _abort+$18 e8400060 BL _close_fds,2 0000a490 _abort+$1c 08000240 OR 0,0,0 0000a494 _abort+$20 2b600000 ADDIL $0,27,1 0000a498 _abort+$24 d7e219ff ZDEPI 1,16,1,31 0000a49c _abort+$28 343a0000 LDO 0(1),26 0000a4a0 _abort+$2c 37d93f95 LDO -54(30),25 0000a4a4 _abort+$30 37d83f91 LDO -56(30),24 0000a4a8 _abort+$34 e85f1f0d BL ?_abort+$1c,2 0000a4ac _abort+$38 67df3f95 STH 31,-54(0,30) 0000a4b0 _abort+$3c e85f1f3d BL ?_abort+$3c,2 0000a4b4 _abort+$40 0800025a OR 0,0,26 0000a4b8 _abort+$44 4bc23f59 LDW -84(0,30),2 0000a4bc _abort+$48 e840c000 BV 0(2) 0000a4c0 _abort+$4c 37de3f81 LDO -64(30),30 0000a4c4 _close_fds 6bc23fd9 STW 2,-20(0,30) |