Win64 cog.spur follow-up

Previous Topic Next Topic
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
Report Content as Inappropriate

Win64 cog.spur follow-up

Nicolas Cellier
So now that longjmp works, the vm fails when returning from snapshot, somewhere during startup:

(gdb) run ../../image/trunk50-64-15711.image

Program received signal SIGSEGV, Segmentation fault.
0x00000000000008d4 in ?? ()
(gdb) call printCallStack()

          0xefaf40 M FilePath class(Behavior)>new 0x4611330: a(n) FilePath class
          0xefaf70 M FilePath class>pathName:isEncoded: 0x4611330: a(n) FilePath class
          0xefafc0 I FilePath class>pathName: 0x4611330: a(n) FilePath class
          0xefb010 I FileDirectory class>setDefaultDirectory: 0x45fac80: a(n) FileDirectory class
          0xefb058 I FileDirectory class>startUp 0x45fac80: a(n) FileDirectory class
          0xefb088 M FileDirectory class(Behavior)>startUp: 0x45fac80: a(n) FileDirectory class
          0xefb0e0 M [] in SmalltalkImage>send:toClassesNamedIn:with: 0x4653d18: a(n) SmalltalkImage
          0xefb130 I OrderedCollection>do: 0x49a81d8: a(n) OrderedCollection
          0xefb180 I SmalltalkImage>send:toClassesNamedIn:with: 0x4653d18: a(n) SmalltalkImage
          0xefb1d8 I SmalltalkImage>processStartUpList: 0x4653d18: a(n) SmalltalkImage
          0xefb230 I SmalltalkImage>snapshot:andQuit:withExitCode:embedded: 0x4653d18: a(n) SmalltalkImage
         0x52187b0 s SmalltalkImage>snapshot:andQuit:embedded:
         0x489ee20 s SmalltalkImage>snapshot:andQuit:

(gdb) i r
rax            0x8d4    2260
rbx            0x6d8018 7176216
rcx            0xefaf18 15707928
rdx            0xefaf20 15707936
rsi            0x506ae18        84323864
rdi            0x6d98f0 7182576
rbp            0xefaf40 0xefaf40
rsp            0xefaf20 0xefaf20
r8             0x3801f27        58728231
r9             0x4611330        73470768
r10            0x5029af8        84056824
r11            0x43fa9a8        71281064
r12            0xffffffff       4294967295
r13            0x10     16
r14            0x3b61540        62264640
r15            0x5654fa0        90525600
rip            0x8d4    0x8d4
eflags         0x10206  [ PF IF RF ]
cs             0x33     51
ss             0x2b     43
ds             0x2b     43
es             0x2b     43
fs             0x53     83
gs             0x2b     43

(gdb) x /8lx $rax
0x8d4:  Cannot access memory at address 0x8d4

(gdb) call shortPrintOop($r10)

0x5029af8: a(n) CompiledMethod$30 = 0

(gdb) call shortPrintOop($r11)

0x43fa9a8: a(n) ByteSymbol$31 = 0

(gdb) call printStringOf($r11)


(gdb) call longPrintOop($r10)
         0x5029af8: a(n) CompiledMethod (0x468=>0x45f8168) format 0x1d nbytes 99 hdr8 ..... hash 0xee279
 0          0x3801ee0          0x3801ee0 327688(0x50008) hasPrim nLits 8 nArgs 0 nTemps 1
 1          0x53b0ce8 #handleFailingBasicNew
 2          0x4771ba8 #insufficient object memory
 3          0x44031d8 #basicNew:
 4          0x43fdff8 #isVariable
 5          0x43f8f30 #primitiveFailed
 6          0x43ffa00 #ifTrue:
 7          0x539b810 a(n) AdditionalMethodState a(n) CompiledMethod -> 0x43fa9a8
 8          0x4955a90 a(n) ClassBinding #Behavior -> 0x4614510

(gdb) call printFrame($rbp)

          0xefaf40 M FilePath class(Behavior)>new 0x4611330: a(n) FilePath class
          0xefaf50:   rcvr/clsr:          0x4611330     =FilePath
          0xefaf48:   caller ip:          0x3820ab4=58854068
          0xefaf40:    saved fp:           0xefaf70=15708016
          0xefaf38:      method:          0x380e420     0x5025bd0: a(n) CompiledMethod
          0xefaf38: mcfrm flags:                0x0  numArgs: 0 noContext notBlock
          0xefaf30:     context:          0x41e78e0     =nil
          0xefaf28:    receiver:          0x4611330     =FilePath
          0xefaf20:        stck:          0x380e4a2     =$▒(0x701c94)
          0xefaf18:        stck:          0x4611330     =FilePath$19 = 0

(gdb) x /16lx $rsp
0xefaf20:       0x0380e4a2      0x00000000      0x04611330      0x00000000
0xefaf30:       0x041e78e0      0x00000000      0x0380e420      0x00000000
0xefaf40:       0x00efaf70      0x00000000      0x03820ab4      0x00000000
0xefaf50:       0x04611330      0x00000000      0x04611330      0x00000000

(gdb) x /11i 0x3820ab4
   0x3820ab4:   push   %r9
   0x3820ab6:   mov    0x10(%rbp),%rdx
   0x3820aba:   mov    0x18(%rbp),%rcx
   0x3820abe:   mov    $0x0,%r8
   0x3820ac5:   callq  0x3800118
   0x3820aca:   pop    %r9
   0x3820acc:   mov    $0x1,%r8
   0x3820ad3:   callq  0x3800080
   0x3820ad8:   mov    %rbp,%rsp
   0x3820adb:   pop    %rbp
   0x3820adc:   retq   $0x18

(gdb) x /20i 0x3800118
   0x3800118:   mov    (%rsp),%r10
   0x380011c:   mov    %r9,(%rsp)
   0x3800120:   push   %rcx
   0x3800121:   push   %rdx
   0x3800122:   push   %r10
   0x3800124:   callq  0x3800028
   0x3800129:   mov    %rbp,0x48(%rbx)
   0x380012d:   mov    %rsp,0x40(%rbx)
   0x3800131:   mov    0xc3140(%rbx),%rsp
   0x3800138:   sub    $0x20,%rsp
   0x380013c:   mov    %r8,%rcx
   0x380013f:   xor    %rdx,%rdx
   0x3800142:   mov    %r9,%r8
   0x3800145:   mov    $0x2,%r9
   0x380014c:   movabs $0x442a90,%rax
   0x3800156:   callq  *%rax
   0x3800158:   add    $0x20,%rsp
   0x380015c:   mov    0x40(%rbx),%rsp
   0x3800160:   mov    0x48(%rbx),%rbp
   0x3800164:   retq

(gdb) x /16i 0x442a90
   0x442a90 <ceSendsupertonumArgs>:     sub    $0x238,%rsp
   0x442a97 <ceSendsupertonumArgs+7>:   mov    %rcx,0x228(%rsp)
   0x442a9f <ceSendsupertonumArgs+15>:  mov    %rdx,0x220(%rsp)
   0x442aa7 <ceSendsupertonumArgs+23>:  mov    %r8,0x218(%rsp)
   0x442aaf <ceSendsupertonumArgs+31>:  mov    %r9,0x210(%rsp)
   0x442ab7 <ceSendsupertonumArgs+39>:  cmpq   $0x0,0x3585d9(%rip)        # 0x79b098 <cFramePointerInUse>
   0x442abf <ceSendsupertonumArgs+47>:  je     0x442b24 <ceSendsupertonumArgs+148>
   0x442ac5 <ceSendsupertonumArgs+53>:  mov    %rbp,%rax
   0x442ac8 <ceSendsupertonumArgs+56>:  mov    $0x1,%cl
   0x442aca <ceSendsupertonumArgs+58>:  mov    %rax,0x140(%rsp)
   0x442ad2 <ceSendsupertonumArgs+66>:  mov    0x140(%rsp),%rax
   0x442ada <ceSendsupertonumArgs+74>:  mov    %rax,0x138(%rsp)
   0x442ae2 <ceSendsupertonumArgs+82>:  mov    0x138(%rsp),%rax
   0x442aea <ceSendsupertonumArgs+90>:  and    $0xf,%rax
   0x442aee <ceSendsupertonumArgs+94>:  cmp    $0x0,%rax
   0x442af2 <ceSendsupertonumArgs+98>:  mov    %cl,0x127(%rsp)

(gdb) x /18i 0x3800080
   0x3800080:   mov    (%rsp),%r10
   0x3800084:   mov    %r9,(%rsp)
   0x3800088:   push   %r10
   0x380008a:   callq  0x3800028
   0x380008f:   mov    %rbp,0x48(%rbx)
   0x3800093:   mov    %rsp,0x40(%rbx)
   0x3800097:   mov    0xc3140(%rbx),%rsp
   0x380009e:   sub    $0x20,%rsp
   0x38000a2:   mov    %r8,%rcx
   0x38000a5:   xor    %rdx,%rdx
   0x38000a8:   mov    %r9,%r8
   0x38000ab:   xor    %r9,%r9
   0x38000ae:   movabs $0x442a90,%rax
   0x38000b8:   callq  *%rax
   0x38000ba:   add    $0x20,%rsp
   0x38000be:   mov    0x40(%rbx),%rsp
   0x38000c2:   mov    0x48(%rbx),%rbp
   0x38000c6:   retq

(gdb) x /5i 0x380e4a2
   0x380e4a2:   mov    $0x0,%r8
   0x380e4a9:   callq  0x381ef60
   0x380e4ae:   mov    %rbp,%rsp
   0x380e4b1:   pop    %rbp
   0x380e4b2:   retq   $0x8

I'm stuck there...