aboutsummaryrefslogtreecommitdiff
path: root/gas/read.h
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2023-08-31 18:05:35 +0930
committerAlan Modra <amodra@gmail.com>2023-08-31 21:32:11 +0930
commit3bab069c29b3c9b6c7123f81d7b4cd32b6e18472 (patch)
tree8e0d891e3db125cf870c84990729fb0cfafcd8ec /gas/read.h
parent533300396936dd54adb9e76600c6b567f3fca794 (diff)
downloadgdb-3bab069c29b3c9b6c7123f81d7b4cd32b6e18472.zip
gdb-3bab069c29b3c9b6c7123f81d7b4cd32b6e18472.tar.gz
gdb-3bab069c29b3c9b6c7123f81d7b4cd32b6e18472.tar.bz2
gas init_stab_section and get_stab_string_offset
get_stab_string_offset currently creates the stabstr section if not already present, in the process keeping a reference to the malloc'd section name string. Really, the name belongs in bfd_alloc'd memory or some obstack so that it doesn't show as a memory leak on exit. s_stab_generic at least does allocate the name for the stab section on an obstack, but doesn't tidy that as well as it could. Return paths after issuing a warning don't release the memory, nor the memory for the "string" copy. This patch fixes these problems. s_stab_generic is rearranged so that creation of the sections occurs earlier, before any potential uses of the note obstack during expression parsing. That makes it possible to always free the section name strings unless used to create new sections. I've also avoided get_absolute_expression_and_terminator as I see that function might skip over end-of-line, and lack of a --input_line_pointer might have caused the following source line to be ignored. (Other uses of this function in gas are OK.) * config/obj-coff.c (obj_coff_init_stab_section): Add stabstr param. Pass to get_stab_string_offset rather than name of section. * config/obj-som.c (obj_som_init_stab_section): Likewise. * config/obj-elf.c (obj_elf_init_stab_section): Likewise. (elf_init_stab_section): Adjust. * config/obj-coff.h (INIT_STAB_SECTION): Update. (obj_coff_init_stab_section): Update prototype. * config/obj-som.h: Similarly. * config/obj-elf.h: Similarly. * config/obj-multi.h (INIT_STAB_SECTION): Update. * obj.h (struct format_ops <init_stab_section>): Update. * read.h (get_stab_string_offset): Update prototype. * stabs.c (cached_sec): Delete. (stabs_begin): Adjust to suit. (get_stab_string_offset): Add stabstr param, delete stabstr_name and free_stabstr_secname params. Don't make stabstr section here. (eat_comma): New function. (s_stab_generic): Replace stab_secname_obstack_end param with bool freenames. Move creation of stab and stabstr sections earlier, so the names can be freed earlier before possible use of notes obstack during expression parsing. Tidy error paths ensuring "string" is freed. Use get_absolute_expression in place of get_absolute_expression_and_terminator. (s_stab): Adjust. (s_xstab): Use notes_concat to make stabstr section name.
Diffstat (limited to 'gas/read.h')
-rw-r--r--gas/read.h3
1 files changed, 1 insertions, 2 deletions
diff --git a/gas/read.h b/gas/read.h
index 42efce9..523a6e8 100644
--- a/gas/read.h
+++ b/gas/read.h
@@ -113,8 +113,7 @@ extern char original_case_string[];
#endif
extern void pop_insert (const pseudo_typeS *);
-extern unsigned int get_stab_string_offset
- (const char *, const char *, bool);
+extern unsigned int get_stab_string_offset (const char *, segT);
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);