aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Biesinger <cbiesinger@google.com>2019-11-17 19:13:49 -0600
committerChristian Biesinger <cbiesinger@google.com>2019-11-18 11:50:48 -0600
commit6edc43ec327c2b74e10b80774fa6ecde3dc58537 (patch)
tree04abfa22825a8a2df8aed52d2d302fd5d6a22105
parentelf_backend_init_file_header (diff)
downloadbinutils-gdb-6edc43ec327c2b74e10b80774fa6ecde3dc58537.tar.gz
binutils-gdb-6edc43ec327c2b74e10b80774fa6ecde3dc58537.tar.bz2
binutils-gdb-6edc43ec327c2b74e10b80774fa6ecde3dc58537.zip
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
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/symtab.h5
2 files changed, 9 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 90a2b64d3d..0e17d7c39d 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 a6bd3c44b8..1e82182df7 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;