From owner-dev-commits-ports-all@freebsd.org Sat Oct 2 11:08:44 2021 Return-Path: Delivered-To: dev-commits-ports-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 36A6E6799C0; Sat, 2 Oct 2021 11:08:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4HM43c0sHhz3hqY; Sat, 2 Oct 2021 11:08:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id F193311DF9; Sat, 2 Oct 2021 11:08:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 192B8hsf057735; Sat, 2 Oct 2021 11:08:43 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 192B8h8g057734; Sat, 2 Oct 2021 11:08:43 GMT (envelope-from git) Date: Sat, 2 Oct 2021 11:08:43 GMT Message-Id: <202110021108.192B8h8g057734@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Dimitry Andric Subject: git: a1edd535d35d - main - x11/libwacom: work around lld 13 no longer supporting symver tricks MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dim X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a1edd535d35d03e2d54a49bffac39035b990a716 Auto-Submitted: auto-generated X-BeenThere: dev-commits-ports-all@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for all branches of the ports repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 02 Oct 2021 11:08:44 -0000 The branch main has been updated by dim (src committer): URL: https://cgit.FreeBSD.org/ports/commit/?id=a1edd535d35d03e2d54a49bffac39035b990a716 commit a1edd535d35d03e2d54a49bffac39035b990a716 Author: Dimitry Andric AuthorDate: 2021-09-12 19:44:36 +0000 Commit: Dimitry Andric CommitDate: 2021-10-02 10:58:25 +0000 x11/libwacom: work around lld 13 no longer supporting symver tricks Though x11/libwacom was not yet built during the exp-run for clang/llvm 13 (see bug 258209), due to some other dependencies not being available yet, I noticed that it failed to build with clang 13, or more specifically this is due to a behavior change in lld 13: ... [ 33% 10/30] cc -o generate-hwdb generate-hwdb.p/tools_generate-hwdb.c.o -Wl,--as-needed -Wl,--no-undefined -fstack-protector-strong -O2 -pipe -g -fstack-protector-strong -fno-strict-aliasing '-Wl,-rpath,$ORIGIN/' -Wl,-rpath-link,/wrkdirs/share/dim/ports/x11/libwacom/work/libwacom-1.5/_build/ -Wl,--start-group libwacom.so.2.6.1 /usr/local/lib/libglib-2.0.so /usr/local/lib/libintl.so -Wl,--end-group [ 36% 11/30] /usr/local/bin/meson --internal exe --capture 65-libwacom.hwdb -- /wrkdirs/share/dim/ports/x11/libwacom/work/libwacom-1.5/_build/generate-hwdb FAILED: 65-libwacom.hwdb /usr/local/bin/meson --internal exe --capture 65-libwacom.hwdb -- /wrkdirs/share/dim/ports/x11/libwacom/work/libwacom-1.5/_build/generate-hwdb --- stderr --- Unfortunately the meson build process doesn't really show you why it failed, but it turns out that running the 'generate-hwdb' command segfaults: Starting program: /wrkdirs/share/dim/ports/x11/libwacom/work/libwacom-1.5/_build/generate-hwdb Program received signal SIGSEGV, Segmentation fault. libwacom_add_match (device=device@entry=0x801031320, newmatch=0x0) at ../libwacom/libwacom.c:943 943 device->matches[device->nmatches - 1] = libwacom_match_ref(newmatch); (gdb) bt #0 libwacom_add_match (device=device@entry=0x801031320, newmatch=0x0) at ../libwacom/libwacom.c:943 #1 0x000000080024fc7d in libwacom_matchstr_to_match (device=device@entry=0x801031320, matchstr=) at ../libwacom/libwacom-database.c:207 #2 0x000000080024e313 in libwacom_parse_tablet_keyfile (db=0x8010365a0, datadir=0x200b70 "/wrkdirs/share/dim/ports/x11/libwacom/work/libwacom-1.5/data", filename=) at ../libwacom/libwacom-database.c:652 #3 load_tablet_files (db=0x8010365a0, datadir=0x200b70 "/wrkdirs/share/dim/ports/x11/libwacom/work/libwacom-1.5/data") at ../libwacom/libwacom-database.c:865 #4 libwacom_database_new_for_path (datadir=0x200b70 "/wrkdirs/share/dim/ports/x11/libwacom/work/libwacom-1.5/data") at ../libwacom/libwacom-database.c:959 #5 0x00000000002021b6 in main (argc=, argv=0x801036630) at ../tools/generate-hwdb.c:131 What happens is that an internal function 'libwacom_match_new' is supposed to be called, which returns a new 'WacomMatch' object. But instead, it calls a empty stub which returns NULL, resulting in this segfault. The empty stub was added as a rather nasty upstream hack to "Alias the accidentally exposed ABI into different functions", in https://github.com/linuxwacom/libwacom/commit/b9961dbe912fa096230460b194eebdc8a590d256: > A special "trick" is used here to hide the ABI from new versions: > Usually when defining multiple versioned symbols, one would define one as the > default one with @@ > .symver _foo1,foo@VERSION1 > .symver _foo2,foo@@version2 <-- default one > By leaving out the default one, ld doesn't know which one to link to and > fails with an unresolved symbol. rtld however can still figure it out, so > anything compiled will continue to work. This way we can make a symbol > disappear from the library for new builds but have old builds continue to > work with the new version. Unfortunately this trick/hack does not work anymore with lld 13, since https://github.com/llvm/llvm-project/commit/66d44304921, ("[ELF] Combine foo@v1 and foo with the same versionId if both are defined "). The idea behind the hack is to have the linker call the 'real' libwacom_match_new function whenever it is called from inside the library itself, but any external callers get the stubbed version which doesn't really do anything. I think libwacom should have used a different approach here, but just renaming those accidentally exposed internal functions to something different. Then the tricks with .symver are completely unnecessary. Here I added a patch that is as simple as possible, which adds #defines for two affected functions in libwacomint.h, renaming then from 'libwacom_xxx' to 'libwacom_internal_xxx'. This does not affect the corresponding exposed functions in the libwacom.so, and makes the 'generate-hwdb' command work OK again. I also ran the complete libwacom test suite, including the deprecated functions test, and it works fine. PR: 258463 Approved by: zeising (maintainer) MFH: 2021Q4 --- x11/libwacom/files/patch-libwacom_libwacomint.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/x11/libwacom/files/patch-libwacom_libwacomint.h b/x11/libwacom/files/patch-libwacom_libwacomint.h new file mode 100644 index 000000000000..03f98ec6b4a7 --- /dev/null +++ b/x11/libwacom/files/patch-libwacom_libwacomint.h @@ -0,0 +1,12 @@ +--- libwacom/libwacomint.h.orig 2020-06-25 22:38:10 UTC ++++ libwacom/libwacomint.h +@@ -135,6 +135,9 @@ WacomStylus* libwacom_stylus_unref(WacomStylus *stylus + WacomMatch* libwacom_match_ref(WacomMatch *match); + WacomMatch* libwacom_match_unref(WacomMatch *match); + ++#define libwacom_error_set libwacom_internal_error_set ++#define libwacom_match_new libwacom_internal_match_new ++ + void libwacom_error_set(WacomError *error, enum WacomErrorCode code, const char *msg, ...); + void libwacom_add_match(WacomDevice *device, WacomMatch *newmatch); + WacomMatch* libwacom_match_new(const char *name, WacomBusType bus,