summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1996-12-28 17:10:52 +0000
committerpeter <peter@FreeBSD.org>1996-12-28 17:10:52 +0000
commitb149fa7d4bf030562bcd68d8150a474ea6d20687 (patch)
tree4c5432ce0f7d6bc57519a3bfba5f111cae12a612
parent8da9a185e58b71e1a7533c15c08b142f2a901575 (diff)
downloadFreeBSD-src-b149fa7d4bf030562bcd68d8150a474ea6d20687.zip
FreeBSD-src-b149fa7d4bf030562bcd68d8150a474ea6d20687.tar.gz
When linking with no rtld support, provide stub dl*() functions that
just return errors. This removes the need for awful hacks like that in our build of libtcl which would get link errors when linked static. John Polstra once mentioned that this was on his "todo" list. Note that one can use: cc -Wl,-Bstatic -o foo foo.o and get an executable that has it's libraries statically linked, but has a fully functional runtime linker so the executable can call dlopen() and have it work. (I've tested this)
-rw-r--r--lib/csu/i386/crt0.c44
1 files changed, 43 insertions, 1 deletions
diff --git a/lib/csu/i386/crt0.c b/lib/csu/i386/crt0.c
index a14a408..6ff4f0b 100644
--- a/lib/csu/i386/crt0.c
+++ b/lib/csu/i386/crt0.c
@@ -27,11 +27,13 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: crt0.c,v 1.24 1996/10/01 00:54:48 peter Exp $
+ * $Id: crt0.c,v 1.25 1996/10/06 03:19:26 steve Exp $
*/
#include <sys/param.h>
+
#include <stdlib.h>
+#include <dlfcn.h>
#ifdef DYNAMIC
#include <sys/types.h>
@@ -382,8 +384,48 @@ _getenv(name)
asm(" movl $-1,%eax");
asm(" ret");
+#else /* DYNAMIC */
+
+/*
+ * DL stubs for static linking case (just return error)
+ */
+
+void *
+dlopen(name, mode)
+char *name;
+int mode;
+{
+ return NULL;
+}
+
+int
+dlclose(fd)
+void *fd;
+{
+ return -1;
+}
+
+void *
+dlsym(fd, name)
+void *fd;
+char *name;
+{
+ return NULL;
+}
+
+
+char *
+dlerror()
+{
+ return "Service unavailable";
+}
#endif /* DYNAMIC */
+
+/*
+ * Support routines
+ */
+
#ifdef MCRT0
asm (" .text");
asm ("_eprol:");
OpenPOWER on IntegriCloud