[Lazarus] Gdb and openocd via lazarus

Justin Smyth delphian at smythconsulting.net
Tue Jun 17 13:34:16 CEST 2014


I've updated lpc13xx.pp to add the Checksum under neath
"UsageFault_interrupt"


What I'm not sure is what is the linker script. Where do I find it ?

Justin

-----Original Message-----
From: Michael Ring [mailto:mail at michael-ring.org] 
Sent: Tuesday, 17 June 2014 9:16 PM
To: delphian at smythconsulting.net
Subject: Re: [Lazarus] Gdb and openocd via lazarus

About flashing: You can remove your flashing code from openocd, you have the
load command in your gdb commandline and this does the flashing.

Those lines:

Loading section .text, size 0x7cc lma 0x0 Loading section .data, size 0x98
lma 0x7cc Start address 0x784, load size 2148 Transfer rate: 740 bytes/sec,
1074 bytes/write.


tell me that flasing was done via gdb 'load' command.


The openocd warning shows a still open issue in fpc.

The binary you built will work fine if you run it in the debugger, it will
however not work on a standalone chip not connected to a debugger because
lpc chip rom first verifies a checksum and when it is correct the boot rom
starts the app, if the checksum is wrong then the serial bootloader process
is initiated.

simple rule is that the sum of the data stored in the first 8 interrupt
vectors must be 0

This link shows the details:

http://www.lpcware.com/content/forum/lpc1788-flash-signature-generation

the important line is this one:

a) in the linker script:

   /* Calculate NXP Cortex-M3 valid user code checksum. This is 0-(sum of
first 7 entries in vector table),
    * Note that we must add 1 to each code space vector (LSB = marker for
thumb code).
    */
   __valid_user_code_checksum = 0 - (__cs3_stack + __cs3_reset + 1 +
NMI_Handler + 1 + HardFault_Handler + 1 + MemManage_Handler + 1 +
BusFault_Handler + 1 + UsageFault_Handler + 1);
Attention: these statements must be outside any output section, because
linker variables inside output sections are relative to the start of the
section.

something like this must get added to the linker script for lpc-chips.


code should be something like (but needs testing): 
__valid_user_code_checksum = 0 - (_stack_top + Startup + 1 +
NonMaskableInt_interrupt + 1  + 1 + MemoryManagement_interrupt + 1 +
BusFault_interrupt + 1 + UsageFault_interrupt + 1);

This value must the be written into the 'Checksum' vector. I always wanted
to do this a long time ago, but I never actually needed it because I still
have plenty of stm32 chips to burn and those do not need to have this trick
applied.....

   .long _stack_top
   .long Startup
   .long NonMaskableInt_interrupt
   .long 0
   .long MemoryManagement_interrupt
   .long BusFault_interrupt
   .long UsageFault_interrupt
   .long Checksum
   .long 0



Am 17.06.14 12:49, schrieb Justin Smyth:
> Thanks
>
>
> My status right now I about to move into getting it working when 
> lazarus calls GDB. I didn't know about GDB doing the flash instead
>
>
> I just wanted to make sure both gdb and openocd were talking correctly 
> and I had that stage correct. ( it seems to work except openocd 
> bitches about the checksum of 0x00000000 not matching the calculated 
> value of the file)
>
> Heres the output in question - from when open  up openocd with a 
> configuration file that I deleted the bit from Flash on wards
>
> Two questions LPC Vector can I ignore this , and the time out for gdb 
> ( I tried to add --eval-command="set remotetimeout 60" and it didn't 
> make any difference )
>
>
> C:\LazarusExtras\OpenOCD>openocd.exe -f ocd.cfg Open On-Chip Debugger 
> 0.8.0 (2014-04-28-08:42) Licensed under GNU GPL v2 For bug reports, 
> read
>          http://openocd.sourceforge.net/doc/doxygen/bugs.html
> adapter speed: 10 kHz
> adapter_nsrst_delay: 200
> Info : This adapter doesn't support configurable speed Info : STLINK 
> v2 JTAG v14 API v2 SWIM v3 VID 0x0483 PID 0x3748 Info : using stlink 
> api v2 Info : Target voltage: 3.191053 Info : lpc1343.cpu: hardware 
> has 6 breakpoints, 4 watchpoints target state: halted target halted 
> due to debug-request, current mode: Thread
> xPSR: 0x01000000 pc: 0x1fff0104 msp: 0x10000ffc
>
> -----> now I start gdb in a separate dos cmd
>
>
> C:\LazarusExtras\gdb\bin>arm-none-eabi-gdb myprogram.elf 
> --eval-command="target extended :3333"  --eval-command="monitor reset 
> halt" --eval-command="set mem in accessible-by-default off" 
> --eval-command="load"
> GNU gdb (crosstool-NG linaro-1.13.1-4.9-2014.05 - Linaro GCC 
> 4.9-2014.05)
> 7.6.1-
> 2013.10
> Copyright (C) 2013 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=i586-host_pc-mingw32msvc 
> --target=arm-none-ea bi".
> For bug reporting instructions, please see:
> <https://bugs.launchpad.net/gcc-linaro>...
> Reading symbols from C:\LazarusExtras\gdb\bin\myprogram.elf...done.
> Remote debugging using :3333
> 0x1fff0104 in ?? ()
> target state: halted
> target halted due to debug-request, current mode: Thread
> xPSR: 0x01000000 pc: 0x1fff0104 msp: 0x10000ffc Loading section .text, 
> size 0x7cc lma 0x0 Loading section .data, size 0x98 lma 0x7cc Start 
> address 0x784, load size 2148 Transfer rate: 740 bytes/sec, 1074 
> bytes/write.
> (gdb)
>
>
> Now the openocd windows comes up with
>
> Info : accepting 'gdb' connection from 3333 target state: halted 
> target halted due to debug-request, current mode: Thread
> xPSR: 0x01000000 pc: 0x1fff0104 msp: 0x10000ffc target state: halted 
> target halted due to debug-request, current mode: Thread
> xPSR: 0x01000000 pc: 0x1fff0104 msp: 0x10000ffc target state: halted 
> target halted due to breakpoint, current mode: Thread
> xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000b4
> ---> Warn : Verification will fail since checksum in image 
> ---> (0x00000000) to
> be written to flash is different from calculated vector checksum 
> (0xefffba67). <---
> ----> Warn : To remove this warning modify build tools on developer PC 
> ----> to
> inject correct LPC vector checksum. <----
> *** Warn : keep_alive() was not invoked in the 1000ms timelimit. GDB 
> alive packet not sent! (1785). Workaround: increase "set 
> remotetimeout" in GDB *** target state: halted target halted due to 
> debug-request, current mode: Thread
> xPSR: 0x01000000 pc: 0x1fff0104 msp: 0x10000ffc
>
>
>
>
>
>
> -----Original Message-----
> From: Michael Ring [mailto:mail at michael-ring.org]
> Sent: Tuesday, 17 June 2014 7:39 PM
> To: delphian at smythconsulting.net; Lazarus mailing list
> Subject: Re: [Lazarus] Gdb and openocd via lazarus
>
> TUI is a rather seldomly used option, I also saw that some linux 
> distros do not support it. If you want it you will perhaps really need 
> to build a version of gdb for yourself.
>
> Your openocd file looks fine on first glance, I would propably not do 
> the flash command manually and instead use gdb's command to do the 
> flashing, but in the end the result should be pretty much the same.
> Using gdb for flashing is perhaps a little better because you do not 
> need to change your openocd config file when you binary file changes. 
> If I find the time tonight I will see if this works, but I will not 
> promise anything ;-)
>
> So what is your status right now, can you already single step through 
> your code and does entering break main cont
>
> work ?
>
> Michael
>
> Am 16.06.14 16:03, schrieb Justin Smyth:
>> Thanks Michael
>>
>>
>> I got better results from using the GDB from the tool chain binaries 
>> from linaro.
>>
>> Is it normal for TUI not to be supported in the arm eabi version ?
>>
>> I can now start openocd8 , and start gdb and I see both of them talk 
>> to each other ( I want to see gdb connect correctly then I will move 
>> onto getting lazarus to connect once I have it working in two dos 
>> prompts on my windows vm )
>>
>> My open ocd configuration file looks like this ( does this look right ?
>> anything missing  or do I need to change anything ? )
>>
>>
>> source [find interface/stlink-v2.cfg] set CHIPSERIES lpc1300 set 
>> TRANSPORT hla_swd set CPUROMSIZE 0x8000 set CPURAMSIZE 0x2000 source 
>> [find target/lpc1343.cfg]
>>
>> init
>> reset init
>>
>> flash write_image erase unlock myprogram.elf 0 elf
>>
>> reset run
>> reset init
>>
>>
>> Kind Regards
>>
>>
>> Justin
>>
>> -----Original Message-----
>> From: Michael Ring [mailto:mail at michael-ring.org]
>> Sent: Monday, 16 June 2014 6:33 PM
>> To: Lazarus mailing list
>> Subject: Re: [Lazarus] Gdb and openocd via lazarus
>>
>> There's an excellent Page on using gdb with freepascal on the wiki:
>>
>> http://wiki.lazarus.freepascal.org/GDB_Debugger_Tips,
>>
>> when you scroll down there's a list of recommended gdb versions.
>>
>> Rebuilding gdb from source is peace of cake on linux and mac, I never 
>> really tried it on a windows machine , but this link should help:
>>
>> http://dev.zhourenjian.com/blog/2009/03/11/compiling-gdb-debugger-in-
>> w
>> indows
>> .html
>>
>> or have a look at the linaro toolchain, they also have a lot of 
>> different precompiled versions for windows, their builds:
>>
>> https://releases.linaro.org/14.05/components/toolchain/binaries
>>
>> When you start at https://releases.linaro.org/ you can see all the 
>> different versions available.
>>
>> Michael
>>
>> Am 14.06.14 17:42, schrieb Justin Smyth:
>>> Michael
>>>
>>> A few questions for you , I am back now able to proceeded with my 
>>> arm project using lazarus ( laptop has been dead 3 weeks needed a 
>>> replacement motherboard off ebay from the USA).
>>>
>>>
>>> The arm GDB I am using I got from code sorcery ( arm-none-eabi )
>>>
>>>
>>> C:\LazarusExtras\gdb\bin>arm-none-eabi-gdb.exe
>>> GNU gdb (Sourcery G++ Lite 2010.09-51) 7.2.50.20100908-cvs Copyright
>>> (C) 2010 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-mingw32 --target=arm-none-eabi".
>>> For bug reporting instructions, please see:
>>> <https://support.codesourcery.com/GNUToolchain/>.
>>>
>>>
>>>
>>> Is this the best version to use ?
>>>
>>> Could I compile the latest version of gdb from there svn ? would 
>>> that work out of the box - I've been able to compile fpc ok for arm from
svn.
>>>
>>>
>>> I just want to make sure the copy of gdb for arm I using can stop on 
>>> breakpoints etc.
>>>
>>>
>>> Justin Smyth
>>>
>>>
>>>
>>> -----Original Message-----
>>> From: Koenraad Lelong [mailto:lazarus2 at de-brouwerij.be]
>>> Sent: Friday, 30 May 2014 6:06 AM
>>> To: lazarus at lists.lazarus.freepascal.org
>>> Subject: Re: [Lazarus] Gdb and openocd via lazarus
>>>
>>> op 28-05-14 13:57, Michael Ring schreef:
>>>> Here's how I call gdb:
>>>>
>>>> arm-none-eabi-gdb hello.elf --tui --eval-command="target extended
:3333"
>>>> --eval-command="monitor reset halt" --eval-command="set mem 
>>>> inaccessible-by-default off" --eval-command="load"
>>>>
>>>>
>>>> This loads the binary, you should end up with the debugger showing 
>>>> you your source code.
>>>>
>>>> Now try stepping through the code, if all is fine then great, 
>>>> problem is in the integration of gdb.
>>>>
>>>> Stept I use:
>>>> break main
>>>> cont
>>>>
>>>> step
>>>>
>>> This all works. Tomorrow I will try to send those commands with mseide.
>>>
>>> Many thanks.
>>>
>>> Koenraad
>>>
>>>
>>> --
>>> _______________________________________________
>>> Lazarus mailing list
>>> Lazarus at lists.lazarus.freepascal.org
>>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>>>
>>>
>>>
>>> --
>>> _______________________________________________
>>> Lazarus mailing list
>>> Lazarus at lists.lazarus.freepascal.org
>>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>> --
>> _______________________________________________
>> Lazarus mailing list
>> Lazarus at lists.lazarus.freepascal.org
>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>>
>>
>>
>> --
>> _______________________________________________
>> Lazarus mailing list
>> Lazarus at lists.lazarus.freepascal.org
>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>
>







More information about the Lazarus mailing list