diff --git a/0002-WIP-4-Experimental-fix-for-libqb-logging-not-working.patch b/0002-WIP-5-Experimental-fix-for-libqb-logging-not-working.patch similarity index 87% rename from 0002-WIP-4-Experimental-fix-for-libqb-logging-not-working.patch rename to 0002-WIP-5-Experimental-fix-for-libqb-logging-not-working.patch index dcd7af3..1a613b6 100644 --- a/0002-WIP-4-Experimental-fix-for-libqb-logging-not-working.patch +++ b/0002-WIP-5-Experimental-fix-for-libqb-logging-not-working.patch @@ -1,7 +1,7 @@ -From eb3bde0891b71919e758543c8cf715b74db8411f Mon Sep 17 00:00:00 2001 +From 10cd5db8821e4d313ae5245b33061e02ba8d3ff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= Date: Thu, 3 Aug 2017 17:40:09 +0200 -Subject: [PATCH] WIP 4: Experimental fix for libqb logging not working with +Subject: [PATCH] WIP 5: Experimental fix for libqb logging not working with ld.bfd 2.29 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 @@ -15,6 +15,12 @@ What's missing: log handler - library could/shall attest in qb_log_init that QB_ATTR_SECTION_START + STOP symbols belong to other address space than its own (dladdr?) +* related to that, we should really enable attribute((__section__)) for + powerpc platforms, it seems to work well there -- and related to that, + we need to figure out how static and dynamic call sites can live + together -- say what will happen to logging programs compiled with + libqb w/o attribute sections when the underlying libqb is flipped + to the one with them... Version 2: Simplify the compilation against libqb for its users that now no @@ -41,7 +47,16 @@ Overcomes some unintended RPATH occurrences in qb-blackbox binary or possibly libqb.so.*. That's definitely not desired: https://fedoraproject.org/wiki/Packaging:Guidelines#Beware_of_Rpath -Deficiencies of version 4 (some carried over, apparently): +Version 5: +Overcomes issues when HAVE_GCC_ATTRIBUTE_SECTION is not defined, hence +qblog_script.ld script used to carry unresolved symbolic references as +a consequence: https://bugzilla.redhat.com/show_bug.cgi?id=1487787 +Now the script is not used at all in that case, and if accidentally was, +there is an extra guard conditionalizing the content referring to those +values to only the case they are expected to be defined. +Plus some more, missing in retrospect, conditionalizing is added. + +Deficiencies of version 5 (some carried over, apparently): - see What's missing above - possibly needs and overhaul regarding documentation of the arrangement (now scattered throughout the files) @@ -56,12 +71,12 @@ https://bugzilla.redhat.com/show_bug.cgi?id=1477354#c8 Signed-off-by: Jan Pokorný --- - configure.ac | 62 ++++++++++++++++++++++++++++++++++++++++---------- - lib/Makefile.am | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ + configure.ac | 62 +++++++++++++++++++++++++++++++++++++--------- + lib/Makefile.am | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ lib/log.c | 7 ++++++ - lib/qblog_script.la.in | 15 ++++++++++++ - lib/qblog_script.ld.in | 15 ++++++++++++ - 6 files changed, 149 insertions(+), 12 deletions(-) + lib/qblog_script.la.in | 15 +++++++++++ + lib/qblog_script.ld.in | 17 +++++++++++++ + 6 files changed, 156 insertions(+), 12 deletions(-) create mode 100644 lib/qblog_script.la.in create mode 100644 lib/qblog_script.ld.in @@ -160,7 +175,7 @@ index fd37466..f94af71 100644 AC_OUTPUT diff --git a/lib/Makefile.am b/lib/Makefile.am -index 0bebeb5..b995034 100644 +index 0bebeb5..85dd434 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -19,6 +19,7 @@ @@ -171,7 +186,7 @@ index 0bebeb5..b995034 100644 MAINTAINERCLEANFILES = Makefile.in noinst_HEADERS = ipc_int.h util_int.h ringbuffer_int.h loop_int.h \ -@@ -39,9 +40,46 @@ source_to_lint = util.c hdb.c ringbuffer.c ringbuffer_helper.c \ +@@ -39,9 +40,48 @@ source_to_lint = util.c hdb.c ringbuffer.c ringbuffer_helper.c \ log_syslog.c log_dcs.c log_format.c \ map.c skiplist.c hashtable.c trie.c @@ -214,16 +229,18 @@ index 0bebeb5..b995034 100644 libqb_la_SOURCES = $(source_to_lint) unix.c libqb_la_CFLAGS = $(PTHREAD_CFLAGS) libqb_la_LIBADD = $(LTLIBOBJS) $(dlopen_LIBS) $(PTHREAD_LIBS) $(socket_LIBS) ++if NEED_GCC_ATTRIBUTE_SECTION_WORKAROUND +libqb_la_LIBADD += qblog_script.la ++endif AM_LDFLAGS = $(LDFLAGS_COPY:-Bsymbolic-functions=) -@@ -60,6 +98,30 @@ else +@@ -60,6 +100,33 @@ else endif endif +qblog_script.ld: %.ld: %.ld.in -+ $(CPP) -xc -I$(top_srcdir)/include -C -P $< \ ++ $(AM_V_GEN)$(CPP) -xc -I$(top_srcdir)/include -C -P $< \ + | sed -n "/$$(sed -n '/^[^#]/{s/[*\/]/\\\0/g;p;q}' $<)/{:r;p;n;br}" \ + > $@ + @@ -233,6 +250,8 @@ index 0bebeb5..b995034 100644 +# qblog_script.ld as a template, storing result in place of original libqb.so +# (e.g., libqb.so := "INPUT(libqb.so.0) " [...] "SECTIONS { " [...] "}") +# NOTE: readlink nor realpath are POSIX; not chained links ready ++# NOTE: conservative check, i.e., not per NEED_GCC_ATTRIBUTE_SECTION_WORKAROUND ++if HAVE_GCC_ATTRIBUTE_SECTION +install-exec-hook: qblog_script.ld + target=$$(ls -l "$(DESTDIR)$(libdir)/libqb.so" || :); \ + target=$${target#* -> }; t1_bn=$$(basename "$${target}" || :); \ @@ -243,9 +262,10 @@ index 0bebeb5..b995034 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"; \ ++ 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" ++endif pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libqb.pc @@ -290,10 +310,10 @@ index 0000000..b475835 +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..2d430ab +index 0000000..1f37976 --- /dev/null +++ b/lib/qblog_script.ld.in -@@ -0,0 +1,15 @@ +@@ -0,0 +1,17 @@ +#include +/* GNU ld script + This atypical arrangement enforces global visibility of boundary symbols @@ -303,11 +323,13 @@ index 0000000..2d430ab + binutils change the visibility as of version 2.29, making the logging + unusable without artificial stimulus: https://bugzilla.redhat.com/1477354 */ +SECTIONS { ++#ifdef QB_HAVE_ATTRIBUTE_SECTION + QB_ATTR_SECTION : { + QB_ATTR_SECTION_START = .; + *(QB_ATTR_SECTION); + QB_ATTR_SECTION_STOP = .; + } ++#endif +} -- 2.14.1