X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=binutils%2Frddbg.c;h=930dbf71349bedcc2ecb58ffef3081476bc1973f;hb=3084d7a27b8e4d13f0fdd0fac62ffadc9c2223b5;hp=49972e69bf08f6373721927076091ee17ca377fc;hpb=219d1afa89d0d53ca93a684cac341f16470f3ca0;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/rddbg.c b/binutils/rddbg.c index 49972e69bf..930dbf7134 100644 --- a/binutils/rddbg.c +++ b/binutils/rddbg.c @@ -1,5 +1,5 @@ /* rddbg.c -- Read debugging information into a generic form. - Copyright (C) 1995-2018 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor . This file is part of GNU Binutils. @@ -35,7 +35,6 @@ static bfd_boolean read_section_stabs_debugging_info (bfd *, asymbol **, long, void *, bfd_boolean *); static bfd_boolean read_symbol_stabs_debugging_info (bfd *, asymbol **, long, void *, bfd_boolean *); -static bfd_boolean read_ieee_debugging_info (bfd *, void *, bfd_boolean *); static void save_stab (int, int, bfd_vma, const char *); static void stab_context (void); static void free_saved_stabs (void); @@ -64,12 +63,6 @@ read_debugging_info (bfd *abfd, asymbol **syms, long symcount, bfd_boolean no_me return NULL; } - if (bfd_get_flavour (abfd) == bfd_target_ieee_flavour) - { - if (! read_ieee_debugging_info (abfd, dhandle, &found)) - return NULL; - } - /* Try reading the COFF symbols if we didn't find any stabs in COFF sections. */ if (! found @@ -128,23 +121,28 @@ read_section_stabs_debugging_info (bfd *abfd, asymbol **syms, long symcount, bfd_byte *stab; bfd_size_type stroff, next_stroff; - stabsize = bfd_section_size (abfd, sec); + stabsize = bfd_section_size (sec); stabs = (bfd_byte *) xmalloc (stabsize); if (! bfd_get_section_contents (abfd, sec, stabs, 0, stabsize)) { fprintf (stderr, "%s: %s: %s\n", bfd_get_filename (abfd), names[i].secname, bfd_errmsg (bfd_get_error ())); + free (shandle); + free (stabs); return FALSE; } - strsize = bfd_section_size (abfd, strsec); + strsize = bfd_section_size (strsec); strings = (bfd_byte *) xmalloc (strsize + 1); if (! bfd_get_section_contents (abfd, strsec, strings, 0, strsize)) { fprintf (stderr, "%s: %s: %s\n", bfd_get_filename (abfd), names[i].strsecname, bfd_errmsg (bfd_get_error ())); + free (shandle); + free (strings); + free (stabs); return FALSE; } /* Zero terminate the strings table, just in case. */ @@ -153,7 +151,11 @@ read_section_stabs_debugging_info (bfd *abfd, asymbol **syms, long symcount, { shandle = start_stab (dhandle, abfd, TRUE, syms, symcount); if (shandle == NULL) - return FALSE; + { + free (strings); + free (stabs); + return FALSE; + } } *pfound = TRUE; @@ -220,17 +222,16 @@ read_section_stabs_debugging_info (bfd *abfd, asymbol **syms, long symcount, (long) (stab - stabs) / 12); break; } - else - s = concat (s, (char *) strings + strx, - (const char *) NULL); + + s = concat (s, (char *) strings + strx, + (const char *) NULL); /* We have to restore the backslash, because, if the linker is hashing stabs strings, we may see the same string more than once. */ *p = '\\'; - if (f != NULL) - free (f); + free (f); f = s; } @@ -240,6 +241,10 @@ read_section_stabs_debugging_info (bfd *abfd, asymbol **syms, long symcount, { stab_context (); free_saved_stabs (); + free (f); + free (shandle); + free (stabs); + free (strings); return FALSE; } @@ -314,8 +319,7 @@ read_symbol_stabs_debugging_info (bfd *abfd, asymbol **syms, long symcount, sc[strlen (sc) - 1] = '\0'; n = concat (sc, bfd_asymbol_name (*ps), (const char *) NULL); free (sc); - if (f != NULL) - free (f); + free (f); f = n; s = n; } @@ -346,37 +350,6 @@ read_symbol_stabs_debugging_info (bfd *abfd, asymbol **syms, long symcount, return TRUE; } - -/* Read IEEE debugging information. */ - -static bfd_boolean -read_ieee_debugging_info (bfd *abfd, void *dhandle, bfd_boolean *pfound) -{ - asection *dsec; - bfd_size_type size; - bfd_byte *contents; - - /* The BFD backend puts the debugging information into a section - named .debug. */ - - dsec = bfd_get_section_by_name (abfd, ".debug"); - if (dsec == NULL) - return TRUE; - - size = bfd_section_size (abfd, dsec); - contents = (bfd_byte *) xmalloc (size); - if (! bfd_get_section_contents (abfd, dsec, contents, 0, size)) - return FALSE; - - if (! parse_ieee (dhandle, abfd, contents, size)) - return FALSE; - - free (contents); - - *pfound = TRUE; - - return TRUE; -} /* Record stabs strings, so that we can give some context for errors. */ @@ -398,8 +371,7 @@ static int saved_stabs_index; static void save_stab (int type, int desc, bfd_vma value, const char *string) { - if (saved_stabs[saved_stabs_index].string != NULL) - free (saved_stabs[saved_stabs_index].string); + free (saved_stabs[saved_stabs_index].string); saved_stabs[saved_stabs_index].type = type; saved_stabs[saved_stabs_index].desc = desc; saved_stabs[saved_stabs_index].value = value; @@ -454,11 +426,8 @@ free_saved_stabs (void) for (i = 0; i < SAVE_STABS_COUNT; i++) { - if (saved_stabs[i].string != NULL) - { - free (saved_stabs[i].string); - saved_stabs[i].string = NULL; - } + free (saved_stabs[i].string); + saved_stabs[i].string = NULL; } saved_stabs_index = 0;