public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Don't use class-initialization for the owner union
@ 2019-11-18 17:51 Christian Biesinger
  0 siblings, 0 replies; only message in thread
From: Christian Biesinger @ 2019-11-18 17:51 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=6edc43ec327c2b74e10b80774fa6ecde3dc58537

commit 6edc43ec327c2b74e10b80774fa6ecde3dc58537
Author: Christian Biesinger <cbiesinger@google.com>
Date:   Sun Nov 17 19:13:49 2019 -0600

    Don't use class-initialization for the owner union
    
    As reported by PhilippeW, valgrind reports that symtab is uninitialized
    when compiling with GCC 4.8.5, which is the default compiler on CentOS 7.
    
    This is apparently a compiler bug fixed in later versions, but to keep
    CentOS 7 working, this patch initializes the union explicitly instead of
    using a class initializer.
    
    gdb/ChangeLog:
    
    2019-11-18  Christian Biesinger  <cbiesinger@google.com>
    
    	* symtab.h (struct symbol) <owner>: Initialize explicitly in the
    	constructor instead of using a class initializer.
    
    Change-Id: I94f48afeae5d29cf81a280295e2d02e2d7e1c1f1

Diff:
---
 gdb/ChangeLog | 5 +++++
 gdb/symtab.h  | 5 ++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 90a2b64..0e17d7c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2019-11-18  Christian Biesinger  <cbiesinger@google.com>
+
+	* symtab.h (struct symbol) <owner>: Initialize explicitly in the
+	constructor instead of using a class initializer.
+
 2019-11-15  Christian Biesinger  <cbiesinger@google.com>
 
 	* Makefile.in: Replace {posix,mingw}-strerror.c with safe-strerror.c.
diff --git a/gdb/symtab.h b/gdb/symtab.h
index a6bd3c4..1e82182 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -1113,6 +1113,9 @@ struct symbol : public general_symbol_info, public allocate_on_obstack
       language = language_unknown;
       ada_mangled = 0;
       section = 0;
+      /* GCC 4.8.5 (on CentOS 7) does not correctly compile class-
+         initialization of unions, so we initialize it manually here.  */
+      owner.symtab = nullptr;
     }
 
   /* Data type of value */
@@ -1127,7 +1130,7 @@ struct symbol : public general_symbol_info, public allocate_on_obstack
     /* The symbol table containing this symbol.  This is the file associated
        with LINE.  It can be NULL during symbols read-in but it is never NULL
        during normal operation.  */
-    struct symtab *symtab = nullptr;
+    struct symtab *symtab;
 
     /* For types defined by the architecture.  */
     struct gdbarch *arch;


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-11-18 17:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-18 17:51 [binutils-gdb] Don't use class-initialization for the owner union Christian Biesinger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).