libqb/02-build-configure-check-section-boundary-symbols-prese.patch
Jan Pokorný 1799fc0be2
1.0.2-14 - Evolution of the previous (rhbz#1478089)
- Make -devel package dependency on the main package arch-qualified

Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
2017-11-15 18:32:21 +01:00

81 lines
3.2 KiB
Diff

From 9fadd438cbbabcde8fe3e19644bacc044279ebdb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= <jpokorny@redhat.com>
Date: Fri, 6 Oct 2017 17:17:26 +0200
Subject: [PATCH 2/6] build: configure: check section boundary symbols present
in the test
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
There was an idea to make apparently run-time test set to that effect,
but it would make cross-building harder. So arrange the test as if it
would be meant for AC_TRY_RUN, but achieve the same as with the first
assertion by the means of inspecting the linked result with, possibly
target-specific, nm utility.
While arranging the test for AC_TRY_RUN, based on feedback by Ferenc
Wágner, unify and increase usability of the run-time error signalling
through assertions.
Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
---
configure.ac | 35 ++++++++++++++++++++++++++---------
1 file changed, 26 insertions(+), 9 deletions(-)
diff --git a/configure.ac b/configure.ac
index 22630ba..29bd569 100644
--- a/configure.ac
+++ b/configure.ac
@@ -77,6 +77,7 @@ AC_CHECK_PROGS([DOXYGEN], [doxygen])
AM_CONDITIONAL(HAVE_DOXYGEN, test -n "${DOXYGEN}")
AC_CHECK_PROGS([SPLINT], [splint])
AM_CONDITIONAL(HAVE_SPLINT, test -n "${SPLINT}")
+AC_CHECK_TOOLS([NM], [eu-nm nm], [:])
## local helper functions
@@ -620,15 +621,31 @@ AC_SUBST(HAVE_SLOW_TESTS)
if test "x${GCC}" = xyes; then
AC_MSG_CHECKING([whether GCC supports __attribute__((section()) + ld supports orphan sections])
if test "x${ac_cv_link_attribute_section}" = x ; then
- AC_TRY_LINK([#include <assert.h>
- extern void * __start___verbose, * __stop___verbose;],
- [static int my_var __attribute__((section("__verbose"))) = 5;
- if (__start___verbose == __stop___verbose) assert(0);
- if (my_var == 5) return 0;
- else return -1;
- ],
- [gcc_has_attribute_section=yes],
- [gcc_has_attribute_section=no])
+ dnl could be turned to AC_TRY_RUN (first assertion is equivalent to
+ dnl the further check in action-if-true), but that would prevent
+ dnl cross-building
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <assert.h>
+ extern void * __start___verbose, * __stop___verbose;]],
+ [[static int my_var __attribute__((section("__verbose"))) = 5;
+ assert("non-empty data section"
+ && __start___verbose != __stop___verbose);
+ assert("no data section value loss"
+ && my_var == 5);]]
+ )],
+ [# alternatively something like (but requires number parsing):
+ # readelf -SW "conftest${ac_exeext}" \
+ # | sed -n '/__verbose/s/^\s*//p' | tr -s ' ' | cut -d" " -f6
+ verbose_start_addr=$(${NM} -g --portability -- "conftest${ac_exeext}" \
+ | grep __start___verbose | cut -d" " -f 3)
+ verbose_stop_addr=$(${NM} -g --portability -- "conftest${ac_exeext}" \
+ | grep __stop___verbose | cut -d" " -f 3)
+ test "${verbose_start_addr}" = "${verbose_stop_addr}" \
+ && gcc_has_attribute_section=no \
+ || gcc_has_attribute_section=yes],
+ [gcc_has_attribute_section=no]
+ )
else
gcc_has_attribute_section=${ac_cv_link_attribute_section}
fi
--
2.15.0