summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dev-db/postgresql/files/postgresql-7.4.17-hppa-testandset.patch')
-rw-r--r--dev-db/postgresql/files/postgresql-7.4.17-hppa-testandset.patch50
1 files changed, 50 insertions, 0 deletions
diff --git a/dev-db/postgresql/files/postgresql-7.4.17-hppa-testandset.patch b/dev-db/postgresql/files/postgresql-7.4.17-hppa-testandset.patch
new file mode 100644
index 0000000..d5f916d
--- /dev/null
+++ b/dev-db/postgresql/files/postgresql-7.4.17-hppa-testandset.patch
@@ -0,0 +1,50 @@
+--- postgresql-7.4.12.orig/src/include/port/linux.h 2003-10-26 01:41:10.000000000 +0000
++++ postgresql-7.4.12/src/include/port/linux.h 2004-01-09 20:22:50.000000000 +0000
+@@ -3,6 +3,11 @@
+
+ #define HAS_TEST_AND_SET
+
++#elif defined(__hppa__)
++typedef struct { int sema[4]; } slock_t;
++
++#define HAS_TEST_AND_SET
++
+ #elif defined(__sparc__)
+ typedef unsigned char slock_t;
+
+--- postgresql-7.4.12.orig/src/include/storage/s_lock.h 2003-11-04 09:43:56.000000000 +0000
++++ postgresql-7.4.12/src/include/storage/s_lock.h 2004-01-09 20:12:15.000000000 +0000
+@@ -112,6 +112,33 @@
+
+ #endif /* __i386__ || __x86_64__ */
+
++#if defined(__hppa__) || defined(__hppa)
++#define TAS(lock) tas(lock)
++
++#define __ldcw(a) ({ \
++ unsigned int __ret; \
++ __asm__ __volatile__("ldcw 0(%2),%0" \
++ : "=r" (__ret), "=m" (*(a)) : "r" (a)); \
++ __ret; \
++})
++
++#define __PA_LDCW_ALIGNMENT 16
++#define __ldcw_align(a) ({ \
++ volatile unsigned int __ret = (unsigned int) a; \
++ if ((__ret & ~(__PA_LDCW_ALIGNMENT - 1)) < (unsigned int) a) \
++ __ret = (__ret & ~(__PA_LDCW_ALIGNMENT - 1)) + __PA_LDCW_ALIGNMENT; \
++ (unsigned int *) __ret; \
++})
++
++static __inline__ int
++tas(volatile slock_t *lock)
++{
++ volatile unsigned int *a = __ldcw_align (lock);
++ return (__ldcw(a) == 0);
++}
++
++#endif /* __hppa__ || __hppa */
++
+
+ /* Intel Itanium */
+ #if defined(__ia64__) || defined(__ia64)