From a0b7daa129b082c1420366df0ec53af075d0c316 Mon Sep 17 00:00:00 2001
From: "Marc G. Fournier" <scrappy@hub.org>
Date: Mon, 17 May 1999 04:13:29 +0000
Subject: [PATCH] Apply freebsd specific patches dealign with ELF system from
 FreeBSD's ports collection ...

---
 src/Makefile.shlib                   |  7 ++++---
 src/backend/port/dynloader/freebsd.c |  2 ++
 src/configure                        |  2 +-
 src/configure.in                     |  2 +-
 src/makefiles/Makefile.freebsd       | 10 +++++++---
 5 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/Makefile.shlib b/src/Makefile.shlib
index 889f24b8325..a569b73cc32 100644
--- a/src/Makefile.shlib
+++ b/src/Makefile.shlib
@@ -6,7 +6,7 @@
 # Copyright (c) 1998, Regents of the University of California
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/Makefile.shlib,v 1.8 1999/04/30 02:04:49 momjian Exp $
+#    $Header: /cvsroot/pgsql/src/Makefile.shlib,v 1.9 1999/05/17 04:13:24 scrappy Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -59,10 +59,11 @@ install-shlib-dep :=
 ifeq ($(PORTNAME), freebsd)
   ifdef BSD_SHLIB
     install-shlib-dep	:= install-shlib
-    shlib		:= lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
     ifdef ELF_SYSTEM
-      LDFLAGS_SL	:= -x -Bshareable
+      shlib		:= lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
+      LDFLAGS_SL	:= -x -shared -soname $(shlib)
     else
+      shlib		:= lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
       LDFLAGS_SL	:= -x -Bshareable -Bforcearchive
     endif
     CFLAGS		+= $(CFLAGS_SL)
diff --git a/src/backend/port/dynloader/freebsd.c b/src/backend/port/dynloader/freebsd.c
index 51ad3d99a66..14d21fb61f2 100644
--- a/src/backend/port/dynloader/freebsd.c
+++ b/src/backend/port/dynloader/freebsd.c
@@ -83,11 +83,13 @@ BSD44_derived_dlsym(void *handle, const char *name)
 	void	   *vp;
 	char		buf[BUFSIZ];
 
+#ifndef __ELF__
 	if (*name != '_')
 	{
 		sprintf(buf, "_%s", name);
 		name = buf;
 	}
+#endif
 	if ((vp = dlsym(handle, (char *) name)) == (void *) NULL)
 		sprintf(error_message, "dlsym (%s) failed", name);
 	return vp;
diff --git a/src/configure b/src/configure
index ad220cc1b08..8fe5f429f3a 100755
--- a/src/configure
+++ b/src/configure
@@ -625,8 +625,8 @@ case "$host_os" in
      aux*) os=aux need_tas=no ;;
    linux*) os=linux need_tas=no ;;
     bsdi*) os=bsdi need_tas=no ;;
- freebsd3*|freebsd4*) os=freebsd need_tas=no elf=yes ;;
  freebsd1*|freebsd2*) os=freebsd need_tas=no ;;
+ freebsd*) os=freebsd need_tas=no elf=yes ;;
   netbsd*)
 	os=bsd need_tas=no
 	case "$host_cpu" in
diff --git a/src/configure.in b/src/configure.in
index 792af606dfc..e4762d2baeb 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -20,8 +20,8 @@ case "$host_os" in
      aux*) os=aux need_tas=no ;;
    linux*) os=linux need_tas=no ;;
     bsdi*) os=bsdi need_tas=no ;;
- freebsd3*|freebsd4*) os=freebsd need_tas=no elf=yes ;;
  freebsd1*|freebsd2*) os=freebsd need_tas=no ;;
+ freebsd*) os=freebsd need_tas=no elf=yes ;;
   netbsd*)
 	os=bsd need_tas=no
 	case "$host_cpu" in
diff --git a/src/makefiles/Makefile.freebsd b/src/makefiles/Makefile.freebsd
index fcbcd84de40..7bf42588168 100644
--- a/src/makefiles/Makefile.freebsd
+++ b/src/makefiles/Makefile.freebsd
@@ -1,13 +1,17 @@
+ifdef ELF_SYSTEM
+LDFLAGS+=	-export-dynamic
+endif
+
 %.so: %.o
+ifdef ELF_SYSTEM
+	$(LD) -x -shared -o $@ $<
+else
 	$(LD) -x -r -o $<.obj $<
 	@echo building shared object $@
 	@rm -f $@.pic
 	@${AR} cq $@.pic `lorder $<.obj | tsort`
 	${RANLIB} $@.pic
 	@rm -f $@
-ifdef ELF_SYSTEM
-	$(LD) -x -Bshareable -o $@ $@.pic
-else
 	$(LD) -x -Bshareable -Bforcearchive -o $@ $@.pic
 endif
 
-- 
GitLab