Re: [PATCHES] Patch for Linux-IA64 - Mailing list pgsql-bugs

From Bruce Momjian
Subject Re: [PATCHES] Patch for Linux-IA64
Date
Msg-id 200007070123.VAA27702@candle.pha.pa.us
Whole thread Raw
In response to Re: [PATCHES] Patch for Linux-IA64  (Andreas Schwab <schwab@suse.de>)
List pgsql-bugs
Applied.  Thanks.


[ Charset ISO-8859-1 unsupported, converting... ]
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
>
> |> The Makefile.shlib changes will have to be discussed with other Linux
> |> developers so we are sure it will work on all platforms.
>
> The problem with the current settings is that the linker is called
> directly.  This is wrong, it should always be called through the compiler
> driver (the only exception is `ld -r').  This will make sure that the
> necessary libraries like libgcc are linked in.
>
> But there is still a different problem with the setting of LDFLAGS_ODBC.
> The psqlodbc module defines the functions _init and _fini which are
> reserved for the shared library initialisation.  These should be changed
> to constructor functions.  Then LDFLAGS_ODBC can be changed to be just
> `-lm'.  Btw, why does it use -Bsymbolic?
>
> Here is a patch to implement this:
>
> --- src/Makefile.shlib
> +++ src/Makefile.shlib    2000/07/05 16:51:27
> @@ -145,9 +145,9 @@
>  ifeq ($(PORTNAME), linux)
>    install-shlib-dep    := install-shlib
>    shlib                := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
> -  LDFLAGS_SL        := -Bdynamic -shared -soname $(shlib)
> -  LDFLAGS_ODBC        := -Bsymbolic -lc -lm
> -  SHLIB_LINK        += -lc
> +  LD            := $(CC)
> +  LDFLAGS_SL        := -shared -Wl,-soname,$(shlib)
> +  LDFLAGS_ODBC        := -lm
>    CFLAGS            += $(CFLAGS_SL)
>  endif
>
> --- src/interfaces/odbc/psqlodbc.c
> +++ src/interfaces/odbc/psqlodbc.c    2000/07/06 10:01:04
> @@ -33,8 +33,6 @@
>
>  GLOBAL_VALUES globals;
>
> -BOOL _init(void);
> -BOOL _fini(void);
>  RETCODE SQL_API SQLDummyOrdinal(void);
>
>  #ifdef WIN32
> @@ -96,6 +94,20 @@
>  #ifndef FALSE
>  #define FALSE    (BOOL)0
>  #endif
> +
> +#ifdef __GNUC__
> +
> +/* This function is called at library initialization time.  */
> +
> +static BOOL
> +__attribute__((constructor))
> +init(void)
> +{
> +    getGlobalDefaults(DBMS_NAME, ODBCINST_INI, FALSE);
> +    return TRUE;
> +}
> +
> +#else
>
>  /* These two functions do shared library initialziation on UNIX, well at least
>   * on Linux. I don't know about other systems.
>
> Andreas.
>
> --
> Andreas Schwab                                  "And now for something
> SuSE Labs                                        completely different."
> Andreas.Schwab@suse.de
> SuSE GmbH, Schanz?ckerstr. 10, D-90443 N?rnberg
>


--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: upper() problem in 7.0.2
Next
From: Paul McGarry
Date:
Subject: Re: [SQL] MAX() of 0 records.