Hi,

  I made a patch to let PostgreSQL work in the LP64 data model on
  HP-UX PA-RISC and HP-UX Itanium platform. Also this patch contains
  tas code for HP-UX Itanium.

  I verified this patch on the following environment and specified as
  followings at executing configure script:

  * HP-UX 11.11 PA-RISC

    PHSS_30766  s700_800 ANSI C compiler B.11.11.10 cumulative patch
    PHSS_30966  s700_800 ld(1) and linker tools cumulative patch
    PHCO_30269  s700_800 cumulative sh-posix(1) patch
    PHCO_29816  s700_800 rc(1M) scripts cumulative patch 
    gcc (GCC) 3.4.1

    1) env CC=cc ./configure --without-readline --without-zlib

    2) env CC=cc CFLAGS=+DD64 ./configure --without-readline \
       --without-zlib

       Note: you may specify +DA2.0W instead of +DD64

    3) env CC=gcc ./configure --without-readline --without-zlib

    4) env CC=/usr/local/pa64/bin/gcc ./configure --without-readline \
       --without-zlib

    The regression test has no problem to all 96 tests in the 4 cases
    above.

  * HP-UX 11.23 Itanium

    PHSS_30848  s700_800 HP C Compiler (A.05.57)
    PHSS_30849  s700_800 u2comp/be/plugin library Patch
    gcc (GCC) 3.4.1

    1) env CC=cc CFLAGS="+O2" ./configure --without-readline \
       --without-zlib

    2) env CC=cc CFLAGS="+O2 +DD64" ./configure --without-readline \
       --without-zlib

    3) env CC=gcc CFLAGS="-O2" ./configure --without-readline \
       --without-zlib

    4) env CC=gcc CFLAGS="-O2 -mlp64" ./configure --without-readline \
       --without-zlib

    Only 'float8' of the regression test fails in the 4 cases above.

Cheers,

Shinji Teragaito
Hewlett-Packard Japan, Ltd.

P.S. First I made this patch for PostgreSQL 7.4.3. It's easy to
backport this patch to 7.4.3. But please be carefull to build 7.4.3 on
HP-UX 11.23 (aka HP-UX 11i v2 for HP Integrity Server): you must
specify "cc -E +legacy_cpp" in CPP at running configure. Otherwise you
will see the concatenation problem caused by genbki.sh. Now you don't
need to specify CPP to the CVS tree source code because the latest
genbki.sh doesn't use the preprocessor.
Tue, 24 Aug 2004 13:13:43 +0900
Shinji Teragaito <shinji@kobe.hp.com>
HP-UX PA-RISC/Itanium 64-bit Patch and HP-UX 11.23 Patch
Shinji Teragaito <shinji@kobe.hp.com> writes:
>   I made a patch to let PostgreSQL work in the LP64 data model on
>   HP-UX PA-RISC and HP-UX Itanium platform.

The s_lock change looks good ... but ...

This patch seems likely to break many other platforms.  You do not
seriously expect us to apply that change to float8.out, do you?

I'd also like to know the rationale for the Makefile.shlib changes
(which did not seem to be needed the last time I tested on HPUX 11)
and the -lxnet addition to Makefile.hpux (ditto).

			regards, tom lane

Tue, 24 Aug 2004 00:39:55 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: HP-UX PA-RISC/Itanium 64-bit Patch and HP-UX 11.23 Patch 
>> On Tue, 24 Aug 2004 00:39:55 -0400, Tom Lane <tgl@sss.pgh.pa.us> said:

> Shinji Teragaito <shinji@kobe.hp.com> writes:
>> I made a patch to let PostgreSQL work in the LP64 data model on
>> HP-UX PA-RISC and HP-UX Itanium platform.

> The s_lock change looks good ... but ...

> This patch seems likely to break many other platforms.  You do not
> seriously expect us to apply that change to float8.out, do you?

  No.

> I'd also like to know the rationale for the Makefile.shlib changes
> (which did not seem to be needed the last time I tested on HPUX 11)
> and the -lxnet addition to Makefile.hpux (ditto).

  * Makefile.shlib changes are required to link libgcc.a 64-bit
    version correctly on HP-UX 11.23 (Itanium). Without specifying
    -mlp64 in LDFLAGS, you will get libgcc.a 32-bit version. Then
    linking libpq.so.3 with ld, you will see the following error:

        /usr/ccs/bin/ld +h libpq.so.3 -b +b /usr/local/pgsql/lib
        fe-auth.o ..(snip).. `gcc -print-libgcc-file-name` -o libpq.so.3

        ld: Mismatched Data ABI. Expected EF_IA_64_ABI64 but found None in file
        /usr/local/lib/gcc/ia64-hp-hpux11.23/3.4.1/libgcc.a[__divdi3.oS]

    To link 64-bit object files with libgcc.a, libgcc.a must be
    64-bit.

    On the other hand, the changes to SHLIB_LINK is not required for
    PA-RISC HP-UX. Becase the gcc binaries are seperated for 32-bit
    and 64-bit uses respectively. According to the data model, ILP32
    or LP64, you will select the appropriate gcc binary. Then `$(CC)
    -print-libgcc-file-name` results to be the correct libgcc.a.

  * When you specify _XOPEN_SOURCE_EXTENDED in CFLAGS, X/Open
    Networking Interfaces doesn't work in LP64 data model without
    linking with libxnet. The third parameter type in sockets and IP
    resolution interfaces such as bind() and getpeername() is defined
    as socklen_t. socklen_t is typedefed as size_t, which is typedefed
    as unsigned long. In LP64 data model, size_t results to be
    64-bit. But inside the HP-UX X/Open Networking Interfaces
    implementation, the third parameter is expected as 32-bit
    length. To work around this problem in LP64 data model especially,
    the -lxnet addition to Makefile.hpux is required.

    Refer to man 7 xopen_networking.

Cheers,

Shinji Teragaito
Hewlett-Packard Japan, Ltd.


Tue, 24 Aug 2004 17:23:19 +0900
Shinji Teragaito <shinji@kobe.hp.com>
Re: HP-UX PA-RISC/Itanium 64-bit Patch and HP-UX 11.23 Patch 
>> On Tue, 24 Aug 2004 00:39:55 -0400, Tom Lane <tgl@sss.pgh.pa.us> said:

> Shinji Teragaito <shinji@kobe.hp.com> writes:
>> I made a patch to let PostgreSQL work in the LP64 data model on
>> HP-UX PA-RISC and HP-UX Itanium platform.

> The s_lock change looks good ... but ...

> This patch seems likely to break many other platforms.  You do not
> seriously expect us to apply that change to float8.out, do you?

  My patch is not related to the failure of the float8 test. Because
you can see this failure when you compile the original cvs source code
using GCC 3.4.1 on HP-UX 11.23 (Itanium) and run the regression test.
Besides the failure of the float8 test, the create_function_1 and
triggers tests fail. Please refer to the attached regression.diff. The
result of float8.out diffs in this file are the same with the result I
can see under the environment my patch is applied.

  The reason refint.sl has unresolved external symbol (__divdi3) is
it's linked by /usr/ccs/bin/ld without libgcc.a. This is implemented
in src/Makefile.port. Makefile.port in my patch use GCC to link
refint.so. It results to link refint.so with libgcc.a implicitly and
automatically. Anyway my patch will eliminate the failures of the
create_function_1 and triggers test when GCC on HP-UX 11.23 will be
used regardless of ILP32 or LP64.

> I'd also like to know the rationale for the Makefile.shlib changes
> (which did not seem to be needed the last time I tested on HPUX 11)

  Note I don't see this unresolved symbol problem when I use GCC 3.4.1
on HP-UX 11.11 (PA-RISC) even if my patch is not applied. I have not
look into this deeply (I'm just wondering millicode routine on PA-RISC
is related to this).

Cheers,

Shinji Teragaito
Hewlett-Packard Japan, Ltd.
Tue, 31 Aug 2004 20:00:14 +0900
Shinji Teragaito <shinji@kobe.hp.com>
Re: [PATCHES] HP-UX PA-RISC/Itanium 64-bit Patch and HP-UX 11.23
	Patch

This has been applied and will be in beta3.

---------------------------------------------------------------------------

Shinji Teragaito wrote:
> >> On Tue, 24 Aug 2004 00:39:55 -0400, Tom Lane <tgl@sss.pgh.pa.us> said:
> 
> > Shinji Teragaito <shinji@kobe.hp.com> writes:
> >> I made a patch to let PostgreSQL work in the LP64 data model on
> >> HP-UX PA-RISC and HP-UX Itanium platform.
> 
> > The s_lock change looks good ... but ...
> 
> > This patch seems likely to break many other platforms.  You do not
> > seriously expect us to apply that change to float8.out, do you?
> 
>   No.
> 
> > I'd also like to know the rationale for the Makefile.shlib changes
> > (which did not seem to be needed the last time I tested on HPUX 11)
> > and the -lxnet addition to Makefile.hpux (ditto).
> 
>   * Makefile.shlib changes are required to link libgcc.a 64-bit
>     version correctly on HP-UX 11.23 (Itanium). Without specifying
>     -mlp64 in LDFLAGS, you will get libgcc.a 32-bit version. Then
>     linking libpq.so.3 with ld, you will see the following error:
> 
>         /usr/ccs/bin/ld +h libpq.so.3 -b +b /usr/local/pgsql/lib
>         fe-auth.o ..(snip).. `gcc -print-libgcc-file-name` -o libpq.so.3
> 
>         ld: Mismatched Data ABI. Expected EF_IA_64_ABI64 but found None in file
>         /usr/local/lib/gcc/ia64-hp-hpux11.23/3.4.1/libgcc.a[__divdi3.oS]
> 
>     To link 64-bit object files with libgcc.a, libgcc.a must be
>     64-bit.
> 
>     On the other hand, the changes to SHLIB_LINK is not required for
>     PA-RISC HP-UX. Becase the gcc binaries are seperated for 32-bit
>     and 64-bit uses respectively. According to the data model, ILP32
>     or LP64, you will select the appropriate gcc binary. Then `$(CC)
>     -print-libgcc-file-name` results to be the correct libgcc.a.
> 
>   * When you specify _XOPEN_SOURCE_EXTENDED in CFLAGS, X/Open
>     Networking Interfaces doesn't work in LP64 data model without
>     linking with libxnet. The third parameter type in sockets and IP
>     resolution interfaces such as bind() and getpeername() is defined
>     as socklen_t. socklen_t is typedefed as size_t, which is typedefed
>     as unsigned long. In LP64 data model, size_t results to be
>     64-bit. But inside the HP-UX X/Open Networking Interfaces
>     implementation, the third parameter is expected as 32-bit
>     length. To work around this problem in LP64 data model especially,
>     the -lxnet addition to Makefile.hpux is required.
> 
>     Refer to man 7 xopen_networking.
> 
> Cheers,
> 
> Shinji Teragaito
> Hewlett-Packard Japan, Ltd.
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Fri, 3 Sep 2004 16:35:57 -0400 (EDT)
Bruce Momjian <pgman@candle.pha.pa.us>
Re: HP-UX PA-RISC/Itanium 64-bit Patch and HP-UX 11.23 Patch

Has this been resolved?

---------------------------------------------------------------------------

Shinji Teragaito wrote:
> >> On Tue, 24 Aug 2004 00:39:55 -0400, Tom Lane <tgl@sss.pgh.pa.us> said:
> 
> > Shinji Teragaito <shinji@kobe.hp.com> writes:
> >> I made a patch to let PostgreSQL work in the LP64 data model on
> >> HP-UX PA-RISC and HP-UX Itanium platform.
> 
> > The s_lock change looks good ... but ...
> 
> > This patch seems likely to break many other platforms.  You do not
> > seriously expect us to apply that change to float8.out, do you?
> 
>   My patch is not related to the failure of the float8 test. Because
> you can see this failure when you compile the original cvs source code
> using GCC 3.4.1 on HP-UX 11.23 (Itanium) and run the regression test.
> Besides the failure of the float8 test, the create_function_1 and
> triggers tests fail. Please refer to the attached regression.diff. The
> result of float8.out diffs in this file are the same with the result I
> can see under the environment my patch is applied.
> 
>   The reason refint.sl has unresolved external symbol (__divdi3) is
> it's linked by /usr/ccs/bin/ld without libgcc.a. This is implemented
> in src/Makefile.port. Makefile.port in my patch use GCC to link
> refint.so. It results to link refint.so with libgcc.a implicitly and
> automatically. Anyway my patch will eliminate the failures of the
> create_function_1 and triggers test when GCC on HP-UX 11.23 will be
> used regardless of ILP32 or LP64.
> 
> > I'd also like to know the rationale for the Makefile.shlib changes
> > (which did not seem to be needed the last time I tested on HPUX 11)
> 
>   Note I don't see this unresolved symbol problem when I use GCC 3.4.1
> on HP-UX 11.11 (PA-RISC) even if my patch is not applied. I have not
> look into this deeply (I'm just wondering millicode routine on PA-RISC
> is related to this).
> 
> Cheers,
> 
> Shinji Teragaito
> Hewlett-Packard Japan, Ltd.
> 

[ Attachment, skipping... ]

> 
> ---------------------------(end of broadcast)---------------------------
> TIP 9: the planner will ignore your desire to choose an index scan if your
>       joining column's datatypes do not match

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Thu, 7 Oct 2004 15:22:34 -0400 (EDT)
Bruce Momjian <pgman@candle.pha.pa.us>
Re: [PATCHES] HP-UX PA-RISC/Itanium 64-bit Patch and HP-UX
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> Has this been resolved?

AFAIK everything is fixed.  I put in Shinji's changes and some more of
my own.  I did port testing on HP 11.11 and 11.23 a month or so ago and
found that we could build and pass regression on both gcc and vendor
cc on both platforms.

			regards, tom lane

Thu, 07 Oct 2004 15:32:16 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: [PATCHES] HP-UX PA-RISC/Itanium 64-bit Patch and HP-UX 
>> On Thu, 07 Oct 2004 15:32:16 -0400, Tom Lane <tgl@sss.pgh.pa.us> said:

> Bruce Momjian <pgman@candle.pha.pa.us> writes:
>> Has this been resolved?

> AFAIK everything is fixed.  I put in Shinji's changes and some more of
> my own.  I did port testing on HP 11.11 and 11.23 a month or so ago and
> found that we could build and pass regression on both gcc and vendor
> cc on both platforms.

  As long as GNU ld is not installed and GNU gcc is used, the current
  CVS head has two problems:

  #1) ld: Mismatched Data ABI

  In the LP64 data model, libpq.so creation fails because "-mlp64" is
  missing in the back singlequote.

    /usr/ccs/bin/ld +h libpq.so.3 -b +b /usr/local/pgsql/lib ..(snip)..
    -L../../../src/port -lnsl  `gcc -print-libgcc-file-name`  -o
    libpq.so.3

    ld: Mismatched Data ABI. Expected EF_IA_64_ABI64 but found None in file
    /usr/local/lib/gcc/ia64-hp-hpux11.23/3.4.1/libgcc.a[__divdi3.oS]
    Fatal error.

  #2) Two regresstion tests fail

  create_function_1 and triggers tests fail because refint.so has
  unresolved external symbol "__divdi3".

Cheers,

Shinji Teragaito
Hewlett-Packard Japan, Ltd.
Fri, 08 Oct 2004 12:26:04 +0900
Shinji Teragaito <shinji@kobe.hp.com>
Re: [PATCHES] HP-UX PA-RISC/Itanium 64-bit Patch and HP-UX 
Shinji Teragaito <shinji@kobe.hp.com> writes:
152c152
<     SHLIB_LINK		+= `$(CC) -print-libgcc-file-name`
---
>     SHLIB_LINK		+= `$(CC) $(LDFLAGS) -print-libgcc-file-name`

Okay.  I'm slightly worried about odd LDFLAGS values confusing this, but
we can deal with that when we see an example.

155c155
<     LINK.shared		= $(CC) $(LDFLAGS) -shared -Wl,-h -Wl,$(soname)
---
>     LINK.shared		= $(CC) $(LDFLAGS) -shared -Wl,-h -Wl,$(soname) -Wl,+b -Wl,$(libdir)

That looks good too.  I think I had seen a truncated version of this
(just the +b part) and left it off because it didn't work.

I've applied both these changes.

58c58
< ifeq ($(with_gnu_ld), yes)
---
> ifeq ($(GCC), yes)

This I cannot apply; it breaks the gcc-with-HP-ld case, at least on my
personal installation (HPUX 10.20, gcc 2.95.3, HP ld).  My tests on HP's
testdrive systems did not show any problem here --- what case are you
concerned about exactly?

			regards, tom lane

Fri, 08 Oct 2004 00:26:06 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: [PATCHES] HP-UX PA-RISC/Itanium 64-bit Patch and HP-UX 
>> On Fri, 08 Oct 2004 00:26:06 -0400, Tom Lane <tgl@sss.pgh.pa.us> said:

> Shinji Teragaito <shinji@kobe.hp.com> writes:
> 152c152
> <     SHLIB_LINK		+= `$(CC) -print-libgcc-file-name`
> ---
>> SHLIB_LINK		+= `$(CC) $(LDFLAGS) -print-libgcc-file-name`

> Okay.  I'm slightly worried about odd LDFLAGS values confusing this, but
> we can deal with that when we see an example.

> 155c155
> <     LINK.shared		= $(CC) $(LDFLAGS) -shared -Wl,-h -Wl,$(soname)
> ---
>> LINK.shared		= $(CC) $(LDFLAGS) -shared -Wl,-h -Wl,$(soname) -Wl,+b -Wl,$(libdir)

> That looks good too.  I think I had seen a truncated version of this
> (just the +b part) and left it off because it didn't work.

> I've applied both these changes.

  Thank you !!

> 58c58
> < ifeq ($(with_gnu_ld), yes)
> ---
>> ifeq ($(GCC), yes)

> This I cannot apply; it breaks the gcc-with-HP-ld case, at least on my
> personal installation (HPUX 10.20, gcc 2.95.3, HP ld).  My tests on HP's
> testdrive systems did not show any problem here --- what case are you
> concerned about exactly?

  gcc-with-HP-ld case on Itanium (HP-UX 11.23, gcc 3.4.1, HP ld).

Cheers,

Shinji Teragaito
Hewlett-Packard Japan, Ltd.


Mon, 11 Oct 2004 16:31:27 +0900
Shinji Teragaito <shinji@kobe.hp.com>
Re: [PATCHES] HP-UX PA-RISC/Itanium 64-bit Patch and HP-UX 
> > > Shinji Teragaito <shinji@kobe.hp.com> writes:
> > >> I made a patch to let PostgreSQL work in the LP64 data model on
> > >> HP-UX PA-RISC and HP-UX Itanium platform.

I see Shinji's patch changed the library suffix from .sl to .so for ia64.  
Is that is necessary?  If so, why?

Thanks,
Ed


Tue, 26 Oct 2004 21:27:13 -0600
"Ed L." <pgsql@bluepolka.net>
Re: HP-UX PA-RISC/Itanium 64-bit Patch and HP-UX 11.23 Patch
>> On Tue, 26 Oct 2004 21:27:13 -0600, "Ed L." <pgsql@bluepolka.net> said:

>> > > Shinji Teragaito <shinji@kobe.hp.com> writes:
>> > >> I made a patch to let PostgreSQL work in the LP64 data model on
>> > >> HP-UX PA-RISC and HP-UX Itanium platform.

> I see Shinji's patch changed the library suffix from .sl to .so for ia64.  
> Is that is necessary?  If so, why?

  HP-UX Itanium native shared library suffix is ".so", not ".sl".
  My patch conforms to such a convention.

  Please take a look at the directory /usr/lib/hpux{32,64}. Note ".sl"
  libraries under /usr/lib and /usr/lib/pa{1.1,2.0,20_32,20_64} are PA
  binaries for Aries.

Cheers,

Shinji

Wed, 27 Oct 2004 19:53:12 +0900
Shinji Teragaito <shinji@kobe.hp.com>
Re: HP-UX PA-RISC/Itanium 64-bit Patch and HP-UX 11.23 Patch