diff --git a/src/include/port/hpux.h b/src/include/port/hpux.h
index b78b43fbf857bca727dfd1939c7f8bf452aa9f85..d1a6451836fa3f3e4187a8dc95fb503f5426f870 100644
--- a/src/include/port/hpux.h
+++ b/src/include/port/hpux.h
@@ -1,6 +1,11 @@
 #define JMP_BUF
 #define USE_POSIX_TIME
+/* HPUX 10 has full POSIX signal functionality.
+ * On HPUX 9, we rely on BSD-compatible signal() in libBSD.
+ */
+#ifdef HPUX_10
 #define USE_POSIX_SIGNALS
+#endif
 #define HAS_TEST_AND_SET
 typedef struct
 {
diff --git a/src/makefiles/Makefile.hpux b/src/makefiles/Makefile.hpux
index 49f72855bbd92a471ed633d3fa806a5e0a94e37d..eeb10589e698ffdda6ec2104415d7cbc5f61eb6b 100644
--- a/src/makefiles/Makefile.hpux
+++ b/src/makefiles/Makefile.hpux
@@ -1,14 +1,29 @@
 HPUX_MAJOR= $(shell uname -r|sed 's/^[^.]*\.\([^.]*\).*/\1/')
+# Distinguish HPUX 10 (and later) from HPUX 9
+ifneq ($(HPUX_MAJOR), 09)
+   CFLAGS+= -DHPUX_10
+endif
+
 # HP-UX 10 has a select() in libcurses, so we need to get the libc version first
-ifeq ($(HPUX_MAJOR), 10)
+# We also want to be sure we get the POSIX signal routines in libc,
+# not the BSD-like ones in libBSD.
+ifneq ($(HPUX_MAJOR), 09)
    LDFLAGS:= -Wl,-E -lc $(LDFLAGS)
 endif
 
-# HP-UX 09 needs libc before libPW, so we need to get the libc version first
+# HP-UX 09 provides rint() only in PA1.1 version of libm, so add -L command
+# to get that version. (CAUTION: you need PHSS_4630 to have a working version
+# of rint()!)  Also, libPW exists on this platform but is not helpful, so
+# delete it from LDFLAGS.
+# NOTE: libBSD must be loaded before libc to get BSD signal() semantics.
 ifeq ($(HPUX_MAJOR), 09)
-   LDFLAGS:= -Wl,-E $(LDFLAGS:-lPW=-lc -lPW)
+   LDFLAGS:= -Wl,-E -L /lib/pa1.1 $(LDFLAGS:-lPW=)
 endif
 
+# On all HPUX versions, embed LIBDIR as the shared library search path
+# so that the executables don't need SHLIB_PATH to be set.
+LDFLAGS+= -Wl,+b -Wl,$(LIBDIR)
+
 # Does anyone use this stuff?
 #ifdef ENFORCE_ALIGNMENT
 #   CFLAGS+= -DNOFIXADE
diff --git a/src/tools/backend/index.html b/src/tools/backend/index.html
index 8b74aa4d759c3e741e7078cc212e5811dfd3c5be..c4b007ac571c6d0d7502b12546430a0e2402e34c 100644
--- a/src/tools/backend/index.html
+++ b/src/tools/backend/index.html
@@ -123,7 +123,7 @@ HREF="../../include/storage/lock.h">LOCKMETHODCTL</A>).
 HREF="../../include/storage/lock.h">LOCK</A> structure, looked up using
 relation, database object ids(<A
 HREF="../../include/storage/lock.h">LOCKTAG)</A>.  The lock table structure contains the
-lock modes(read, write) and circular linked list of backends (<A
+lock modes(read/write or shared/exclusive) and circular linked list of backends (<A
 HREF="../../include/storage/proc.h">PROC</A> structure pointers) waiting
 on the lock.
 <LI>MultiLevelLockTable (xid hash) - lookup of LOCK structure address