[PATCH] PR gcc/68256 Defining TARGET_USE_CONSTANT_BLOCKS_P causes go bootstrap failure on aarch64.

Bin.Cheng amker.cheng@gmail.com
Thu Mar 15 14:10:00 GMT 2018


On Fri, Feb 16, 2018 at 5:18 PM,  <vladimir.mezentsev@oracle.com> wrote:
> From: Vladimir Mezentsev <vladimir.mezentsev@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.
Hi Vladimir,
Thanks for fixing the long standing issue, but this change causes below failure,
could you have a look?  Thanks

Failures:
        gcc.dg/attr-weakref-1.c

Bisected to:


commit 536728c16d6a0173930ecfe370302baa471c299e
Author: rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Thu Mar 15 08:55:04 2018 +0000

    2018-03-15  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

            PR target/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 ().


Thanks,
bin
>
> ChangeLog:
> 2018-02-15  Vladimir Mezentsev  <vladimir.mezentsev@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
>



More information about the Gcc-patches mailing list