diff --git a/src/backend/port/dynloader/hpux.c b/src/backend/port/dynloader/hpux.c
index 43832779b8f35cab41c01e92919871212e4273ea..562b59ee770f24ec9dc47e296340ad4bf31e5bc1 100644
--- a/src/backend/port/dynloader/hpux.c
+++ b/src/backend/port/dynloader/hpux.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/port/dynloader/hpux.c,v 1.12 2000/01/26 05:56:44 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/port/dynloader/hpux.c,v 1.13 2000/04/26 23:35:34 tgl Exp $
  *
  *	NOTES
  *		all functions are defined here -- it's impossible to trace the
@@ -20,6 +20,7 @@
 #include <a.out.h>
 
 #include "postgres.h"
+
 #include "dl.h"
 #include "dynloader.h"
 #include "fmgr.h"
@@ -28,7 +29,12 @@
 void *
 pg_dlopen(char *filename)
 {
-	shl_t		handle = shl_load(filename, BIND_DEFERRED, 0);
+	/*
+	 * Use BIND_IMMEDIATE so that undefined symbols cause a failure return
+	 * from shl_load(), rather than an abort() later on when we attempt to
+	 * call the library!
+	 */
+	shl_t		handle = shl_load(filename, BIND_IMMEDIATE | BIND_VERBOSE, 0);
 
 	return (void *) handle;
 }
@@ -54,5 +60,8 @@ pg_dlerror()
 {
 	static char errmsg[] = "shl_load failed";
 
+	if (errno)
+		return strerror(errno);
+
 	return errmsg;
 }