diff --git a/src/code/ppc-vm.lisp b/src/code/ppc-vm.lisp
index 613353387060ab89bb10afa1b0c78168373b499c..fa977fd587c06849d71fd9a12fceb43e903481b0 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 4f066481266cf61c066df5ba941fde141b4dd523..871a26161bbe6dd541d50ece325b1a48822f6351 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 1f67b685fff79d4c000d3c12808f273687b2a8a6..0efb72f391f590e6a68c0159469f3b512effdce4 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 90458c9509ed1e1897db74cd9d493ee108a9150f..b183d066a1203d8849f6d3636d48bca10fba3544 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 3be7ae6fcea3ebb8fe915aeb721f24b4f431d009..02e05ef98a638c1eac73bfe5c6aa5893191ef65f 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)