Re: PostgreSQL 9.4 InterlockedCompareExchange appearing in mingw64-w32 causing issue with PostGIS win32 load

Поиск
Список
Период
Сортировка
От Paragon Corporation
Тема Re: PostgreSQL 9.4 InterlockedCompareExchange appearing in mingw64-w32 causing issue with PostGIS win32 load
Дата
Msg-id 286FBE756DA043A881A289C539AD2ED3@O
обсуждение исходный текст
Ответ на PostgreSQL 9.4 InterlockedCompareExchange appearing in mingw64-w32 causing issue with PostGIS win32 load  ("Paragon Corporation" <lr@pcorp.us>)
Список pgsql-hackers
-- REVISED NOTE --
> Hm.  s_lock.h does define TAS() in terms of InterlockedCompareExchange()
if WIN32_ONLY_COMPILER is defined ... but that code hasn't changed in quite
a long time.  It 
> seems like the combination of an extension built with WIN32_ONLY_COMPILER
and a core built without that flag should never have worked, if the core is
what has to link 
> in InterlockedCompareExchange.

> I wonder if there is something you're doing that results in inlining a
spinlock call given the 9.4 headers, but did not previously.  Can you narrow
down what part of 
> your code is giving rise to the undefined reference?

>            regards, tom lane

Tom,

Does it with all extensions, not just PostGIS (before (9.3.4 and before) I
could swap between say for example hstore mingw compiled and VC compiled and
had no issue)
And this extra InterlockedComparedExchange export did not appear in the
extension dlls.
The InterlockedCompareExchange@ export as you guessed shows in the
extension .dll postgres.exe reference but not clear where to tell where that
is coming thru.  

I found this thread which sounds like the situation I am running into, but
not sure why it would be suddenly an issue now unless nothing is being
exported anymore
http://sourceforge.net/p/mingw-w64/mailman/message/31128245/

I'm compiling PostgreSQL the same way in both 9.3 and 9.4:

With something that looks like this:
export MINGHOST=i686-w64-mingw32
PG_VER=9.4

./configure --prefix=${PROJECTS}/postgresql/rel/pg${PG_VER}\ --build=${MINGHOST} \ --with-pgport=8443
--disable-float8-byval--enable-cassert
 
--enable-debug \ --enable-integer-datetimes --without-zlib


With just the PG_VER being different.

What I did notice is that in 9.3, the config.log shows this for 

9.4:
LDFLAGS=-Wl,--allow-multiple-definition -Wl,--disable-auto-import
-Wl,--as-needed


and
9.3:
LDFLAGS=-Wl,--allow-multiple-definition  -Wl,--as-needed

I read thru the threads on mailing list and confirmed it was an intended
change.


I thought maybe the --disable-auto-import was doing something.

Trying to override the flag with

When I do any of the below did not work
export LDFLAGS=-Wl,--allow-multiple-definition -Wl,--enable-auto-import
-Wl,--as-needed
export LDFLAGS="-Wl,--allow-multiple-definition -Wl,--enable-auto-import
-Wl,--as-needed"
export LDFLAGS=-Wl,--allow-multiple-definition  -Wl,--as-needed

However I was able to override it by changing the:
/src/template/win32 (trying both )

LDFLAGS="-Wl,--allow-multiple-definition -Wl,--enable-auto-import"

And the old 9.3.4
LDFLAGS="-Wl,--allow-multiple-definition"


And concluded that was not the issue since the export of this symbol still
happens.

Any other thoughts?

Thanks,
Regina





В списке pgsql-hackers по дате отправления:

Предыдущее
От: Atri Sharma
Дата:
Сообщение: Re: Congrats Andres Freund, the newest PostgreSQL Commiter!
Следующее
От: David Rowley
Дата:
Сообщение: Re: Allowing join removals for more join types