Re: [Patch] linux-2.6.22 on i386

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



| From: Dave Anderson <anderson@xxxxxxxxxx>

| Ken'ichi Ohmichi wrote:

| > On linux-2.6.22, the external declaration of i386's __per_cpu_offset[]
| > is in include/asm-i386/percpu.h, and the definition of __per_cpu_offset[]
| > is in init/main.c:
| > 
| >   unsigned long __per_cpu_offset[NR_CPUS] __read_mostly;
| > 
| > 
| > There are their debugging information in the dwarf section, and the
| > definition's one includes the array length.
| > I explain by following output of the dwarfdump command.
| > 
| > * The debugging information of "extern unsigned long __per_cpu_offset[];"
| >   There is not the attribute DW_AT_upper_bound and the crash utility cannot
| >   get the array number.
| > 	<1><32685>      DW_TAG_variable
| > 	                DW_AT_name                  __per_cpu_offset
| > 	                DW_AT_decl_file             83 include/asm/percpu.h
| > 	                DW_AT_decl_line             48
| > 	                DW_AT_type                  <32674>
| > 	                DW_AT_external              yes(1)
| > 	                DW_AT_declaration           yes(1)
| > 	<1><32674>      DW_TAG_array_type
| > 	                DW_AT_sibling               <32685>
| > 	                DW_AT_type                  <83>
| > 	<2><32683>      DW_TAG_subrange_type
| > 
| > * The debugging information of "unsigned long __per_cpu_offset[NR_CPUS] __read_mostly;"
| >   There is the attribute DW_AT_upper_bound and the crash utility can do it.
| > 	<1><58437>      DW_TAG_variable
| > 	[a1][a1][a1][a1]            DW_AT_name                  __per_cpu_offset
| > 	                DW_AT_decl_file             1 init/main.c
| > 	                DW_AT_decl_line             363
| > 	                DW_AT_type                  <33>
| > 	                DW_AT_external              yes(1)
| > 	                DW_AT_location              DW_OP_addr 0xc03fd400
| > 	<1><   33>      DW_TAG_array_type
| > 	                DW_AT_sibling               <49>
| > 	                DW_AT_type                  <56>
| > 	<2><   42>      DW_TAG_subrange_type
| > 	                DW_AT_type                  <49>
| > 	                DW_AT_upper_bound           31  <--- Here!
| > 
| > 
| > I thought get_array_length() should retry to get the array length from
| > the next if it could not get it. But I prefer your following idea because
| > it is simple and does not make other effects.
| 
| I see.  But as it stands now, the crash utility has no dwarfdump-like
| functions to pull out such data, but rather relies on gdb to do the
| dirty work. There's probably something in the gdb innards that could
| access it, but I'm not aware of it.
| 
| But it's not that important...

This makes me quite suspicious.  I assume that you are correct that
the problem is in gdb.  It still feels like there is a serious problem
here: that the most complete definition is not being made available.

You have an effective work-around for __per_cpu_offset, but I wonder
how many other ways this same problem will come up.

--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility

[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux