From nobody Thu Dec 2 23:43:50 2021 X-Original-To: freebsd-current@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 343E818C057B for ; Thu, 2 Dec 2021 23:43:53 +0000 (UTC) (envelope-from jmg@gold.funkthat.com) Received: from gold.funkthat.com (gate2.funkthat.com [208.87.223.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "gate2.funkthat.com", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4J4swm6xFFz4nQT; Thu, 2 Dec 2021 23:43:52 +0000 (UTC) (envelope-from jmg@gold.funkthat.com) Received: from gold.funkthat.com (localhost [127.0.0.1]) by gold.funkthat.com (8.15.2/8.15.2) with ESMTPS id 1B2NhoSC066666 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 2 Dec 2021 15:43:50 -0800 (PST) (envelope-from jmg@gold.funkthat.com) Received: (from jmg@localhost) by gold.funkthat.com (8.15.2/8.15.2/Submit) id 1B2Nhoel066665; Thu, 2 Dec 2021 15:43:50 -0800 (PST) (envelope-from jmg) Date: Thu, 2 Dec 2021 15:43:50 -0800 From: John-Mark Gurney To: David Chisnall Cc: freebsd-current@freebsd.org Subject: Re: failure of pructl (atexit/_Block_copy/--no-allow-shlib-undefined) Message-ID: <20211202234350.GV35602@funkthat.com> Mail-Followup-To: David Chisnall , freebsd-current@freebsd.org References: <20211202020326.GU35602@funkthat.com> <75CCC6A8-F777-48F9-9AC7-5A08FA9CCD25@FreeBSD.org> List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Operating-System: FreeBSD 11.3-STABLE amd64 X-PGP-Fingerprint: D87A 235F FB71 1F3F 55B7 ED9B D5FF 5A51 C0AC 3D65 X-Files: The truth is out there X-URL: https://www.funkthat.com/ X-Resume: https://www.funkthat.com/~jmg/resume.html X-TipJar: bitcoin:13Qmb6AeTgQecazTWph4XasEsP7nGRbAPE X-to-the-FBI-CIA-and-NSA: HI! HOW YA DOIN? can i haz chizburger? User-Agent: Mutt/1.6.1 (2016-04-27) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.4.3 (gold.funkthat.com [127.0.0.1]); Thu, 02 Dec 2021 15:43:51 -0800 (PST) X-Rspamd-Queue-Id: 4J4swm6xFFz4nQT X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[] X-ThisMailContainsUnwantedMimeParts: N David Chisnall wrote this message on Thu, Dec 02, 2021 at 10:34 +0000: > On 02/12/2021 09:51, Dimitry Andric wrote: > > Apparently the "block runtime" is supposed to provide the actual object, > > so I guess you have to explicitly link to that runtime? > > The block runtime provides this symbol. You use this libc API, you must > be compiling with a toolchain that supports blocks and must be providing > the blocks symbols. If you don't use `atexit_b` or any of the other > `_b` APIs then you don't need to link the blocks runtime. > > I am not sure why this is causing linker failures - if it's a weak > symbol and it's not defined then that's entirely expected: the point of > a weak symbol is that it might not be defined. This avoids the need to > link libc to the blocks runtime for code that doesn't use blocks (i.e. > most code that doesn't come from macOS). > > This code is not using `atexit_b`, but because it is using `atexit` the > linker is complaining that the compilation unit containing `atexit` is > referring to a symbol that isn't defined. I assume that this failure was due to a recent llvm change, because I haven't received any failures about pructl until Nov 16th, 2021, despite the port and code being untouched since 2020-09-22. Digging in a bit more, it looks like libpru is compiled w/ -fblocks, and so depending upon the _Block_copy symbol, the atexit is just the "closest" symbol that's defined". pructl is not, but even compiling pructl w/ -fblocks, doesn't fix the link error, as it looks like the block runtime isn't linked. If I manually include /usr/lib/libBlocksRuntime.so, then pructl is able to link. I can't seem to find any docs on clang about how to properly compile code that uses blocks, so, unless someone points me to docs on how to compile blocks enable programs, I'll just patch libpru to not use blocks since it seems like blocks is well supported. I don't want to fix this code every few years when things change. -- John-Mark Gurney Voice: +1 415 225 5579 "All that I will do, has been done, All that I have, has not."