aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2021-07-14 10:22:50 +0200
committerJakub Jelinek <jakub@redhat.com>2021-07-14 10:22:50 +0200
commit3be762c2ed79e36b9c8faaea2be04725c967a34e (patch)
tree18856b44b833ef91c92c696c15b339c68df16657 /gcc
parent1dd3f21095858fbfd3e28a149578d5fb67e75f95 (diff)
downloadgcc-3be762c2ed79e36b9c8faaea2be04725c967a34e.zip
gcc-3be762c2ed79e36b9c8faaea2be04725c967a34e.tar.gz
gcc-3be762c2ed79e36b9c8faaea2be04725c967a34e.tar.bz2
godump: Fix -fdump-go-spec= reproduceability issue [PR101407]
pot_dummy_types is a hash_set from whose traversal the code prints some type lines. hash_set normally uses default_hash_traits which for pointer types (the hash set hashes const char *) uses pointer_hash which hashes the addresses of the pointers except of the least significant 3 bits. With address space randomization, that results in non-determinism in the -fdump-go-specs= generated file, each invocation can have different order of the lines emitted from pot_dummy_types traversal. This patch fixes it by hashing the string contents instead to make the hashes reproduceable. 2021-07-14 Jakub Jelinek <jakub@redhat.com> PR go/101407 * godump.c (godump_str_hash): New type. (godump_container::pot_dummy_types): Use string_hash instead of ptr_hash in the hash_set.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/godump.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/godump.c b/gcc/godump.c
index cf99894..a50aef1 100644
--- a/gcc/godump.c
+++ b/gcc/godump.c
@@ -56,6 +56,8 @@ static FILE *go_dump_file;
static GTY(()) vec<tree, va_gc> *queue;
+struct godump_str_hash : string_hash, ggc_remove <const char *> {};
+
/* A hash table of macros we have seen. */
static htab_t macro_hash;
@@ -535,7 +537,7 @@ public:
/* Types which may potentially have to be defined as dummy
types. */
- hash_set<const char *> pot_dummy_types;
+ hash_set<const char *, false, godump_str_hash> pot_dummy_types;
/* Go keywords. */
htab_t keyword_hash;