OpenSSL-3.2.0 on AIX - snafu

Természetesen nem fordul elősőre; de szerintem most nem fáradtak új hiba kifejlesztésével, csak felmelegítettek egy korábbit. Legalábbis volt más pár Assembly-s hiba.

crypto/aes/aesp8-ppc.s: line 2412: invalid opcode or pseudo-op

Vagy csak fejlődött az AltiVec, az Assembler meg nem?


        vperm   0,2,4,5
        subi    10,10,31
        vxor    17,8,23
        vsrab   11,8,9
        vaddubm 8,8,8
        vand    11,11,10
        vxor    7,0,17
        xxlor   32+1, 0, 0
        vpermxor        8, 8, 11, 1

Hozzászólások

Szerkesztve: 2023. 11. 27., h – 11:35

Adtam neki egy ilyet:

-Wa,-mpower2

Természetesen ettől más gondja lett, közönséges C-programok fordítása sem sikerül:

Instruction ld is not implemented in the current assembly mode PPC64.
Instruction std is not implemented in the current assembly mode PPC64.

Egy másik üzemmódban meg ezt nem szereti:


    bclr  14,0
Error: invalid conditional option

Nem tudod letiltani (make opcio vagy egyeb configure/cmake/barmi opcioval) az *.s acceleratorokat? Vsz megvan ez C-ben is irva ottan... 

Akkor valami -march=... opcio hianyzik es/vagy azt rontja el a configure/cmake/barmi. Raadasul ujabb gcc-k tudnak trukkosek lenni, en is futottam mar be teljesen hasonloba. Szoval siman lehet hogy egy regebbi configure/cmake/barmi mar nem jo kombinacioban generalja le a -march=... opciokat egy ujabb cc-nek. 

Az SSL-nel maradva: 10Gbit-en nalam is ez a szuk keresztmetszet... kezzel beallitva az aes128-ctr ciphert mar egeszen jo a helyzet, es lehet hogy pont a hasonlo faradozasok miatt. Annyira nem mentem utana, meg annyira a gyakorlatban nem akkora problema ez az egesz, de azert absz merheto dolgokrol van itten szo.

De mas hasonlo problemaknal, pl GF-ek feletti stream-eken ertelmezett aritmetika eseten akar 3x szorzot is el lehet erni par joliranyzott/makrositott/noinline assembly rutinnal. Mert a gcc meg meg igy 2023-ban sem nem arra van optimalizalva hogy ilyeneket optimalizaljon. Ott is az volt hogy megneztem a disasm-t, baromira unhatekony lett a kod, megirtam rendesen, es ugy mar hatarozottan javult. Es 10-20-x kLOC mellett nem ezen a ~20 soron fog mulni az olvashatosag.

Ez van. 

Az vajon lehetséges, hogy a "-B /usr/local/bin" opció figyelmen kívül marad, és fixen a /usr/bin/as fut?

Szerk: Bingó, hardkódolva van a /usr/bin/as

Szerkesztve: 2023. 11. 27., h – 15:41

Ez most jó izgis lesz:

crypto/bio/bio_print.c: In function 'fmtfp':
crypto/bio/bio_print.c:824:1: error: unrecognizable insn:
 }
 ^
(insn 371 370 372 61 (set (reg/v:DI 251 [ intpart ])
        (unsigned_fix:DI (reg/v:DF 407 [ fvalue ]))) crypto/bio/bio_print.c:666 -1
     (nil))
crypto/bio/bio_print.c:824:1: internal compiler error: in extract_insn, at recog.c:2343
Please submit a full bug report,
with preprocessed source if appropriate.
See  for instructions.

Na jó, ez most én voltam: azt mondtam neki, hogy '-mcpu=native'. Jó hogy megsértődött, naná. (Egy gcc-5.4 volt egyébként.)

Bár még így is meg lehetett menteni ezzel a patch-csel:

--- crypto/bio/bio_print.bak    2023-11-23 14:20:19 +0100
+++ crypto/bio/bio_print.c      2023-11-27 16:21:45 +0100
@@ -663,7 +663,7 @@
         (void)doapr_outch(sbuffer, buffer, currlen, maxlen, '\0');
         return 0;
     }
-    intpart = (unsigned long)ufvalue;
+    intpart = (unsigned long)(long)ufvalue;

     /*
      * sorry, we only support 9 digits past the decimal because of our

Pillanatnyi álláspontom, hogy visszacsavarunk ahhoz a megoldáshoz, hogy a gcc-t ezzel a wrapperrel hívjuk meg:

#!/bin/sh
f_asm=0
next=
outfile=
for i; do
    d_arg=$(dirname  -- "$i")
    b_arg=$(basename -- "$i" .s)
    if [ "$next" = 'o' ]; then
        outfile="$i"
        next=
    elif [ "$i" = '-o' ]; then
        next='obj'
    elif [ "$d_arg/$b_arg.s" = "$i" ]; then
        echo "local_64_gcc_ itt egy Assembly source: $d_arg/$b_arg.s"
        src_asm="$d_arg/$b_arg.s"
        if [ "$outfile" = '' ]; then
            outfile="$d_arg/$b_arg.o"
        fi
        f_asm=1
        next=
    else
        next=
    fi
done
if [ $f_asm -eq 0 ]; then
    set -x
    exec gcc "$@"
else
    set -x
    exec /usr/local/bin/gas -a64 -mpower5 -o "$outfile" "$src_asm"
fi

Ja és végül összeakadt az OpenSSH-val, tehát visszacsináltam.

Ha valamiért régi OpenSSH-t akarok zlib-1.3-mal kombinálni, akkor configure megáll ezen a ponton:

  int a=0, b=0, c=0, d=0, n, v;
  n = sscanf(ZLIB_VERSION, "%d.%d.%d.%d", &a, &b, &c, &d);
  if (n != 3 && n != 4)
  exit(1);

Ugyanis ha ZLIB_VERSION "1.3", akkor sscanf válasza 2.

Szerk: a build-be tettem egy ilyen részt:
 

sed_repl 's/if (n != 3 && n != 4)/if (n<2)/' configure # zlib-1.3 verzioszama "1.3"
Szerkesztve: 2024. 04. 22., h – 11:24

Az OpenSSL-3.3.0 csak ennyit hibát bírt generálni:

ld: 0711-317 ERROR: Undefined symbol: ._isnan

bővebben:

._isnan                   [18]    ER PR ssl/quic/json_enc.c(ssl/quic/libssl-shlib-json_enc.o)

Szóval a számítástechnika is előre megy, nem hátra. De azért megnézem, van-e --without-quic opció valahol elrejtve.