I'm trying to add exception handling support back in to tcl so I can trap references to non-existant variables. This is using a recent, but not just-now, cvs checkout.

I am currently getting a segfault if I enable the exception handler. Running the code through -t, I see this near the end:

3844 set_eh P16 - P16=Exception_Handler=PMC(0x9e0518)
3846 find_lex P16, -1, S18 - P16=Exception_Handler=PMC(0x9e0518), , S18="a"
4094 print "excepted\n"
excepted
4096 set P2, P5["_invoke_cc"] - P2=NULL, P5=Exception=PMC(0x9e0500),
4100 invoke P2 - P2=RetContinuation=PMC(0x9e04e8)
3850 clear_eh
3851 print "HERE?\n"
HERE?
3853 typeof S17, P16 - S17="Sub", P16=NULL


4094 is the exception handler code - so that's getting called. It's a do nothing handler, so it just invokes back to where it was going, which it does.

I don't have a short example on this one - I can try to cook one up, if you like, but it may take a while.

The PIR associated with that is:

  set_eh ignore
  find_lex lexical, -1, arg0
  clear_eh
  print "HERE?\n"
  typeof type, lexical
  if type == "PerlUndef" goto no_such_variable

Here's the crash log (OS X)

Date/Time:  2004-03-23 21:07:13 -0500
OS Version: 10.2.8 (Build 6R73)
Host:       oolong.local.

Command:    parrot
PID:        1404

Exception:  EXC_BAD_ACCESS (0x0001)
Codes:      KERN_PROTECTION_FAILURE (0x0002) at 0x00000010

Thread 0 Crashed:
 #0   0x0005c5f0 in Parrot_typeof_s_p (core_ops.c:106)
 #1   0x0010cf3c in runops_slow_core (runops_cores.c:146)
 #2   0x0000b12c in runops_int (interpreter.c:838)
 #3   0x0000b1f4 in runops_ex (interpreter.c:865)
 #4   0x0000b420 in runops (interpreter.c:941)
 #5   0x0000f134 in Parrot_runcode (embed.c:693)
 #6   0x00003e9c in main (main.c:559)
 #7   0x00002470 in _start (crt.c:267)
 #8   0x000022f0 in start

Thread 1:
 #0   0x9003e9a8 in semaphore_wait_signal_trap
 #1   0x9003e7c4 in _pthread_cond_wait
 #2   0x00199004 in queue_wait (tsq.c:319)
 #3   0x00107340 in event_thread (events.c:890)
 #4   0x90020c28 in _pthread_body

Thread 2:
 #0   0x9002568c in select
 #1   0x00106ce8 in io_thread (events.c:640)
 #2   0x90020c28 in _pthread_body

PPC Thread State:
  srr0: 0x0005c5f0 srr1: 0x0000f030                vrsave: 0x00000000
   xer: 0x00000000   lr: 0x0010cf3c  ctr: 0x0005c598   mq: 0x00000000
    r0: 0x00000040   r1: 0xbffff870   r2: 0x10000000   r3: 0x00a0bd04
    r4: 0x0097e400   r5: 0x0098fea0   r6: 0x00bb5a38   r7: 0x0098fea0
    r8: 0x0098fea0   r9: 0x00000000  r10: 0x0001e73b  r11: 0x0097e400
   r12: 0x0005c598  r13: 0x00000000  r14: 0x00000000  r15: 0x00000000
   r16: 0x00000000  r17: 0x00000000  r18: 0x00000000  r19: 0x00000000
   r20: 0x00000000  r21: 0x00000000  r22: 0x00000000  r23: 0x00000000
   r24: 0x00000000  r25: 0x00000000  r26: 0xbffffc84  r27: 0x00000014
   r28: 0x00000004  r29: 0x0097e5c4  r30: 0xbffff870  r31: 0x0010ce64


--
Will "Coke" Coleda will at coleda dot com




Reply via email to