linux-mips
[Top] [All Lists]

Re: remote GDB debugging and the __init macro of init.h

To: "Steve Kranz" <skranz@ridgerun.com>, <linux-mips@oss.sgi.com>, <linux-mips@fnet.fr>
Subject: Re: remote GDB debugging and the __init macro of init.h
From: "Kevin D. Kissell" <kevink@mips.com>
Date: Fri, 27 Oct 2000 17:50:50 +0200
References: <39F99E20.8EE47072@ridgerun.com>
Sender: owner-linux-mips@oss.sgi.com
What you've done should solve the problem, but note
that it has the side effect of preventing the text and data
sections in question from getting freed up at the end
of initialization.  I probably should have done so myself
last year when I was struggling with debugging some init 
code using kgdb, but instead I simply got used to finding 
the address in the symbol table and setting the breakpoints 
by hex address instead of by symbol.

The real fix would be to  teach gdb to treat symbols
in the init section as valid targets.

            Kevin K.

----- Original Message ----- 
From: "Steve Kranz" <skranz@ridgerun.com>
To: <linux-mips@oss.sgi.com>; <linux-mips@fnet.fr>
Sent: Friday, October 27, 2000 5:24 PM
Subject: remote GDB debugging and the __init macro of init.h


> Note:
> 
>   I had to make a change to allow remote MIPS kernel
>   debugging (GDB). The change I found necessary was in the
>   file:
> 
>     include/linux/init.h     (2.4.0-test9)
> 
>   As you can see from the snippet below the change
>   involves conditionally defining the "__init" macro as
>   a function of whether remote debugging is enabled or
>   not. Am I missing something, or does this seem like a
>   reasonable change?
> 
> ===========
> Was this...
> ===========
> /*
>  * Mark functions and data as being only used at initialization
>  * or exit time.
>  */
> #define __init  __attribute__ ((__section__ (".text.init")))
> 
> ==================================
> I changed my local copy to this...
> ==================================
> /*
>  * Mark functions and data as being only used at initialization
>  * or exit time.
>  */
> #ifdef CONFIG_REMOTE_DEBUG
> // Note: While running the mips-linux-elf-gdb (GNU gdb 5.0), RidgeRun
> Inc
> // noticed that gdb could not correctly derive the true address of any
> symbol
> // declared with the __init pragma. This prevented being able to
> correctly
> // set breakpoints on any of those functions. So, if we are building
> // with the GDB remote debugger in mind, then null out the __init
> // definition making those functions look like a normal functions
> // since this seems to satisfy things for remote kernel debugging.
> // Incidentally, for reference, the GDB being used at the time of this
> writing
> // was configured as "--host=i686-pc-linux-gnu --target=mips-linux-elf".
> 
> // and the mips-linux-gcc crosscompiler being used is egcs-2.90.29
> 980515
> // (egcs-1.0.3 release) with binutils version 2.8.1. (These tools
> running on
> // a x86 host producing code for target CONFIG_CPU_R5000).
> #define __init
> #else
> #define __init  __attribute__ ((__section__ (".text.init")))
> #endif
> 
> 
> Steve Kranz
> skranz@ridgerun.com
> Senior Kernel Developer
> RidgeRun Inc.
> 


<Prev in Thread] Current Thread [Next in Thread>