-
-
Notifications
You must be signed in to change notification settings - Fork 11.1k
Closed
Description
Building OpenSSL 1.1.1b from source on Sparc Solaris 11.1 w/ gcc 4.8.2 and binutils 2.23.2 configured to use GNU ld (full config output at the bottom FWIW).
The following error occurs while linking libcrypto.so:
.../bin/ld: read-only segment has dynamic relocations.
collect2: error: ld returned 1 exit status
The error disappears if crypto/ec/ecp_nistz256-sparcv9.o is excluded from the ld arguments; looking at the problematic .o:
$ objdump -r .../openssl-1.1.1b/crypto/ec/ecp_nistz256-sparcv9.o
.../openssl-1.1.1b/crypto/ec/ecp_nistz256-sparcv9.o: file format elf64-sparc-sol2
RELOCATION RECORDS FOR [.text]:
OFFSET TYPE VALUE
0000000000025da4 R_SPARC_PC22 _GLOBAL_OFFSET_TABLE_-0x0000000000000004
0000000000025dac R_SPARC_PC10 _GLOBAL_OFFSET_TABLE_+0x0000000000000004
0000000000025db0 R_SPARC_GOT22 OPENSSL_sparcv9cap_P
0000000000025db4 R_SPARC_GOT10 OPENSSL_sparcv9cap_P
0000000000025f24 R_SPARC_PC22 _GLOBAL_OFFSET_TABLE_-0x0000000000000004
0000000000025f2c R_SPARC_PC10 _GLOBAL_OFFSET_TABLE_+0x0000000000000004
0000000000025f30 R_SPARC_GOT22 OPENSSL_sparcv9cap_P
0000000000025f34 R_SPARC_GOT10 OPENSSL_sparcv9cap_P
0000000000025f4c R_SPARC_WDISP22 ecp_nistz256_point_add_vis3
0000000000026484 R_SPARC_PC22 _GLOBAL_OFFSET_TABLE_-0x0000000000000004
000000000002648c R_SPARC_PC10 _GLOBAL_OFFSET_TABLE_+0x0000000000000004
0000000000026490 R_SPARC_GOT22 OPENSSL_sparcv9cap_P
0000000000026494 R_SPARC_GOT10 OPENSSL_sparcv9cap_P
Looking at crypto/ec/asm/ecp_nistz256-sparcv9.pl, it appears that the problem might be with ecp_nistz256_point_add_vis3 being .globl as well as referenced in a branch instruction. The following change appears to fix the problem:
--- openssl-1.1.1b.orig/crypto/ec/asm/ecp_nistz256-sparcv9.pl 2019-02-26 09:15:30.000000000 -0400
+++ openssl-1.1.1b/crypto/ec/asm/ecp_nistz256-sparcv9.pl 2019-05-16 00:31:36.000000000 -0400
@@ -2301,7 +2301,6 @@
# !in1infty, !in2infty and result of check for zero.
$code.=<<___;
-.globl ecp_nistz256_point_add_vis3
.align 32
ecp_nistz256_point_add_vis3:
save %sp,-STACK64_FRAME-32*18-32,%sp
$ perl .../openssl-1.1.1b/configdata.pm --dump
Command line (with current working directory = .../openssl-1.1.1b):
.../perl64-5.10.1/bin/perl ./Configure --prefix=.../openssl enable-shared enable-threads enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers enable-ssl-trace solaris64-sparcv9-gcc -Wl,-rpath,\$$ORIGIN/../lib/sparcv9
Perl information:
perl
5.10.1 for sun4-solaris-64
Enabled features:
aria
asm
async
autoalginit
autoerrinit
autoload-config
bf
blake2
camellia
capieng
cast
chacha
cmac
cms
comp
ct
deprecated
des
dgram
dh
dsa
dso
dtls
dynamic-engine
ec
ec2m
ecdh
ecdsa
engine
err
filenames
gost
hw(-.+)?
idea
makedepend
md4
mdc2
multiblock
nextprotoneg
pinshared
ocb
ocsp
pic
poly1305
posix-io
psk
rc2
rc4
rdrand
rfc3779
rmd160
scrypt
seed
shared
siphash
sm2
sm3
sm4
sock
srp
srtp
sse2
ssl
ssl-trace
static-engine
stdio
tests
threads
tls
ts
ui-console
whirlpool
weak-ssl-ciphers
ssl3
ssl3-method
tls1
tls1-method
tls1_1
tls1_1-method
tls1_2
tls1_2-method
tls1_3
dtls1
dtls1-method
dtls1_2
dtls1_2-method
Disabled features:
afalgeng [not-linux]
asan [default] OPENSSL_NO_ASAN
crypto-mdebug [default] OPENSSL_NO_CRYPTO_MDEBUG
crypto-mdebug-backtrace [default] OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
devcryptoeng [default] OPENSSL_NO_DEVCRYPTOENG
ec_nistp_64_gcc_128 [default] OPENSSL_NO_EC_NISTP_64_GCC_128
egd [default] OPENSSL_NO_EGD
external-tests [default] OPENSSL_NO_EXTERNAL_TESTS
fuzz-libfuzzer [default] OPENSSL_NO_FUZZ_LIBFUZZER
fuzz-afl [default] OPENSSL_NO_FUZZ_AFL
heartbeats [default] OPENSSL_NO_HEARTBEATS
md2 [default] OPENSSL_NO_MD2 (skip crypto/md2)
msan [default] OPENSSL_NO_MSAN
rc5 [default] OPENSSL_NO_RC5 (skip crypto/rc5)
sctp [default] OPENSSL_NO_SCTP
ubsan [default] OPENSSL_NO_UBSAN
unit-test [default] OPENSSL_NO_UNIT_TEST
zlib [default]
zlib-dynamic [default]
Config target attributes:
AR => "ar",
ARFLAGS => "r",
CC => "gcc",
CFLAGS => "-Wall -O3",
HASHBANGPERL => "/usr/bin/env perl",
RANLIB => "ranlib",
RC => "windres",
aes_asm_src => "aes_core.c aes_cbc.c aes-sparcv9.S aest4-sparcv9.S aesfx-sparcv9.S",
aes_obj => "aes_core.o aes_cbc.o aes-sparcv9.o aest4-sparcv9.o aesfx-sparcv9.o",
apps_aux_src => "",
apps_init_src => "",
apps_obj => "",
bf_asm_src => "bf_enc.c",
bf_obj => "bf_enc.o",
bn_asm_src => "asm/sparcv8plus.S sparcv9-mont.S sparcv9a-mont.S vis3-mont.S sparct4-mont.S sparcv9-gf2m.S",
bn_obj => "asm/sparcv8plus.o sparcv9-mont.o sparcv9a-mont.o vis3-mont.o sparct4-mont.o sparcv9-gf2m.o",
bn_ops => "BN_LLONG RC4_CHAR",
build_file => "Makefile",
build_scheme => [ "unified", "unix" ],
cast_asm_src => "c_enc.c",
cast_obj => "c_enc.o",
cflags => "-m64 -mcpu=ultrasparc -pthread",
chacha_asm_src => "chacha_enc.c",
chacha_obj => "chacha_enc.o",
cmll_asm_src => "camellia.c cmll_misc.c cmll_cbc.c cmllt4-sparcv9.S",
cmll_obj => "camellia.o cmll_misc.o cmll_cbc.o cmllt4-sparcv9.o",
cppflags => "",
cpuid_asm_src => "sparcv9cap.c sparccpuid.S",
cpuid_obj => "sparcv9cap.o sparccpuid.o",
defines => [ ],
des_asm_src => "des_enc-sparc.S fcrypt_b.c dest4-sparcv9.S",
des_obj => "des_enc-sparc.o fcrypt_b.o dest4-sparcv9.o",
disable => [ ],
dso_extension => ".so",
dso_scheme => "dlfcn",
ec_asm_src => "ecp_nistz256.c ecp_nistz256-sparcv9.S",
ec_obj => "ecp_nistz256.o ecp_nistz256-sparcv9.o",
enable => [ ],
ex_libs => "-lsocket -lnsl -ldl -pthread",
exe_extension => "",
includes => [ ],
keccak1600_asm_src => "keccak1600.c",
keccak1600_obj => "keccak1600.o",
lflags => "",
lib_cflags => "",
lib_cppflags => "-DFILIO_H -DB_ENDIAN -DBN_DIV2W",
lib_defines => [ ],
md5_asm_src => "md5-sparcv9.S",
md5_obj => "md5-sparcv9.o",
modes_asm_src => "ghash-sparcv9.S",
modes_obj => "ghash-sparcv9.o",
module_cflags => "-fPIC",
module_cxxflags => "",
module_ldflags => "-shared",
multilib => "/64",
padlock_asm_src => "",
padlock_obj => "",
perlasm_scheme => "void",
poly1305_asm_src => "poly1305-sparcv9.S",
poly1305_obj => "poly1305-sparcv9.o",
rc4_asm_src => "rc4_enc.c rc4_skey.c",
rc4_obj => "rc4_enc.o rc4_skey.o",
rc5_asm_src => "rc5_enc.c",
rc5_obj => "rc5_enc.o",
rmd160_asm_src => "",
rmd160_obj => "",
sha1_asm_src => "sha1-sparcv9.S sha256-sparcv9.S sha512-sparcv9.S",
sha1_obj => "sha1-sparcv9.o sha256-sparcv9.o sha512-sparcv9.o",
shared_cflag => "-fPIC",
shared_defines => [ ],
shared_extension => ".so",
shared_extension_simple => ".so",
shared_ldflag => "-shared",
shared_rcflag => "",
shared_target => "solaris-gcc",
thread_defines => [ ],
thread_scheme => "pthreads",
unistd => "<unistd.h>",
uplink_aux_src => "",
uplink_obj => "",
wp_asm_src => "wp_block.c",
wp_obj => "wp_block.o",
Recorded environment:
AR =
BUILDFILE =
CC = .../bin/gcc -m64
CROSS_COMPILE =
CXX = .../bin/g++ -m64
HASHBANGPERL =
OPENSSL_LOCAL_CONFIG_DIR =
PERL = .../perl64-5.10.1/bin/perl
RANLIB =
RC =
WINDRES =
__CNF_CFLAGS =
__CNF_CPPDEFINES =
__CNF_CPPFLAGS =
__CNF_CPPINCLUDES =
__CNF_CXXFLAGS =
__CNF_LDFLAGS =
__CNF_LDLIBS =
Makevars:
AR = ar
ARFLAGS = r
CC = .../bin/gcc -m64
CFLAGS = -Wall -O3
CPPDEFINES =
CPPFLAGS =
CPPINCLUDES =
CXX = .../bin/g++ -m64
CXXFLAGS =
HASHBANGPERL = .../perl64-5.10.1/bin/perl
LDFLAGS = -Wl,-rpath,\$$ORIGIN/../lib/sparcv9
LDLIBS =
PERL = .../perl64-5.10.1/bin/perl
RANLIB = ranlib
RC = windres
NOTE: These variables only represent the configuration view. The build file
template may have processed these variables further, please have a look at the
build file for more exact data:
.../openssl-1.1.1b/Makefile
build file:
.../openssl-1.1.1b/Makefile
build file templates:
.../openssl-1.1.1b/Configurations/common0.tmpl
.../openssl-1.1.1b/Configurations/unix-Makefile.tmpl
.../openssl-1.1.1b/Configurations/common.tmpl
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels