1*ebfedea0SLionel Sambuc* System libcrypto.dylib and libssl.dylib are used by system ld on MacOS X. 2*ebfedea0SLionel Sambuc 3*ebfedea0SLionel Sambuc 4*ebfedea0SLionel Sambuc NOTE: The problem described here only applies when OpenSSL isn't built 5*ebfedea0SLionel Sambuc with shared library support (i.e. without the "shared" configuration 6*ebfedea0SLionel Sambuc option). If you build with shared library support, you will have no 7*ebfedea0SLionel Sambuc problems as long as you set up DYLD_LIBRARY_PATH properly at all times. 8*ebfedea0SLionel Sambuc 9*ebfedea0SLionel Sambuc 10*ebfedea0SLionel SambucThis is really a misfeature in ld, which seems to look for .dylib libraries 11*ebfedea0SLionel Sambucalong the whole library path before it bothers looking for .a libraries. This 12*ebfedea0SLionel Sambucmeans that -L switches won't matter unless OpenSSL is built with shared 13*ebfedea0SLionel Sambuclibrary support. 14*ebfedea0SLionel Sambuc 15*ebfedea0SLionel SambucThe workaround may be to change the following lines in apps/Makefile and 16*ebfedea0SLionel Sambuctest/Makefile: 17*ebfedea0SLionel Sambuc 18*ebfedea0SLionel Sambuc LIBCRYPTO=-L.. -lcrypto 19*ebfedea0SLionel Sambuc LIBSSL=-L.. -lssl 20*ebfedea0SLionel Sambuc 21*ebfedea0SLionel Sambucto: 22*ebfedea0SLionel Sambuc 23*ebfedea0SLionel Sambuc LIBCRYPTO=../libcrypto.a 24*ebfedea0SLionel Sambuc LIBSSL=../libssl.a 25*ebfedea0SLionel Sambuc 26*ebfedea0SLionel SambucIt's possible that something similar is needed for shared library support 27*ebfedea0SLionel Sambucas well. That hasn't been well tested yet. 28*ebfedea0SLionel Sambuc 29*ebfedea0SLionel Sambuc 30*ebfedea0SLionel SambucAnother solution that many seem to recommend is to move the libraries 31*ebfedea0SLionel Sambuc/usr/lib/libcrypto.0.9.dylib, /usr/lib/libssl.0.9.dylib to a different 32*ebfedea0SLionel Sambucdirectory, build and install OpenSSL and anything that depends on your 33*ebfedea0SLionel Sambucbuild, then move libcrypto.0.9.dylib and libssl.0.9.dylib back to their 34*ebfedea0SLionel Sambucoriginal places. Note that the version numbers on those two libraries 35*ebfedea0SLionel Sambucmay differ on your machine. 36*ebfedea0SLionel Sambuc 37*ebfedea0SLionel Sambuc 38*ebfedea0SLionel SambucAs long as Apple doesn't fix the problem with ld, this problem building 39*ebfedea0SLionel SambucOpenSSL will remain as is. Well, the problem was addressed in 0.9.8f by 40*ebfedea0SLionel Sambucpassing -Wl,-search_paths_first, but it's unknown if the flag was 41*ebfedea0SLionel Sambucsupported from the initial MacOS X release. 42*ebfedea0SLionel Sambuc 43*ebfedea0SLionel Sambuc 44*ebfedea0SLionel Sambuc* Parallell make leads to errors 45*ebfedea0SLionel Sambuc 46*ebfedea0SLionel SambucWhile running tests, running a parallell make is a bad idea. Many test 47*ebfedea0SLionel Sambucscripts use the same name for output and input files, which means different 48*ebfedea0SLionel Sambucwill interfere with each other and lead to test failure. 49*ebfedea0SLionel Sambuc 50*ebfedea0SLionel SambucThe solution is simple for now: don't run parallell make when testing. 51*ebfedea0SLionel Sambuc 52*ebfedea0SLionel Sambuc 53*ebfedea0SLionel Sambuc* Bugs in gcc triggered 54*ebfedea0SLionel Sambuc 55*ebfedea0SLionel Sambuc- According to a problem report, there are bugs in gcc 3.0 that are 56*ebfedea0SLionel Sambuc triggered by some of the code in OpenSSL, more specifically in 57*ebfedea0SLionel Sambuc PEM_get_EVP_CIPHER_INFO(). The triggering code is the following: 58*ebfedea0SLionel Sambuc 59*ebfedea0SLionel Sambuc header+=11; 60*ebfedea0SLionel Sambuc if (*header != '4') return(0); header++; 61*ebfedea0SLionel Sambuc if (*header != ',') return(0); header++; 62*ebfedea0SLionel Sambuc 63*ebfedea0SLionel Sambuc What happens is that gcc might optimize a little too agressively, and 64*ebfedea0SLionel Sambuc you end up with an extra incrementation when *header != '4'. 65*ebfedea0SLionel Sambuc 66*ebfedea0SLionel Sambuc We recommend that you upgrade gcc to as high a 3.x version as you can. 67*ebfedea0SLionel Sambuc 68*ebfedea0SLionel Sambuc- According to multiple problem reports, some of our message digest 69*ebfedea0SLionel Sambuc implementations trigger bug[s] in code optimizer in gcc 3.3 for sparc64 70*ebfedea0SLionel Sambuc and gcc 2.96 for ppc. Former fails to complete RIPEMD160 test, while 71*ebfedea0SLionel Sambuc latter - SHA one. 72*ebfedea0SLionel Sambuc 73*ebfedea0SLionel Sambuc The recomendation is to upgrade your compiler. This naturally applies to 74*ebfedea0SLionel Sambuc other similar cases. 75*ebfedea0SLionel Sambuc 76*ebfedea0SLionel Sambuc- There is a subtle Solaris x86-specific gcc run-time environment bug, which 77*ebfedea0SLionel Sambuc "falls between" OpenSSL [0.9.8 and later], Solaris ld and GCC. The bug 78*ebfedea0SLionel Sambuc manifests itself as Segmentation Fault upon early application start-up. 79*ebfedea0SLionel Sambuc The problem can be worked around by patching the environment according to 80*ebfedea0SLionel Sambuc http://www.openssl.org/~appro/values.c. 81*ebfedea0SLionel Sambuc 82*ebfedea0SLionel Sambuc* solaris64-sparcv9-cc SHA-1 performance with WorkShop 6 compiler. 83*ebfedea0SLionel Sambuc 84*ebfedea0SLionel SambucAs subject suggests SHA-1 might perform poorly (4 times slower) 85*ebfedea0SLionel Sambucif compiled with WorkShop 6 compiler and -xarch=v9. The cause for 86*ebfedea0SLionel Sambucthis seems to be the fact that compiler emits multiplication to 87*ebfedea0SLionel Sambucperform shift operations:-( To work the problem around configure 88*ebfedea0SLionel Sambucwith './Configure solaris64-sparcv9-cc -DMD32_REG_T=int'. 89*ebfedea0SLionel Sambuc 90*ebfedea0SLionel Sambuc* Problems with hp-parisc2-cc target when used with "no-asm" flag 91*ebfedea0SLionel Sambuc 92*ebfedea0SLionel SambucWhen using the hp-parisc2-cc target, wrong bignum code is generated. 93*ebfedea0SLionel SambucThis is due to the SIXTY_FOUR_BIT build being compiled with the +O3 94*ebfedea0SLionel Sambucaggressive optimization. 95*ebfedea0SLionel SambucThe problem manifests itself by the BN_kronecker test hanging in an 96*ebfedea0SLionel Sambucendless loop. Reason: the BN_kronecker test calls BN_generate_prime() 97*ebfedea0SLionel Sambucwhich itself hangs. The reason could be tracked down to the bn_mul_comba8() 98*ebfedea0SLionel Sambucfunction in bn_asm.c. At some occasions the higher 32bit value of r[7] 99*ebfedea0SLionel Sambucis off by 1 (meaning: calculated=shouldbe+1). Further analysis failed, 100*ebfedea0SLionel Sambucas no debugger support possible at +O3 and additional fprintf()'s 101*ebfedea0SLionel Sambucintroduced fixed the bug, therefore it is most likely a bug in the 102*ebfedea0SLionel Sambucoptimizer. 103*ebfedea0SLionel SambucThe bug was found in the BN_kronecker test but may also lead to 104*ebfedea0SLionel Sambucfailures in other parts of the code. 105*ebfedea0SLionel Sambuc(See Ticket #426.) 106*ebfedea0SLionel Sambuc 107*ebfedea0SLionel SambucWorkaround: modify the target to +O2 when building with no-asm. 108*ebfedea0SLionel Sambuc 109*ebfedea0SLionel Sambuc* Problems building shared libraries on SCO OpenServer Release 5.0.6 110*ebfedea0SLionel Sambuc with gcc 2.95.3 111*ebfedea0SLionel Sambuc 112*ebfedea0SLionel SambucThe symptoms appear when running the test suite, more specifically 113*ebfedea0SLionel Sambuctest/ectest, with the following result: 114*ebfedea0SLionel Sambuc 115*ebfedea0SLionel SambucOSSL_LIBPATH="`cd ..; pwd`"; LD_LIBRARY_PATH="$OSSL_LIBPATH:$LD_LIBRARY_PATH"; DYLD_LIBRARY_PATH="$OSSL_LIBPATH:$DYLD_LIBRARY_PATH"; SHLIB_PATH="$OSSL_LIBPATH:$SHLIB_PATH"; LIBPATH="$OSSL_LIBPATH:$LIBPATH"; if [ "debug-sco5-gcc" = "Cygwin" ]; then PATH="${LIBPATH}:$PATH"; fi; export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH PATH; ./ectest 116*ebfedea0SLionel Sambucectest.c:186: ABORT 117*ebfedea0SLionel Sambuc 118*ebfedea0SLionel SambucThe cause of the problem seems to be that isxdigit(), called from 119*ebfedea0SLionel SambucBN_hex2bn(), returns 0 on a perfectly legitimate hex digit. Further 120*ebfedea0SLionel Sambucinvestigation shows that any of the isxxx() macros return 0 on any 121*ebfedea0SLionel Sambucinput. A direct look in the information array that the isxxx() use, 122*ebfedea0SLionel Sambuccalled __ctype, shows that it contains all zeroes... 123*ebfedea0SLionel Sambuc 124*ebfedea0SLionel SambucTaking a look at the newly created libcrypto.so with nm, one can see 125*ebfedea0SLionel Sambucthat the variable __ctype is defined in libcrypto's .bss (which 126*ebfedea0SLionel Sambucexplains why it is filled with zeroes): 127*ebfedea0SLionel Sambuc 128*ebfedea0SLionel Sambuc$ nm -Pg libcrypto.so | grep __ctype 129*ebfedea0SLionel Sambuc__ctype B 0011659c 130*ebfedea0SLionel Sambuc__ctype2 U 131*ebfedea0SLionel Sambuc 132*ebfedea0SLionel SambucCuriously, __ctype2 is undefined, in spite of being declared in 133*ebfedea0SLionel Sambuc/usr/include/ctype.h in exactly the same way as __ctype. 134*ebfedea0SLionel Sambuc 135*ebfedea0SLionel SambucAny information helping to solve this issue would be deeply 136*ebfedea0SLionel Sambucappreciated. 137*ebfedea0SLionel Sambuc 138*ebfedea0SLionel SambucNOTE: building non-shared doesn't come with this problem. 139*ebfedea0SLionel Sambuc 140*ebfedea0SLionel Sambuc* ULTRIX build fails with shell errors, such as "bad substitution" 141*ebfedea0SLionel Sambuc and "test: argument expected" 142*ebfedea0SLionel Sambuc 143*ebfedea0SLionel SambucThe problem is caused by ULTRIX /bin/sh supporting only original 144*ebfedea0SLionel SambucBourne shell syntax/semantics, and the trouble is that the vast 145*ebfedea0SLionel Sambucmajority is so accustomed to more modern syntax, that very few 146*ebfedea0SLionel Sambucpeople [if any] would recognize the ancient syntax even as valid. 147*ebfedea0SLionel SambucThis inevitably results in non-trivial scripts breaking on ULTRIX, 148*ebfedea0SLionel Sambucand OpenSSL isn't an exclusion. Fortunately there is workaround, 149*ebfedea0SLionel Sambuchire /bin/ksh to do the job /bin/sh fails to do. 150*ebfedea0SLionel Sambuc 151*ebfedea0SLionel Sambuc1. Trick make(1) to use /bin/ksh by setting up following environ- 152*ebfedea0SLionel Sambuc ment variables *prior* you execute ./Configure and make: 153*ebfedea0SLionel Sambuc 154*ebfedea0SLionel Sambuc PROG_ENV=POSIX 155*ebfedea0SLionel Sambuc MAKESHELL=/bin/ksh 156*ebfedea0SLionel Sambuc export PROG_ENV MAKESHELL 157*ebfedea0SLionel Sambuc 158*ebfedea0SLionel Sambuc or if your shell is csh-compatible: 159*ebfedea0SLionel Sambuc 160*ebfedea0SLionel Sambuc setenv PROG_ENV POSIX 161*ebfedea0SLionel Sambuc setenv MAKESHELL /bin/ksh 162*ebfedea0SLionel Sambuc 163*ebfedea0SLionel Sambuc2. Trick /bin/sh to use alternative expression evaluator. Create 164*ebfedea0SLionel Sambuc following 'test' script for example in /tmp: 165*ebfedea0SLionel Sambuc 166*ebfedea0SLionel Sambuc #!/bin/ksh 167*ebfedea0SLionel Sambuc ${0##*/} "$@" 168*ebfedea0SLionel Sambuc 169*ebfedea0SLionel Sambuc Then 'chmod a+x /tmp/test; ln /tmp/test /tmp/[' and *prepend* 170*ebfedea0SLionel Sambuc your $PATH with chosen location, e.g. PATH=/tmp:$PATH. Alter- 171*ebfedea0SLionel Sambuc natively just replace system /bin/test and /bin/[ with the 172*ebfedea0SLionel Sambuc above script. 173*ebfedea0SLionel Sambuc 174*ebfedea0SLionel Sambuc* hpux64-ia64-cc fails blowfish test. 175*ebfedea0SLionel Sambuc 176*ebfedea0SLionel SambucCompiler bug, presumably at particular patch level. It should be noted 177*ebfedea0SLionel Sambucthat same compiler generates correct 32-bit code, a.k.a. hpux-ia64-cc 178*ebfedea0SLionel Sambuctarget. Drop optimization level to +O2 when compiling 64-bit bf_skey.o. 179*ebfedea0SLionel Sambuc 180*ebfedea0SLionel Sambuc* no-engines generates errors. 181*ebfedea0SLionel Sambuc 182*ebfedea0SLionel SambucUnfortunately, the 'no-engines' configuration option currently doesn't 183*ebfedea0SLionel Sambucwork properly. Use 'no-hw' and you'll will at least get no hardware 184*ebfedea0SLionel Sambucsupport. We'll see how we fix that on OpenSSL versions past 0.9.8. 185*ebfedea0SLionel Sambuc 186*ebfedea0SLionel Sambuc* 'make test' fails in BN_sqr [commonly with "error 139" denoting SIGSEGV] 187*ebfedea0SLionel Sambuc if elder GNU binutils were deployed to link shared libcrypto.so. 188*ebfedea0SLionel Sambuc 189*ebfedea0SLionel SambucAs subject suggests the failure is caused by a bug in elder binutils, 190*ebfedea0SLionel Sambuceither as or ld, and was observed on FreeBSD and Linux. There are two 191*ebfedea0SLionel Sambucoptions. First is naturally to upgrade binutils, the second one - to 192*ebfedea0SLionel Sambucreconfigure with additional no-sse2 [or 386] option passed to ./config. 193*ebfedea0SLionel Sambuc 194*ebfedea0SLionel Sambuc* If configured with ./config no-dso, toolkit still gets linked with -ldl, 195*ebfedea0SLionel Sambuc which most notably poses a problem when linking with dietlibc. 196*ebfedea0SLionel Sambuc 197*ebfedea0SLionel SambucWe don't have framework to associate -ldl with no-dso, therefore the only 198*ebfedea0SLionel Sambucway is to edit Makefile right after ./config no-dso and remove -ldl from 199*ebfedea0SLionel SambucEX_LIBS line. 200*ebfedea0SLionel Sambuc 201*ebfedea0SLionel Sambuc* hpux-parisc2-cc no-asm build fails with SEGV in ECDSA/DH. 202*ebfedea0SLionel Sambuc 203*ebfedea0SLionel SambucCompiler bug, presumably at particular patch level. Remaining 204*ebfedea0SLionel Sambuchpux*-parisc*-cc configurations can be affected too. Drop optimization 205*ebfedea0SLionel Sambuclevel to +O2 when compiling bn_nist.o. 206*ebfedea0SLionel Sambuc 207*ebfedea0SLionel Sambuc* solaris64-sparcv9-cc link failure 208*ebfedea0SLionel Sambuc 209*ebfedea0SLionel SambucSolaris 8 ar can fail to maintain symbol table in .a, which results in 210*ebfedea0SLionel Sambuclink failures. Apply 109147-09 or later or modify Makefile generated 211*ebfedea0SLionel Sambucby ./Configure solaris64-sparcv9-cc and replace RANLIB assignment with 212*ebfedea0SLionel Sambuc 213*ebfedea0SLionel Sambuc RANLIB= /usr/ccs/bin/ar rs 214