This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [rfa] allocate_objfile(NULL, 0)
- From: Elena Zannoni <ezannoni at redhat dot com>
- To: David Carlton <carlton at math dot stanford dot edu>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Fri, 10 Jan 2003 19:05:00 -0500
- Subject: Re: [rfa] allocate_objfile(NULL, 0)
- References: <ro1hecgd149.fsf@jackfruit.Stanford.EDU>
David Carlton writes:
> The function allocate_objfile takes some care to return a useful
> objfile if its first argument (the bfd) is NULL. But it doesn't set
> objfile->name in that case; there is code in GDB that loops over all
> the objfiles and examines their names, which breaks in this case.
> (See, for example, symbol_add_stub.)
>
> I ran into this problem when imitating the dynamics objfile in
> jv-lang.c. So I'm pretty sure that, currently, if anybody tries to
> debug Java code that requires that objfile to exist, GDB will seg
> fault.
>
Can you expand a bit? Would it be possible to create a test case?
> The enclosed patch modifies allocate_objfile to set the name to
> "<<anonymous objfile>>" in that situation. It removes the seg fault
> that I saw. I ran the test suite on i686-pc-linux-gnu/GCC 3.1/DWARF-2
> and saw no new regressions.
>
> Is this patch okay? I don't know offhand who the appropriate
> maintainer is.
>
I don't know about the '<<' '>>' usage. I wonder if gdb already
has some other cases like this one. Maybe 'nameless'?
> David Carlton
> carlton@math.stanford.edu
>
> 2003-01-10 David Carlton <carlton@math.stanford.edu>
>
> * objfiles.c (allocate_objfile): Always set name.
You are missing the copyright year.
>
> Index: objfiles.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/objfiles.c,v
> retrieving revision 1.22
> diff -u -p -r1.22 objfiles.c
> --- objfiles.c 29 Jul 2002 22:55:26 -0000 1.22
> +++ objfiles.c 10 Jan 2003 23:31:56 -0000
> @@ -305,6 +305,10 @@ allocate_objfile (bfd *abfd, int flags)
> objfile->name, bfd_errmsg (bfd_get_error ()));
> }
> }
> + else
> + {
> + objfile->name = "<<anonymous objfile>>";
> + }
>
> /* Initialize the section indexes for this objfile, so that we can
> later detect if they are used w/o being properly assigned to. */