summaryrefslogtreecommitdiffstats
path: root/meta/recipes-connectivity/openssl/openssl/crypto_use_bigint_in_x86-64_perl.patch
blob: 7ba9eabc6cc564b86548760a4287625b9f0c59a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Upsteram Status: Backport

When building on x32 systems where the default type is 32bit, make sure
we can transparently represent 64bit integers.  Otherwise we end up with
build errors like:
/usr/bin/perl asm/ghash-x86_64.pl elf > ghash-x86_64.s
Integer overflow in hexadecimal number at asm/../../perlasm/x86_64-xlate.pl line 201, <> line 890.
...
ghash-x86_64.s: Assembler messages:
ghash-x86_64.s:890: Error: junk '.15473355479995e+19' after expression

We don't enable this globally as there are some cases where we'd get
32bit values interpreted as unsigned when we need them as signed.

Reported-by: Bertrand Jacquin <bertrand@jacquin.bzh>
URL: https://bugs.gentoo.org/542618

Signed-off-By: Armin Kuster <akuster@mvista.com>

diff --git a/crypto/perlasm/x86_64-xlate.pl b/crypto/perlasm/x86_64-xlate.pl
--- a/crypto/perlasm/x86_64-xlate.pl
+++ b/crypto/perlasm/x86_64-xlate.pl
@@ -196,6 +196,10 @@ my %globals;
     	my $self = shift;
 
 	$self->{value} =~ s/\b(0b[0-1]+)/oct($1)/eig;
+	# When building on x32 ABIs, the expanded hex value might be too
+	# big to fit into 32bits. Enable transparent 64bit support here
+	# so we can safely print it out.
+	use bigint;
 	if ($gas) {
 	    # Solaris /usr/ccs/bin/as can't handle multiplications
 	    # in $self->{value}