On 15 March 2018 at 15:07, Bin.Cheng <amker.ch...@gmail.com> wrote:
> On Fri, Feb 16, 2018 at 5: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.
> 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.mezent...@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 ().
>

I see this too:
/aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-aarch64-none-linux-gnu/gcc3/gcc/xgcc
-B/aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-aarch64-none-linux-gnu/gcc3/gcc/
/gcc/testsuite/gcc.dg/attr-weakref-1.c -fno-diagnostics-show-caret
-fdiagnostics-color=never -O2 /gcc/testsuite/gcc.dg/attr-weakref-1a.c
-lm -o ./attr-weakref-1.exe
/ccLqgn8f.o:(.rodata.cst8+0x30): undefined reference to `wv12'
/ccLqgn8f.o:(.rodata.cst8+0x38): undefined reference to `wv12'
/ccLqgn8f.o:(.rodata.cst8+0x60): undefined reference to `wf12'
/ccLqgn8f.o:(.rodata.cst8+0x68): undefined reference to `wf12'
collect2: error: ld returned 1 exit status
compiler exited with status 1
FAIL: gcc.dg/attr-weakref-1.c (test for excess errors)

Christophe

>
> Thanks,
> bin
>>
>> 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
>>

Reply via email to