Tök jó, linuxon sem fordul az OpenSSL-1.0.2d

Ugye-ugye, itt rinyálok hogy AIX így meg úgy...


ghash-x86_64.s: Assembler messages:
ghash-x86_64.s:890: Error: junk `.15473355479995e+19' after expression

a kérdéses rész:


   889          subq    $48,%rcx
   890          movq    $1.15473355479995e+19,%rax
   891          movdqu  48(%rsi),%xmm14
   892          movdqu  64(%rsi),%xmm15

as --version
GNU assembler (GNU Binutils for Debian) 2.20.1-system.20100303
This assembler was configured for a target of `i486-linux-gnu'.

Hozzászólások

Nopéldául:

http://openssl.6102.n7.nabble.com/openssl-dev-64-bit-compilacion-seems-…

vagyis egy perl-script írja meg az Assembly source-t:
crypto/modes/asm/ghash-x86_64.pl (ez Power-processzornál is így van), tehát a scriptet meg a Perl-t kell gyanusítani.

Nagy biztonsággal ez az érintett rész:

   659          sub             \$0x30,$len
   660          mov             \$0xA040608020C0E000,%rax       # ((7..0)ˇ0xE0)&0xff
   661          movdqu          0x30($Htbl),$Hkey3
   662          movdqu          0x40($Htbl),$Hkey4

64 bites környezetben nem kell a bigint, 32 biten meg igen. Ha a környezet, ahol a fordítást csinálod 64 bites, akkor joggal tételezi fel a cucc, hogy az eszközök, amit használsz (a Perl is) 64 bites. Szerintem... Sőt, külön van Perl script 32 meg 64 bites környezetre...

Így lehet tesztelni:


$ perl -e 'print(11547335547999543296)'
1.15473355479995e+19 # na ez a rossz

$ perl -e 'use bigint; print(11547335547999543296)'
11547335547999543296 # ez meg a jó

A lényeg ugye, hogy vannak a szép nagy számok, és azokat kétféleképpen lehet kiírni: tudományos jelöléssel (pl. 1.2E13, azaz 1.2*10^13) vagy kiírod végig pontosan.
Nos, mivel a generáló Perl script szar, ezért az tudományos jelölést használ ahelyett, hogy kiírná pontosan. Ez a baj, mivel az assembler ezt nem tudja parzolni.

Nézz utána: https://en.wikipedia.org/wiki/Scientific_notation#E_notation

Precízebben mondva, szabadon választhatunk a 'use bignum;' és a 64-bites perl telepítése között. Az egyszerűség kedvéért most az előbbit választottam (egy-egy sor kommentet feláldozva):


sed_repl 's|# March, June 2010|use bigint;|' crypto/modes/asm/ghash-x86_64.pl
sed_repl 's|# Dual-ABI styling rules.|use bigint;|' crypto/perlasm/x86_64-xlate.pl

Csak erdekesseg miatt kerdeznem, hogy miert forgatsz openssl-t forrasbol?

"GNU assembler (GNU Binutils for Debian) 2.20.1-system.20100303"

- (mindegy, latom hogy mas a para)