diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-10-24 13:08:34 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-10-24 13:08:34 (GMT) |
commit | 20fbd4bb4bba957f3d3b611befff43c7fea5676d (patch) | |
tree | 9a3dcf1843cffc067eb04f21c109c536a20ff564 /unix/tclLoadDl.c | |
parent | 9c1bac129cc0a8d54989866bfaf2a98e48f933ed (diff) | |
download | tcl-20fbd4bb4bba957f3d3b611befff43c7fea5676d.zip tcl-20fbd4bb4bba957f3d3b611befff43c7fea5676d.tar.gz tcl-20fbd4bb4bba957f3d3b611befff43c7fea5676d.tar.bz2 |
experimental implementation of FRQ-3579001
Diffstat (limited to 'unix/tclLoadDl.c')
-rw-r--r-- | unix/tclLoadDl.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/unix/tclLoadDl.c b/unix/tclLoadDl.c index 9ff7657..9c021e1 100644 --- a/unix/tclLoadDl.c +++ b/unix/tclLoadDl.c @@ -75,6 +75,7 @@ TclpDlopen( void *handle; Tcl_LoadHandle newHandle; const char *native; + int dlopenflags = 0; /* * First try the full path the user gave us. This is particularly @@ -84,9 +85,19 @@ TclpDlopen( native = Tcl_FSGetNativePath(pathPtr); /* - * Use (RTLD_NOW|RTLD_LOCAL) always, see [Bug #3216070] + * Use (RTLD_NOW|RTLD_LOCAL) as default, see [Bug #3216070] */ - handle = dlopen(native, RTLD_NOW | RTLD_LOCAL); + if (flags & 1) { + dlopenflags |= RTLD_GLOBAL; + } else { + dlopenflags |= RTLD_LOCAL; + } + if (flags & 2) { + dlopenflags |= RTLD_LAZY; + } else { + dlopenflags |= RTLD_NOW; + } + handle = dlopen(native, dlopenflags); if (handle == NULL) { /* * Let the OS loader examine the binary search path for whatever @@ -99,9 +110,9 @@ TclpDlopen( native = Tcl_UtfToExternalDString(NULL, fileName, -1, &ds); /* - * Use (RTLD_NOW|RTLD_LOCAL) always, see [Bug #3216070] + * Use (RTLD_NOW|RTLD_LOCAL) as default, see [Bug #3216070] */ - handle = dlopen(native, RTLD_NOW | RTLD_LOCAL); + handle = dlopen(native, dlopenflags); Tcl_DStringFree(&ds); } |