This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFA: Actual support for tracing forks on GNU/Linux


On Mon, Aug 18, 2003 at 11:09:53AM +0200, Michal Ludvig wrote:
> Daniel Jacobowitz told me that:
> 
> > 2003-08-17  Daniel Jacobowitz  <drow@mvista.com>
> >
> >    * config/i386/nm-linux.h (LINUX_CHILD_POST_STARTUP_INFERIOR):
> >     Define.
> >    * i386-linux-nat.c: Include "linux-nat.h".
> >    (child_post_startup_inferior): New function.
> >    * i386-nat.c (child_post_startup_inferior): Wrap in #ifdef.
> >    * linux-nat.c (linux_enable_event_reporting): New function.
> >    (child_post_attach, linux_child_post_startup_inferior)
> >    (child_post_startup_inferior, child_follow_fork)
> >    (linux_handle_extended_wait, kill_inferior): New functions.
> 
> Hi Daniel,
> this change broke build on AMD64. Per-se I'm getting linker error:
> 
> libgdb.a(linux-nat.o)(.text+0x3e8): In function 
> `child_post_startup_inferior':
> ../../gdb-6.0/gdb/linux-nat.c:223: multiple definition of 
> `child_post_startup_inferior'
> libgdb.a(i386-nat.o)(.text+0x52):../../gdb-6.0/gdb/i386-nat.c:238: first 
> defined here
> /usr/lib64/gcc-lib/x86_64-suse-linux/3.3/../../../../x86_64-suse-linux/bin/ld: 
> Warning: size of symbol `child_post_startup_inferior' changed from 11 in 
> libgdb.a(i386-nat.o) to 41 in libgdb.a(i386-nat.o)
> collect2: ld returned 1 exit status
> make: *** [gdb] Error 1
> 
> I.e. `child_post_startup_inferior' is defined twice.
> 
> When I define LINUX_CHILD_POST_STARTUP_INFERIOR in 
> config/i386/nm-x86-64linux.h I get:
> 
> libgdb.a(inftarg.o)(.text+0x692): In function `init_child_ops':
> ../../gdb-6.0/gdb/inftarg.c:593: undefined reference to 
> `child_post_startup_inferior'
> libgdb.a(lin-lwp.o)(.text+0x3f76): In function `init_lin_lwp_ops':
> ../../gdb-6.0/gdb/lin-lwp.c:1675: undefined reference to 
> `child_post_startup_inferior'
> 
> I.e. it's never defined.
> 
> The problem seems to be that child_post_startup_inferior() in both 
> i386-nat.c and linux-nat.c is #ifNdef-ed, i.e. either both undefined or 
> both defined. Is that intended?

Take a look at the third copy - it's in i386-linux-nat.c.  Then take a
look at the annoyed comment in i386/nm-linux.h.

> However the proper fix for amd64 seems to be:
> 
> Index: x86-64-linux-nat.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/x86-64-linux-nat.c,v
> retrieving revision 1.23.6.2
> diff -u -p -r1.23.6.2 x86-64-linux-nat.c
> --- x86-64-linux-nat.c  17 Jul 2003 12:51:55 -0000      1.23.6.2
> +++ x86-64-linux-nat.c  18 Aug 2003 09:05:51 -0000
> @@ -347,3 +347,9 @@ ps_get_thread_area (const struct ps_proc
>    return PS_ERR;               /* ptrace failed.  */
>  }
> 
> +void
> +child_post_startup_inferior (ptid_t ptid)
> +{
> +  i386_cleanup_dregs ();
> +  linux_child_post_startup_inferior (ptid);
> +}
> 
> Right? OK to apply?

Along with defining LINUX_CHILD_POST_STARTUP_INFERIOR, I assume?  Yes,
this is OK.  Sorry about breaking amd64.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]