Itt az OpenSSL-3.0.0-beta1

Már AIX-on is szinte fordul. Konkrétabban: nem fordul, az első hiba:

crypto/bn/ppc64-mont-fixed.s:4 .p2align 5,,31 -- Assembler: Error In Syntax

Szerk.:
https://www.openssl.org/blog/blog/2018/11/28/version/
Itt ígérik, hogy a verziószám a hármastól kevésbé agilis (mondhatni unalmasan konzervatív) lesz: a 3 a major, a 0.0 a minor (ok, ezt leegyszerűsítettem).
A teória ugye az, hogy a 3.x.y shared object kompatibilisen használható a 3.z.w helyett, ha a x>z vagy x==z és y>=w. Hát reméljük a legjobbakat.

Hozzászólások

Szerkesztve: 2021. 06. 24., cs – 10:45

Mondjuk a 'gas'-nak sikerül: gas -a64 -mpower7 crypto/bn/ppc64-mont-fixed.s

Olvasmány: https://www.ibm.com/docs/en/ssw_aix_72/assembler/assembler_pdf.pdf

The .align pseudo-op is normally used in a control section (csect) that contains data.If the Number parameter evaluates to 0, alignment occurs on a byte boundary. If the Number parameterevaluates to 1, alignment occurs on a halfword boundary. If the Number parameter evaluates to 2,alignment occurs on a word boundary. If the Number parameter evaluates to 3, alignment occurs on a doubleword boundary.
 

.align 0 -- DS 0C a /360-as szintaxissal mondva
.aling 1 -- DS 0H
.align 2 -- DS 0F
.align 3 -- DS 0D

Itt egy kolléga: https://stackoverflow.com/questions/21546946/what-does-p2align-do-in-as…
Megfejtés: https://sourceware.org/binutils/docs/as/P2align.html

.p2align 5,,31 -- 32-byte határra illessze, de csak akkor, ha ezt legfeljebb 31 byte beillesztésével meg tudja oldani.

A source eleje ilyen:


.machine "any"
.csect   .text[PR],7
.align   5
.p2align 5,,31

Ebből arra gondolok, hogy rosszul néztem a leírást, és a .align is tud 32-bájtos határra illeszteni. És valóban, azt írja, hogy:
Number: Specifies an absolute expression that evaluates to an integer value from 0 to 12, inclusive.The value indicates the log base 2 of the desired alignment. For example, an alignment of 8 (a doubleword) would be represented by an integer value of 3; an alignment of 4096 (one page) would be represented by an integer value of 12.

 

Szerk:
a .cfi_startproc és .cfi_endproc sincs az ínyére

Egy régebbi Assembler (AIX 5.3, CPU Power7) meg ezt az utasítást nem szereti: mtvsrd (Move To VSR Doubleword XX1-form)
https://fileadmin.cs.lth.se/cs/education/EDAN25/PowerISA_V2.07_PUBLIC.p…

Szerk: a stxv meg lxv már a 'gas'-nak sem megy (2.25)

A gas-2.36 lesz a barátunk (persze az sem fordul elsőre, dehát meg is sértődnénk, ha fordulna), a -many opcióval. Ilyesmit hevenyészhetünk hozzá:

if [ $(uname -v) -lt 7 -a -f /usr/local/bin/gas ]; then
    cat >local_64_gcc <<"DONE"
#!/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 -many -o "$obj_asm" "$src_asm"
fi
DONE
    chmod +x local_64_gcc
    export CC="$(pwd -P)/local_64_gcc"

Most ezen akadtunk meg:

crypto/aes/aesp8-ppc.s:1206: Error: invalid conditional option

cat -n crypto/aes/aesp8-ppc.s

  1204  .aes_p8_ctr32_encrypt_blocks:
  1205          cmpldi  5,1
  1206          bclr    14,0  # NevemTeve: 14(10) = 01110(2)

https://www.ibm.com/docs/en/aix/7.2?topic=set-bclr-bcr-branch-condition…
 

A jó hír pedig az, hogy cmpldi 5,1 ugyanaz, mint a cmpli 0,1,5,1, a jelentése pedig "Compare Logical Word Immediate", ahol az első 0 a BF (Condition Register BitField), az 1 az 'L' (ez valószínűleg a 64-bites működést jelenti), az 5 a regiszter (r5), a végén az 1 pedig a 16 bites literál

Szóval ez simán egy BRANCH-IF-EQUAL akarna lenni, de a 14 (01110(2)) sokkal menőbb, különösen, az IBM is különféle értelmezési lehetőségekről ír (PowerPC, Power, V2.00 Encoding):


PowerPC 011zy: z=0, y=likelyhood
Power:  011zy: z,y tetszőleges, ignored
V2.00:  0111y: y= likelyhood (itt kicsit belebarmoltam, a PDF-ben kb. ugyanez kicsit bonyolultabban van)

Ezt is fejleszteni kellett, ugyanis nagy előrelépés történt: a mocsolade.s fordításának ez eredménye már nem mocsolade.o hanem mashol/lib-mocsolade.o


#!/bin/sh
f_asm=0
object_module=
fnext=

for i; do
    d_arg=$(dirname  -- "$i")
    b_arg=$(basename -- "$i" .s)
    if [ "$fnext" = 'o' ]; then
        object_module="$i";
        fnext=
    elif [ "$d_arg/$b_arg.s" = "$i" ]; then
        echo "Nebassz, assembly: $d_arg/$b_arg.s"
        src_asm="$d_arg/$b_arg.s"
        f_asm=1
        fnext=
    elif [ "$i" = "-o" ]; then
        fnext='o';
    fi
done
if [ $f_asm -eq 0 ]; then
    set -x
    exec gcc "$@"
else
    if [ -z "$object_module" ]; then
        d_asm=$(dirname  -- "$src_asm")
        b_asm=$(basename -- "$src_asm" .s)
        object_module="$d_asm/$b_asm.o"
    fi
    set -x
    exec /usr/local/bin/gas -a64 -mpower7 -many -o "$object_module" "$src_asm"
fi

Az örökséggel is csak a baj van...


gcc -maix64 -pthread -mtune=native -maix64 -std=gnu11 -pthread -std=gnu99 -O3 -L. -Wl,-G,-bsymbolic,-bnoentry -Wl,-bsvr4 -maix64 -L/usr/local/lib64 -pthread -Wl,-bernotok \
        -o providers/legacy.so -Wl,-bE:providers/legacy.ld \
        providers/legacy-dso-legacyprov.o \
        providers/liblegacy.a providers/libcommon.a -lcrypto -lz -pthread 
ld: 0711-317 ERROR: Undefined symbol: .sha256_block_p8
ld: 0711-317 ERROR: Undefined symbol: .sha256_block_ppc
ld: 0711-317 ERROR: Undefined symbol: .sha512_block_p8
ld: 0711-317 ERROR: Undefined symbol: .sha512_block_ppc
ld: 0711-317 ERROR: Undefined symbol: .ChaCha20_ctr32_int
ld: 0711-317 ERROR: Undefined symbol: .ChaCha20_ctr32_vmx
ld: 0711-317 ERROR: Undefined symbol: .ChaCha20_ctr32_vsx
ld: 0711-317 ERROR: Undefined symbol: .poly1305_init_int
ld: 0711-317 ERROR: Undefined symbol: poly1305_blocks_vsx
ld: 0711-317 ERROR: Undefined symbol: poly1305_emit
ld: 0711-317 ERROR: Undefined symbol: poly1305_blocks

Azt mondanám, hogy ezek igazából nem kellenek a legacy-nak, csak szervezési ügyetlenség miatt szerepelnek extern-ként a történetben. Vagy azt mondom neki, hogy `-Wl,-berok` és felejtsük el egymást, vagy hozzácsapom a libcrypto-hoz, hogy mégis exportálja őket. Persze mindkettő gányolás, úgyhogy megcsinálom a másodikat.

Szerkesztve: 2021. 06. 25., p – 07:16

Ha egy kicsit nem figyelünk, a Configure bepróbálkozik egy ilyennel:


lsattr -E -O -l `lsdev -c processor | awk '{print $1;exit}'` |
grep -i powerpc) >/dev/null 2>&1

Ebből a csukózárójel látszik problémásnak, mivel nincs nyitózárójel.

Most éppen ilyeneket keres rajtam, nyilván én dugtam el őket előle:

ld: 0711-317 ERROR: Undefined symbol: .WPACKET_sub_allocate_bytes__
ld: 0711-317 ERROR: Undefined symbol: .WPACKET_init_static_len
ld: 0711-317 ERROR: Undefined symbol: .WPACKET_put_bytes__
ld: 0711-317 ERROR: Undefined symbol: .WPACKET_cleanup
ld: 0711-317 ERROR: Undefined symbol: .WPACKET_start_sub_packet_len__
ld: 0711-317 ERROR: Undefined symbol: .WPACKET_memcpy
ld: 0711-317 ERROR: Undefined symbol: .WPACKET_close
Szerkesztve: 2021. 07. 08., cs – 10:31

Elkezdhetünk gondolkodni a függő komponenseken:

wget
lynx
curl
apr/apr-util/httpd/tomcat-connector/tomcat-native
php8: --with-openssl=no (vagyis nem megy az OpenSSL3-mal)
libzip
cmake
git

Valahogy bekerült a libcrypto.la-ba dependenciaként a 'libcommon.a' meg a 'libdefault.a'. Nyomozni kellene.

Szerkesztve: 2021. 07. 08., cs – 07:47

Azt mondja a tomcat_native-1.2.30, hogy ő szívesen venne egy OCSP_HTTP_parse_url nevű metódust, hamár OPENSSL3.
Csak sajnos ilyen nincsen. Nemhogy az exportált szimbóleumok között, de még a ChangeLog-ban sem.
Na ha megnézzük a manualt, minden tiszta lesz:


        int OSSL_parse_url(const char *url, char **pscheme, char **puser, char **phost,
                           char **pport, int *pport_num,
                           char **ppath, char **pquery, char **pfrag);
        int OSSL_HTTP_parse_url(const char *url,
                                int *pssl, char **puser, char **phost,
                                char **pport, int *pport_num,
                                char **ppath, char **pquery, char **pfrag);

Nem OCSP_, hanem OSSL_. Nyilván sokszorosára növeli a sebességet is egy ilyen átnevezés. Persze ettől még sokminden deprecated lett, de egyelőre működik.

https://bz.apache.org/bugzilla/show_bug.cgi?id=65441