libc.so.1:
<call_user_handler+864>: mov %i1, %o1
- <call_user_handler+868>: call __sighndlr
-
- This is the same setup as for Solaris 10, see below. */
- *nframes = 3;
-
- else if (cuh_pattern == 0xd25fa7ef)
- {
- /* This matches the call_user_handler pattern in Solaris 10
- libc.so.1:
-
- <call_user_handler+988>: ldx [ %fp + 0x7ef ], %o1
- <call_user_handler+992>: call __sighndlr
-
- There are 2 cases so we look for the return address of the
- caller's caller frame in order to do more pattern matching. */
- unsigned long sah_address = *(unsigned long *)(cfa + 176 + 15*8);
-
- if (sah_address && *(unsigned int *)(sah_address - 4) == 0x92100019)
- /* We need to move up three frames:
-
- <signal handler> <-- context->cfa
- __sighndlr
- call_user_handler
- sigacthandler
- <kernel> */
- *nframes = 3;
- else
- /* The sigacthandler frame isn't present in the chain.
- We need to move up two frames:
-
- <signal handler> <-- context->cfa
- __sighndlr
- call_user_handler
- <kernel> */
- *nframes = 2;
- }
-
- else if (cuh_pattern == 0x9410001a || cuh_pattern == 0x9410001b)
- /* This matches the call_user_handler pattern in Solaris 9
- libthread.so.1:
-
- <call_user_handler+600>: mov %i2, %o2
- <call_user_handler+604>: call __sighndlr
-
- This is the same setup as for Solaris 10, see above. */
+ <call_user_handler+868>: call __sighndlr */
*nframes = 3;
return 1;
libc.so.1:
<call_user_handler+876>: mov %i1, %o1
- <call_user_handler+880>: call __sighndlr
-
- This is the same setup as for Solaris 10, see below. */
- *nframes = 3;
-
- else if (cuh_pattern == 0xd407a04c)
- {
- /* This matches the call_user_handler pattern in Solaris 10
- libc.so.1:
-
- <call_user_handler+948>: ld [ %fp + 0x4c ], %o2
- <call_user_handler+952>: call __sighndlr
-
- There are 2 cases so we look for the return address of the
- caller's caller frame in order to do more pattern matching. */
- unsigned int sah_address = *(unsigned int *)(cfa + 96 + 15*4);
-
- if (sah_address && *(unsigned int *)(sah_address - 4) == 0x92100019)
- /* We need to move up three frames:
-
- <signal handler> <-- context->cfa
- __sighndlr
- call_user_handler
- sigacthandler
- <kernel> */
- *nframes = 3;
- else
- /* The sigacthandler frame isn't present in the chain.
- We need to move up two frames:
-
- <signal handler> <-- context->cfa
- __sighndlr
- call_user_handler
- <kernel> */
- *nframes = 2;
- }
-
- else if (cuh_pattern == 0x9410001a || cuh_pattern == 0x9410001b)
- /* This matches the call_user_handler pattern in Solaris 9
- libthread.so.1:
-
- <call_user_handler+560>: mov %i2, %o2
- <call_user_handler+564>: call __sighndlr
-
- This is the same setup as for Solaris 10, see above. */
+ <call_user_handler+880>: call __sighndlr */
*nframes = 3;
return 1;