From 554d387d4cf36d63f004a5a10bee8d180a7af4e0 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 4 Apr 2011 14:29:27 +0000 Subject: [PATCH] * xcoffread.c (read_xcoff_symtab): Make `debugfmt' const. * symtab.h (struct symtab) : Now const. * symmisc.c (free_symtab): Don't free debugformat. * buildsym.h (struct subfile) : Now const. (record_debugformat, record_producer): Document. * buildsym.c (end_symtab): Don't save debugformat and producer names on obstack. (end_symtab): Don't free debugformat and producer fields. (record_debugformat): Don't call xstrdup. (record_producer): Likewise. --- gdb/ChangeLog | 13 +++++++++++++ gdb/buildsym.c | 31 +++---------------------------- gdb/buildsym.h | 14 +++++++++++--- gdb/symmisc.c | 2 -- gdb/symtab.h | 4 ++-- gdb/xcoffread.c | 2 +- 6 files changed, 30 insertions(+), 36 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ea5afefe8b5..2f41d96e309 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2011-04-04 Tom Tromey + + * xcoffread.c (read_xcoff_symtab): Make `debugfmt' const. + * symtab.h (struct symtab) : Now const. + * symmisc.c (free_symtab): Don't free debugformat. + * buildsym.h (struct subfile) : Now const. + (record_debugformat, record_producer): Document. + * buildsym.c (end_symtab): Don't save debugformat and producer + names on obstack. + (end_symtab): Don't free debugformat and producer fields. + (record_debugformat): Don't call xstrdup. + (record_producer): Likewise. + 2011-04-04 Tom Tromey * source.c (find_source_lines): Remove LSEEK_NOT_LINEAR code. diff --git a/gdb/buildsym.c b/gdb/buildsym.c index cd159a71cd9..3c90645b78c 100644 --- a/gdb/buildsym.c +++ b/gdb/buildsym.c @@ -1111,20 +1111,6 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section) the symbols. */ symtab->language = subfile->language; - /* Save the debug format string (if any) in the symtab. */ - if (subfile->debugformat != NULL) - { - symtab->debugformat = obsavestring (subfile->debugformat, - strlen (subfile->debugformat), - &objfile->objfile_obstack); - } - - /* Similarly for the producer. */ - if (subfile->producer != NULL) - symtab->producer = obsavestring (subfile->producer, - strlen (subfile->producer), - &objfile->objfile_obstack); - /* All symtabs for the main file and the subfiles share a blockvector, so we need to clear primary for everything but the main file. */ @@ -1169,12 +1155,6 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section) { xfree ((void *) subfile->line_vector); } - if (subfile->debugformat != NULL) - { - xfree ((void *) subfile->debugformat); - } - if (subfile->producer != NULL) - xfree (subfile->producer); nextsub = subfile->next; xfree ((void *) subfile); @@ -1279,20 +1259,15 @@ hashname (char *name) void -record_debugformat (char *format) +record_debugformat (const char *format) { - current_subfile->debugformat = xstrdup (format); + current_subfile->debugformat = format; } void record_producer (const char *producer) { - /* The producer is not always provided in the debugging info. - Do nothing if PRODUCER is NULL. */ - if (producer == NULL) - return; - - current_subfile->producer = xstrdup (producer); + current_subfile->producer = producer; } /* Merge the first symbol list SRCLIST into the second symbol list diff --git a/gdb/buildsym.h b/gdb/buildsym.h index 37fe69cd9b8..ce1a9fc4af4 100644 --- a/gdb/buildsym.h +++ b/gdb/buildsym.h @@ -70,8 +70,8 @@ struct subfile struct linetable *line_vector; int line_vector_length; enum language language; - char *producer; - char *debugformat; + const char *producer; + const char *debugformat; struct symtab *symtab; }; @@ -292,7 +292,15 @@ extern void record_pending_block (struct objfile *objfile, struct block *block, struct pending_block *opblock); -extern void record_debugformat (char *format); +/* Record the name of the debug format in the current pending symbol + table. FORMAT must be a string with a lifetime at least as long as + the symtab's objfile. */ + +extern void record_debugformat (const char *format); + +/* Record the name of the debuginfo producer (usually the compiler) in + the current pending symbol table. PRODUCER must be a string with a + lifetime at least as long as the symtab's objfile. */ extern void record_producer (const char *producer); diff --git a/gdb/symmisc.c b/gdb/symmisc.c index 66c2f05adb8..79ff355aa77 100644 --- a/gdb/symmisc.c +++ b/gdb/symmisc.c @@ -115,8 +115,6 @@ free_symtab (struct symtab *s) xfree (s->line_charpos); if (s->fullname != NULL) xfree (s->fullname); - if (s->debugformat != NULL) - xfree (s->debugformat); xfree (s); } diff --git a/gdb/symtab.h b/gdb/symtab.h index a1c61f0e5da..1e3856e1713 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -817,11 +817,11 @@ struct symtab for automated testing of gdb but may also be information that is useful to the user. */ - char *debugformat; + const char *debugformat; /* String of producer version information. May be zero. */ - char *producer; + const char *producer; /* Full name of file as found by searching the source path. NULL if not yet known. */ diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 081080ccaba..fd60447210d 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -944,7 +944,7 @@ read_xcoff_symtab (struct partial_symtab *pst) ((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl; char *debugsec = ((struct coff_symfile_info *) objfile->deprecated_sym_private)->debugsec; - char *debugfmt = bfd_xcoff_is_xcoff64 (abfd) ? "XCOFF64" : "XCOFF"; + const char *debugfmt = bfd_xcoff_is_xcoff64 (abfd) ? "XCOFF64" : "XCOFF"; struct internal_syment symbol[1]; union internal_auxent main_aux; -- 2.30.2