| G'day, John! (;-)
I'm afraid I can't offer an answer (to any of the questions), but I can
provide a few crumbs...
I believe that LIB$FIND_IMAGE_SYMBOL disables ASTs itself (in an attempt to
avoid reentrancy and similar problems -- it maintains a database of currently
activated images...), so that should explain why you're seeing ASTs disabled.
I'm struck by the fact that you're seeing the thing hung in the HIB state --
I wouldn't have expected $IMGFIX to call $HIBER. However, SNS$SHR appears to
have a dependency on the ADA RTL, and I wouldn't be surprised at all if the
Ada tasking run-time support called $HIBER when there was nothing else for it
to do (i.e., when the main task and all others (or which there are probably
none here) are blocked).
I don't know how well ADARTL tollerates being dynamically activated or how
well it operates with ASTs turned off. I believe that ADARTL has a
LIB$INITIALIZE psect which would be executed during the call to $IMGFIX (if I
remember correctly), and it -could- be that this is where the call to $HIBER
is taking place. I'd recommend taking a look at the "current user stack",
once the program is hanging, and see whether it looks like the default (P1
space) stack or whether it looks like something else; I presume that the
thing is hanging in USER mode, can you tell what frames are on the stack?
(You might try linking your test program against ADARTL, and see if that
improves the situation -- doing this would cause ADARTL to be loaded with the
main image instead of later with SNS (with ASTs disabled).)
Otherwise, you'll need to take a trip through the sources for L$FIS and
$IMGFIX looking for calls to $HIBER... :-p
Webb
|
| Webb,
> but I can provide a few crumbs...
I think you've cracked it.
> (You might try linking your test program against ADARTL, and see if that
>improves the situation -- doing this would cause ADARTL to be loaded with the
>main image instead of later with SNS (with ASTs disabled).)
I'd already tried that (thinking along similar lines about tasking) with no
difference in behaviour, but your comment about LIB$INITIALIZE has pointed
me to:
LIB$INITIALIZE 0001AA00 0001AA97 00000098 ( 152.) LONG 2 NOPIC,USR,CON,REL,GBL,NOSHR,NOEXE, RD,NOWRT,NOVEC
ADA$ELAB_SNS_SHR 0001AA00 0001AA97 00000098 ( 152.) LONG 2
So, there's an ADA elaboration for the SNS module which needs to be executed
at activation time. Nothing short of linking directly with the shareable
image will resolve that. I don't think there's any way to make it work
(I even tried calling SYS$WAKE just before LIB$FIS, still no go :-(.
>Otherwise, you'll need to take a trip through the sources for L$FIS and
>$IMGFIX looking for calls to $HIBER... :-p
Already been there, predictably there are no calls to $HIBER.
>I'd recommend taking a look at the "current user stack"
Of course!, that proves it:
Process stacks
--------------
Current operating stack (USER):
0007BDA4 00000000
0007BDA8 00000000
0007BDAC 00000000
QED.
John Gillings, Sydney CSC
|