Hi developers,
I've found a bug in src/server/gdb_server.c:2005, function
gdb_log_callback(). A pointer is used without checking if it's still valid.
This is 100% when using GDB to debug a remote target:
1. start openocd to listen for incoming gdb connection
2. setup gdb so that it connects to openocd and let it continue its execution if the target is halted;
3. from another console kill the GDB process.
4. openocd will segfault in the line above.

Tested with version 0.2 but I verified that no commit touched that part after the official release. Attaching configuration file. Note that I've added both gdb-end and gdb-detach events; if I remove gdb-end (which in my case it's not what I'm looking for, btw :) Openocd shuts down cleanly.
Feel free to contact me if you need further information.
Best regards.
--
Ing. Luca Ottaviano - lottavi...@develer.com
Develer S.r.l. - http://www.develer.com/
.hardware . software .innovation
Tel.: +39 055 3986627 - ext.: 218
# Change the default telnet port...
telnet_port 4444

# Port for TCL connection.
tcl_port 6666

# GDB connects here
gdb_port 3333
gdb_memory_map enable

interface ft2232
ft2232_device_desc "Amontec JTAGkey"
ft2232_layout jtagkey
ft2232_vid_pid 0x0403 0xcff8


#use combined on interfaces or targets that can't set TRST/SRST separately
reset_config srst_only srst_pulls_trst

if { [info exists CHIPNAME] } { 
   set  _CHIPNAME $CHIPNAME    
} else {         
   set  _CHIPNAME sam7
}

if { [info exists ENDIAN] } {   
   set  _ENDIAN $ENDIAN    
} else {         
   set  _ENDIAN little
}

if { [info exists CPUTAPID ] } {
   set _CPUTAPID $CPUTAPID
} else {
   set _CPUTAPID 0x3f0f0f0f
}

jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id 
$_CPUTAPID

set _TARGETNAME [format "%s.cpu" $_CHIPNAME]
target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position 
$_TARGETNAME -variant arm7tdmi

$_TARGETNAME configure -event reset-start {
        # disable watchdog
        mww 0xfffffd44 0x00008000       
        # enable user reset
        mww 0xfffffd08 0xa5000001       
        # CKGR_MOR : enable the main oscillator
        mww 0xfffffc20 0x00000601       
        sleep 10
        # CKGR_PLLR: 96.1097 MHz
        mww 0xfffffc2c 0x00481c0e       
        sleep 10
        # PMC_MCKR : MCK = PLL / 2 ~= 48 MHz
        mww 0xfffffc30 0x00000007       
        sleep 10
        # MC_FMR: flash mode (FWS=1,FMCN=60)
        mww 0xffffff60 0x003c0100       
        sleep 10
        # reset PC
        reg pc 00000000
}

$_TARGETNAME configure -event gdb-end { echo "**EVENT: gdb-end" }

$_TARGETNAME configure -event gdb-detach { echo "**EVENT: gdb-detach" }

$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x00200000 
-work-area-size 0x4000 -work-area-backup 0

#flash bank <driver> <base> <size> <chip_width> <bus_width>
flash bank at91sam7 0 0 0 0 0

_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to