On Saft, 30 Dec 2000, Thomas T. Thai wrote:
i grabbed the CVS ball last night and tried to build it. i'm attaching a
patch that made it possible to build -current on NetBSD/Alpha
1.5.1_ALPHA. i would appreciate it if you have cvs write access to
integrate my patch back into the tree.
after install, i did the regression test and it failed in the same way
that 7.0.3+rkirkpat.patch did as described below (copy of my last post).
> Date: Sat, 30 Dec 2000 01:42:11 -0600 (CST)
> From: Thomas T. Thai <[EMAIL PROTECTED]>
> To: Tom Lane <[EMAIL PROTECTED]>
> Cc: [EMAIL PROTECTED], Brent Verner <[EMAIL PROTECTED]>,
> Ryan Kirkpatrick <[EMAIL PROTECTED]>,
> Adriaan Joubert <[EMAIL PROTECTED]>,
> Arrigo Triulzi <[EMAIL PROTECTED]>
> Subject: NetBSD/Alpha and rkirkpat's patch [was Re: regress failed
> tests.. SERIOUS?]
>
> On Fri, 29 Dec 2000, Tom Lane wrote:
>
> > Date: Fri, 29 Dec 2000 23:20:58 -0500
> > From: Tom Lane <[EMAIL PROTECTED]>
> > To: Thomas T. Thai <[EMAIL PROTECTED]>
> > Cc: PostgreSQL General <[EMAIL PROTECTED]>
> > Subject: Re: regress failed tests.. SERIOUS?
> >
> > "Thomas T. Thai" <[EMAIL PROTECTED]> writes:
> > > PLEASE NOTE: I'm brand new to PostgreSQL as of today. I've just moved from
> > > MySQL because it's not stable on NetBSD/Alpha. I don't know enough about
> > > pgsql to see if these failed test would make it unstable for production.
> >
> > Postgres 7.0.* will not work very well on Alpha unless you apply Ryan
> > Kirkpatrick's patch set (I forget the URL offhand, but dig around in our
> > archives and you'll find it). 7.1 should be a lot better. If you'd
> > like to help out testing 7.1, please grab current sources from the CVS
> > server, or grab a snapshot tarball dated tomorrow or later.
>
> i did just that. i applied the patch that is available at:
>
> http://www.rkirkpat.net/software/#linux-alpha
>
> to my NetBSD/Alpha 1.5.1_ALPHA PostgreSQL 7.0.3 package. compiled with out
> errors. some warnings about casting wrong pointers types etc, but they
> seem harmless.
>
> even though Kirkpatrick said his patch was for the Linux/Alpha, most of
> his modifications weren't so Linux centric as it was Alpha
> centric. consequently, the patch worked out well for NetBSD/Alpha as well.
>
>
> with the above patch, the regression now only failed on 2 tests:
>
> $ grep failed regress.out
> float8 .. failed
> timestamp .. failed
> horology .. failed
>
> float8 did pass, just diff format of the error message. 'timestamp' and
> 'horology' not only failed but caused many 'Fatal User Traps' logged in
> newsyslog '/var/log/messages':
>
> <cut>
> Dec 30 01:22:33 ns01 /netbsd: fatal user trap:
> Dec 30 01:22:33 ns01 /netbsd:
> Dec 30 01:22:33 ns01 /netbsd: trap entry = 0x1 (arithmetic trap)
> Dec 30 01:22:33 ns01 /netbsd: a0 = 0x2
> Dec 30 01:22:33 ns01 /netbsd: a1 = 0x40000000000
> Dec 30 01:22:33 ns01 /netbsd: a2 = 0xffffffffffffffff
> Dec 30 01:22:33 ns01 /netbsd: pc = 0x1201449f8
> Dec 30 01:22:33 ns01 /netbsd: ra = 0x120029ca4
> Dec 30 01:22:33 ns01 /netbsd: curproc = 0xfffffc0023bb6c98
> Dec 30 01:22:33 ns01 /netbsd: pid = 1705, comm = postgres
> </cut>
>
> the 'fatal user trap' errors seem to happen whenever there is a query
> that resulted in SQL error message "ERROR: floating point exception! The
> last floating point operation either exceeded legal ranges or was a
> divide by zero."
>
>
> for the 'strings' test, it passed but this line in 'strings.sql'
>
> SELECT CAST(f1 AS char(10)) AS "char(text)" FROM TEXT_TBL;
>
> caused these output on the console:
>
> <cut>
> pid 1684 (postgres): unaligned access: va=0x1a007dd25 pc=0x12014bd10
> ra=0x12014b
> cac op=ldl
> pid 1684 (postgres): unaligned access: va=0x1a007dd26 pc=0x12014bd10
> ra=0x12014b
> cac op=ldl
> pid 1684 (postgres): unaligned access: va=0x1a007dd27 pc=0x12014bd10
> ra=0x12014b
> cac op=ldl
> pid 1684 (postgres): unaligned access: va=0x1a007dced pc=0x12014bd10
> ra=0x12014b
> ce4 op=ldl
> pid 1684 (postgres): unaligned access: va=0x1a007dcee pc=0x12014bd10
> ra=0x12014b
> ce4 op=ldl
> pid 1684 (postgres): unaligned access: va=0x1a007dcef pc=0x12014bd10
> ra=0x12014b
> ce4 op=ldl
> pid 1684 (postgres): unaligned access: va=0x1a007dcf1 pc=0x12014bd10
> ra=0x12014b
> ce4 op=ldl
> pid 1684 (postgres): unaligned access: va=0x1a007dcf2 pc=0x12014bd10
> ra=0x12014b
> ce4 op=ldl
> pid 1684 (postgres): unaligned access: va=0x1a007dcf3 pc=0x12014bd10
> ra=0x12014b
> ce4 op=ldl
> pid 1684 (postgres): unaligned access: va=0x1a007dcf5 pc=0x12014bd10
> ra=0x12014b
> ce4 op=ldl
> </cut>
>
> (but nothing in '/var/log/messages').
>
> i'm attaching the regression.diffs file. in addition, i'm going to move
> this thread to pgsql-bugs instead of pgsql-general.
>
diff -ru /usr/local/source/postgresql/pgsql/src/backend/main/main.c
/usr/local/build/pgsql-current/src/backend/main/main.c
--- /usr/local/source/postgresql/pgsql/src/backend/main/main.c Fri Nov 24 21:45:47
2000
+++ /usr/local/build/pgsql-current/src/backend/main/main.c Sat Dec 30 15:06:34
+2000
@@ -25,13 +25,14 @@
#include <locale.h>
#endif
-#if defined(__alpha) && !defined(linux) && !defined(__FreeBSD__)
+#if defined(__alpha) && !defined(linux) && !defined(__FreeBSD__) &&
+!defined(__NetBSD__)
#include <sys/sysinfo.h>
#include "machine/hal_sysinfo.h"
#define ASSEMBLER
#include <sys/proc.h>
#undef ASSEMBLER
#endif
+#include <sys/param.h>
#include "miscadmin.h"
#include "bootstrap/bootstrap.h"
diff -ru /usr/local/source/postgresql/pgsql/src/include/port/netbsd.h
/usr/local/build/pgsql-current/src/include/port/netbsd.h
--- /usr/local/source/postgresql/pgsql/src/include/port/netbsd.h Sun Oct 29
07:17:34 2000
+++ /usr/local/build/pgsql-current/src/include/port/netbsd.h Sat Dec 30 14:59:06
+2000
@@ -1,43 +1,48 @@
#if defined(__i386__)
#define NEED_I386_TAS_ASM
#define HAS_TEST_AND_SET
+typedef unsigned char slock_t;
#endif
#if defined(__sparc__)
#define NEED_SPARC_TAS_ASM
#define HAS_TEST_AND_SET
+typedef unsigned char slock_t;
#endif
#if defined(__vax__)
#define NEED_VAX_TAS_ASM
#define HAS_TEST_AND_SET
+typedef unsigned char slock_t;
#endif
#if defined(__ns32k__)
#define NEED_NS32K_TAS_ASM
#define HAS_TEST_AND_SET
+typedef unsigned char slock_t;
#endif
#if defined(__m68k__)
#define HAS_TEST_AND_SET
+typedef unsigned char slock_t;
#endif
#if defined(__arm__)
#define HAS_TEST_AND_SET
+typedef unsigned char slock_t;
#endif
#if defined(__mips__)
/* # undef HAS_TEST_AND_SET */
+typedef unsigned char slock_t;
#endif
-#if defined(__powerpc__)
+#if defined(__alpha__)
#define HAS_TEST_AND_SET
+typedef unsigned long slock_t;
#endif
#if defined(__powerpc__)
+#define HAS_TEST_AND_SET
typedef unsigned int slock_t;
-
-#else
-typedef unsigned char slock_t;
-
#endif
diff -ru /usr/local/source/postgresql/pgsql/src/include/storage/s_lock.h
/usr/local/build/pgsql-current/src/include/storage/s_lock.h
--- /usr/local/source/postgresql/pgsql/src/include/storage/s_lock.h Fri Dec 29
20:34:56 2000
+++ /usr/local/build/pgsql-current/src/include/storage/s_lock.h Sat Dec 30 14:59:37
+2000
@@ -241,7 +241,17 @@
#if defined(NEED_NS32K_TAS_ASM)
#define TAS(lock) tas(lock)
+#if defined(__GNUC__)
+/*
+ * GCC on the Alpha doesn't appear to handle inlining of assembly with
+ * %0 or %1 properly. This removes the inlining of the tas (test-and-set)
+ * function, which probably slows things down considerably, but correctness
+ * first!
+ */
+static int
+#else
static __inline__ int
+#endif
tas(volatile slock_t *lock)
{
register _res;
diff -ru /usr/local/source/postgresql/pgsql/src/interfaces/odbc/psqlodbc.c
/usr/local/build/pgsql-current/src/interfaces/odbc/psqlodbc.c
--- /usr/local/source/postgresql/pgsql/src/interfaces/odbc/psqlodbc.c Fri Jul 14
11:40:40 2000
+++ /usr/local/build/pgsql-current/src/interfaces/odbc/psqlodbc.c Sat Dec 30
+14:50:31 2000
@@ -110,7 +110,7 @@
#else /* not __GNUC__ */
/* These two functions do shared library initialziation on UNIX, well at least
- * on Linux. I don't know about other systems.
+ * on Linux and some of the BSDs. I don't know about other systems.
*/
BOOL
_init(void)