summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rwxr-xr-xunix/configure18
-rw-r--r--unix/tcl.m418
-rw-r--r--unix/tclLoadDl.c6
-rw-r--r--unix/tclLoadDyld.c6
5 files changed, 35 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index d912365..3284144 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-03-21 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/tclLoadDl.c: [Bug #3216070] Loading extension libraries
+ * unix/tclLoadDyld.c: from embedded Tcl applications.
+
2011-03-16 Jan Nijtmans <nijtmans@users.sf.net>
* generic/tclCkalloc.c: [Bug #3197864] pointer truncation on Win64
diff --git a/unix/configure b/unix/configure
index c24d5bf..af64e51 100755
--- a/unix/configure
+++ b/unix/configure
@@ -6939,7 +6939,7 @@ fi
dgux*)
SHLIB_CFLAGS="-K PIC"
SHLIB_LD='${CC} -G'
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
@@ -7480,7 +7480,7 @@ fi
MP-RAS-02*)
SHLIB_CFLAGS="-K PIC"
SHLIB_LD='${CC} -G'
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
@@ -7490,7 +7490,7 @@ fi
MP-RAS-*)
SHLIB_CFLAGS="-K PIC"
SHLIB_LD='${CC} -G'
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
@@ -8251,7 +8251,7 @@ else
fi
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
@@ -8313,7 +8313,7 @@ fi
# This may work for all QNX, but it was only reported for v6.
SHLIB_CFLAGS="-fPIC"
SHLIB_LD="ld -Bshareable -x"
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
# dlopen is in -lc on QNX
@@ -8338,7 +8338,7 @@ else
fi
SHLIB_LD="ld -G"
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
@@ -8348,7 +8348,7 @@ fi
SINIX*5.4*)
SHLIB_CFLAGS="-K PIC"
SHLIB_LD='${CC} -G'
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
@@ -8358,7 +8358,7 @@ fi
SunOS-4*)
SHLIB_CFLAGS="-PIC"
SHLIB_LD="ld"
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
@@ -8736,7 +8736,7 @@ fi
UNIX_SV* | UnixWare-5*)
SHLIB_CFLAGS="-KPIC"
SHLIB_LD='${CC} -G'
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
diff --git a/unix/tcl.m4 b/unix/tcl.m4
index a2e9392..1bbcf3a 100644
--- a/unix/tcl.m4
+++ b/unix/tcl.m4
@@ -1251,7 +1251,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
dgux*)
SHLIB_CFLAGS="-K PIC"
SHLIB_LD='${CC} -G'
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
@@ -1456,7 +1456,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
MP-RAS-02*)
SHLIB_CFLAGS="-K PIC"
SHLIB_LD='${CC} -G'
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
@@ -1466,7 +1466,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
MP-RAS-*)
SHLIB_CFLAGS="-K PIC"
SHLIB_LD='${CC} -G'
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
@@ -1773,7 +1773,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
AS_IF([test "$SHARED_BUILD" = 1], [SHLIB_LD="ld -shared"], [
SHLIB_LD="ld -non_shared"
])
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
@@ -1814,7 +1814,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
# This may work for all QNX, but it was only reported for v6.
SHLIB_CFLAGS="-fPIC"
SHLIB_LD="ld -Bshareable -x"
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
# dlopen is in -lc on QNX
@@ -1834,7 +1834,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
LDFLAGS="$LDFLAGS -belf -Wl,-Bexport"
])
SHLIB_LD="ld -G"
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS=""
@@ -1844,7 +1844,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
SINIX*5.4*)
SHLIB_CFLAGS="-K PIC"
SHLIB_LD='${CC} -G'
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
@@ -1854,7 +1854,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
SunOS-4*)
SHLIB_CFLAGS="-PIC"
SHLIB_LD="ld"
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
@@ -2005,7 +2005,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
UNIX_SV* | UnixWare-5*)
SHLIB_CFLAGS="-KPIC"
SHLIB_LD='${CC} -G'
- SHLIB_LD_LIBS='${LIBS}'
+ SHLIB_LD_LIBS=""
SHLIB_SUFFIX=".so"
DL_OBJS="tclLoadDl.o"
DL_LIBS="-ldl"
diff --git a/unix/tclLoadDl.c b/unix/tclLoadDl.c
index 24a546b..e38c280 100644
--- a/unix/tclLoadDl.c
+++ b/unix/tclLoadDl.c
@@ -73,6 +73,9 @@ TclpDlopen(
*/
native = Tcl_FSGetNativePath(pathPtr);
+ /*
+ * Use (RTLD_NOW|RTLD_LOCAL) always, see [Bug #3216070]
+ */
handle = dlopen(native, RTLD_NOW | RTLD_LOCAL);
if (handle == NULL) {
/*
@@ -85,6 +88,9 @@ TclpDlopen(
char *fileName = Tcl_GetString(pathPtr);
native = Tcl_UtfToExternalDString(NULL, fileName, -1, &ds);
+ /*
+ * Use (RTLD_NOW|RTLD_LOCAL) always, see [Bug #3216070]
+ */
handle = dlopen(native, RTLD_NOW | RTLD_LOCAL);
Tcl_DStringFree(&ds);
}
diff --git a/unix/tclLoadDyld.c b/unix/tclLoadDyld.c
index a03bbda..0a36215 100644
--- a/unix/tclLoadDyld.c
+++ b/unix/tclLoadDyld.c
@@ -196,6 +196,9 @@ TclpDlopen(
if (tclMacOSXDarwinRelease >= 8)
#endif
{
+ /*
+ * Use (RTLD_NOW|RTLD_LOCAL) always, see [Bug #3216070]
+ */
dlHandle = dlopen(nativePath, RTLD_NOW | RTLD_LOCAL);
if (!dlHandle) {
/*
@@ -206,6 +209,9 @@ TclpDlopen(
fileName = Tcl_GetString(pathPtr);
nativeFileName = Tcl_UtfToExternalDString(NULL, fileName, -1, &ds);
+ /*
+ * Use (RTLD_NOW|RTLD_LOCAL) always, see [Bug #3216070]
+ */
dlHandle = dlopen(nativeFileName, RTLD_NOW | RTLD_LOCAL);
}
if (dlHandle) {