Re: RFC: solib.c:solib_map_sections so->so_name clobbering

Joel Brobecker
2013-03-28T23:27:38Z

[-- Attachment #1: Type: text/plain, Size: 1056 bytes --]

> Joel> What do you (or others!) think? I am happy to test and submit a proper
> Joel> patch.
>
> It sounds reasonable to me.
> I'm sorry about the mess here.

Thanks for the feedback, and really you should not feel sorry at all.
It wasn't your mess :-). And the good news is that I feel like we are
slowly making it better.

Attached is the patch I tested on x86_64-linux. I am off next week,
but I will also apply it to AdaCore's version of GDB to get some
exposure on all the targets that we support. JIC. That will give
more time for others to comment as well, if needed.

gdb/ChangeLog:

* solib.c (solib_map_sections): Remove code overwriting
SO->SO_NAME with the bfd's filename.

> Joel> We wouldn't be able to use a patch like this on the 7.6 branch,
> Joel> so for Darwin, I'd restore the xstrdup below - it would be a memory
> Joel> leak, but better to have a leak than not having the shared library name,
> Joel> IMO.
>
> You can make it not leak by using bfd_alloc.

Neat! I will try that before I go.

Thanks again,
--
Joel

[-- Attachment #2: 0001-Do-not-overwrite-so_list-s-so_name-in-solib_map_sect.patch --]
[-- Type: text/x-diff, Size: 1094 bytes --]

From f7bd26fcfdbcde492d4da15d291115d714f5febd Mon Sep 17 00:00:00 2001
From: Joel Brobecker <brobecker@adacore.com>
Date: Thu, 28 Mar 2013 16:23:06 -0700
Subject: [PATCH] Do not overwrite so_list's so_name in solib_map_sections

gdb/ChangeLog:

* solib.c (solib_map_sections): Remove code overwriting
SO->SO_NAME with the bfd's filename.
---
gdb/solib.c | 6 ------
1 file changed, 6 deletions(-)

diff --git a/gdb/solib.c b/gdb/solib.c
index 8129c0f..6978677 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -465,12 +465,6 @@ solib_map_sections (struct so_list *so)
/* Leave bfd open, core_xfer_memory and "info files" need it. */
so->abfd = abfd;

- /* copy full path name into so_name, so that later symbol_file_add
- can find it. */
- if (strlen (bfd_get_filename (abfd)) >= SO_NAME_MAX_PATH_SIZE)
- error (_("Shared library file name is too long."));
- strcpy (so->so_name, bfd_get_filename (abfd));
-
if (build_section_table (abfd, &so->sections, &so->sections_end))
{
error (_("Can't find the file sections in `%s': %s"),
--
1.7.10.4