[M3devel] malloc/free from Modula-3 (more details)

Mika Nystrom mika at async.caltech.edu
Fri Apr 15 12:46:47 CEST 2011


Here is some more info.

Note that all my access to the pq library is inside a single giant lock
(I've run this code for years and years but not under CM3 and not
under AMD64_LINUX or for that matter any kind of Linux).  The locking
is not likely to be obviously wrong, but of course there could be something
subtly wrong.

In gdb the program is completely frozen:

(gdb) stepi
^C
Program received signal SIGINT, Interrupt.
0x00002ac519a9202e in ?? () from /lib/libc.so.6
(gdb) info registers
rax            0xfffffffffffffe00       -512
rbx            0x2ac519d059e0   47026030008800
rcx            0xffffffffffffffff       -1
rdx            0x2      2
rsi            0x80     128
rdi            0x2ac519d059e0   47026030008800
rbp            0x2ac63b0ef0e0   0x2ac63b0ef0e0
rsp            0x2ac63b0ef028   0x2ac63b0ef028
r8             0x2fe2620        50210336
r9             0x2ac6400008ef   47030965635311
r10            0x0      0
r11            0x302    770
r12            0x411858 4266072
r13            0x1      1
r14            0x2f5b6d0        49657552
r15            0x0      0
rip            0x2ac519a9202e   0x2ac519a9202e
eflags         0x202    [ IF ]
cs             0x33     51
ss             0x2b     43
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0
fctrl          0x37f    895
fstat          0x0      0
ftag           0xffff   65535
fiseg          0x0      0
fioff          0x0      0
foseg          0x0      0
fooff          0x0      0
fop            0x0      0
mxcsr          0x1fa0   [ PE IM DM ZM OM UM PM ]
(gdb) 

(gdb) where
#0  0x00002ac519a9202e in ?? () from /lib/libc.so.6
#1  0x00002ac519a2fb43 in ?? () from /lib/libc.so.6
#2  0x00002ac519a2caab in free () from /lib/libc.so.6
#3  0x000000000091462f in Cstdlib__free (a=Cannot access memory at address 0x2ac73b0ef0d8
) at ../src/C/Common/CstdlibC.c:26
#4  0x000000000091477d in M3toC__FreeCopiedS (s=Cannot access memory at address 0x2ac73b0ef0f8
) at ../src/C/Common/M3toC.m3:46
#5  0x00000000007884f0 in UnsafeDatabase_M3_LINE_230.1181 (L_2=Cannot access memory at address 0x2ac73b0ef118
) at ../src/UnsafeDatabase.m3:230
#6  0x000000000078881f in UnsafeDatabase__ExecM (t=Cannot access memory at address 0x2ac73b0ef148
) at ../src/UnsafeDatabase.m3:228
#7  0x0000000000788aa6 in UnsafeDatabase__TExecM (t=Cannot access memory at address 0x2ac73b0ef268
) at ../src/UnsafeDatabase.m3:258
#8  0x000000000077ad5b in DesynchronizedDB__SExec (t=Cannot access memory at address 0x2ac73b0ef328
) at ../src/DesynchronizedDB.m3:126
#9  0x000000000077c190 in DesynchronizedDB__SMExec (t=Cannot access memory at address 0x2ac73b0ef3e8
) at ../src/DesynchronizedDB.m3:293
#10 0x0000000000569367 in GCOMSOrderManager__OrderEntered (t=Cannot access memory at address 0x2ac73b0ef5a8
) at ../src/GCOMSOrderManager.m3:596
#11 0x0000000000566b95 in GCOMSOrderManager__PlaceSingleOrder (t=Cannot access memory at address 0x2ac73b0ef668
) at ../src/GCOMSOrderManager.m3:310
#12 0x000000000041ba25 in EuroDriver__OApply__PlaceOrder.1253 (price={<No data fields>}, count=Cannot access memory at address 0x2ac73b0ef7b8
) at ../src/EuroDriver.m3:1108
#13 0x000000000041d97c in EuroDriver__OApply__MainLoop.1289 () at ../src/EuroDriver.m3:1401
#14 0x00000000004197a1 in EuroDriver__OApply (cl=Cannot access memory at address 0x2ac73b0efd38
) at ../src/EuroDriver.m3:1545
#15 0x00000000009112c1 in ThreadPosix__RunThread () at ../src/thread/POSIX/ThreadPosix.m3:1174
#16 0x00002ac5199fa7b0 in ?? () from /lib/libc.so.6
#17 0x0000000000000000 in ?? ()
(gdb) disassemble  0x00002ac519a9202e
No function contains specified address.
(gdb) disassemble 0x00002ac519a2caab
Dump of assembler code for function free:
0x00002ac519a2ca40 <free+0>:    mov    0x2d7519(%rip),%rax        # 0x2ac519d03f60
0x00002ac519a2ca47 <free+7>:    push   %rbx
0x00002ac519a2ca48 <free+8>:    mov    %rdi,%r8
0x00002ac519a2ca4b <free+11>:   mov    (%rax),%rax
0x00002ac519a2ca4e <free+14>:   test   %rax,%rax
0x00002ac519a2ca51 <free+17>:   je     0x2ac519a2ca60 <free+32>
0x00002ac519a2ca53 <free+19>:   mov    0x8(%rsp),%rsi
0x00002ac519a2ca58 <free+24>:   mov    %rax,%r11
0x00002ac519a2ca5b <free+27>:   pop    %rbx
0x00002ac519a2ca5c <free+28>:   jmpq   *%r11
0x00002ac519a2ca5f <free+31>:   nop    
0x00002ac519a2ca60 <free+32>:   test   %rdi,%rdi
0x00002ac519a2ca63 <free+35>:   je     0x2ac519a2cad2 <free+146>
0x00002ac519a2ca65 <free+37>:   mov    -0x8(%rdi),%rax
0x00002ac519a2ca69 <free+41>:   lea    -0x10(%rdi),%rdx
0x00002ac519a2ca6d <free+45>:   test   $0x2,%al
0x00002ac519a2ca6f <free+47>:   jne    0x2ac519a2cad8 <free+152>
0x00002ac519a2ca71 <free+49>:   test   $0x4,%al
0x00002ac519a2ca73 <free+51>:   lea    0x2d8f66(%rip),%rbx        # 0x2ac519d059e0
0x00002ac519a2ca7a <free+58>:   je     0x2ac519a2ca86 <free+70>
0x00002ac519a2ca7c <free+60>:   and    $0xfffffffffc000000,%rdx
0x00002ac519a2ca83 <free+67>:   mov    (%rdx),%rbx
0x00002ac519a2ca86 <free+70>:   mov    $0x1,%esi
0x00002ac519a2ca8b <free+75>:   xor    %eax,%eax
0x00002ac519a2ca8d <free+77>:   cmpl   $0x0,0x2dc594(%rip)        # 0x2ac519d09028
0x00002ac519a2ca94 <free+84>:   je     0x2ac519a2caa2 <free+98>
0x00002ac519a2ca96 <free+86>:   lock cmpxchg %esi,(%rbx)
0x00002ac519a2ca9a <free+90>:   jne    0x2ac519a2fb34
0x00002ac519a2caa0 <free+96>:   jmp    0x2ac519a2caab <free+107>
0x00002ac519a2caa2 <free+98>:   cmpxchg %esi,(%rbx)
0x00002ac519a2caa5 <free+101>:  jne    0x2ac519a2fb34
0x00002ac519a2caab <free+107>:  mov    %r8,%rsi
0x00002ac519a2caae <free+110>:  mov    %rbx,%rdi
0x00002ac519a2cab1 <free+113>:  callq  0x2ac519a2c2b0
0x00002ac519a2cab6 <free+118>:  cmpl   $0x0,0x2dc56b(%rip)        # 0x2ac519d09028
0x00002ac519a2cabd <free+125>:  je     0x2ac519a2caca <free+138>
0x00002ac519a2cabf <free+127>:  lock decl (%rbx)
0x00002ac519a2cac2 <free+130>:  jne    0x2ac519a2fb4f
0x00002ac519a2cac8 <free+136>:  jmp    0x2ac519a2cad2 <free+146>
0x00002ac519a2caca <free+138>:  decl   (%rbx)
0x00002ac519a2cacc <free+140>:  jne    0x2ac519a2fb4f
0x00002ac519a2cad2 <free+146>:  pop    %rbx
0x00002ac519a2cad3 <free+147>:  retq   
0x00002ac519a2cad4 <free+148>:  nopl   0x0(%rax)
0x00002ac519a2cad8 <free+152>:  mov    0x2d97c6(%rip),%ecx        # 0x2ac519d062a4
0x00002ac519a2cade <free+158>:  test   %ecx,%ecx
0x00002ac519a2cae0 <free+160>:  jne    0x2ac519a2cb10 <free+208>
0x00002ac519a2cae2 <free+162>:  cmp    0x2d97a7(%rip),%rax        # 0x2ac519d06290
0x00002ac519a2cae9 <free+169>:  jbe    0x2ac519a2cb10 <free+208>
0x00002ac519a2caeb <free+171>:  cmp    $0x2000000,%rax
0x00002ac519a2caf1 <free+177>:  ja     0x2ac519a2cb10 <free+208>
0x00002ac519a2caf3 <free+179>:  and    $0xfffffffffffffff8,%rax
0x00002ac519a2caf7 <free+183>:  mov    %rax,0x2d9792(%rip)        # 0x2ac519d06290
0x00002ac519a2cafe <free+190>:  add    %rax,%rax
0x00002ac519a2cb01 <free+193>:  mov    %rax,0x2d9778(%rip)        # 0x2ac519d06280
0x00002ac519a2cb08 <free+200>:  nopl   0x0(%rax,%rax,1)
---Type <return> to continue, or q <return> to quit---
0x00002ac519a2cb10 <free+208>:  pop    %rbx
0x00002ac519a2cb11 <free+209>:  mov    %rdx,%rdi
0x00002ac519a2cb14 <free+212>:  jmpq   0x2ac519a2bc40
End of assembler dump.

     Mika



More information about the M3devel mailing list