That's odd. The opimizer seems to be generating code that is hard to map
to the sources. If you continue to have issues with this, I can take a
look at a process dump which will show me a bit more context of how ESI
gets set.
What I think we have is
0006DAB7 >MOV EDX, [ESI] (8b16) ; trampoline[i]
0006DAB9 MOV EAX, EBX (89d8) ; i
0006DABB ADD EBX, 0x1 (83c3 01) ; isc__trampoline_min = i + 1
0006DABE TEST EDX, EDX (85d2) ; if trampoline[i] != NULL
and
EBX : 00000001 ; i
EDI : 00000041 ; isc__trampoline_max
ESI : 00000004 ; pCurTrampoline
ESI should point the a trampoline element, but it doesn't. It's almost as
if isc__trampoline_new is returning a null pointer, but I don't see how
this can happen.
If you decide to capture a process dump, use something like:
pdumpctl -i f host
The f option requests a full dump which will be sufficient since the trap
is not in shared code.
Since this happens on startup, it might be easier to let the debugger show
you the trapping code.