aboutsummaryrefslogtreecommitdiff
path: root/gas/read.h
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2018-12-01 09:37:48 +1030
committerAlan Modra <amodra@gmail.com>2018-12-01 15:18:04 +1030
commit0acc7632bb09cce832a1b3756d31cc3fa93a724a (patch)
treed55c1680973037e5cc8ced249bcda4f9b33fa91e /gas/read.h
parent35d1b0784a27fcd71daf1b058423010c9001f039 (diff)
downloadgdb-0acc7632bb09cce832a1b3756d31cc3fa93a724a.zip
gdb-0acc7632bb09cce832a1b3756d31cc3fa93a724a.tar.gz
gdb-0acc7632bb09cce832a1b3756d31cc3fa93a724a.tar.bz2
PR23938, should not free memory alloced in obstack by free()
This removes ineffectual and wrong code caching section names in gas/stabs.c. Code like seg = subseg_new (name, 0); ... if (seg->name == name) seg->name = xstrdup (name); with the idea of being able to unconditionally free "name" later no longer works. "name" is referenced by the section hash table as well as in the section->name field. It would be possible to use "bfd_rename_section (stdoutput, seg, xstrdup (name))", but instead I opted for a fairly straight-forward approach of adding extra parameters to two functions to indicate section name strings should be freed if possible. PR 23938 * read.h (get_stab_string_offset): Update prototype. * stabs.c (get_stab_string_offset): Add free_stabstr_secname parameter. Free stabstr_secname if unused as section name. Don't xstrdup name when used. (s_stab_generic): Remove forward declaration. Add stab_secname_obstack_end param. Reference notes obstack via macros. Delete cached_secname. Adjust get_stab_string_offset call. Free stab_secname if unused as section name. (s_stab): Adjust s_stab_generic call. (s_xstab): Likewise. Delete saved_secname and saved_strsecname. * config/obj-elf.c (obj_elf_init_stab_section): Adjust get_stab_string_offset call. * config/obj-coff.c (obj_coff_init_stab_section): Likewise. * config/obj-som.c (obj_som_init_stab_section): Likewise. * testsuite/gas/all/pr23938.s: New test. * testsuite/gas/all/gas.exp: Run it.
Diffstat (limited to 'gas/read.h')
-rw-r--r--gas/read.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/gas/read.h b/gas/read.h
index 352b802..3ae447a 100644
--- a/gas/read.h
+++ b/gas/read.h
@@ -114,7 +114,7 @@ extern char original_case_string[];
extern void pop_insert (const pseudo_typeS *);
extern unsigned int get_stab_string_offset
- (const char *string, const char *stabstr_secname);
+ (const char *, const char *, bfd_boolean);
extern void aout_process_stab (int, const char *, int, int, int);
extern char *demand_copy_string (int *lenP);
extern char *demand_copy_C_string (int *len_pointer);