Hi Andrew,
From: Andrew Hewus Fresh <andrew@afresh1.com>
Date: Wed, 24 Mar 2021 19:02:54 -0700
> On Thu, Mar 25, 2021 at 09:50:17AM +0900, Masato Asou wrote:
>> Because, Perl 5.32.1 has changed the way hexadecimal string are
>> handled as below:
>>
>> Perl 5.30.3: "0x1234" + 0x1000 -> 0x2234
>> Perl 5.32.1: "0x1234" + 0x1000 -> 0x1000
>
> Interestingly, this bug only existed in perl v5.30, so an unfortunate
> accident of timing on the creation of this patch.
>
> $ perldoc perl5320delta | grep -B4 134230
> • Perl no longer treats strings starting with "0x" or "0b" as hex or
> binary numbers respectively when converting a string to a number.
> This reverts a change in behaviour inadvertently introduced in perl
> 5.30.0 intended to improve precision when converting a string to a
> floating point number. [perl #134230
> <https://rt.perl.org/Ticket/Display.html?id=134230>]
>
>
>> Perl 5.32.1 does not consider anything after 'x' to be a number, but
>> only the first '0' is consider to be a number.
>
> Neither does any other perl 5, only perl 5.30 accidentally did.
>
> Perl simplistically looks for leading ascii digits in in a string to
> "convert" from a string to a number, and an empty string is treated as
> 0. Just because the unquoted version would be treated differently
> isn't supposed to matter.
>
> $ perl -E 'say "$_: " . ( "${_}x123" + 0 ) for qw< 0 1 987 a z >'
> 0: 0
> 1: 1
> 987: 987
> a: 0
> z: 0
Thank you for your detailed explanation.
>> I made the following patch.
>>
>> ok? comments?
>> --
>> ASOU Masato
>>
>> Index: devel/valgrind/patches/patch-coregrind_link_tool_exe_openbsd_in
>> ===================================================================
>> RCS file: /cvs/ports/devel/valgrind/patches/patch-coregrind_link_tool_exe_openbsd_in,v
>> retrieving revision 1.5
>> diff -u -p -r1.5 patch-coregrind_link_tool_exe_openbsd_in
>> --- devel/valgrind/patches/patch-coregrind_link_tool_exe_openbsd_in 5 Oct 2020 01:45:58 -0000 1.5
>> +++ devel/valgrind/patches/patch-coregrind_link_tool_exe_openbsd_in 25 Mar 2021 00:27:19 -0000
>> @@ -10,7 +10,7 @@
>> +# strip command rewrite offset and align in ELF file. Therefor, when valgrind
>> +# launch memcheck-amd64-openbsd, an Abort trap occurs in the execvp() system
>> +# call.
>> -+my $cmd = sprintf "$cc -static -nopie -Wl,--strip-all -Wl,-Ttext=0x%x", "$ala + 0x1000";
>> ++my $cmd = sprintf "$cc -static -nopie -Wl,--strip-all -Wl,-Ttext=0x%x", hex($ala) + 0x1000;
>
> This seems to give consistent results on all the perl I have from 5.8
> through 5.33.7.
>
> perl -e 'my $ala = "0x1234"; print(( $ala + 0x100 ), "\n"); print(( hex($ala) + 0x100 ), "\n")'
>
> OK afresh1@
commited.
--
ASOU Masato
No comments:
Post a Comment