All of lore.kernel.org
 help / color / mirror / Atom feed
From: slash.tmp@free.fr (Mason)
To: linux-arm-kernel@lists.infradead.org
Subject: arch/arm/kernel/setup.c does not compile at -O0
Date: Thu, 30 Jul 2015 16:54:57 +0200	[thread overview]
Message-ID: <55BA3AC1.905@free.fr> (raw)
In-Reply-To: <55BA2D9D.1070402@free.fr>

On 30/07/2015 15:58, Mason wrote:

> On 30/07/2015 15:14, Robin Murphy wrote:
> 
>> On 30/07/15 13:53, Mason wrote:
>>
>>> Any idea how I can get DS-5 to properly handle local variables?
>>
>> I carry a patch locally reverting 2062afb4f804 - at least on arm64, the 
>> debugger manages to resolve optimised locals considerably better without 
>> the -fno-var-tracking-assignments option. The Kconfig "Generate dwarf4 
>> debug info" option is a good idea, and "Generate readable assembly code" 
>> sometimes helps a bit too.
> 
> I reverted 2062afb4f804 (I'm using 4.9.3 so I think it's safe)
> 
> AFAICT, config DEBUG_INFO_DWARF4 isn't available in 3.14
> (I think bfaf2dd3509b was included in 3.16)
> 
> But the problem seems to be on a higher level. My debugger
> just doesn't see ANY local variable whatsoever.
> 
> For example, if I break in serial8250_probe, step past the
> initializations, then the Eclipse "Variables" tab states
> Locals: 0 variables (as it does everywhere, mind you).
> 
> If I try to print from the "Commands" tab:
> 
> print p
> ERROR(EXP8): Could not find the symbol "p"
> print irqflag
> ERROR(EXP8): Could not find the symbol "irqflag"
> 
> I'm doing wrong something fundamental.
> 
> This is my work flow:
> 
> Start the system, interrupt it in Uboot
> Connect the DS-5 probe
> Set a HW breakpoint at the address of start_kernel
> Let Uboot load the kernel
> When the breakpoint is hit, load the symbols with:
>   add-symbol-file /opt/linux-3.14/vmlinux
> 
> => Is vmlinux supposed to contain the debug info for the
> local variables? (I mean 'automatic' variables, in the
> C sense.)

I went all-in, and set

KBUILD_CFLAGS	+= -g3

in the top-level Makefile.

Still no local variables shown.


http://eli.thegreenplace.net/2011/02/07/how-debuggers-work-part-3-debugging-information/

$ arm-linux-gnueabihf-objdump -x vmlinux | grep "\.debug"
 25 .debug_line    0041075d  00000000  00000000  003679d3  2**0
 26 .debug_info    01a54a2f  00000000  00000000  00778130  2**0
 27 .debug_abbrev  000edef8  00000000  00000000  021ccb5f  2**0
 28 .debug_aranges 00007508  00000000  00000000  022baa58  2**3
 29 .debug_ranges  000ab8c8  00000000  00000000  022c1f60  2**3
 30 .debug_frame   000a5864  00000000  00000000  0236d828  2**2
 31 .debug_str     001aa5cd  00000000  00000000  0241308c  2**0
 32 .debug_macro   0041d5d4  00000000  00000000  025bd659  2**0
 33 .debug_loc     00427524  00000000  00000000  029dac2d  2**0

$ arm-linux-gnueabihf-objdump --dwarf=info vmlinux | wc
12972723 60571026 650075352

Seems there is a lot of information available, but the debugger
doesn't seem to be able to make use of it...

To take my serial8250_probe example:

static int serial8250_probe(struct platform_device *dev)
{
	struct plat_serial8250_port *p = dev_get_platdata(&dev->dev);
	struct uart_8250_port uart;
	int ret, i, irqflag = 0;

 <1><101ea81>: Abbrev Number: 76 (DW_TAG_subprogram)
    <101ea82>   DW_AT_name        : (indirect string, offset: 0x152f7a): serial8250_probe       
    <101ea86>   DW_AT_decl_file   : 1   
    <101ea87>   DW_AT_decl_line   : 3089        
    <101ea89>   DW_AT_prototyped  : 1   
    <101ea89>   DW_AT_type        : <0x100ec7a> 
    <101ea8d>   DW_AT_low_pc      : 0xc018e0f4  
    <101ea91>   DW_AT_high_pc     : 0x228       
    <101ea95>   DW_AT_frame_base  : 1 byte block: 9c    (DW_OP_call_frame_cfa)
    <101ea97>   DW_AT_GNU_all_tail_call_sites: 1        
    <101ea97>   DW_AT_sibling     : <0x101eb39> 
 <2><101ea9b>: Abbrev Number: 77 (DW_TAG_formal_parameter)
    <101ea9c>   DW_AT_name        : dev 
    <101eaa0>   DW_AT_decl_file   : 1   
    <101eaa1>   DW_AT_decl_line   : 3089        
    <101eaa3>   DW_AT_type        : <0x10127be> 
    <101eaa7>   DW_AT_location    : 3 byte block: 91 e4 7d      (DW_OP_fbreg: -284)
 <2><101eaab>: Abbrev Number: 88 (DW_TAG_variable)
    <101eaac>   DW_AT_name        : p   
    <101eaae>   DW_AT_decl_file   : 1   
    <101eaaf>   DW_AT_decl_line   : 3091        
    <101eab1>   DW_AT_type        : <0x101eb39> 
    <101eab5>   DW_AT_location    : 2 byte block: 91 6c         (DW_OP_fbreg: -20)
 <2><101eab8>: Abbrev Number: 89 (DW_TAG_variable)
    <101eab9>   DW_AT_name        : (indirect string, offset: 0x150dd5): uart   
    <101eabd>   DW_AT_decl_file   : 1   
    <101eabe>   DW_AT_decl_line   : 3092        
    <101eac0>   DW_AT_type        : <0x101846a> 
    <101eac4>   DW_AT_location    : 3 byte block: 91 e8 7d      (DW_OP_fbreg: -280)
 <2><101eac8>: Abbrev Number: 88 (DW_TAG_variable)
    <101eac9>   DW_AT_name        : ret 
    <101eacd>   DW_AT_decl_file   : 1   
    <101eace>   DW_AT_decl_line   : 3093        
    <101ead0>   DW_AT_type        : <0x100ec7a> 
    <101ead4>   DW_AT_location    : 2 byte block: 91 58         (DW_OP_fbreg: -40)
 <2><101ead7>: Abbrev Number: 88 (DW_TAG_variable)
    <101ead8>   DW_AT_name        : i   
    <101eada>   DW_AT_decl_file   : 1   
    <101eadb>   DW_AT_decl_line   : 3093        
    <101eadd>   DW_AT_type        : <0x100ec7a> 
    <101eae1>   DW_AT_location    : 2 byte block: 91 68         (DW_OP_fbreg: -24)
 <2><101eae4>: Abbrev Number: 89 (DW_TAG_variable)
    <101eae5>   DW_AT_name        : (indirect string, offset: 0x151780): irqflag        
    <101eae9>   DW_AT_decl_file   : 1   
    <101eaea>   DW_AT_decl_line   : 3093        
    <101eaec>   DW_AT_type        : <0x100ec7a> 
    <101eaf0>   DW_AT_location    : 2 byte block: 91 64         (DW_OP_fbreg: -28)


I'm running out of ideas. I'll give DWARF 4 a try.

My debugger is ARM DS-5 v5.13 (Build 1622)

Regards.

  reply	other threads:[~2015-07-30 14:54 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-30 12:53 arch/arm/kernel/setup.c does not compile at -O0 Mason
2015-07-30 13:14 ` Robin Murphy
2015-07-30 13:58   ` Mason
2015-07-30 14:54     ` Mason [this message]
2015-07-30 16:09     ` Mason
2015-07-31  8:28       ` Mason
2015-07-30 13:29 ` Russell King - ARM Linux
2015-07-30 15:23 ` Suman Tripathi
2015-07-30 15:50   ` Russell King - ARM Linux
2015-07-30 16:13     ` Suman Tripathi
2015-08-20  9:07     ` Suman Tripathi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55BA3AC1.905@free.fr \
    --to=slash.tmp@free.fr \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.