On Mon, Feb 26, 2018 at 12:07 PM, Richard Biener <richard.guent...@gmail.com> wrote: > On Fri, Feb 16, 2018 at 6:18 PM, <vladimir.mezent...@oracle.com> wrote: >> From: Vladimir Mezentsev <vladimir.mezent...@oracle.com> >> >> Ramana Radhakrishnan made a workaround in gcc/config/aarch64/aarch64.c to >> resolve >> bootstrap comparison failure (2015-11-10, commit >> bc443a71dafa2e707bae4b2fa74f83b05dea37ab). >> The real bug is in gcc/varasm.c. >> hash_section() returns an unstable value. >> As result, two blocks are created in get_block_for_section() for one unnamed >> section. >> A list of objects in these blocks depends on the -gtoggle option. >> I removed Ramana's workaround in gcc/config/aarch64/aarch64.c and >> I fixed hash_section() in gcc/varasm.c >> >> Bootstrapped on aarch64-unknown-linux-gnu including (c,c++ and go). >> Testing finished ok. > > Ok.
Committed on behalf of Vladimir. r258553. Richard. > Thanks, > Richard. > >> ChangeLog: >> 2018-02-15 Vladimir Mezentsev <vladimir.mezent...@oracle.com> >> >> PR gcc/68256 >> * varasm.c (hash_section): Return an unchangeble hash value >> * config/aarch64/aarch64.c (aarch64_use_blocks_for_constant_p): >> Return !aarch64_can_use_per_function_literal_pools_p (); >> --- >> gcc/config/aarch64/aarch64.c | 8 +++----- >> gcc/varasm.c | 2 +- >> 2 files changed, 4 insertions(+), 6 deletions(-) >> >> diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c >> index 174310c..a0a495d 100644 >> --- a/gcc/config/aarch64/aarch64.c >> +++ b/gcc/config/aarch64/aarch64.c >> @@ -7596,11 +7596,9 @@ aarch64_can_use_per_function_literal_pools_p (void) >> static bool >> aarch64_use_blocks_for_constant_p (machine_mode, const_rtx) >> { >> - /* Fixme:: In an ideal world this would work similar >> - to the logic in aarch64_select_rtx_section but this >> - breaks bootstrap in gcc go. For now we workaround >> - this by returning false here. */ >> - return false; >> + /* We can't use blocks for constants when we're using a per-function >> + constant pool. */ >> + return !aarch64_can_use_per_function_literal_pools_p (); >> } >> >> /* Select appropriate section for constants depending >> diff --git a/gcc/varasm.c b/gcc/varasm.c >> index b045efa..5aae5b4 100644 >> --- a/gcc/varasm.c >> +++ b/gcc/varasm.c >> @@ -225,7 +225,7 @@ hash_section (section *sect) >> { >> if (sect->common.flags & SECTION_NAMED) >> return htab_hash_string (sect->named.name); >> - return sect->common.flags; >> + return sect->common.flags & ~SECTION_DECLARED; >> } >> >> /* Helper routines for maintaining object_block_htab. */ >> -- >> 1.8.3.1 >>