This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [gold][aarch64]: Erratum 843419 optimized fix
- From: Han Shen <shenhan at google dot com>
- To: Andrew Pinski <pinskia at gmail dot com>
- Cc: binutils <binutils at sourceware dot org>, Cary Coutant <ccoutant at gmail dot com>, Luis Lozano <llozano at google dot com>
- Date: Mon, 18 Jul 2016 09:46:24 -0700
- Subject: Re: [gold][aarch64]: Erratum 843419 optimized fix
- Authentication-results: sourceware.org; auth=none
- References: <CACkGtriWCQ=g-0WGY0wuLUp6PZ+sgpFcJz2cEbtSE5RCkdXTmA@mail.gmail.com> <CA+=Sn1kwk5CXGSmMNYkKcaxxJq2g4OCfB7agDYerq00nsaSnkA@mail.gmail.com>
Hi Andrew, thanks for reporting this. Could you send me the objs and
the command line? (I tried to build hhvm on aarch64 machine, seemed to
me this needs a few third_packages that need to be installed through
apt-get (mysql, for example), since I am not a superuser on the
machine, it is not easy for me to build the whole thing from scratch
...)
On Fri, Jul 15, 2016 at 10:42 PM, Andrew Pinski <pinskia@gmail.com> wrote:
> On Thu, Jul 16, 2015 at 2:44 PM, Han Shen <shenhan@google.com> wrote:
>> Hi Cary, this is the patch for erratum 843419 fix optimization.
>>
>> Usually we apply branch-to-stub fix for all erratum. For 843419, under some
>> condition, instead of generating jumps, we re-write 'adrp' with 'adr' (only
>> applicable if adrp calculation result fits in adr range), thus break such
>> erratum sequence and eliminate performance penalty (2-jump/fix).
>>
>> Test - build on x86_64 platform and aarch64 platform using opt and debug (-O0).
>> Pass unit tests. Pass gold local test suite. Pass tests from arm.
>>
>> Ok for trunk?
>
> Hi,
> I am getting an internal error some of the time when linking HHVM :
> Erratum 843419 found and fixed at
> "../runtime/libhphp_runtime.a(bytecode.cpp.o)", section 10882, offset
> 0x0000022c.
> Erratum 843419 found and fixed at
> "../runtime/libhphp_runtime.a(unique-stubs.cpp.o)", section 7040,
> offset 0x00000218.
> Erratum 843419 found and fixed at
> "../runtime/libhphp_runtime.a(bytecode.cpp.o)", section 10882, offset
> 0x0000022c.
> Erratum 843419 found and fixed at
> "../runtime/libhphp_runtime.a(unique-stubs.cpp.o)", section 7040,
> offset 0x00000218.
> /usr/bin/ld.gold: internal error in try_fix_erratum_843419_optimized,
> at ../../gold/aarch64.cc:2007
> collect2: error: ld returned 1 exit status
>
> Is there anything which you need to debug this issue?
>
> Thanks,
> Andrew
>
>>
>> gold/ChangeLog
>>
>> 2015-07-15 Han Shen <shenhan@google.com>
>>
>> Optimize erratum 843419 fix.
>>
>> gold/ChangeLog: * aarch64.cc (AArch64_insn_utilities::is_adr): New
>> method. (AArch64_insn_utilities::aarch64_adr_encode_imm): New method.
>> (AArch64_insn_utilities::aarch64_adrp_decode_imm): New method.
>> (E843419_stub): New sub-class of Erratum_stub.
>> (AArch64_relobj::try_fix_erratum_843419_optimized): New method.
>> (AArch64_relobj::section_needs_reloc_stub_scanning): Try optimized fix.
>> (AArch64_relobj::create_erratum_stub): Add 1 argument.
>> (Target_aarch64::scan_erratum_843419_span): Pass in adrp insn offset.
>>
>> --
>> Han Shen
--
Han Shen | Software Engineer | shenhan@google.com | +1-650-440-3330