]> granicus.if.org Git - postgresql/commitdiff
Cleanup some ancient Ultrix / Alpha code in main() that is intended to
authorNeil Conway <neilc@samurai.com>
Fri, 24 Sep 2004 06:29:07 +0000 (06:29 +0000)
committerNeil Conway <neilc@samurai.com>
Fri, 24 Sep 2004 06:29:07 +0000 (06:29 +0000)
modify how unaligned memory accesses are dealt with. Document that this
is really what is going on, and merge the NOFIXADE and NOPRINTADE code
paths.

src/backend/main/main.c

index df9c776b602b89719d02b1bbe97655726f38195a..bcab85cbc57e4b29a0afdcb761256835bde9012e 100644 (file)
@@ -13,7 +13,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/main/main.c,v 1.89 2004/08/29 05:06:43 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/main/main.c,v 1.90 2004/09/24 06:29:07 neilc Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -71,18 +71,23 @@ main(int argc, char *argv[])
 
 #if defined(__alpha)                   /* no __alpha__ ? */
 #ifdef NOFIXADE
-       int                     buffer[] = {SSIN_UACPROC, UAC_SIGBUS};
-#endif   /* NOFIXADE */
-#ifdef NOPRINTADE
-       int                     buffer[] = {SSIN_UACPROC, UAC_NOPRINT};
-#endif   /* NOPRINTADE */
+       int                     buffer[] = {SSIN_UACPROC, UAC_SIGBUS | UAC_NOPRINT};
+#endif
 #endif   /* __alpha */
 
 #ifdef WIN32
        char       *env_locale;
 #endif
 
-#if defined(NOFIXADE) || defined(NOPRINTADE)
+       /*
+        * On some platforms, unaligned memory accesses result in a kernel
+        * trap; the default kernel behavior is to emulate the memory
+        * access, but this results in a significant performance
+        * penalty. We ought to fix PG not to make such unaligned memory
+        * accesses, so this code disables the kernel emulation: unaligned
+        * accesses will result in SIGBUS instead.
+        */
+#ifdef NOFIXADE
 
 #if defined(ultrix4)
        syscall(SYS_sysmips, MIPS_FIXADE, 0, NULL, NULL, NULL);
@@ -94,7 +99,7 @@ main(int argc, char *argv[])
                write_stderr("%s: setsysinfo failed: %s\n",
                                         argv[0], strerror(errno));
 #endif
-#endif   /* NOFIXADE || NOPRINTADE */
+#endif   /* NOFIXADE */
 
 #if defined(WIN32)
        {