as: assem tudtam, mi hiányzik nekem...

 ( NevemTeve | 2016. március 22., kedd - 15:06 )

Hát az, hogy ne forduljon az OpenSSL-1.0.2g az új Debian/Jessie-n 64-biten.

cd /usr/local/src/openssl-1.0.2g/crypto/md5
# as --64 md5-x86_64.s
md5-x86_64.s: Assembler messages:
md5-x86_64.s:43: Error: 0xd76aa478 out range of signed 32bit displacement
...
md5-x86_64.s:633: Error: 0xeb86d391 out range of signed 32bit displacement
# as -V
GNU assembler version 2.25 (x86_64-linux-gnu) using BFD version (GNU Binutils for Debian) 2.25

a régi gépen 2.20.1 az as verziószám, ott fordul.

Kieg: na de a source is különbözik. Amit egy perl-script generál... jajj de ismerős ez valahonnan...
http://hup.hu/node/141733

20160330.1413: Na így készül a source:

openssl-1.0.2g/crypto/md5$ make md5-x86_64.s
asm/md5-x86_64.pl  > md5-x86_64.s

20160330.1724: Úgy látom, ezt a hibát 2009-ben már megoldották: https://rt.openssl.org/Ticket/Display.html?id=2094&user=guest&pass=guest

20160330.1843: Ha sikerülne is egyedi tákolással megfixálni a md5-öt, ugyanez a gond van a sha1-nél is. (Nyilván a sha2-nél is, csak még nem tartok ott.)

20160331.2030: Van egy komponens, ami az Assembly source-ön végez áldásos transzformációt: crypto/perlasm/x86_64-xlate.pl, valószínűleg azt is meg kellene bámulni.

20160401.1118: Most éppen nem tudom reprodukálni a hibát, de legalább azon örömködhetek ismét, hogy milyen verziószámot (és DT_SONAME)-t fejleszt ki az OpenSSL-1.0.2g önmagából, ha nem erőltetünk rá semmit:

$ readelf -d libssl.so
  Tag        Type                         Name/Value
 0x000000000000000e (SONAME)             Library soname: [libssl.so.1.0.0]
 0x0000000000000001 (NEEDED)             Shared library: [libcrypto.so.1.0.0]

Szóval a drága emberek szerint 1.0.0a és 1.0.2g között minden mindennel kompatibilis, ahogy kell. Hogy ez azért nem egészen így van, arról itt esett szó: http://hup.hu/node/146018

20160401.1219: ugyanez szelíd rábeszélés után:

$ readelf -d libssl.so.1.0.2.g
  Tag        Type                         Name/Value
 0x000000000000000e (SONAME)             Library soname: [libssl.so.1.0.2]
 0x0000000000000001 (NEEDED)             Shared library: [libcrypto.so.1.0.2]

Még azt is érdekes kérdes lehet, hogy hová települtek a pkgconfig *.pc fájljai...
Szerk: megkerültek, öröm boldogság... most ne nyúljunk hozzá 1.0.2h-ig...

20180917.1613 A jó hír az, hogy az 1.1.1-ben már nincs AS és ASFLAGS a Makefile-ban, hanem a gcc-re bízzák, hogy olyan Assemblert találjon, amilyet csak akar. Történetesen AIX5.3 esetén olyat talál, aminek az Altivec a távoli jövő ködös ígérete. Mondjuk abban igaza van, hogy a CPU nem tud AltiVec-et, de az OpenSSL valahogy úgy képzeli el, hogy lefordítja kétféleképpen (vektorosan és simán), aztán futáskor választja ki, hogy melyik legyen.

20180917.1634 A következő rendkívül tudományos script segít:

#!/bin/sh
f_asm=0
for i; do
    d_arg=$(dirname  -- "$i")
    b_arg=$(basename -- "$i" .s)
    if [ "$d_arg/$b_arg.s" = "$i" ]; then
        echo "Nebassz, assembly: $d_arg/$b_arg.s"
        src_asm="$d_arg/$b_arg.s"
        obj_asm="$d_arg/$b_arg.o"
        f_asm=1
    fi
done
if [ $f_asm -eq 0 ]; then
    set -x
    exec gcc "$@"
else
    set -x
    exec /usr/local/bin/gas -a64 -mpower5 -o "$obj_asm" "$src_asm"
fi

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Note to self: ki kellene próbálni, hogy az as(1) -J opciója segít-e valamit.

Edit: eltaláltad, nem segít. A binutils-2.25/gas/tc-i386.c:i386_finalize_displacement generálja a hibaüzenetet, nem látszik benne olyan elágazás, hogy ne legyen belőle hiba.