Hi!

INTRODUCTION

When just building Apache 2.2.9 with openssl support, I found that
"mod_ssl.so" could not be loaded. When I investigated the problem I
found that the reason was "broken" openssl shared libraries. These
libraries (libcrypto.so and libssl.so) were build using "./Configure
aix64-cc shared". Both shared libraries have entry points!!! So I
checked the build process and found that in "Makefile.shared" the "-G"
option is used incorrectly. When using "-G" option with cc it should
not be used with/inside "-Wl" option. So the result was that
"-bnoentry" was not present in linking phase (not generated by cc to
the linker).

Regards
Tippa


EXAMPLE

Here you can see the difference between these two cases:

aix53>
aix53> uname -srvp
AIX 3 5 powerpc
aix53>  cc -qversion
IBM XL C/C++ Enterprise Edition V8.0 for AIX
Version: 08.00.0000.0000
aix53>
aix53> # 1) We have -G inside -Wl  (incorrect result: we have entry point)
aix53> cc -v -DOPENSSL_THREADS -qthreaded -DDSO_DLFCN -DHAVE_DLFCN_H
-q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst -q64
-Wl,-G,-bexpall,-bnolibpath,-bM:SRE -o libssl.so.0.9.8 libssl.o -L.
-lcrypto
exec: export(export,XL_CONFIG=/etc/vac.cfg:cc,NULL)
exec: 
/bin/ld(/bin/ld,-b64,/lib/crt0_64.o,-bpT:0x100000000,-bpD:0x110000000,-G,-bexpall,-bnolibpath,-bM:SRE,-o,libssl.so.0.9.8,libssl.o,-L.,-lcrypto,-L/usr/vac/lib,-lxlopt,-lc,NULL)
ld: 0711-224 WARNING: Duplicate symbol: p_xargc
ld: 0711-224 WARNING: Duplicate symbol: p_xargv
ld: 0711-224 WARNING: Duplicate symbol: p_xrcfg
ld: 0711-224 WARNING: Duplicate symbol: p_xrc
ld: 0711-224 WARNING: Duplicate symbol: end
ld: 0711-224 WARNING: Duplicate symbol: .bcopy
ld: 0711-224 WARNING: Duplicate symbol: .memcpy
ld: 0711-224 WARNING: Duplicate symbol: .memmove
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
unlink: /tmp/xlcW0NP3mUa
unlink: /tmp/xlcW1NP3mUb
unlink: /tmp/xlcW2NP3mUc
aix53>
aix53> # 2) We have -G outside -Wl  (correct result: no entry point)
aix53> cc -v -DOPENSSL_THREADS -qthreaded -DDSO_DLFCN -DHAVE_DLFCN_H
-q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst -q64 -G
-Wl,-bexpall,-bnolibpath,-bM:SRE -o libssl.so.0.9.8 libssl.o -L.
-lcrypto
exec: export(export,XL_CONFIG=/etc/vac.cfg:cc,NULL)
exec: 
/bin/ld(/bin/ld,-bM:SRE,-bnoentry,-G,-b64,-bpT:0x100000000,-bpD:0x110000000,-bexpall,-bnolibpath,-bM:SRE,-o,libssl.so.0.9.8,libssl.o,-L.,-lcrypto,-L/usr/vac/lib,-lxlopt,-lc,NULL)
ld: 0711-224 WARNING: Duplicate symbol: .bcopy
ld: 0711-224 WARNING: Duplicate symbol: .memcpy
ld: 0711-224 WARNING: Duplicate symbol: .memmove
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
unlink: /tmp/xlcW06L3nya
unlink: /tmp/xlcW16L3nyb
unlink: /tmp/xlcW26L3nyc
unlink: /tmp/xlcSF6N3nyd
aix53>


PATCH  (very simple)

--- --- <clip> --- --- <clip> --- ---
diff -ur openssl-orig/Makefile.shared openssl-work/Makefile.shared
--- openssl-orig/Makefile.shared        2007-09-16 17:11:51.000000000 +0300
+++ openssl-work/Makefile.shared        2008-09-09 14:54:27.000000000 +0300
@@ -497,7 +497,7 @@
        SHLIB_SUFFIX=; \
        ALLSYMSFLAGS=''; \
        NOALLSYMSFLAGS=''; \
-       SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS)
-Wl,-G,-bexpall,-bnolibpath,-bM:SRE'; \
+       SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -G
-Wl,-bexpall,-bnolibpath,-bM:SRE'; \
        $(LINK_SO_O);
 link_a.aix:
        @ $(CALC_VERSIONS); \
@@ -507,7 +507,7 @@
        SHLIB_SUFFIX=; \
        ALLSYMSFLAGS='-bnogc'; \
        NOALLSYMSFLAGS=''; \
-       SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS)
-Wl,-G,-bexpall,-bnolibpath,-bM:SRE'; \
+       SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -G
-Wl,-bexpall,-bnolibpath,-bM:SRE'; \
        $(LINK_SO_A_VIA_O)
 link_app.aix:
        LDFLAGS="$(CFLAGS)
-Wl,-brtl,-blibpath:$(LIBRPATH):$${LIBPATH:-/usr/lib:/lib}"; \
--- --- <clip> --- --- <clip> --- ---


SIDE EFFECT

I have not specified "enable-gmp" for "./Configure" so I get ERROR
when creating "../openssl-0.9.8h/engines/libgmp.so", because there is
"nothing" inside it
cc -DOPENSSL_THREADS -qthreaded -DDSO_DLFCN -DHAVE_DLFCN_H -q64 -O
-DB_ENDIAN -qmaxmem=16384 -qro -qroconst -q64 -G
-Wl,-bexpall,-bnolibpath,-bM:SRE -o libgmp.so e_gmp.o -L.. -lcrypto
ld: 0711-244 ERROR: No csects or exported symbols have been saved.

Perhaps this should be corrected too, for example having some foobar()
function inside it...


<end-of-message>
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [email protected]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to