Skip to content

Commit 69d0513

Browse files
committed
build: Use fPIC rather than fPIE for qt objects.
But only if qt was built with reduced relocations.
1 parent 17c4d9d commit 69d0513

File tree

3 files changed

+41
-3
lines changed

3 files changed

+41
-3
lines changed

build-aux/m4/bitcoin_qt.m4

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,43 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
160160
fi
161161
fi
162162
163+
if test x$use_hardening != xno; then
164+
BITCOIN_QT_CHECK([
165+
AC_MSG_CHECKING(whether -fPIE can be used with this Qt config)
166+
TEMP_CPPFLAGS=$CPPFLAGS
167+
TEMP_CXXFLAGS=$CXXFLAGS
168+
CPPFLAGS="$QT_INCLUDES $CPPFLAGS"
169+
CXXFLAGS="$PIE_FLAGS $CXXFLAGS"
170+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <QtCore/qconfig.h>]],
171+
[[
172+
#if defined(QT_REDUCE_RELOCATIONS)
173+
choke;
174+
#endif
175+
]])],
176+
[ AC_MSG_RESULT(yes); QT_PIE_FLAGS=$PIE_FLAGS ],
177+
[ AC_MSG_RESULT(no); QT_PIE_FLAGS=$PIC_FLAGS]
178+
)
179+
CPPFLAGS=$TEMP_CPPFLAGS
180+
CXXFLAGS=$TEMP_CXXFLAGS
181+
])
182+
else
183+
BITCOIN_QT_CHECK([
184+
AC_MSG_CHECKING(whether -fPIC is needed with this Qt config)
185+
TEMP_CPPFLAGS=$CPPFLAGS
186+
CPPFLAGS="$QT_INCLUDES $CPPFLAGS"
187+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <QtCore/qconfig.h>]],
188+
[[
189+
#if defined(QT_REDUCE_RELOCATIONS)
190+
choke;
191+
#endif
192+
]])],
193+
[ AC_MSG_RESULT(no)],
194+
[ AC_MSG_RESULT(yes); QT_PIE_FLAGS=$PIC_FLAGS]
195+
)
196+
CPPFLAGS=$TEMP_CPPFLAGS
197+
])
198+
fi
199+
163200
BITCOIN_QT_PATH_PROGS([MOC], [moc-qt${bitcoin_qt_got_major_vers} moc${bitcoin_qt_got_major_vers} moc], $qt_bin_path)
164201
BITCOIN_QT_PATH_PROGS([UIC], [uic-qt${bitcoin_qt_got_major_vers} uic${bitcoin_qt_got_major_vers} uic], $qt_bin_path)
165202
BITCOIN_QT_PATH_PROGS([RCC], [rcc-qt${bitcoin_qt_got_major_vers} rcc${bitcoin_qt_got_major_vers} rcc], $qt_bin_path)
@@ -205,6 +242,7 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
205242
])
206243
AC_MSG_RESULT([$bitcoin_enable_qt (Qt${bitcoin_qt_got_major_vers})])
207244
245+
AC_SUBST(QT_PIE_FLAGS)
208246
AC_SUBST(QT_INCLUDES)
209247
AC_SUBST(QT_LIBS)
210248
AC_SUBST(QT_LDFLAGS)

src/Makefile.qt.include

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ BITCOIN_QT_INCLUDES = -I$(builddir)/qt -I$(srcdir)/qt -I$(srcdir)/qt/forms \
329329

330330
qt_libbitcoinqt_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \
331331
$(QT_INCLUDES) $(QT_DBUS_INCLUDES) $(PROTOBUF_CFLAGS) $(QR_CFLAGS)
332-
qt_libbitcoinqt_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
332+
qt_libbitcoinqt_a_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS)
333333

334334
qt_libbitcoinqt_a_SOURCES = $(BITCOIN_QT_CPP) $(BITCOIN_QT_H) $(QT_FORMS_UI) \
335335
$(QT_QRC) $(QT_QRC_LOCALE) $(QT_TS) $(PROTOBUF_PROTO) $(RES_ICONS) $(RES_IMAGES) $(RES_MOVIES)
@@ -353,7 +353,7 @@ $(QT_MOC_CPP): $(PROTOBUF_H)
353353
# bitcoin-qt binary #
354354
qt_bitcoin_qt_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \
355355
$(QT_INCLUDES) $(PROTOBUF_CFLAGS) $(QR_CFLAGS)
356-
qt_bitcoin_qt_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
356+
qt_bitcoin_qt_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS)
357357

358358
qt_bitcoin_qt_SOURCES = qt/bitcoin.cpp
359359
if TARGET_DARWIN

src/Makefile.qttest.include

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ qt_test_test_bitcoin_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBIT
3838
$(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBSECP256K1) \
3939
$(EVENT_PTHREADS_LIBS) $(EVENT_LIBS)
4040
qt_test_test_bitcoin_qt_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
41-
qt_test_test_bitcoin_qt_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
41+
qt_test_test_bitcoin_qt_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS)
4242

4343
CLEAN_BITCOIN_QT_TEST = $(TEST_QT_MOC_CPP) qt/test/*.gcda qt/test/*.gcno
4444

0 commit comments

Comments
 (0)