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.
- NevemTeve blogja
- A hozzászóláshoz be kell jelentkezni
- 349 megtekintés
Hozzászólások
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
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
Azt mondani sem kell, hogy az AIX7-ből nem lehet visszahozni as Assembler-t AIX5/6-ba, unresolved externek miatt (___strcmp,___strcpy), sem pedig újralinkelni, mivel 'stripped' szegény.
- A hozzászóláshoz be kell jelentkezni
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"
- A hozzászóláshoz be kell jelentkezni
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)
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Van, aki még itt is különbséget keresne:
AIX: GNU assembler version 2.36.1 () using BFD version (GNU Binutils) 2.36.1
Linux: GNU assembler version 2.25 (x86_64-linux-gnu) using BFD version (GNU Binutils for Debian) 2.25
Segítség: az üres zárójelpárra gondolok az első sorban: ott kellene legyen a host-triplet, vagy micsoda.
Na ez a TARGET_ALIAS szimbóleum, defined in config.h:
/* Target alias. */
#define TARGET_ALIAS ""
- A hozzászóláshoz be kell jelentkezni
sed_repl 's/#define TARGET_ALIAS ""/#define TARGET_ALIAS TARGET_CANONICAL/' config.h
Eredmény:
$ /usr/local/bin/as -v </dev/null
GNU assembler version 2.36.1 (powerpc-ibm-aix7.2.5.0) using BFD version (GNU Binutils) 2.36.1
- A hozzászóláshoz be kell jelentkezni
patchet kuldtel be?
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Valahogy bekerült a libcrypto.la-ba dependenciaként a 'libcommon.a' meg a 'libdefault.a'. Nyomozni kellene.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
ssh most hirtelen ezzel állt elő:
$ git push
ssh: relocation error: ssh: symbol EVP_CIPHER_CTX_key_length, version OPENSSL_3.0.0 not defined in file libcrypto.so.3 with link time reference
Na most ilyen tényleg nincs, de valószínűnek tűnik, hogy korábban volt, csak időközben átnevezték/megszüntették. Most ilyenek vannak:
nm -D /usr/local/lib64/libcrypto.so.3 | grep EVP_CIPHER_CTX.*key_length
00000000001eb9d0 T EVP_CIPHER_CTX_get_key_length@@OPENSSL_3.0.0
00000000001e7d90 T EVP_CIPHER_CTX_set_key_length@@OPENSSL_3.0.0
És tényleg, alpha17 és beta1 között változott az "evp.h":
int EVP_CIPHER_CTX_get_key_length(const EVP_CIPHER_CTX *ctx);
# define EVP_CIPHER_CTX_key_length EVP_CIPHER_CTX_get_key_length
A logikus lépés az, hogy frissítek beta2-re: https://www.openssl.org/source/
- A hozzászóláshoz be kell jelentkezni
Továbbá:
httpd: Syntax error on line 139 of /usr/local/etc/apache2/httpd.conf:
Cannot load libexec64/apache2/mod_ssl.so into server:
/usr/local/libexec64/apache2/mod_ssl.so:
undefined symbol: ERR_GET_FUNC
Értelemszerűen ezt kell csinálni:
OSLDIR=$(set -- $(openssl version -d | tr -d '"'); echo ${2%/ssl}/include)
grep ERR_GET_FUNC "$OSLDIR" || \
sed_repl 's;ERR_GET_FUNC(ERR_peek_last_error());0;' \
modules/ssl/ssl_engine_init.c
- A hozzászóláshoz be kell jelentkezni
Egy újabb gépen (AIX7.2, gcc-8.3.0) meg a binutils-2.36.1/libiberty
nem óhajt fordulni:
In file included from ./cp-demangle.c:138:
./../include/libiberty.h:317:74: error: expected ',' or ';' before 'ATTRIBUTE_RESULT_SIZE_1'
extern void *xmalloc (size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL
ATTRIBUTE_RESULT_SIZE_1 ATTRIBUTE_WARN_UNUSED_RESULT;
#define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
#define ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__))
-- ATTRIBUTE_RESULT_SIZE_1 -- undefined
-- ATTRIBUTE_WARN_UNUSED_RESULT -- undefined
- A hozzászóláshoz be kell jelentkezni
Valahogy volt a gépen egy /usr/local/include/ansidecl.h
fájl, és megzavarta a fordítást.
- A hozzászóláshoz be kell jelentkezni
Lehet, hogy ebből nem lesz 32-bites verzió:
ld: 0711-317 ERROR: Undefined symbol: .__atomic_is_lock_free
ld: 0711-317 ERROR: Undefined symbol: .__atomic_fetch_or_8
ld: 0711-317 ERROR: Undefined symbol: .__atomic_load_8
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
Esetleg a LDFLAGS-ba egy ilyen részlet: $(gcc -pthread -print-file-name=libatomic.a)
- A hozzászóláshoz be kell jelentkezni
Egy másik készüléken:
gcc: error: unrecognized command line option '-no-whole-archive'
gcc version 4.8.3 (GCC)
- A hozzászóláshoz be kell jelentkezni