Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc74f48a

Browse files
committed
Prevent accidental linking of system-supplied copies of libpq.so etc.
Back-patch commitdddfc4c, which broke LDFLAGS and related Makefilevariables into two parts, one for within-build-tree library references andone for external libraries, to ensure that the order of -L flags has allof the former before all of the latter. This turns out to fix a problemrecently noted on buildfarm member peripatus, that we attempted toincorporate code from libpgport.a into a shared library. That will fail onplatforms that are sticky about putting non-PIC code into shared libraries.(It's quite surprising we hadn't seen such failures before, since the codein question has been like that for a long time.)I think that peripatus' problem could have been fixed with just a subsetof this patch; but since the previous issue of accidentally linking to thewrong copy of a Postgres shlib seems likely to bite people in the field,let's just back-patch the whole change. Now that commitdddfc4c hassurvived some beta testing, I'm less afraid to back-patch it than I wasat the time.This also fixes undesired inclusion of "-DFRONTEND" in pg_config's CPPFLAGSoutput (in 9.6 and up) and undesired inclusion of "-L../../src/common" inits LDFLAGS output (in all supported branches).Back-patch to v10 and older branches; this is already in v11.Discussion:https://postgr.es/m/20180704234304.bq2dxispefl65odz@ler-imac.local
1 parentb0da7ec commitc74f48a

File tree

30 files changed

+64
-47
lines changed

30 files changed

+64
-47
lines changed

‎contrib/dblink/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
MODULE_big = dblink
44
OBJS= dblink.o$(WIN32RES)
55
PG_CPPFLAGS = -I$(libpq_srcdir)
6-
SHLIB_LINK =$(libpq)
6+
SHLIB_LINK_INTERNAL =$(libpq)
77

88
EXTENSION = dblink
99
DATA = dblink--1.2.sql dblink--1.1--1.2.sql dblink--1.0--1.1.sql\

‎contrib/hstore_plperl/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ ifeq ($(PORTNAME), win32)
2828
# these settings are the same as for plperl
2929
overrideCPPFLAGS += -DPLPERL_HAVE_UID_GID -Wno-comment
3030
# ... see silliness in plperl Makefile ...
31-
SHLIB_LINK +=$(sort$(wildcard ../../src/pl/plperl/libperl*.a))
31+
SHLIB_LINK_INTERNAL +=$(sort$(wildcard ../../src/pl/plperl/libperl*.a))
3232
else
3333
rpathdir =$(perl_archlibexp)/CORE
3434
SHLIB_LINK +=$(perl_embed_ldflags)

‎contrib/hstore_plpython/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ endif
2626
# We must link libpython explicitly
2727
ifeq ($(PORTNAME), win32)
2828
# ... see silliness in plpython Makefile ...
29-
SHLIB_LINK +=$(sort$(wildcard ../../src/pl/plpython/libpython*.a))
29+
SHLIB_LINK_INTERNAL +=$(sort$(wildcard ../../src/pl/plpython/libpython*.a))
3030
else
3131
rpathdir =$(python_libdir)
3232
SHLIB_LINK +=$(python_libspec)$(python_additional_libs)

‎contrib/ltree_plpython/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ endif
2626
# We must link libpython explicitly
2727
ifeq ($(PORTNAME), win32)
2828
# ... see silliness in plpython Makefile ...
29-
SHLIB_LINK +=$(sort$(wildcard ../../src/pl/plpython/libpython*.a))
29+
SHLIB_LINK_INTERNAL +=$(sort$(wildcard ../../src/pl/plpython/libpython*.a))
3030
else
3131
rpathdir =$(python_libdir)
3232
SHLIB_LINK +=$(python_libspec)$(python_additional_libs)

‎contrib/oid2name/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ PROGRAM = oid2name
77
OBJS= oid2name.o$(WIN32RES)
88

99
PG_CPPFLAGS = -I$(libpq_srcdir)
10-
PG_LIBS =$(libpq_pgport)
10+
PG_LIBS_INTERNAL =$(libpq_pgport)
1111

1212
ifdefUSE_PGXS
1313
PG_CONFIG = pg_config

‎contrib/postgres_fdw/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ OBJS = postgres_fdw.o option.o deparse.o connection.o shippable.o $(WIN32RES)
55
PGFILEDESC = "postgres_fdw - foreign data wrapper for PostgreSQL"
66

77
PG_CPPFLAGS = -I$(libpq_srcdir)
8-
SHLIB_LINK =$(libpq)
8+
SHLIB_LINK_INTERNAL =$(libpq)
99

1010
EXTENSION = postgres_fdw
1111
DATA = postgres_fdw--1.0.sql

‎contrib/spi/Makefile

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ DOCS = $(addsuffix .example, $(MODULES))
1717
# comment out if you want a quieter refint package for other uses
1818
PG_CPPFLAGS = -DREFINT_VERBOSE
1919

20-
LDFLAGS_SL += -L$(top_builddir)/src/port -lpgport
21-
2220
ifdefUSE_PGXS
2321
PG_CONFIG = pg_config
2422
PGXS :=$(shell$(PG_CONFIG) --pgxs)

‎contrib/vacuumlo/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ PROGRAM = vacuumlo
77
OBJS= vacuumlo.o$(WIN32RES)
88

99
PG_CPPFLAGS = -I$(libpq_srcdir)
10-
PG_LIBS =$(libpq_pgport)
10+
PG_LIBS_INTERNAL =$(libpq_pgport)
1111

1212
ifdefUSE_PGXS
1313
PG_CONFIG = pg_config

‎src/Makefile.global.in

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -273,17 +273,26 @@ UUID_EXTRA_OBJS = @UUID_EXTRA_OBJS@
273273
LD = @LD@
274274
with_gnu_ld = @with_gnu_ld@
275275

276-
# We want -L for libpgport.a and libpgcommon.a to be first in LDFLAGS. We
277-
# also need LDFLAGS to be a "recursively expanded" variable, else adjustments
278-
# to rpathdir don't work right. So we must NOT do LDFLAGS := something,
279-
# meaning this has to be done first and elsewhere we must only do LDFLAGS +=
280-
# something.
276+
# It's critical that within LDFLAGS, all -L switches pointing to build-tree
277+
# directories come before any -L switches pointing to external directories.
278+
# Otherwise it's possible for, e.g., a platform-provided copy of libpq.so
279+
# to get linked in place of the one we've built. Therefore we adopt the
280+
# convention that the first component of LDFLAGS is an extra variable
281+
# LDFLAGS_INTERNAL, and -L and -l switches for PG's own libraries must be
282+
# put into LDFLAGS_INTERNAL, so they will appear ahead of those for external
283+
# libraries.
284+
#
285+
# We need LDFLAGS and LDFLAGS_INTERNAL to be "recursively expanded" variables,
286+
# else adjustments to, e.g., rpathdir don't work right. So we must NOT do
287+
# "LDFLAGS := something" anywhere, ditto for LDFLAGS_INTERNAL.
288+
# These initial assignments must be "=" type, and elsewhere we must only do
289+
# "LDFLAGS += something" or "LDFLAGS_INTERNAL += something".
281290
ifdefPGXS
282-
LDFLAGS = -L$(libdir)
291+
LDFLAGS_INTERNAL = -L$(libdir)
283292
else
284-
LDFLAGS = -L$(top_builddir)/src/port -L$(top_builddir)/src/common
293+
LDFLAGS_INTERNAL = -L$(top_builddir)/src/port -L$(top_builddir)/src/common
285294
endif
286-
LDFLAGS+= @LDFLAGS@
295+
LDFLAGS=$(LDFLAGS_INTERNAL) @LDFLAGS@
287296

288297
LDFLAGS_EX = @LDFLAGS_EX@
289298
# LDFLAGS_SL might have already been assigned by calling makefile

‎src/Makefile.shlib

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,16 @@
2020
#
2121
# NAME Name of library to build (no suffix nor "lib" prefix)
2222
# OBJS List of object files to include in library
23-
# SHLIB_LINK If shared library relies on other libraries,
24-
# additional stuff to put in its link command
23+
# SHLIB_LINK Stuff to append to library's link command
24+
# (typically, -L and -l switches for external libraries)
25+
# SHLIB_LINK_INTERNAL -L and -l switches for Postgres-supplied libraries
2526
# SHLIB_PREREQS Order-only prerequisites for library build target
2627
# SHLIB_EXPORTS (optional) Name of file containing list of symbols to
2728
# export, in the format "function_name number"
2829
#
30+
# Don't use SHLIB_LINK for references to files in the build tree, or the
31+
# wrong things will happen --- use SHLIB_LINK_INTERNAL for those!
32+
#
2933
# When building a shared library, the following version information
3034
# must also be set. It should be omitted when building a dynamically
3135
# loadable module.
@@ -70,6 +74,8 @@
7074
COMPILER = $(CC) $(CFLAGS)
7175
LINK.static = $(AR) $(AROPT)
7276

77+
LDFLAGS_INTERNAL += $(SHLIB_LINK_INTERNAL)
78+
7379

7480

7581
ifdef SO_MAJOR_VERSION

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp