On Wed, 2010-03-10 at 21:15 +0100, Danny Backx wrote:
> Meaning, I think, that it does indeed crash in that statement. The
> double "ldr r3, [r3]" seems odd. Even more odd is that the code in
> a/t.dll.objdump is different : it looks exactly the same except only one
> of these "ldr r3, [r3]" instructions.
> 
> Trying to figure out which one is correct, and how to debug at the
> assembler level :-(

It would appear that in this sample program, the crash is legitimate
because - yet again - an invalid pointer is read. The value of 0x16342b8
which is in r3 is not a valid pointer.

In the second debugging session below I dug deeper and fixed the value
of r3 which executing, which made the program work well.

I'll try to find the cause of this now...

        Danny

pavilion: {294} arm-mingw32ce-gdb main.exe
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show
copying"
and "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu
--target=arm-mingw32ce"...
(gdb) target remote ipaq:9999
Remote debugging using ipaq:9999
[New Thread 616578450]
Error while mapping shared library sections:
coredll.dll.0409.mui: No such file or directory.
Error while mapping shared library sections:
coredll.dll: No such file or directory.
Reading symbols from /home/danny/simple/wince/t.dll...done.
Loaded symbols for t.dll
Reading symbols from /home/danny/simple/wince/l.dll...done.
Loaded symbols for l.dll
Symbol file not found for coredll.dll.0409.mui
Symbol file not found for coredll.dll
WinMainCRTStartup (hInst=0x254a42f6, hPrevInst=0x0,
lpCmdLine=0x2211fed8, nCmdShow=5)

at /home/danny/src/cegcc/svn.sf.net/cegcc/trunk/cegcc/src/mingw/crt3.c:35
35      {
(gdb) info share
>From        To          Syms Read   Shared Object Library
0x01571000  0x01574064  Yes         t.dll
0x01581000  0x01584068  Yes         l.dll
                        No          coredll.dll.0409.mui
                        No          coredll.dll
(gdb) l
30       * This function is called from the entry point for all
programs.
31       */
32      void
33      WinMainCRTStartup (HINSTANCE hInst, HINSTANCE hPrevInst,
34                         LPWSTR lpCmdLine, int nCmdShow)
35      {
36        int nRet;
37      
38        /*
39         * Initialize floating point unit.
(gdb) l WinMain
6       
7       extern int fun(void);
8       
9       #ifdef __UNDER_CE__
10      int APIENTRY WinMain(HINSTANCE inst, HINSTANCE pi, LPWSTR cmd,
int show)
11      {
12              int x;
13              wchar_t s[32];
14      
15              localquery();
(gdb) break localquery
Breakpoint 1 at 0x15810e0: file l.c, line 17.
(gdb) c
Continuing.

Breakpoint 1, localquery () at l.c:17
17              wsprintf(s, L"localquery() -> %d", a[0]);
(gdb) n
18              MessageBoxW(0, s, L"info", 0);
(gdb) p a
$1 = {3, 4, 5, 6, 0}
(gdb) p &a
$2 = (int (*)[5]) 0x1582000
(gdb) x/32xb 0x1582000
0x1582000 <a>:  0x03    0x00    0x00    0x00    0x04    0x00    0x00
0x00
0x1582008 <a+8>:        0x05    0x00    0x00    0x00    0x06    0x00
0x00    0x00
0x1582010 <a+16>:       0x00    0x00    0x00    0x00    0x18    0x18
0x58    0x01
0x1582018 <first_atexit>:       0x60    0x00    0x12    0x00    0x64
0x00    0x12    0x00
(gdb) fin
Run till exit from #0  localquery () at l.c:18
Error while mapping shared library sections:
ole32.dll: No such file or directory.
Error while mapping shared library sections:
ossvcs.dll: No such file or directory.
Error while mapping shared library sections:
commctrl.dll: No such file or directory.
Error while mapping shared library sections:
aygshell.dll: No such file or directory.
Error while mapping shared library sections:
oleaut32.dll: No such file or directory.
Error while mapping shared library sections:
compime.dll: No such file or directory.
Error while mapping shared library sections:
shellres.dll: No such file or directory.
WinMain (inst=0x254a42f6, pi=0x0, cmd=0x2211fed8, show=5) at main.c:16
16              x = fun();
(gdb) si
0x00011794 in fun ()
(gdb) display/x $pc
1: /x $pc = 0x11794
(gdb) si
0x00011798 in fun ()
1: /x $pc = 0x11798
(gdb) display/i $pc
2: x/i $pc
0x11798 <fun+4>:        ldr     pc, [r12]
(gdb) si
fun () at t.c:6
6       {
2: x/i $pc
0x157108c <fun>:        push    {r11, lr}
1: /x $pc = 0x157108c
(gdb) 
0x01571090      6       {
2: x/i $pc
0x1571090 <fun+4>:      add     r11, sp, #4     ; 0x4
1: /x $pc = 0x1571090
(gdb) 
0x01571094      6       {
2: x/i $pc
0x1571094 <fun+8>:      sub     sp, sp, #68     ; 0x44
1: /x $pc = 0x1571094
(gdb) 
10              r = a[0];
2: x/i $pc
0x1571098 <fun+12>:     ldr     r3, [pc, #64]   ; 0x15710e0 <__fu0_a>
1: /x $pc = 0x1571098
(gdb) info reg
r0             0x1      1
r1             0x2      2
r2             0x10     16
r3             0x0      0
r4             0x254a42f6       625623798
r5             0x2      2
r6             0x11000  69632
r7             0x1ffcc74        33541236
r8             0x1ffc9e0        33540576
r9             0x2211fed8       571604696
r10            0x254a42f6       625623798
r11            0x2211fdd0       571604432
r12            0x131f0  78320
sp             0x2211fd88       0x2211fd88
lr             0x11078  69752
pc             0x1571098        0x1571098 <fun+12>
fps            0x0      0
cpsr           0x60000010       1610612752
(gdb) x/32xb 0x15710e0
0x15710e0 <__fu0_a>:    0xb8    0x42    0x63    0x01    0x00    0x30
0x57    0x01
0x15710e8 <__fu0_a+8>:  0x28    0x30    0x57    0x01    0x04    0x30
0x9f    0xe5
0x15710f0 <__atexit_first+4>:   0x00    0x00    0x93    0xe5    0x0e
0xf0    0xa0    0xe1
0x15710f8 <__atexit_first+12>:  0x04    0x20    0x57    0x01    0x92
0x01    0x00    0xea
(gdb) si
0x0157109c      10              r = a[0];
2: x/i $pc
0x157109c <fun+16>:     ldr     r3, [r3]
1: /x $pc = 0x157109c
(gdb) info reg
r0             0x1      1
r1             0x2      2
r2             0x10     16
r3             0x16342b8        23282360
r4             0x254a42f6       625623798
r5             0x2      2
r6             0x11000  69632
r7             0x1ffcc74        33541236
r8             0x1ffc9e0        33540576
r9             0x2211fed8       571604696
r10            0x254a42f6       625623798
r11            0x2211fdd0       571604432
r12            0x131f0  78320
sp             0x2211fd88       0x2211fd88
lr             0x11078  69752
pc             0x157109c        0x157109c <fun+16>
fps            0x0      0
cpsr           0x60000010       1610612752
(gdb) x/32xb 0x16342b8
0x16342b8:      Cannot access memory at address 0x16342b8
(gdb) si
Data Abort: Thread=8556c640 Proc=8034e160 'main.exe'
AKY=00010001 PC=0157109c(t.dll+0x0000109c) RA=00011078(main.exe
+0x00001078) BVA=236342b8 FSR=00000007

Program received signal SIGSEGV, Segmentation fault.
0x0157109c in fun () at t.c:10
10              r = a[0];
2: x/i $pc
0x157109c <fun+16>:     ldr     r3, [r3]
1: /x $pc = 0x157109c
(gdb) 


pavilion: {405} arm-mingw32ce-gdb main.exe
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show
copying"
and "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu
--target=arm-mingw32ce"...
(gdb) target remote ipaq:9999
Remote debugging using ipaq:9999
[New Thread -434447242]
Error while mapping shared library sections:
coredll.dll.0409.mui: No such file or directory.
Error while mapping shared library sections:
coredll.dll: No such file or directory.
Reading symbols from /home/danny/simple/wince/array/t.dll...done.
Loaded symbols for t.dll
Reading symbols from /home/danny/simple/wince/array/l.dll...done.
Loaded symbols for l.dll
Symbol file not found for coredll.dll.0409.mui
Symbol file not found for coredll.dll
WinMainCRTStartup (hInst=0xe5d68efa, hPrevInst=0x0,
lpCmdLine=0x1c11fed8, nCmdShow=5)

at /home/danny/src/cegcc/svn.sf.net/cegcc/trunk/cegcc/src/mingw/crt3.c:35
35      {
(gdb) l WinMain
6       
7       extern int fun(void);
8       
9       #ifdef __UNDER_CE__
10      int APIENTRY WinMain(HINSTANCE inst, HINSTANCE pi, LPWSTR cmd,
int show)
11      {
12              int x;
13              wchar_t s[32];
14      
15              localquery();
(gdb) break 16
Breakpoint 1 at 0x11074: file main.c, line 16.
(gdb) c
Continuing.
Error while mapping shared library sections:
ole32.dll: No such file or directory.
Error while mapping shared library sections:
ossvcs.dll: No such file or directory.
Error while mapping shared library sections:
commctrl.dll: No such file or directory.
Error while mapping shared library sections:
aygshell.dll: No such file or directory.
Error while mapping shared library sections:
oleaut32.dll: No such file or directory.
Error while mapping shared library sections:
compime.dll: No such file or directory.
Error while mapping shared library sections:
shellres.dll: No such file or directory.

Breakpoint 1, WinMain (inst=0xe5d68efa, pi=0x0, cmd=0x1c11fed8, show=5)
at main.c:16
16              x = fun();
(gdb) display/i $pc
1: x/i $pc
0x11074 <WinMain+32>:   bl      0x11794 <fun>
(gdb) si
0x00011794 in fun ()
1: x/i $pc
0x11794 <fun>:  ldr     r12, [pc, #0]   ; 0x1179c <fun+8>
(gdb) 
0x00011798 in fun ()
1: x/i $pc
0x11798 <fun+4>:        ldr     pc, [r12]
(gdb) 
fun () at t.c:6
6       {
1: x/i $pc
0x14e108c <fun>:        push    {r11, lr}
(gdb) 
0x014e1090      6       {
1: x/i $pc
0x14e1090 <fun+4>:      add     r11, sp, #4     ; 0x4
(gdb) 
0x014e1094      6       {
1: x/i $pc
0x14e1094 <fun+8>:      sub     sp, sp, #68     ; 0x44
(gdb) 
10              r = a[0];
1: x/i $pc
0x14e1098 <fun+12>:     ldr     r3, [pc, #64]   ; 0x14e10e0 <__fu0_a>
(gdb) info reg
r0             0x1      1
r1             0x2      2
r2             0x10     16
r3             0x0      0
r4             0xe5d68efa       3856043770
r5             0x2      2
r6             0x11000  69632
r7             0x1ffcc74        33541236
r8             0x1ffc9e0        33540576
r9             0x1c11fed8       470941400
r10            0xe5d68efa       3856043770
r11            0x1c11fdd0       470941136
r12            0x131f0  78320
sp             0x1c11fd88       0x1c11fd88
lr             0x11078  69752
pc             0x14e1098        0x14e1098 <fun+12>
fps            0x0      0
cpsr           0x60000010       1610612752
(gdb) x/32bx 0x14e10e0
0x14e10e0 <__fu0_a>:    0xf8    0x1f    0x4f    0x01    0x00    0x30
0x4e    0x01
0x14e10e8 <__fu0_a+8>:  0x28    0x30    0x4e    0x01    0x04    0x30
0x9f    0xe5
0x14e10f0 <__atexit_first+4>:   0x00    0x00    0x93    0xe5    0x0e
0xf0    0xa0    0xe1
0x14e10f8 <__atexit_first+12>:  0x04    0x20    0x4e    0x01    0x92
0x01    0x00    0xea
(gdb) si
0x014e109c      10              r = a[0];
1: x/i $pc
0x14e109c <fun+16>:     ldr     r3, [r3]
(gdb) l fun
1       #include <windows.h>
2       
3       extern int a[];
4       
5       int fun(void)
6       {
7               wchar_t s[32];
8               int     r;
9       
10              r = a[0];
(gdb) p &fun
$1 = (int (*)(void)) 0x14e108c <fun>
(gdb) disas &fun
Dump of assembler code for function fun:
0x014e108c <fun+0>:     push    {r11, lr}
0x014e1090 <fun+4>:     add     r11, sp, #4     ; 0x4
0x014e1094 <fun+8>:     sub     sp, sp, #68     ; 0x44
0x014e1098 <fun+12>:    ldr     r3, [pc, #64]   ; 0x14e10e0 <__fu0_a>
0x014e109c <fun+16>:    ldr     r3, [r3]
0x014e10a0 <fun+20>:    str     r3, [r11, #-8]
0x014e10a4 <fun+24>:    sub     r3, r11, #72    ; 0x48
0x014e10a8 <fun+28>:    mov     r0, r3
0x014e10ac <fun+32>:    ldr     r1, [pc, #48]   ; 0x14e10e4 <__fu0_a+4>
0x014e10b0 <fun+36>:    ldr     r2, [r11, #-8]
0x014e10b4 <fun+40>:    bl      0x14e1710 <wsprintfW>
0x014e10b8 <fun+44>:    sub     r3, r11, #72    ; 0x48
0x014e10bc <fun+48>:    mov     r0, #0  ; 0x0
0x014e10c0 <fun+52>:    mov     r1, r3
0x014e10c4 <fun+56>:    ldr     r2, [pc, #28]   ; 0x14e10e8 <__fu0_a+8>
0x014e10c8 <fun+60>:    mov     r3, #0  ; 0x0
0x014e10cc <fun+64>:    bl      0x14e171c <MessageBoxW>
0x014e10d0 <fun+68>:    ldr     r3, [r11, #-8]
0x014e10d4 <fun+72>:    mov     r0, r3
0x014e10d8 <fun+76>:    sub     sp, r11, #4     ; 0x4
0x014e10dc <fun+80>:    pop     {r11, pc}
0x014e10e0 <__fu0_a+0>: strdeq  r1, [pc, #-248] ; 0x14e0ff0
0x014e10e4 <__fu0_a+4>: cmpeq   lr, r0
0x014e10e8 <__fu0_a+8>: cmpeq   lr, r8, lsr #32
End of assembler dump.
(gdb) bt
#0  0x014e109c in fun () at t.c:10
#1  0x00011078 in WinMain (inst=0xe5d68efa, pi=0x0, cmd=0x1c11fed8,
show=5) at main.c:16
#2  0x0001103c in WinMainCRTStartup (hInst=0xe5d68efa, hPrevInst=<value
optimized out>, 
    lpCmdLine=<value optimized out>, nCmdShow=<value optimized out>)

at /home/danny/src/cegcc/svn.sf.net/cegcc/trunk/cegcc/src/mingw/crt3.c:62
(gdb) disass localquery
Dump of assembler code for function localquery:
0x014f10d4 <localquery+0>:      push    {r11, lr}
0x014f10d8 <localquery+4>:      add     r11, sp, #4     ; 0x4
0x014f10dc <localquery+8>:      sub     sp, sp, #64     ; 0x40
0x014f10e0 <localquery+12>:     ldr     r3, [pc, #52]   ; 0x14f111c
<localquery+72>
0x014f10e4 <localquery+16>:     ldr     r3, [r3]
0x014f10e8 <localquery+20>:     sub     r2, r11, #68    ; 0x44
0x014f10ec <localquery+24>:     mov     r0, r2
0x014f10f0 <localquery+28>:     ldr     r1, [pc, #40]   ; 0x14f1120
<localquery+76>
0x014f10f4 <localquery+32>:     mov     r2, r3
0x014f10f8 <localquery+36>:     bl      0x14f174c <wsprintfW>
0x014f10fc <localquery+40>:     sub     r3, r11, #68    ; 0x44
0x014f1100 <localquery+44>:     mov     r0, #0  ; 0x0
0x014f1104 <localquery+48>:     mov     r1, r3
0x014f1108 <localquery+52>:     ldr     r2, [pc, #20]   ; 0x14f1124
<localquery+80>
0x014f110c <localquery+56>:     mov     r3, #0  ; 0x0
0x014f1110 <localquery+60>:     bl      0x14f1758 <MessageBoxW>
0x014f1114 <localquery+64>:     sub     sp, r11, #4     ; 0x4
0x014f1118 <localquery+68>:     pop     {r11, pc}
0x014f111c <localquery+72>:     mrseq   r2, SPSR
0x014f1120 <localquery+76>:     mrseq   r3, SPSR
0x014f1124 <localquery+80>:     cmpeq   pc, r8, lsr #32
End of assembler dump.
(gdb) x/32xb 0x014f111c
0x14f111c <localquery+72>:      0x00    0x20    0x4f    0x01    0x00
0x30    0x4f    0x01
0x14f1124 <localquery+80>:      0x28    0x30    0x4f    0x01    0x04
0x30    0x9f    0xe5
0x14f112c <__atexit_first+4>:   0x00    0x00    0x93    0xe5    0x0e
0xf0    0xa0    0xe1
0x14f1134 <__atexit_first+12>:  0x18    0x20    0x4f    0x01    0x92
0x01    0x00    0xea
(gdb) x/32xb 0x014f2000
0x14f2000 <a>:  0x03    0x00    0x00    0x00    0x04    0x00    0x00
0x00
0x14f2008 <a+8>:        0x05    0x00    0x00    0x00    0x06    0x00
0x00    0x00
0x14f2010 <a+16>:       0x00    0x00    0x00    0x00    0x18    0x18
0x4f    0x01
0x14f2018 <first_atexit>:       0x60    0x00    0x12    0x00    0x64
0x00    0x12    0x00
(gdb) info reg
r0             0x1      1
r1             0x2      2
r2             0x10     16
r3             0x14f1ff8        21962744
r4             0xe5d68efa       3856043770
r5             0x2      2
r6             0x11000  69632
r7             0x1ffcc74        33541236
r8             0x1ffc9e0        33540576
r9             0x1c11fed8       470941400
r10            0xe5d68efa       3856043770
r11            0x1c11fdd0       470941136
r12            0x131f0  78320
sp             0x1c11fd88       0x1c11fd88
lr             0x11078  69752
pc             0x14e109c        0x14e109c <fun+16>
fps            0x0      0
cpsr           0x60000010       1610612752
(gdb) set $r3 0x14f2000
A syntax error in expression, near `0x14f2000'.
(gdb) set $r3 x14f2000
A syntax error in expression, near `x14f2000'.
(gdb) set $r3 0
A syntax error in expression, near `0'.
(gdb) set $r3=0
(gdb) info reg
r0             0x1      1
r1             0x2      2
r2             0x10     16
r3             0x0      0
r4             0xe5d68efa       3856043770
r5             0x2      2
r6             0x11000  69632
r7             0x1ffcc74        33541236
r8             0x1ffc9e0        33540576
r9             0x1c11fed8       470941400
r10            0xe5d68efa       3856043770
r11            0x1c11fdd0       470941136
r12            0x131f0  78320
sp             0x1c11fd88       0x1c11fd88
lr             0x11078  69752
pc             0x14e109c        0x14e109c <fun+16>
fps            0x0      0
cpsr           0x60000010       1610612752
(gdb) set $r3=0x14f2000
(gdb) info reg
r0             0x1      1
r1             0x2      2
r2             0x10     16
r3             0x14f2000        21962752
r4             0xe5d68efa       3856043770
r5             0x2      2
r6             0x11000  69632
r7             0x1ffcc74        33541236
r8             0x1ffc9e0        33540576
r9             0x1c11fed8       470941400
r10            0xe5d68efa       3856043770
r11            0x1c11fdd0       470941136
r12            0x131f0  78320
sp             0x1c11fd88       0x1c11fd88
lr             0x11078  69752
pc             0x14e109c        0x14e109c <fun+16>
fps            0x0      0
cpsr           0x60000010       1610612752
(gdb) si
0x014e10a0      10              r = a[0];
1: x/i $pc
0x14e10a0 <fun+20>:     str     r3, [r11, #-8]
(gdb) info reg
r0             0x1      1
r1             0x2      2
r2             0x10     16
r3             0x3      3
r4             0xe5d68efa       3856043770
r5             0x2      2
r6             0x11000  69632
r7             0x1ffcc74        33541236
r8             0x1ffc9e0        33540576
r9             0x1c11fed8       470941400
r10            0xe5d68efa       3856043770
r11            0x1c11fdd0       470941136
r12            0x131f0  78320
sp             0x1c11fd88       0x1c11fd88
lr             0x11078  69752
pc             0x14e10a0        0x14e10a0 <fun+20>
fps            0x0      0
cpsr           0x60000010       1610612752
(gdb) si
12              wsprintf(s, L"remote query -> %d", r);
1: x/i $pc
0x14e10a4 <fun+24>:     sub     r3, r11, #72    ; 0x48
(gdb) c
Continuing.

Program exited normally.
(gdb) q





-- 
Danny Backx ; danny.backx - at - scarlet.be ; http://danny.backx.info


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Cegcc-devel mailing list
Cegcc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cegcc-devel

Reply via email to