Index: /trunk/ccl/compiler/PPC/PPC32/ppc32-backend.lisp
===================================================================
--- /trunk/ccl/compiler/PPC/PPC32/ppc32-backend.lisp	(revision 5787)
+++ /trunk/ccl/compiler/PPC/PPC32/ppc32-backend.lisp	(revision 5788)
@@ -427,4 +427,19 @@
                #+darwinppc-target
                'darwin32::expand-ff-call
+               :ff-call-struct-return-by-implicit-arg-function
+               #+linuxppc-target
+               linux32::record-type-returns-structure-as-first-arg
+               #+darwinppc-target
+               darwin32::record-type-returns-structure-as-first-arg
+               :callback-bindings-function
+               #+linuxppc-target
+               linux32::generate-callback-bindings
+               #+darwinppc-target
+               darwin32::generate-callback-bindings
+               :callback-return-value-function
+               #+linuxppc-target
+               linux32::generate-callback-return-value
+               #+darwinppc-target
+               darwin32::generate-callback-return-value
                )))
     (install-standard-foreign-types ftd)
Index: /trunk/ccl/compiler/PPC/PPC64/ppc64-backend.lisp
===================================================================
--- /trunk/ccl/compiler/PPC/PPC64/ppc64-backend.lisp	(revision 5787)
+++ /trunk/ccl/compiler/PPC/PPC64/ppc64-backend.lisp	(revision 5788)
@@ -280,4 +280,19 @@
                #+darwinppc-target
                'darwin64::expand-ff-call
+               :ff-call-struct-return-by-implicit-arg-function
+               #+linuxppc-target
+               linux64::record-type-returns-structure-as-first-arg
+               #+darwinppc-target
+               darwin64::record-type-returns-structure-as-first-arg
+               :callback-bindings-function
+               #+linuxppc-target
+               linux64::generate-callback-bindings
+               #+darwinppc-target
+               darwin64::generate-callback-bindings
+               :callback-return-value-function
+               #+linuxppc-target
+               linux64::generate-callback-return-value
+               #+darwinppc-target
+               darwin64::generate-callback-return-value
                )))
     (install-standard-foreign-types ftd)
Index: /trunk/ccl/compiler/X86/X8664/x8664-backend.lisp
===================================================================
--- /trunk/ccl/compiler/X86/X8664/x8664-backend.lisp	(revision 5787)
+++ /trunk/ccl/compiler/X86/X8664/x8664-backend.lisp	(revision 5788)
@@ -266,28 +266,49 @@
                 (:linuxx8664
                  (make-ftd :interface-db-directory "ccl:x86-headers64;"
-                          :interface-package-name "X86-LINUX64"
-                          :attributes '(:bits-per-word  64
-                                        :struct-by-value t)
-                          :ff-call-expand-function
-                          (intern "EXPAND-FF-CALL" "X86-LINUX64")))
+                           :interface-package-name "X86-LINUX64"
+                           :attributes '(:bits-per-word  64
+                                         :struct-by-value t)
+                           :ff-call-expand-function
+                           (intern "EXPAND-FF-CALL" "X86-LINUX64")
+                           :ff-call-struct-return-by-implicit-arg-function
+                           (intern "RECORD-TYPE-RETURNS-STRUCTURE-AS-FIRST-ARG"
+                                   "X86-LINUX64")
+                           :callback-bindings-function
+                           (intern "GENERATE-CALLBACK-BINDINGS" "X86-LINUX64")
+                           :callback-return-value-function
+                           (intern "GENERATE-CALLBACK-RETURN-VALU" "X86-LINUX64")))
                 (:darwinx8664
-                  (make-ftd :interface-db-directory "ccl:darwin-x86-headers64;"
-                          :interface-package-name "X86-DARWIN64"
-                          :attributes '(:bits-per-word  64
-                                        :signed-char t
-                                        :struct-by-value t
-                                        :prepend-underscore t)
-                          :ff-call-expand-function
-                          (intern "EXPAND-FF-CALL" "X86-DARWIN64")))
-                 (:freebsdx8664
-                  (make-ftd :interface-db-directory "ccl:freebsd-headers64;"
-                            :interface-package-name "X86-FREEBSD64"
-                            :attributes '(:bits-per-word  64
-                                          :struct-by-value t)
-                          :ff-call-expand-function
-                          (intern "EXPAND-FF-CALL" "X86-FREEBSD64"))))))
+                 (make-ftd :interface-db-directory "ccl:darwin-x86-headers64;"
+                           :interface-package-name "X86-DARWIN64"
+                           :attributes '(:bits-per-word  64
+                                         :signed-char t
+                                         :struct-by-value t
+                                         :prepend-underscore t)
+                           :ff-call-expand-function
+                           (intern "EXPAND-FF-CALL" "X86-DARWIN64")
+                           :ff-call-struct-return-by-implicit-arg-function
+                           (intern "RECORD-TYPE-RETURNS-STRUCTURE-AS-FIRST-ARG"
+                                   "X86-DARWIN64")
+                           :callback-bindings-function
+                           (intern "GENERATE-CALLBACK-BINDINGS" "X86-DARWIN64")
+                           :callback-return-value-function
+                           (intern "GENERATE-CALLBACK-RETURN-VALU" "X86-DARWIN64")))
+                (:freebsdx8664
+                 (make-ftd :interface-db-directory "ccl:freebsd-headers64;"
+                           :interface-package-name "X86-FREEBSD64"
+                           :attributes '(:bits-per-word  64
+                                         :struct-by-value t)
+                           :ff-call-expand-function
+                           (intern "EXPAND-FF-CALL" "X86-FREEBSD64")
+                           :ff-call-struct-return-by-implicit-arg-function
+                           (intern "RECORD-TYPE-RETURNS-STRUCTURE-AS-FIRST-ARG"
+                                   "X86-FREEBSD64")
+                           :callback-bindings-function
+                           (intern "GENERATE-CALLBACK-BINDINGS" "X86-FREEBS64")
+                           :callback-return-value-function
+                           (intern "GENERATE-CALLBACK-RETURN-VALU" "X86-FREEBSD64"))))))
         (install-standard-foreign-types ftd)
-    (use-interface-dir :libc ftd)
-    (setf (backend-target-foreign-type-data backend) ftd))))
+        (use-interface-dir :libc ftd)
+        (setf (backend-target-foreign-type-data backend) ftd))))
 
 #-x8664-target
