[Vm-dev] Debugging Win64 Cog Spur

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Thu May 25 06:28:02 UTC 2017


Great, you reproduced exact same behavior.
The problem I have is effectively where to put the breakpoint.
I think we can believe the output of (gdb) call printCallStack()

I've tried other means:
- analyze direct usage of registers RCX & co from VMMaker
  if ever it could conflicts with WIN64 logical register assignment
  But I did not find anything
- compile with MSVC 2017
  if ever the compiler could spit different warnings and give a clue
  alas it fails very early in readImageFromFileHeapSizeStartingAt (during
checkAssumedCompactClasses)
 the failure is incomprehensible, because the debugger shows identical
contents if I print:

        *((sqInt *)(classTableFirstPage+8+(51<<3)))    140697255509608
__int64
        *((sqInt *)(specialObjectsOop+8+(7<<3)))    140697255509608
__int64

nonetheless, the debugger enters into the if and execute
        invalidCompactClassError("Array");

I'll have to debug it at assembler level, but it's driving me away from the
original problem...

2017-05-25 2:38 GMT+02:00 Eliot Miranda <eliot.miranda at gmail.com>:

> Hi Nicolas,
>
>     the VM gets quite far before some unknown problem in path name
> manipulation.  I'm drunning the debug VM under gdb via
> (gdb) run -trace=259 trunk50-64.image
> (See Cogit>>sendTrace: for a definition of the flags)
>
> and this is the output
>
> ...
> UnixFileDirectory class>pathNameDelimiter
> Array(Object)>at:
> BlockClosure>value:
> AcornFileDirectory class>isActiveDirectoryClass
> SmalltalkImage>getSystemAttribute:
> ByteString(String)>isString
> ByteString(ArrayedCollection)>size
> ByteString(ArrayedCollection)>size
> SmallInteger>=
> Array(Object)>at:
> BlockClosure>value:
> MacFileDirectory class>isActiveDirectoryClass
> MacFileDirectory class>pathNameDelimiter
> Character>=
> Array(Object)>at:
> BlockClosure>value:
> DosFileDirectory class(FileDirectory class)>isActiveDirectoryClass
> DosFileDirectory class>pathNameDelimiter
> DosFileDirectory class(FileDirectory class)>primPathNameDelimiter
> Character>=
> FilePath class>pathName:
> FilePath class>pathName:isEncoded:
>
> Alas there's no debug information to be had:
>
> (gdb) where
> #0  0x00000000000008d4 in ?? ()
> Backtrace stopped: previous frame identical to this frame (corrupt stack?)
>
> So my next step is to put a breakpoint for the selector
> #pathName:isEncoded: and step from there.
>
> (gdb) b warning
> Breakpoint 1 at 0x4015d9: file ../../spur64src/vm/gcc3x-cointerp.c, line
> 44.
> (gdb) run -breaksel pathName:isEncoded: trunk50-64.image
> The program being debugged has been started already.
> Start it from the beginning? (y or n) y
> Starting program: /cygdrive/z/oscogvm/build.win64x64/squeak.cog.spur/builddbg/vm/Squeak.exe
> -breaksel pathName:isEncoded: trunk50-64.image
> [New Thread 4080.0x5ec]
> [New Thread 4080.0xb30]
> etc...
>
> _,,,^..^,,,_
> best, Eliot
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20170525/3cd5fecb/attachment.html>


More information about the Vm-dev mailing list