Usually you see this exception when an object gets garbage collected
between the time it is allocated and it's reference is added to the
traceable object mark set. This usually results in an object having a
reference to another object that now points to the middle of another object
because the storage is reclaimed. Usually this means there is a place where
ProtectedObject is needed to anchor an object

If I have a reliable failing test case, the bad object reference is the
markObject used for the method call. I would set a break point in
newObject() and catch that object being created and use the call stack to
figure out the context of the creation and I'm usually able to figure out
what additional ProtectedObject additions are needed.

Rick.


On Sat, Jul 30, 2016 at 1:25 PM, Erich Steinböck <[email protected]
> wrote:

> I've trapped one of the spurious exceptions when starting testOOrexx,
> occurring while printing the "Searching for test containers...." dots.
>
> I'm seeing the following (the "Stack frames" are a screen copy, as I don't
> know how to export it to text).  Any ideas from you
> more-experienced-than-me debuggers?
>
> The offending instruction is the JMP almost at the very bottom, obviously
> giving the illegal address at the top of the stack frames)
>
> Stack frames:
> [image: Inline image 1]
> [image: Inline image 3]
> ...
>
> Address: MemoryObject::markObjectsMain(RexxInternalObject *)
>
> 000007FEEA50DB71  mov         rdx,qword ptr [liveMark]
> 000007FEEA50DB76  mov         rax,qword ptr [rsp+28h]
> 000007FEEA50DB7B  mov         rcx,qword ptr [rax+18h]
> 000007FEEA50DB7F  call        RexxInternalObject::isObjectMarked
> (07FEEA413E4Fh)
> 000007FEEA50DB84  movzx       eax,al
> 000007FEEA50DB87  test        eax,eax
> 000007FEEA50DB89  jne         MemoryObject::markObjectsMain+0D0h
> (07FEEA50DBA0h)
> 000007FEEA50DB8B  mov         rax,qword ptr [rsp+28h]
> 000007FEEA50DB90  mov         rdx,qword ptr [rax+18h]
> 000007FEEA50DB94  lea         rcx,[memoryObject (07FEEA773DE0h)]
> 000007FEEA50DB9B  call        MemoryObject::mark (07FEEA41A010h)
>         // Mark other referenced obj.  We can do this without checking
>         // the references flag because we only push the object on to
>         // the stack if it has references.
>         allocations++;
> 000007FEEA50DBA0  mov         rax,qword ptr [this]
> 000007FEEA50DBA5  mov         rax,qword ptr [rax+0B08h]
> 000007FEEA50DBAC  inc         rax
> 000007FEEA50DBAF  mov         rcx,qword ptr [this]
> 000007FEEA50DBB4  mov         qword ptr [rcx+0B08h],rax
>         markObject->live(liveMark);
> 000007FEEA50DBBB  mov         rax,qword ptr [rsp+28h]
> 000007FEEA50DBC0  mov         rax,qword ptr [rax]
> 000007FEEA50DBC3  mov         rdx,qword ptr [liveMark]
> 000007FEEA50DBC8  mov         rcx,qword ptr [rsp+28h]
> 000007FEEA50DBCD  call        qword ptr [rax+10h]
>     }
> 000007FEEA50DBD0  jmp         MemoryObject::markObjectsMain+7Eh
> (07FEEA50DB4Eh)
> }
> 000007FEEA50DBD5  add         rsp,30h
> 000007FEEA50DBD9  pop         rdi
> 000007FEEA50DBDA  ret
>
> 000007FEEA50DB71  mov         rdx,qword ptr [liveMark]
> 000007FEEA50DB76  mov         rax,qword ptr [rsp+28h]
> 000007FEEA50DB7B  mov         rcx,qword ptr [rax+18h]
> 000007FEEA50DB7F  call        RexxInternalObject::isObjectMarked
> (07FEEA413E4Fh)
> 000007FEEA50DB84  movzx       eax,al
> 000007FEEA50DB87  test        eax,eax
> 000007FEEA50DB89  jne         MemoryObject::markObjectsMain+0D0h
> (07FEEA50DBA0h)
> 000007FEEA50DB8B  mov         rax,qword ptr [rsp+28h]
> 000007FEEA50DB90  mov         rdx,qword ptr [rax+18h]
> 000007FEEA50DB94  lea         rcx,[memoryObject (07FEEA773DE0h)]
> 000007FEEA50DB9B  call        MemoryObject::mark (07FEEA41A010h)
>         // Mark other referenced obj.  We can do this without checking
>         // the references flag because we only push the object on to
>         // the stack if it has references.
>         allocations++;
> 000007FEEA50DBA0  mov         rax,qword ptr [this]
> 000007FEEA50DBA5  mov         rax,qword ptr [rax+0B08h]
> 000007FEEA50DBAC  inc         rax
> 000007FEEA50DBAF  mov         rcx,qword ptr [this]
> 000007FEEA50DBB4  mov         qword ptr [rcx+0B08h],rax
>         markObject->live(liveMark);
> 000007FEEA50DBBB  mov         rax,qword ptr [rsp+28h]
> 000007FEEA50DBC0  mov         rax,qword ptr [rax]
> 000007FEEA50DBC3  mov         rdx,qword ptr [liveMark]
> 000007FEEA50DBC8  mov         rcx,qword ptr [rsp+28h]
> 000007FEEA50DBCD  call        qword ptr [rax+10h]
>     }
> *000007FEEA50DBD0  jmp         MemoryObject::markObjectsMain+7Eh
> (07FEEA50DB4Eh)  *
> }
> 000007FEEA50DBD5  add         rsp,30h
> 000007FEEA50DBD9  pop         rdi
> 000007FEEA50DBDA  ret
>
>
> ------------------------------------------------------------------------------
>
> _______________________________________________
> Oorexx-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/oorexx-devel
>
>
------------------------------------------------------------------------------
_______________________________________________
Oorexx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to