You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The i386 code for building up the probe arguments stores the probe address in %ebx, a callee-saved register. Since it doesn't save and restore the initial value, any code that calls into it and expects %ebx to be the same value when it returns will have an issue. I found this while looking into some test failures on Mac OS X.
The i386 code for building up the probe arguments stores the probe address in
%ebx
, a callee-saved register. Since it doesn't save and restore the initial value, any code that calls into it and expects%ebx
to be the same value when it returns will have an issue. I found this while looking into some test failures on Mac OS X.Using the following D program:
I was able to track the value of
%ebx
throughout the call to node-dtrace-provider's _fire:The program then segfaults at that last instruction (
000009e4
below), which attempts to use a value calculated from%ebx
(done at000009e0
):Instead of using
%ebx
,usdt_probe_args
can use%edx
, one of the x86 scratch registers, which must be caller-saved.The text was updated successfully, but these errors were encountered: