PROBLEMS 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. * System libcrypto.dylib and libssl.dylib are used by system ld on MacOS X.
  2. NOTE: The problem described here only applies when OpenSSL isn't built
  3. with shared library support (i.e. without the "shared" configuration
  4. option). If you build with shared library support, you will have no
  5. problems as long as you set up DYLD_LIBRARY_PATH properly at all times.
  6. This is really a misfeature in ld, which seems to look for .dylib libraries
  7. along the whole library path before it bothers looking for .a libraries. This
  8. means that -L switches won't matter unless OpenSSL is built with shared
  9. library support.
  10. The workaround may be to change the following lines in apps/Makefile and
  11. test/Makefile:
  12. LIBCRYPTO=-L.. -lcrypto
  13. LIBSSL=-L.. -lssl
  14. to:
  15. LIBCRYPTO=../libcrypto.a
  16. LIBSSL=../libssl.a
  17. It's possible that something similar is needed for shared library support
  18. as well. That hasn't been well tested yet.
  19. Another solution that many seem to recommend is to move the libraries
  20. /usr/lib/libcrypto.0.9.dylib, /usr/lib/libssl.0.9.dylib to a different
  21. directory, build and install OpenSSL and anything that depends on your
  22. build, then move libcrypto.0.9.dylib and libssl.0.9.dylib back to their
  23. original places. Note that the version numbers on those two libraries
  24. may differ on your machine.
  25. As long as Apple doesn't fix the problem with ld, this problem building
  26. OpenSSL will remain as is.
  27. * Parallell make leads to errors
  28. While running tests, running a parallell make is a bad idea. Many test
  29. scripts use the same name for output and input files, which means different
  30. will interfere with each other and lead to test failure.
  31. The solution is simple for now: don't run parallell make when testing.
  32. * Bugs in gcc triggered
  33. - According to a problem report, there are bugs in gcc 3.0 that are
  34. triggered by some of the code in OpenSSL, more specifically in
  35. PEM_get_EVP_CIPHER_INFO(). The triggering code is the following:
  36. header+=11;
  37. if (*header != '4') return(0); header++;
  38. if (*header != ',') return(0); header++;
  39. What happens is that gcc might optimize a little too agressively, and
  40. you end up with an extra incrementation when *header != '4'.
  41. We recommend that you upgrade gcc to as high a 3.x version as you can.
  42. - According to multiple problem reports, some of our message digest
  43. implementations trigger bug[s] in code optimizer in gcc 3.3 for sparc64
  44. and gcc 2.96 for ppc. Former fails to complete RIPEMD160 test, while
  45. latter - SHA one.
  46. The recomendation is to upgrade your compiler. This naturally applies to
  47. other similar cases.
  48. * solaris64-sparcv9-cc SHA-1 performance with WorkShop 6 compiler.
  49. As subject suggests SHA-1 might perform poorly (4 times slower)
  50. if compiled with WorkShop 6 compiler and -xarch=v9. The cause for
  51. this seems to be the fact that compiler emits multiplication to
  52. perform shift operations:-( To work the problem around configure
  53. with './Configure solaris64-sparcv9-cc -DMD32_REG_T=int'.
  54. * Problems with hp-parisc2-cc target when used with "no-asm" flag
  55. When using the hp-parisc2-cc target, wrong bignum code is generated.
  56. This is due to the SIXTY_FOUR_BIT build being compiled with the +O3
  57. aggressive optimization.
  58. The problem manifests itself by the BN_kronecker test hanging in an
  59. endless loop. Reason: the BN_kronecker test calls BN_generate_prime()
  60. which itself hangs. The reason could be tracked down to the bn_mul_comba8()
  61. function in bn_asm.c. At some occasions the higher 32bit value of r[7]
  62. is off by 1 (meaning: calculated=shouldbe+1). Further analysis failed,
  63. as no debugger support possible at +O3 and additional fprintf()'s
  64. introduced fixed the bug, therefore it is most likely a bug in the
  65. optimizer.
  66. The bug was found in the BN_kronecker test but may also lead to
  67. failures in other parts of the code.
  68. (See Ticket #426.)
  69. Workaround: modify the target to +O2 when building with no-asm.
  70. * Problems building shared libraries on SCO OpenServer Release 5.0.6
  71. with gcc 2.95.3
  72. The symptoms appear when running the test suite, more specifically
  73. test/ectest, with the following result:
  74. OSSL_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
  75. ectest.c:186: ABORT
  76. The cause of the problem seems to be that isxdigit(), called from
  77. BN_hex2bn(), returns 0 on a perfectly legitimate hex digit. Further
  78. investigation shows that any of the isxxx() macros return 0 on any
  79. input. A direct look in the information array that the isxxx() use,
  80. called __ctype, shows that it contains all zeroes...
  81. Taking a look at the newly created libcrypto.so with nm, one can see
  82. that the variable __ctype is defined in libcrypto's .bss (which
  83. explains why it is filled with zeroes):
  84. $ nm -Pg libcrypto.so | grep __ctype
  85. __ctype B 0011659c
  86. __ctype2 U
  87. Curiously, __ctype2 is undefined, in spite of being declared in
  88. /usr/include/ctype.h in exactly the same way as __ctype.
  89. Any information helping to solve this issue would be deeply
  90. appreciated.
  91. NOTE: building non-shared doesn't come with this problem.
  92. * ULTRIX build fails with shell errors, such as "bad substitution"
  93. and "test: argument expected"
  94. The problem is caused by ULTRIX /bin/sh supporting only original
  95. Bourne shell syntax/semantics, and the trouble is that the vast
  96. majority is so accustomed to more modern syntax, that very few
  97. people [if any] would recognize the ancient syntax even as valid.
  98. This inevitably results in non-trivial scripts breaking on ULTRIX,
  99. and OpenSSL isn't an exclusion. Fortunately there is workaround,
  100. hire /bin/ksh to do the job /bin/sh fails to do.
  101. 1. Trick make(1) to use /bin/ksh by setting up following environ-
  102. ment variables *prior* you execute ./Configure and make:
  103. PROG_ENV=POSIX
  104. MAKESHELL=/bin/ksh
  105. export PROG_ENV MAKESHELL
  106. or if your shell is csh-compatible:
  107. setenv PROG_ENV POSIX
  108. setenv MAKESHELL /bin/ksh
  109. 2. Trick /bin/sh to use alternative expression evaluator. Create
  110. following 'test' script for example in /tmp:
  111. #!/bin/ksh
  112. ${0##*/} "$@"
  113. Then 'chmod a+x /tmp/test; ln /tmp/test /tmp/[' and *prepend*
  114. your $PATH with chosen location, e.g. PATH=/tmp:$PATH. Alter-
  115. natively just replace system /bin/test and /bin/[ with the
  116. above script.