Explorar el Código

MSFT:15176668: Port remote stack walker fix

Paul Leathers hace 8 años
padre
commit
8b237f864a

+ 2 - 1
lib/Runtime/Base/LeaveScriptObject.cpp

@@ -7,7 +7,7 @@
 namespace Js
 {
     EnterScriptObject::EnterScriptObject(ScriptContext* scriptContext, ScriptEntryExitRecord* entryExitRecord,
-        void * addrOfReturnAddress, bool doCleanup, bool isCallRoot, bool hasCaller)
+        void * returnAddress, void * addrOfReturnAddress, bool doCleanup, bool isCallRoot, bool hasCaller)
     {
         Assert(scriptContext);
 
@@ -35,6 +35,7 @@ namespace Js
             false;
 
         // Initialize the entry exit record
+        entryExitRecord->returnAddrOfScriptEntryFunction = returnAddress;
         entryExitRecord->addrOfReturnAddrOfScriptEntryFunction = addrOfReturnAddress;
         entryExitRecord->hasCaller = hasCaller;
         entryExitRecord->scriptContext = scriptContext;

+ 2 - 2
lib/Runtime/Base/LeaveScriptObject.h

@@ -21,7 +21,7 @@
             Js::ScriptEntryExitRecord __entryExitRecord = {0}; \
             SAVE_FS0(); \
             Js::EnterScriptObject __enterScriptObject = Js::EnterScriptObject(__localScriptContext, &__entryExitRecord, \
-                _AddressOfReturnAddress(), doCleanup, isCallRoot, hasCaller); \
+                _ReturnAddress(), _AddressOfReturnAddress(), doCleanup, isCallRoot, hasCaller); \
             __localScriptContext->OnScriptStart(isCallRoot, isScript); \
             __enterScriptObject.VerifyEnterScript();
 
@@ -137,7 +137,7 @@ namespace Js
         JavascriptLibrary* library;  // stack pin the library.
     public:
         EnterScriptObject(ScriptContext* scriptContext, ScriptEntryExitRecord* entryExitRecord,
-            void * addrOfReturnAddress, bool doCleanup, bool isCallRoot, bool hasCaller);
+            void * returnAddress, void * addrOfReturnAddress, bool doCleanup, bool isCallRoot, bool hasCaller);
 
         void VerifyEnterScript();
 

+ 1 - 0
lib/Runtime/Base/ScriptContext.h

@@ -370,6 +370,7 @@ namespace Js
 #endif
         Js::ImplicitCallFlags savedImplicitCallFlags;
 
+        void * returnAddrOfScriptEntryFunction;
         void * addrOfReturnAddrOfScriptEntryFunction;
         void * frameIdOfScriptExitFunction; // the frameAddres in x86, the return address in amd64/arm_soc
         ScriptContext * scriptContext;