[U-Boot] [PATCH] ARM: Add .data/.rodata/.bss section starts to gd_t
Albert ARIBAUD
albert.u.boot at aribaud.net
Thu Mar 1 15:22:47 CET 2012
Hi Peter,
Le 29/02/2012 17:42, Peter Barada a écrit :
> On 02/28/2012 05:04 PM, Albert ARIBAUD wrote:
>> Hi Peter,
>>
>> Le 27/02/2012 23:00, Peter Barada a écrit :
>>> When debugging u-boot, after relocation its tedious to calculate positions
>>> of the various sections (.data, .rodata, .bss). To make it easier, add
>>> the structure "sections" to gd_t that contains the relocated start of
>>> those sections. Then the gdb command "add-symbol-file" can by used with
>>> "-s<section> <address>" that corresponds to the values in gd_t->sections.
>> NAK until I get an explanation and usage scenario for this, because I've
>> never had to do calculations on sections so far, so I want to understand
>> why it would be needed.
>>
>> Amicalement,
> Weird. Digging further its looking more like a problem with GDB...
>
> I'm using the CodeSourcery 2009q1-203 toolchain (for ARM), and
> "add-symbol-file u-boot 0x...." only relocated symbols in the .text
> segment, not .data, .rodata, and .bss sections. Looking at newer
> toolchains (CodeSourcery 2011.09-70) I see even stranger results:
>
> Current directory is /home/peter/work/logic/git/u-boot-branches/
> GNU gdb (Sourcery CodeBench Lite 2011.09-70) 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-pc-linux-gnu
> --target=arm-none-linux-gnueabi".
> For bug reporting instructions, please see:
> <https://support.codesourcery.com/GNUToolchain/>...
> Reading symbols from
> /home/peter/work/logic/git/u-boot-branches/u-boot...done.
> (gdb) info file
> Symbols from "/home/peter/work/logic/git/u-boot-branches/u-boot".
> Local exec file:
> `/home/peter/work/logic/git/u-boot-branches/u-boot', file type
> elf32-littlearm.
> Entry point: 0x80100000
> 0x80100000 - 0x80124a30 is .text
> 0x80124a30 - 0x8012d43a is .rodata
> 0x8012d43c - 0x8012d488 is .hash
> 0x8012d488 - 0x8012dee0 is .data
> 0x8012dee0 - 0x8012deec is .got.plt
> 0x8012deec - 0x8012e544 is .u_boot_cmd
> 0x8013354c - 0x8013362c is .dynsym
> 0x8012e544 - 0x8013354c is .rel.dyn
> 0x8012e544 - 0x80165388 is .bss
> (gdb)(gdb) symbol-file
> Discard symbol table from
> `/home/peter/work/logic/git/u-boot-branches/u-boot'? (y or n) y
> No symbol file now.
> (gdb) *add-symbol-file u-boot 0x8ff8a000 -readnow -s .rodata 0x8FFAEA30
> -s .data 0x8FFB7488 -s .bss 0x8FFB8544*
> add symbol table from file "u-boot" at
> .text_addr = 0x8ff8a000
> .rodata_addr = 0x8ffaea30
> .data_addr = 0x8ffb7488
> .bss_addr = 0x8ffb8544
> (y or n) y
> Reading symbols from
> /home/peter/work/logic/git/u-boot-branches/u-boot...expanding to full
> symbols...done.
> (gdb) *p&stdio_devices*
> $26 = (struct stdio_dev *(*)[3]) *0x80131c0c*
> (gdb) info sym stdio_devices
> __rel_dyn_start + 14024 in section .rel.dyn
> (gdb) info sym boards
> boards in section .data
> (gdb) p *&boards*
> $27 = (struct board_id (*)[2][2]) *0x8ffb7ec0*
> (gdb) shell nm u-boot | grep stdio_devices
> *80131c0c* B stdio_devices
> (gdb) shell nm u-boot | grep boards
> *8012dec0* d boards
> (gdb)
>
> Note that "boards" gets properly relocated whereas "stdio_devices" does
> not - apparently a lot (all?) of the .bss symbols are not properly
> relocated. Hmm, I wonder if this is caused by .rel.dyn overlaing .bss...
>
> Which version of GDB are you using on ARM that properly relocates all
> the sections after "add-symbol-file u-boot<addr>"?
I routinely use ELDK42 (4.2.2 toochain) and stcok (linaro) Ubuntu
(4.6.1). I don't remember having hit this issue -- although I am hitting
another one where breakpoints are set 4 or 8 bytes further than they
should, but the symbols themselves are ok; but I rarely use global .data
or .bss symbols, so I may have missed the issue.
Anyway, 'help add-symbol-file' says a single address applies to
consecutive sections, so until it is sorted out with the GDB people why
this does not work, my NAK still holds.
Amicalement,
--
Albert.
More information about the U-Boot
mailing list