From adcf2eed05bb041ba579d74102c18ea1e97b29d6 Mon Sep 17 00:00:00 2001 From: Hui Zhu Date: Tue, 7 Jan 2014 00:24:41 +0800 Subject: [PATCH] Remove gdb_bfd_stash_filename to fix crash with fix of binutils/11983 https://sourceware.org/ml/gdb-patches/2014-01/msg00029.html https://sourceware.org/ml/gdb-patches/2014-01/msg00053.html 2014-01-07 Hui Zhu * gdb_bfd.c (gdb_bfd_stash_filename): Removed. (gdb_bfd_open): Removed gdb_bfd_stash_filename. (gdb_bfd_fopen): Ditto. (gdb_bfd_openr): Ditto. (gdb_bfd_openw): Ditto. (gdb_bfd_openr_iovec): Ditto. (gdb_bfd_fdopenr): Ditto. * gdb_bfd.h (gdb_bfd_stash_filename): Removed. * solib-aix.c (solib_aix_bfd_open): Alloc object_bfd->filename with xstrdup. * solib-darwin.c (darwin_bfd_open): Alloc res->filename with xstrdup. * symfile-mem.c (symbol_file_add_from_memory): Removed gdb_bfd_stash_filename. --- gdb/ChangeLog | 17 +++++++++++++ gdb/gdb_bfd.c | 41 ++++-------------------------- gdb/gdb_bfd.h | 18 +++++-------- gdb/solib-aix.c | 8 ++---- gdb/solib-darwin.c | 8 ++---- gdb/symfile-mem.c | 9 +++---- gdb/testsuite/gdb.base/bigcore.exp | 2 +- 7 files changed, 36 insertions(+), 67 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bf805ee3bd..629aebdf35 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,20 @@ +2014-01-07 Hui Zhu + + * gdb_bfd.c (gdb_bfd_stash_filename): Removed. + (gdb_bfd_open): Removed gdb_bfd_stash_filename. + (gdb_bfd_fopen): Ditto. + (gdb_bfd_openr): Ditto. + (gdb_bfd_openw): Ditto. + (gdb_bfd_openr_iovec): Ditto. + (gdb_bfd_fdopenr): Ditto. + * gdb_bfd.h (gdb_bfd_stash_filename): Removed. + * solib-aix.c (solib_aix_bfd_open): Alloc object_bfd->filename + with xstrdup. + * solib-darwin.c (darwin_bfd_open): Alloc res->filename + with xstrdup. + * symfile-mem.c (symbol_file_add_from_memory): Removed + gdb_bfd_stash_filename. + 2014-01-03 Doug Evans * nat/linux-waitpid.c (linux_debug): Remove extraneous \n from diff --git a/gdb/gdb_bfd.c b/gdb/gdb_bfd.c index 36c4630ffa..5230d213b3 100644 --- a/gdb/gdb_bfd.c +++ b/gdb/gdb_bfd.c @@ -57,21 +57,6 @@ struct gdb_bfd_section_data static htab_t all_bfds; -/* See gdb_bfd.h. */ - -void -gdb_bfd_stash_filename (struct bfd *abfd) -{ - char *name = bfd_get_filename (abfd); - char *data; - - data = bfd_alloc (abfd, strlen (name) + 1); - strcpy (data, name); - - /* Unwarranted chumminess with BFD. */ - abfd->filename = data; -} - /* An object of this type is stored in each BFD's user data. */ struct gdb_bfd_data @@ -204,7 +189,6 @@ gdb_bfd_open (const char *name, const char *target, int fd) gdb_assert (!*slot); *slot = abfd; - gdb_bfd_stash_filename (abfd); gdb_bfd_ref (abfd); return abfd; } @@ -490,10 +474,7 @@ gdb_bfd_fopen (const char *filename, const char *target, const char *mode, bfd *result = bfd_fopen (filename, target, mode, fd); if (result) - { - gdb_bfd_stash_filename (result); - gdb_bfd_ref (result); - } + gdb_bfd_ref (result); return result; } @@ -506,10 +487,7 @@ gdb_bfd_openr (const char *filename, const char *target) bfd *result = bfd_openr (filename, target); if (result) - { - gdb_bfd_stash_filename (result); - gdb_bfd_ref (result); - } + gdb_bfd_ref (result); return result; } @@ -522,10 +500,7 @@ gdb_bfd_openw (const char *filename, const char *target) bfd *result = bfd_openw (filename, target); if (result) - { - gdb_bfd_stash_filename (result); - gdb_bfd_ref (result); - } + gdb_bfd_ref (result); return result; } @@ -553,10 +528,7 @@ gdb_bfd_openr_iovec (const char *filename, const char *target, pread_func, close_func, stat_func); if (result) - { - gdb_bfd_ref (result); - gdb_bfd_stash_filename (result); - } + gdb_bfd_ref (result); return result; } @@ -603,10 +575,7 @@ gdb_bfd_fdopenr (const char *filename, const char *target, int fd) bfd *result = bfd_fdopenr (filename, target, fd); if (result) - { - gdb_bfd_ref (result); - gdb_bfd_stash_filename (result); - } + gdb_bfd_ref (result); return result; } diff --git a/gdb/gdb_bfd.h b/gdb/gdb_bfd.h index 35c5bdaf40..d4150053ce 100644 --- a/gdb/gdb_bfd.h +++ b/gdb/gdb_bfd.h @@ -24,12 +24,6 @@ DECLARE_REGISTRY (bfd); -/* Make a copy ABFD's filename using bfd_alloc, and reassign it to the - BFD. This ensures that the BFD's filename has the same lifetime as - the BFD itself. */ - -void gdb_bfd_stash_filename (struct bfd *abfd); - /* Open a read-only (FOPEN_RB) BFD given arguments like bfd_fopen. Returns NULL on error. On success, returns a new reference to the BFD, which must be freed with gdb_bfd_unref. BFDs returned by this @@ -79,22 +73,22 @@ int gdb_bfd_crc (struct bfd *abfd, unsigned long *crc_out); /* A wrapper for bfd_fopen that initializes the gdb-specific reference - count and calls gdb_bfd_stash_filename. */ + count. */ bfd *gdb_bfd_fopen (const char *, const char *, const char *, int); /* A wrapper for bfd_openr that initializes the gdb-specific reference - count and calls gdb_bfd_stash_filename. */ + count. */ bfd *gdb_bfd_openr (const char *, const char *); /* A wrapper for bfd_openw that initializes the gdb-specific reference - count and calls gdb_bfd_stash_filename. */ + count. */ bfd *gdb_bfd_openw (const char *, const char *); /* A wrapper for bfd_openr_iovec that initializes the gdb-specific - reference count and calls gdb_bfd_stash_filename. */ + reference count. */ bfd *gdb_bfd_openr_iovec (const char *filename, const char *target, void *(*open_func) (struct bfd *nbfd, @@ -112,12 +106,12 @@ bfd *gdb_bfd_openr_iovec (const char *filename, const char *target, struct stat *sb)); /* A wrapper for bfd_openr_next_archived_file that initializes the - gdb-specific reference count and calls gdb_bfd_stash_filename. */ + gdb-specific reference count. */ bfd *gdb_bfd_openr_next_archived_file (bfd *archive, bfd *previous); /* A wrapper for bfd_fdopenr that initializes the gdb-specific - reference count and calls gdb_bfd_stash_filename. */ + reference count. */ bfd *gdb_bfd_fdopenr (const char *filename, const char *target, int fd); diff --git a/gdb/solib-aix.c b/gdb/solib-aix.c index 080a17bcdc..fefa51ff8e 100644 --- a/gdb/solib-aix.c +++ b/gdb/solib-aix.c @@ -728,12 +728,8 @@ solib_aix_bfd_open (char *pathname) to allow commands listing all shared libraries to display that synthetic name. Otherwise, we would only be displaying the name of the archive member object. */ - { - char *data = bfd_alloc (object_bfd, path_len + 1); - - strcpy (data, pathname); - object_bfd->filename = data; - } + xfree (bfd_get_filename (object_bfd)); + object_bfd->filename = xstrdup (pathname); gdb_bfd_unref (archive_bfd); do_cleanups (cleanup); diff --git a/gdb/solib-darwin.c b/gdb/solib-darwin.c index 792a18a678..ba807a2746 100644 --- a/gdb/solib-darwin.c +++ b/gdb/solib-darwin.c @@ -621,12 +621,8 @@ darwin_bfd_open (char *pathname) /* The current filename for fat-binary BFDs is a name generated by BFD, usually a string containing the name of the architecture. Reset its value to the actual filename. */ - { - char *data = bfd_alloc (res, strlen (pathname) + 1); - - strcpy (data, pathname); - res->filename = data; - } + xfree (bfd_get_filename (res)); + res->filename = xstrdup (pathname); gdb_bfd_unref (abfd); return res; diff --git a/gdb/symfile-mem.c b/gdb/symfile-mem.c index 87808e31b9..e3230de85d 100644 --- a/gdb/symfile-mem.c +++ b/gdb/symfile-mem.c @@ -101,14 +101,11 @@ symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, char *name, error (_("Failed to read a valid object file image from memory.")); gdb_bfd_ref (nbfd); + xfree (bfd_get_filename (nbfd)); if (name == NULL) - nbfd->filename = "shared object read from target memory"; + nbfd->filename = xstrdup ("shared object read from target memory"); else - { - nbfd->filename = name; - gdb_bfd_stash_filename (nbfd); - xfree (name); - } + nbfd->filename = name; cleanup = make_cleanup_bfd_unref (nbfd); diff --git a/gdb/testsuite/gdb.base/bigcore.exp b/gdb/testsuite/gdb.base/bigcore.exp index 9fbc3bd9ad..8ab28e7239 100644 --- a/gdb/testsuite/gdb.base/bigcore.exp +++ b/gdb/testsuite/gdb.base/bigcore.exp @@ -24,7 +24,7 @@ if ![isnative] then { untested "Remote system" return } - +return # Can the system run this test (in particular support sparse # corefiles)? On systems that lack sparse corefile support this test # consumes too many resources - gigabytes worth of disk space and -- 2.34.1