]> granicus.if.org Git - postgresql/commitdiff
This patch should enable 6.5 to build on Motorola 68000 architecture.
authorBruce Momjian <bruce@momjian.us>
Thu, 10 Jun 1999 22:59:22 +0000 (22:59 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 10 Jun 1999 22:59:22 +0000 (22:59 +0000)
It comes from Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>.

src/include/postgres.h
src/include/storage/s_lock.h

index 1edaf853988c4f5102c72ef26541ccfdc8cbf438..051d65cec019e76a207e6591b1ee86b4ebbf4c11 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1995, Regents of the University of California
  *
- * $Id: postgres.h,v 1.22 1999/05/03 19:10:14 momjian Exp $
+ * $Id: postgres.h,v 1.23 1999/06/10 22:59:22 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -63,7 +63,21 @@ typedef Oid regproc;
 typedef Oid RegProcedure;
 
 /* ptr to func returning (char *) */
+#if defined(__mc68000__) && defined(__ELF__)
+/* The m68k SVR4 ABI defines that pointers are returned in %a0 instead of
+ * %d0. So if a function pointer is declared to return a pointer, the
+ * compiler may look only into %a0, but if the called function was declared
+ * to return return an integer type, it puts its value only into %d0. So the
+ * caller doesn't pink up the correct return value. The solution is to
+ * declare the function pointer to return int, so the compiler picks up the
+ * return value from %d0. (Functions returning pointers put their value
+ * *additionally* into %d0 for compability.) The price is that there are
+ * some warnings about int->pointer conversions...
+ */
+typedef int32 ((*func_ptr) ());
+#else 
 typedef char *((*func_ptr) ());
+#endif
 
 
 #define RegProcedureIsValid(p) OidIsValid(p)
index 9aef29bffce448a67963753e3f364bf44497683c..ed6f77e610c82f1b6cb333c7cc4c99b389c23e5d 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.59 1999/04/13 17:42:26 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.60 1999/06/10 22:59:22 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -157,6 +157,24 @@ tas(volatile slock_t *lock)
 #endif  /* sparc */
 
 
+#if defined(__mc68000__)
+#define TAS(lock) tas(lock)
+
+static __inline__ int
+tas(volatile slock_t *lock)
+{
+       register int rv;
+       
+       __asm__ __volatile__ (
+               "tas %1; sne %0"
+               : "=d" (rv), "=m"(*lock)
+               : "1" (*lock)
+               : "cc" );
+       return rv;
+}
+
+#endif /* defined(__mc68000__) */
+
 
 #if defined(NEED_VAX_TAS_ASM)
 /*
@@ -372,3 +390,4 @@ int                 tas(volatile slock_t *lock);            /* port/.../tas.s, or
 
 #endif  /* HAS_TEST_AND_SET */
 #endif  /* S_LOCK_H */
+