Обсуждение: Re: [HACKERS] int 8 on FreeBSD

Поиск
Список
Период
Сортировка

Re: [HACKERS] int 8 on FreeBSD

От
Kevin Lo
Дата:
Holm Tiffe wrote:

> Hi all,

Hi, Holm,

> While compiling of 6.4.2 I've realized that int8's are not supported
> on FreeBSD by default. The Configure script looks if %ld or %lld
> will do the job but FreeBSD is using %qd as the long long int format.
> After a little fiddeling around with the configure script and
> include/utils/int8.h, I've got the int8 type working.
> Since I've read somtimes in this Mailinglists, that FreeBSD is one
> of the development platforms for PostgreSQL, I wonder why PGSQL
> doesn't support FreeBSD's own format ...

Here are the patches I've used to enable int8 support.
Since my patches modify configure.in, you'll need to install
autoconf and regenerate the configure script.

Hope this helps,
Kevin.

==============================================================

--- ./src/backend/port/snprintf.c       1998/12/25 02:20:41     64.2
+++ ./src/backend/port/snprintf.c       1999/01/19 00:37:40     64.2.1.1

@@ -49,7 +49,7 @@#include <sys/param.h>
/* IRIX doesn't do 'long long' in va_arg(), so use a typedef */
-#ifdef HAVE_LONG_LONG_INT_64
+#if defined(HAVE_LONG_INT_64) || defined(HAVE_LONG_LONG_INT) ||
defined(HAVE_QUAD_INT_64)typedef long long long_long;typedef unsigned long long ulong_long;#endif
--- ./src/include/utils/int8.h  1998/09/11 17:16:11     64.2
+++ ./src/include/utils/int8.h  1999/01/19 00:37:41     64.2.1.1
@@ -35,11 +35,18 @@
#define INT64_FORMAT "%lld"#else
+#ifdef HAVE_QUAD_INT_64
+/* We have working support for "long long", use that */
+typedef long long int64;
+
+#define INT64_FORMAT "%qd"
+#else/* Won't actually work, but fall back to long int so that int8.c
compiles
*/typedef long int int64;
#define INT64_FORMAT "%ld"#define INT64_IS_BUSTED
+#endif#endif#endif

--- ./src/include/config.h.in   1998/12/13 20:08:24     64.2
+++ ./src/include/config.h.in   1999/01/19 00:37:41     64.2.1.1
@@ -267,6 +267,9 @@/* Set to 1 if type "long long int" works and is 64 bits */#undef HAVE_LONG_LONG_INT_64

+/* Set to 1 if type "long long" works and is 64 bits */
+#undef HAVE_QUAD_INT_64
+/* Define as the base type of the last arg to accept */#undef SOCKET_SIZE_TYPE

--- ./src/configure.in  1998/12/13 20:08:20     64.2
+++ ./src/configure.in  1999/01/19 00:37:39     64.2.1.1
@@ -688,6 +688,43 @@       AC_MSG_RESULT(no),       AC_MSG_RESULT(assuming not on target machine))

+AC_MSG_CHECKING(whether 'long long' is 64 bits)
+AC_TRY_RUN([#include <stdio.h>
+typedef long long int64;
+#define INT64_FORMAT "%qd"
+
+int64 a = 20000001;
+int64 b = 40000005;
+
+int does_int64_work()
+{
+  int64 c,d,e;
+  char buf[100];
+
+  if (sizeof(int64) != 8)
+    return 0;                  /* doesn't look like the right size */
+
+  /* we do perfunctory checks on multiply, divide, sprintf, sscanf */
+  c = a * b;
+  sprintf(buf, INT64_FORMAT, c);
+  if (strcmp(buf, "800000140000005") != 0)
+    return 0;                  /* either multiply or sprintf is busted
*/
+  if (sscanf(buf, INT64_FORMAT, &d) != 1)
+    return 0;
+  if (d != c)
+    return 0;
+  e = d / b;
+  if (e != a)
+    return 0;
+  return 1;
+}
+main() {
+  exit(! does_int64_work());
+}],
+       [AC_DEFINE(HAVE_QUAD_INT_64) AC_MSG_RESULT(yes)],
+       AC_MSG_RESULT(no),
+       AC_MSG_RESULT(assuming not on target machine))
+dnl Checks for library functions.AC_FUNC_MEMCMPAC_TYPE_SIGNAL





Re: [HACKERS] int 8 on FreeBSD

От
Tom Lane
Дата:
Kevin Lo <jwlo@ms11.hinet.net> writes:
>> While compiling of 6.4.2 I've realized that int8's are not supported
>> on FreeBSD by default. The Configure script looks if %ld or %lld
>> will do the job but FreeBSD is using %qd as the long long int format.

> Here are the patches I've used to enable int8 support.

Actually, given the way that the 6.5 sources currently stand, the right
long-term solution is to make two separate tests: (1) does the compiler
do 64-bit arithmetic correctly, and if so then (2) does snprintf have a
working format for the chosen type.  If (1) passes but (2) fails we have
a fallback: enable use of our own snprintf code.  When I wrote the 6.4
configure test for int8, we hadn't yet developed that fallback, so there
wasn't much point in distinguishing compiler support from library
support.  But now we should.

If we do it this way then it doesn't matter a whole lot whether "%qd" is
one of the tested alternatives or not ;-).

I will pursue fixing things that way in the 6.5 sources.  In the
meantime, do we want to check Kevin's fixes into REL6_4, or is adding
int8 support for more machines too low-priority to justify taking any
chance of breaking 6.4.3?
        regards, tom lane


Re: [HACKERS] int 8 on FreeBSD

От
The Hermit Hacker
Дата:
On Sun, 7 Mar 1999, Tom Lane wrote:

> I will pursue fixing things that way in the 6.5 sources.  In the
> meantime, do we want to check Kevin's fixes into REL6_4, or is adding
> int8 support for more machines too low-priority to justify taking any
> chance of breaking 6.4.3?

Note that I commited int8 fixes to the v6.4.3 tree, and they are in the
current beta3 tar file...did this mid-last week...

Marc G. Fournier                                
Systems Administrator @ hub.org 
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org 



Re: [HACKERS] int 8 on FreeBSD

От
Michael Graff
Дата:
The Hermit Hacker <scrappy@hub.org> writes:

> On Sun, 7 Mar 1999, Tom Lane wrote:
> 
> > I will pursue fixing things that way in the 6.5 sources.  In the
> > meantime, do we want to check Kevin's fixes into REL6_4, or is adding
> > int8 support for more machines too low-priority to justify taking any
> > chance of breaking 6.4.3?
> 
> Note that I commited int8 fixes to the v6.4.3 tree, and they are in the
> current beta3 tar file...did this mid-last week...

Did you also change the #ifdef line to include __NetBSD__ for the %qd
format?  At least NetBSD/i386 uses that.  Alpha might not, I'm not
fully certain, but I think it will work with %qd.

--Michael


Re: [HACKERS] int 8 on FreeBSD

От
The Hermit Hacker
Дата:
Try what I just commited now...its only in v6.5 sources though...

I've modified it so that it checks for use of %lld, and if that fails,
check for use of %qd, before it falls back to our homebrew snprintf...


On 7 Mar 1999, Michael Graff wrote:

> The Hermit Hacker <scrappy@hub.org> writes:
> 
> > On Sun, 7 Mar 1999, Tom Lane wrote:
> > 
> > > I will pursue fixing things that way in the 6.5 sources.  In the
> > > meantime, do we want to check Kevin's fixes into REL6_4, or is adding
> > > int8 support for more machines too low-priority to justify taking any
> > > chance of breaking 6.4.3?
> > 
> > Note that I commited int8 fixes to the v6.4.3 tree, and they are in the
> > current beta3 tar file...did this mid-last week...
> 
> Did you also change the #ifdef line to include __NetBSD__ for the %qd
> format?  At least NetBSD/i386 uses that.  Alpha might not, I'm not
> fully certain, but I think it will work with %qd.
> 
> --Michael
> 

Marc G. Fournier                                
Systems Administrator @ hub.org 
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org 



Re: [HACKERS] int 8 on FreeBSD

От
Tom Lane
Дата:
The Hermit Hacker <scrappy@hub.org> writes:
> Try what I just commited now...its only in v6.5 sources though...
> I've modified it so that it checks for use of %lld, and if that fails,
> check for use of %qd, before it falls back to our homebrew snprintf...

What I committed this afternoon will work on a %qd box, it'll just
choose to insert our homebrew snprintf instead of using the local
version.

Is it worth adding another test cycle to configure in order to use the
native snprintf on these boxes?  There are not that many boxes that
use %qd; and it's not real clear that using our own snprintf is a loss
anyway.

Just my $0.02 ...
        regards, tom lane


Re: [HACKERS] int 8 on FreeBSD

От
The Hermit Hacker
Дата:
On Mon, 8 Mar 1999, Tom Lane wrote:

> The Hermit Hacker <scrappy@hub.org> writes:
> > Try what I just commited now...its only in v6.5 sources though...
> > I've modified it so that it checks for use of %lld, and if that fails,
> > check for use of %qd, before it falls back to our homebrew snprintf...
> 
> What I committed this afternoon will work on a %qd box, it'll just
> choose to insert our homebrew snprintf instead of using the local
> version.
> 
> Is it worth adding another test cycle to configure in order to use the
> native snprintf on these boxes?  There are not that many boxes that
> use %qd; and it's not real clear that using our own snprintf is a loss
> anyway.

In all cases, using a system function is preferable to a "home brew
solution"...as its then guaranteed to work, and work optimally, for that
system...

Marc G. Fournier                                
Systems Administrator @ hub.org 
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org