MPE libc abort() function fix

  1. The Problem
  2. The program trap01.c
  3. Original output
  4. abort() - disassembled
  5. abort.c
  6. New output
  7. abort() - disassembled - new

The Problem:


The program trap01.c

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 /*----------------------------------------------------------------*/

Original output

CommentMPE 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:

abort() - disassembled

CommentMPE 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 >

abort.c

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 /*----------------------------------------------------------------*/

New output

CommentMPE 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:

abort() - disassembled - New

CommentMPE 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)   

Updated [3khat16.ico]HP3000 [3khat16.ico]3kMail