From 57711cc2167f4fc4dc5a03f1b7e3b43e5c7e8050 Mon Sep 17 00:00:00 2001
From: Raymond Toy <toy.raymond@gmail.com>
Date: Wed, 8 Oct 2014 17:44:04 -0700
Subject: [PATCH] First cut at removing ppc-darwin-dlshim.c. Not needed anymore
 because dlsym works on OSX/ppc like on other ports.

A cross-compile was used with cross-ppc-ppc-darwin.lisp.  I'm not sure
a cross-compile is required, though.

 * code/ppc-vm.lisp:
   * EXTERN-ALIEN-NAME doesn't need to prepend an underscore anymore.
 * lisp/Config.ppc_darwin:
   * Don't compile/link ppc-darwin-dlshim.c.
 * lisp/os-common.c:
   * Don't prepend underscore for call_into_lisp.
 * tools/cross-scripts/cross-ppc-ppc-darwin.lisp:
   * EXTERN-ALIEN-NAME doesn't need to prepend an underscore anymore.
---
 src/code/ppc-vm.lisp                              | 5 +----
 src/lisp/Config.ppc_darwin                        | 3 ++-
 src/lisp/Darwin-os.c                              | 9 +++++++++
 src/lisp/os-common.c                              | 4 ++--
 src/tools/cross-scripts/cross-ppc-ppc-darwin.lisp | 4 ++--
 5 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/code/ppc-vm.lisp b/src/code/ppc-vm.lisp
index 613353387..fa977fd58 100644
--- a/src/code/ppc-vm.lisp
+++ b/src/code/ppc-vm.lisp
@@ -297,10 +297,7 @@
 ;;; 
 (defun extern-alien-name (name)
   (declare (type simple-base-string name))
-  #+darwin
-  (concatenate 'string "_" name)
-  #-darwin
-  (concatenate 'string "" name))
+  name)
 
 #-linkage-table
 (defun lisp::foreign-symbol-address-aux (name flavor)
diff --git a/src/lisp/Config.ppc_darwin b/src/lisp/Config.ppc_darwin
index 4f0664812..871a26161 100644
--- a/src/lisp/Config.ppc_darwin
+++ b/src/lisp/Config.ppc_darwin
@@ -40,7 +40,8 @@ ASFLAGS = $(OSX_VERSION) -traditional -g -O3 -DDARWIN -Dppc $(LINKAGE) $(GENCGC)
 UNDEFSYMPATTERN = -Xlinker -u -Xlinker &
 ASSEM_SRC = ppc-assem.S linux-stubs.S
 ARCH_SRC = ppc-arch.c
-OS_SRC = ppc-darwin-dlshim.c os-common.c Darwin-os.c
+#OS_SRC = ppc-darwin-dlshim.c os-common.c Darwin-os.c
+OS_SRC = os-common.c Darwin-os.c
 
 
 ifdef FEATURE_EXECUTABLE
diff --git a/src/lisp/Darwin-os.c b/src/lisp/Darwin-os.c
index 1f67b685f..0efb72f39 100644
--- a/src/lisp/Darwin-os.c
+++ b/src/lisp/Darwin-os.c
@@ -543,12 +543,21 @@ os_dlsym(const char *sym_name, lispobj lib_list)
 	    struct cons *lib_cons = CONS(CONS(lib_list_head)->car);
 	    struct sap *dlhandle = (struct sap *) PTR(lib_cons->car);
 
+#if 0 && defined(__ppc__)
+            sym_addr = dlsym((void *) dlhandle->pointer, (sym_name[0] == '_' ? sym_name + 1 : sym_name));
+#else
 	    sym_addr = dlsym((void *) dlhandle->pointer, sym_name);
+#endif
 	    if (sym_addr)
 		return sym_addr;
 	}
     }
+
+#if 0 && defined(__ppc__)
+    sym_addr = dlsym(program_handle, (sym_name[0] == '_' ? sym_name + 1 : sym_name));
+#else
     sym_addr = dlsym(program_handle, sym_name);
+#endif
 
     return sym_addr;
 }
diff --git a/src/lisp/os-common.c b/src/lisp/os-common.c
index 90458c950..b183d066a 100755
--- a/src/lisp/os-common.c
+++ b/src/lisp/os-common.c
@@ -219,7 +219,7 @@ os_foreign_linkage_init(void)
 	    }
 	    arch_make_linkage_entry(i, (void*) call_into_c, 1);
 #elif (defined(DARWIN) && defined(__ppc__))
-	    if (type != 1 || strcmp(c_symbol_name, "_call_into_c")) {
+	    if (type != 1 || strcmp(c_symbol_name, "call_into_c")) {
 		fprintf(stderr, "linkage_data is %s but expected call_into_c\n",
 			(char *) c_symbol_name);
 		lose("First element of linkage_data is bogus.\n");
@@ -241,7 +241,7 @@ os_foreign_linkage_init(void)
 	    void *target_addr = os_dlsym(c_symbol_name, NIL);
 
 	    if (!target_addr) {
-#if 0
+#if 1
                 int k;
                 unsigned short int* wide_string;
                 
diff --git a/src/tools/cross-scripts/cross-ppc-ppc-darwin.lisp b/src/tools/cross-scripts/cross-ppc-ppc-darwin.lisp
index 3be7ae6fc..02e05ef98 100644
--- a/src/tools/cross-scripts/cross-ppc-ppc-darwin.lisp
+++ b/src/tools/cross-scripts/cross-ppc-ppc-darwin.lisp
@@ -31,7 +31,7 @@
 (in-package :vm)
 (defun extern-alien-name (name)
   (declare (type simple-string name))
-  (concatenate 'string "_" name))
+  name)
 ;; When compiling the compiler, vm:fixup-code-object and
 ;; vm:sanctify-for-execution are undefined.  Import these to get rid
 ;; of that error.
@@ -199,7 +199,7 @@
 (in-package :vm)
 (defun extern-alien-name (name)
   (declare (type simple-string name))
-  (concatenate 'string "_" name))
+  name)
 (export 'extern-alien-name)
 (export 'fixup-code-object)
 (export 'sanctify-for-execution)
-- 
GitLab