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>
This commit is contained in:
parent
18a84f6e3e
commit
1799fc0be2
@ -116,5 +116,5 @@ index 3cb4eef..4954932 100644
|
||||
#else
|
||||
#define QB_LOG_INIT_DATA(name)
|
||||
--
|
||||
2.14.3
|
||||
2.15.0
|
||||
|
||||
|
@ -0,0 +1,80 @@
|
||||
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
|
||||
|
@ -1,56 +0,0 @@
|
||||
From 287ae050e5330202eca59adbb7e87e9d26d69e08 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: run attribute section test through
|
||||
run-time assertion
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It's unclear why the apparently run-time test hasn't been set to that
|
||||
effect, mere compilability was tested so far.
|
||||
|
||||
Also, 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 | 22 +++++++++++++---------
|
||||
1 file changed, 13 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 22630ba..478194c 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -620,15 +620,19 @@ 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])
|
||||
+ AC_TRY_RUN(
|
||||
+ 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);]]
|
||||
+ ),
|
||||
+ [gcc_has_attribute_section=yes],
|
||||
+ [gcc_has_attribute_section=no]
|
||||
+ )
|
||||
else
|
||||
gcc_has_attribute_section=${ac_cv_link_attribute_section}
|
||||
fi
|
||||
--
|
||||
2.14.3
|
||||
|
@ -1,4 +1,4 @@
|
||||
From d471da4335c1da2501f2c31ffafc18ae884af389 Mon Sep 17 00:00:00 2001
|
||||
From f400d33a3ce8ca04248a6602441a40b878eadf2c 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 3/6] tests: new sort of tests dubbed "functional", cover
|
||||
@ -180,7 +180,7 @@ Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
|
||||
create mode 100755 tests/functional/log_test_mock.sh
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 478194c..274b49c 100644
|
||||
index 29bd569..8c588cb 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -13,7 +13,7 @@ AC_CONFIG_SRCDIR([lib/ringbuffer.c])
|
||||
@ -192,7 +192,7 @@ index 478194c..274b49c 100644
|
||||
dnl automake >= 1.11 offers --enable-silent-rules for suppressing the output from
|
||||
dnl normal compilation. When a failure occurs, it will then display the full
|
||||
dnl command line
|
||||
@@ -717,6 +717,9 @@ AC_CONFIG_FILES([Makefile
|
||||
@@ -730,6 +730,9 @@ AC_CONFIG_FILES([Makefile
|
||||
lib/libqb.pc
|
||||
tools/Makefile
|
||||
tests/Makefile
|
||||
@ -202,7 +202,7 @@ index 478194c..274b49c 100644
|
||||
tests/test.conf
|
||||
examples/Makefile
|
||||
docs/Makefile
|
||||
@@ -724,6 +727,8 @@ AC_CONFIG_FILES([Makefile
|
||||
@@ -737,6 +740,8 @@ AC_CONFIG_FILES([Makefile
|
||||
docs/html.dox
|
||||
docs/man.dox])
|
||||
|
||||
@ -1067,5 +1067,5 @@ index 0000000..145b9f4
|
||||
+ "- results stored in '_results/<timestamp>_<input_name>[_<tag>]'" \
|
||||
+ || do_proceed "$@"
|
||||
--
|
||||
2.14.3
|
||||
2.15.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 06388b7fdf471438a08740791c21ae658c657bd0 Mon Sep 17 00:00:00 2001
|
||||
From 260768d94017023771af9e7f1bddcff91883617a 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 4/6] Med: add extra run-time (client, libqb) checks that
|
||||
@ -247,10 +247,10 @@ Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
|
||||
create mode 100755 tests/functional/syslog-stdout.py
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 027154c..5338352 100644
|
||||
index 8c588cb..fdcd93c 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -644,6 +644,7 @@ if test "x${GCC}" = xyes; then
|
||||
@@ -655,6 +655,7 @@ if test "x${GCC}" = xyes; then
|
||||
AC_DEFINE([QB_HAVE_ATTRIBUTE_SECTION], 1,
|
||||
[Enabling code using __attribute__((section))])
|
||||
PACKAGE_FEATURES="$PACKAGE_FEATURES attribute-section"
|
||||
@ -259,7 +259,7 @@ index 027154c..5338352 100644
|
||||
fi
|
||||
|
||||
diff --git a/include/qb/qblog.h b/include/qb/qblog.h
|
||||
index aba63a0..e71556c 100644
|
||||
index 4954932..a9a9ef2 100644
|
||||
--- a/include/qb/qblog.h
|
||||
+++ b/include/qb/qblog.h
|
||||
@@ -1,9 +1,10 @@
|
||||
@ -627,5 +627,5 @@ index 0000000..64baf4c
|
||||
+if __name__ == '__main__':
|
||||
+ main(*argv)
|
||||
--
|
||||
2.14.3
|
||||
2.15.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From ae68f462c4ee6cadcbdbbd31b4c19e19bdd7aab2 Mon Sep 17 00:00:00 2001
|
||||
From cd5d104895f018cf90480dc84f09f32f6dcc2b3c 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 5/6] High: bare fix for libqb logging not working with
|
||||
@ -280,24 +280,32 @@ References:
|
||||
|
||||
Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
|
||||
---
|
||||
configure.ac | 147 +++++++++++++++++++++++++++++++++++++++++------
|
||||
include/qb/qblog.h | 32 +++++++++--
|
||||
lib/Makefile.am | 67 +++++++++++++++++++++
|
||||
lib/libqb.pc.in | 8 +++
|
||||
configure.ac | 156 +++++++++++++++++++++++++++++++++++++++++------
|
||||
include/qb/qblog.h | 32 ++++++++--
|
||||
lib/Makefile.am | 79 +++++++++++++++++++++++-
|
||||
lib/libqb.pc.in | 11 ++++
|
||||
lib/log.c | 7 +++
|
||||
lib/qblog_script.la.in | 15 +++++
|
||||
lib/qblog_script.ld.in | 27 +++++++++
|
||||
lib/qblog_script.ld.in | 30 +++++++++
|
||||
lib/qblog_script_noop.ld | 1 +
|
||||
8 files changed, 280 insertions(+), 24 deletions(-)
|
||||
8 files changed, 304 insertions(+), 27 deletions(-)
|
||||
create mode 100644 lib/qblog_script.la.in
|
||||
create mode 100644 lib/qblog_script.ld.in
|
||||
create mode 100644 lib/qblog_script_noop.ld
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 5338352..ac56c4c 100644
|
||||
index fdcd93c..cc3d3c3 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -503,6 +503,14 @@ AC_ARG_ENABLE([debug],
|
||||
@@ -78,6 +78,7 @@ 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], [:])
|
||||
+AC_CHECK_TOOLS([READELF], [eu-readelf readelf], [:])
|
||||
|
||||
## local helper functions
|
||||
|
||||
@@ -502,6 +503,14 @@ AC_ARG_ENABLE([debug],
|
||||
AC_ARG_ENABLE([coverage],
|
||||
[AS_HELP_STRING([--enable-coverage],[coverage analysis of the codebase])])
|
||||
|
||||
@ -312,7 +320,7 @@ index 5338352..ac56c4c 100644
|
||||
AC_ARG_ENABLE([slow-tests],
|
||||
[AS_HELP_STRING([--enable-slow-tests],[build and run slow tests])])
|
||||
|
||||
@@ -611,6 +619,19 @@ else
|
||||
@@ -610,6 +619,19 @@ else
|
||||
COVERAGE_LDFLAGS=""
|
||||
fi
|
||||
|
||||
@ -332,27 +340,17 @@ index 5338352..ac56c4c 100644
|
||||
if test "x${enable_slow_tests}" = xyes ; then
|
||||
AC_DEFINE([HAVE_SLOW_TESTS], 1,[have slow tests])
|
||||
AC_MSG_NOTICE([Enabling Slow tests])
|
||||
@@ -620,33 +641,121 @@ AC_SUBST(HAVE_SLOW_TESTS)
|
||||
@@ -619,20 +641,60 @@ AC_SUBST(HAVE_SLOW_TESTS)
|
||||
|
||||
# --- callsite sections ---
|
||||
if test "x${GCC}" = xyes; then
|
||||
+ AX_SAVE_FLAGS
|
||||
AC_MSG_CHECKING([whether GCC supports __attribute__((section()) + ld supports orphan sections])
|
||||
if test "x${ac_cv_link_attribute_section}" = x ; then
|
||||
- AC_TRY_RUN(
|
||||
- AC_LANG_PROGRAM(
|
||||
+ LDFLAGS="${LDFLAGS_save} -shared -fPIC" # we are compiling shared lib
|
||||
+ AC_LINK_IFELSE(
|
||||
+ [AC_LANG_SOURCE(
|
||||
[[#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);]]
|
||||
- ),
|
||||
- [gcc_has_attribute_section=yes],
|
||||
+ [[#include <assert.h>
|
||||
+ extern int __start___verbose[], __stop___verbose[];
|
||||
+ int test(void) {
|
||||
+ static int my_var __attribute__((section("__verbose"))) = 3;
|
||||
@ -362,52 +360,74 @@ index 5338352..ac56c4c 100644
|
||||
+ && my_var == 3 /* for 2.29.1+ */);
|
||||
+ return *((int *) __start___verbose); }]]
|
||||
+ )],
|
||||
+ [gcc_has_attribute_section=yes; cp "conftest${EXEEXT}" "conftest.so"],
|
||||
[gcc_has_attribute_section=no]
|
||||
)
|
||||
+ [gcc_has_attribute_section=yes; cp "conftest${ac_exeext}" "conftest.so"],
|
||||
+ [gcc_has_attribute_section=no]
|
||||
+ )
|
||||
+ AX_RESTORE_FLAGS
|
||||
else
|
||||
gcc_has_attribute_section=${ac_cv_link_attribute_section}
|
||||
fi
|
||||
-
|
||||
AC_MSG_RESULT($gcc_has_attribute_section)
|
||||
- if test $gcc_has_attribute_section = yes; then
|
||||
- AC_DEFINE([QB_HAVE_ATTRIBUTE_SECTION], 1,
|
||||
- [Enabling code using __attribute__((section))])
|
||||
- PACKAGE_FEATURES="$PACKAGE_FEATURES attribute-section"
|
||||
- AC_SUBST([client_dlopen_LIBS],[$dlopen_LIBS])
|
||||
+ else
|
||||
+ gcc_has_attribute_section=${ac_cv_link_attribute_section}
|
||||
+ fi
|
||||
+ AC_MSG_RESULT($gcc_has_attribute_section)
|
||||
+
|
||||
+ # in the failing case (e.g. with ld from binutils 2.29), it's likely the
|
||||
+ # following will fail readily in linkage (hidden symbol `__stop___verbose'
|
||||
+ # in conftest is referenced by DSO), but keep the sensible test
|
||||
+ # (in-executable symbol is expected to be propagated into the library,
|
||||
+ # and to draw the full circle back to the executable through standard
|
||||
+ # return value passing;
|
||||
+ # return value passing (respectively no-exec probing to spot the issue);
|
||||
+ # -rpath passed because LD_LIBRARY_PATH exporting is unwieldy here);
|
||||
+ # moreover, "my_var" == 3 assertion above is necessary so that binutils
|
||||
+ # 2.29.1+ will not slip other parts of the overall is-workaround-needed
|
||||
+ # harness, as it restored some (but not all) of the original behaviour,
|
||||
+ # but the workaround is still provably needed
|
||||
+ # moreover, "my_var" == 3 assertion above (respectively checking if the
|
||||
+ # boundary symbol visibility differs from DEFAULT in readelf output) is
|
||||
+ # necessary so that binutils 2.29.1+ will not slip other parts of the
|
||||
+ # overall is-workaround-needed harness, as it restored some (but not
|
||||
+ # all) of the original behaviour, but the workaround is still provably
|
||||
+ # needed
|
||||
+ if test "x${gcc_has_attribute_section}" = xyes; then
|
||||
+ AC_MSG_CHECKING([whether linker emits global boundary symbols for orphan sections])
|
||||
+ LIBS="${LIBS} -L. -l:conftest.so -Wl,-rpath=$(pwd)"
|
||||
+ AC_TRY_RUN(
|
||||
+ AC_LANG_PROGRAM(
|
||||
+ [[#include <assert.h>
|
||||
+ LIBS="${LIBS} -L. -l:conftest${shrext_cmds} -Wl,-rpath=$(pwd)"
|
||||
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;]],
|
||||
+ extern int __start___verbose[], __stop___verbose[];
|
||||
+ int test(void);]],
|
||||
+ [[static int my_var __attribute__((section("__verbose"))) = 5;
|
||||
[[static int my_var __attribute__((section("__verbose"))) = 5;
|
||||
- assert("non-empty data section"
|
||||
+ assert("E:non-empty data section"
|
||||
+ && __start___verbose != __stop___verbose);
|
||||
&& __start___verbose != __stop___verbose);
|
||||
- assert("no data section value loss"
|
||||
- && my_var == 5);]]
|
||||
+ assert("E:no data section value loss"
|
||||
+ && my_var == test() /*5?*/);]]
|
||||
+ ),
|
||||
+ [gcc_has_attribute_section_visible=yes],
|
||||
)],
|
||||
[# alternatively something like (but requires number parsing):
|
||||
# readelf -SW "conftest${ac_exeext}" \
|
||||
@@ -642,22 +704,78 @@ if test "x${GCC}" = xyes; then
|
||||
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]
|
||||
+ && gcc_has_attribute_section_visible=no \
|
||||
+ || { verbose_start_type=$(${READELF} -s backup \
|
||||
+ | sed -n '/__start___verbose/{s/^\s*//p;q}' \
|
||||
+ | tr -s ' ' \
|
||||
+ | cut -d" " -f6)
|
||||
+ test "${verbose_start_type}" = DEFAULT \
|
||||
+ && gcc_has_attribute_section_visible=yes \
|
||||
+ || gcc_has_attribute_section_visible=no; }],
|
||||
+ [gcc_has_attribute_section_visible=no]
|
||||
+ )
|
||||
)
|
||||
- else
|
||||
- gcc_has_attribute_section=${ac_cv_link_attribute_section}
|
||||
- fi
|
||||
+ AX_RESTORE_FLAGS
|
||||
+ AC_MSG_RESULT($gcc_has_attribute_section_visible)
|
||||
+ rm -f "conftest.so"
|
||||
+ rm -f "conftest${shrext_cmds}"
|
||||
+
|
||||
+ if test "x${gcc_has_attribute_section_visible}" = xno; then
|
||||
+ # check if the linker script based workaround is
|
||||
@ -444,7 +464,13 @@ index 5338352..ac56c4c 100644
|
||||
+ AC_MSG_RESULT([$gcc_has_attribute_section])
|
||||
+ rm -f "conftest.ld"
|
||||
+ fi
|
||||
+
|
||||
|
||||
- AC_MSG_RESULT($gcc_has_attribute_section)
|
||||
- if test $gcc_has_attribute_section = yes; then
|
||||
- AC_DEFINE([QB_HAVE_ATTRIBUTE_SECTION], 1,
|
||||
- [Enabling code using __attribute__((section))])
|
||||
- PACKAGE_FEATURES="$PACKAGE_FEATURES attribute-section"
|
||||
- AC_SUBST([client_dlopen_LIBS],[$dlopen_LIBS])
|
||||
+ if test "x${gcc_has_attribute_section}" = xyes; then
|
||||
+ AC_DEFINE([QB_HAVE_ATTRIBUTE_SECTION], 1,
|
||||
+ [Enabling code using __attribute__((section))])
|
||||
@ -470,7 +496,7 @@ index 5338352..ac56c4c 100644
|
||||
|
||||
# --- ansi ---
|
||||
if test "x${enable_ansi}" = xyes && \
|
||||
@@ -728,9 +837,11 @@ AC_CONFIG_FILES([Makefile
|
||||
@@ -739,9 +857,11 @@ AC_CONFIG_FILES([Makefile
|
||||
docs/Makefile
|
||||
docs/common.dox
|
||||
docs/html.dox
|
||||
@ -485,7 +511,7 @@ index 5338352..ac56c4c 100644
|
||||
AC_OUTPUT
|
||||
|
||||
diff --git a/include/qb/qblog.h b/include/qb/qblog.h
|
||||
index e71556c..e0890a9 100644
|
||||
index a9a9ef2..00adb3a 100644
|
||||
--- a/include/qb/qblog.h
|
||||
+++ b/include/qb/qblog.h
|
||||
@@ -79,7 +79,10 @@ extern "C" {
|
||||
@ -552,7 +578,7 @@ index e71556c..e0890a9 100644
|
||||
assert("non-empty implicit callsite section, otherwise target's \
|
||||
linkage at fault and logging would not work reliably" \
|
||||
diff --git a/lib/Makefile.am b/lib/Makefile.am
|
||||
index 0bebeb5..ff5b3b4 100644
|
||||
index 0bebeb5..1572cff 100644
|
||||
--- a/lib/Makefile.am
|
||||
+++ b/lib/Makefile.am
|
||||
@@ -19,6 +19,7 @@
|
||||
@ -612,15 +638,23 @@ index 0bebeb5..ff5b3b4 100644
|
||||
|
||||
AM_LDFLAGS = $(LDFLAGS_COPY:-Bsymbolic-functions=)
|
||||
|
||||
@@ -60,6 +100,33 @@ else
|
||||
@@ -60,9 +100,42 @@ else
|
||||
endif
|
||||
endif
|
||||
|
||||
-
|
||||
-pkgconfigdir = $(libdir)/pkgconfig
|
||||
-pkgconfig_DATA = libqb.pc
|
||||
+qblog_script.ld: %.ld: %.ld.in
|
||||
+ $(AM_V_GEN)$(CPP) -xc -I$(top_srcdir)/include -D_GNU_SOURCE -C -P $< \
|
||||
+ | sed -n "/$$(sed -n '/^[^#]/{s/[*\/]/\\&/g;p;q;}' $<)/,$$ p" \
|
||||
+ > $@
|
||||
+
|
||||
+# sadly, there's a distinction between "exec" and "data" install, and it's hard
|
||||
+# to decouple install-exec-hook below (.pc file is platform-dependent, anyway)
|
||||
+pkgconfigexecdir = $(libdir)/pkgconfig
|
||||
+pkgconfigexec_DATA = libqb.pc
|
||||
+
|
||||
+# find the libqb.so symlink's target, if so, try to find out, iteratively,
|
||||
+# its gradually shorter forms that likewise symlinks the same target as the
|
||||
+# original libqb.so path, point to that file from the linker script using
|
||||
@ -639,29 +673,36 @@ index 0bebeb5..ff5b3b4 100644
|
||||
+ test "$${t2_target}" = "$${target}" || break; \
|
||||
+ t1_bn=$${t2_bn}; done; test -n "$${t1_bn}" || \
|
||||
+ { echo "only applicable to SO symlink scheme"; exit 1; }; \
|
||||
+ echo "INPUT($${t1_bn})" > "$(DESTDIR)$(libdir)/libqb.so-t"
|
||||
+ cat $< >> "$(DESTDIR)$(libdir)/libqb.so-t"
|
||||
+ mv -f "$(DESTDIR)$(libdir)/libqb.so-t" "$(DESTDIR)$(libdir)/libqb.so"
|
||||
+ echo "$${t1_bn}" > "$(DESTDIR)$(libdir)/libqb.so-t"
|
||||
+ so_ver=$$(cat "$(DESTDIR)$(libdir)/libqb.so-t"); \
|
||||
+ echo "INPUT($${so_ver})" > "$(DESTDIR)$(libdir)/libqb.so-t"; \
|
||||
+ cat $< >> "$(DESTDIR)$(libdir)/libqb.so-t"; \
|
||||
+ sed -i -- "s/libqb.so.<digit>/$${so_ver}/" \
|
||||
+ "$(DESTDIR)$(libdir)/libqb.so-t" "$(DESTDIR)$(pkgconfigexecdir)/libqb.pc"
|
||||
+ mv -f "$(DESTDIR)$(libdir)/libqb.so-t" "$(DESTDIR)$(libdir)/libqb.so"
|
||||
+endif
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = libqb.pc
|
||||
if HAVE_SPLINT
|
||||
check_SCRIPTS = run_splint.sh
|
||||
diff --git a/lib/libqb.pc.in b/lib/libqb.pc.in
|
||||
index 37d27b7..65d3b8e 100644
|
||||
index 37d27b7..d9839bf 100644
|
||||
--- a/lib/libqb.pc.in
|
||||
+++ b/lib/libqb.pc.in
|
||||
@@ -8,5 +8,13 @@ Version: @PACKAGE_VERSION@
|
||||
@@ -8,5 +8,16 @@ Version: @PACKAGE_VERSION@
|
||||
Description: libqb
|
||||
Requires:
|
||||
Libs: -L${libdir} -lqb @client_dlopen_LIBS@
|
||||
+# NOTE: If -lqb not usable for linking (e.g. linker not compatible with
|
||||
+# linker scripts ad-hoc modifying output sections), try recent
|
||||
+# ld.bfd/binutils linker first when available, otherwise you can
|
||||
+# try "-l:libqb.so.<digit>" link switch (right <digit> available,
|
||||
+# for example, directly within libqb.so plaintext) that bypasses
|
||||
+# said linker script -- but beware, logging problems may ensue.
|
||||
+# That can be partially mitigated with QB_KILL_ATTRIBUTE_SECTION
|
||||
+# macro defined when compiling, but testing remains a must.
|
||||
+# try "-l:libqb.so.<digit>" link switch that bypasses said linker
|
||||
+# script -- but beware, logging may be less efficient and may lack
|
||||
+# possible future optimizations and extra features. Consequently,
|
||||
+# logging issues (typically bound to QB_LOG_INIT_DATA macro) can be
|
||||
+# mitigated with QB_KILL_ATTRIBUTE_SECTION macro defined for a build.
|
||||
+# NOTE: when concerned about a warning coming from the build process like
|
||||
+# warning: [...]libqb.so contains output sections; did you forget -T?
|
||||
+# and the build finishes OK, take it merely as a harmless side-effect
|
||||
Libs.private: @LIBS@
|
||||
Cflags: -I${includedir}
|
||||
diff --git a/lib/log.c b/lib/log.c
|
||||
@ -705,10 +746,10 @@ index 0000000..f262df8
|
||||
+inherited_linker_flags=-Wl,@abs_builddir@/qblog_script.ld
|
||||
diff --git a/lib/qblog_script.ld.in b/lib/qblog_script.ld.in
|
||||
new file mode 100644
|
||||
index 0000000..2ee2da0
|
||||
index 0000000..a188ac2
|
||||
--- /dev/null
|
||||
+++ b/lib/qblog_script.ld.in
|
||||
@@ -0,0 +1,27 @@
|
||||
@@ -0,0 +1,30 @@
|
||||
+#include <qb/qblog.h>
|
||||
+/* GNU ld script
|
||||
+ This atypical arrangement enforces global visibility of boundary symbols
|
||||
@ -721,11 +762,14 @@ index 0000000..2ee2da0
|
||||
+ NOTE: If -lqb not usable for linking (e.g. linker not compatible with
|
||||
+ linker scripts ad-hoc modifying output sections), try recent
|
||||
+ ld.bfd/binutils linker first when available, otherwise you can
|
||||
+ try "-l:libqb.so.<digit>" link switch (right <digit> available,
|
||||
+ for example, directly within libqb.so plaintext) that bypasses
|
||||
+ said linker script -- but beware, logging problems may ensue.
|
||||
+ That can be partially mitigated with QB_KILL_ATTRIBUTE_SECTION
|
||||
+ macro defined when compiling, but testing remains a must.
|
||||
+ try "-l:libqb.so.<digit>" link switch that bypasses said linker
|
||||
+ script -- but beware, logging may be less efficient and may lack
|
||||
+ possible future optimizations and extra features. Consequently,
|
||||
+ logging issues (typically bound to QB_LOG_INIT_DATA macro) can be
|
||||
+ mitigated with QB_KILL_ATTRIBUTE_SECTION macro defined for a build.
|
||||
+ NOTE: When concerned about a warning coming from the build process like
|
||||
+ warning: [...]libqb.so contains output sections; did you forget -T?
|
||||
+ while it finishes OK, consider it merely a harmless side-effect.
|
||||
+ */
|
||||
+SECTIONS {
|
||||
+#ifdef QB_HAVE_ATTRIBUTE_SECTION
|
||||
@ -744,5 +788,5 @@ index 0000000..f037fca
|
||||
@@ -0,0 +1 @@
|
||||
+/* this is an empty linker script having a role of a NO-OP link object */
|
||||
--
|
||||
2.14.3
|
||||
2.15.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 93ebd97659c51527b0dc4b98ba3e0a9070a1dfea Mon Sep 17 00:00:00 2001
|
||||
From 8ae46f6c7a2e9c518fec635b8f7afb1b1dbc710f 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 6/6] Low: fix internal object symbol's leak & expose run-time
|
||||
@ -56,7 +56,7 @@ index c1852e1..9094dc7 100644
|
||||
#undef QB_VER_MINOR
|
||||
#undef QB_VER_MICRO
|
||||
diff --git a/include/qb/qblog.h b/include/qb/qblog.h
|
||||
index e0890a9..14f2a33 100644
|
||||
index 00adb3a..059d633 100644
|
||||
--- a/include/qb/qblog.h
|
||||
+++ b/include/qb/qblog.h
|
||||
@@ -299,9 +299,11 @@ extern struct qb_log_callsite QB_ATTR_SECTION_STOP[];
|
||||
@ -97,7 +97,7 @@ index bfce349..b02ce8d 100644
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
diff --git a/lib/Makefile.am b/lib/Makefile.am
|
||||
index ff5b3b4..a428975 100644
|
||||
index 1572cff..6ca6b15 100644
|
||||
--- a/lib/Makefile.am
|
||||
+++ b/lib/Makefile.am
|
||||
@@ -30,7 +30,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
|
||||
@ -193,5 +193,5 @@ index 19fca2c..98df44c 100644
|
||||
+[MAIN |debug] ../log_client.c:69:hello
|
||||
[libqb|error] log_blackbox.c:196:qb_log_blackbox_print_from_file:
|
||||
--
|
||||
2.14.3
|
||||
2.15.0
|
||||
|
||||
|
11
libqb.spec
11
libqb.spec
@ -2,7 +2,7 @@
|
||||
|
||||
Name: libqb
|
||||
Version: 1.0.2
|
||||
Release: 13%{?dist}
|
||||
Release: 14%{?dist}
|
||||
Summary: An IPC library for high performance servers
|
||||
|
||||
Group: System Environment/Libraries
|
||||
@ -10,7 +10,7 @@ License: LGPLv2+
|
||||
URL: https://github.com/ClusterLabs/libqb
|
||||
Source0: https://github.com/ClusterLabs/libqb/releases/download/v%{version}/%{name}-%{version}.tar.xz
|
||||
Patch0: 01-Med-qblog.h-better-explanation-behaviour-of-QB_LOG_I.patch
|
||||
Patch1: 02-build-configure-run-attribute-section-test-through-r.patch
|
||||
Patch1: 02-build-configure-check-section-boundary-symbols-prese.patch
|
||||
Patch2: 03-tests-new-sort-of-tests-dubbed-functional-cover-link.patch
|
||||
Patch3: 04-Med-add-extra-run-time-client-libqb-checks-that-logg.patch
|
||||
Patch4: 05-High-bare-fix-for-libqb-logging-not-working-with-ld..patch
|
||||
@ -62,7 +62,8 @@ rm -rf $RPM_BUILD_ROOT/%{_docdir}/*
|
||||
%package devel
|
||||
Summary: Development files for %{name}
|
||||
Group: Development/Libraries
|
||||
Requires: %{name} = %{version}-%{release} pkgconfig
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: pkgconfig
|
||||
|
||||
%description devel
|
||||
The %{name}-devel package contains libraries and header files for
|
||||
@ -77,6 +78,10 @@ developing applications that use %{name}.
|
||||
%{_mandir}/man3/qb*3*
|
||||
|
||||
%changelog
|
||||
* Wed Nov 15 2017 Jan Pokorný <jpokorny+rpm-libqb@redhat.com> - 1.0.2-14
|
||||
- Evolution of the previous (rhbz#1478089)
|
||||
- Make -devel package dependency on the main package arch-qualified
|
||||
|
||||
* Tue Oct 31 2017 Jan Pokorný <jpokorny+rpm-libqb@redhat.com> - 1.0.2-13
|
||||
- Evolution of the previous (rhbz#1478089)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user