From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 15334 invoked from network); 24 Sep 2021 12:43:07 -0000 Received: from mother.openwall.net (195.42.179.200) by inbox.vuxu.org with ESMTPUTF8; 24 Sep 2021 12:43:07 -0000 Received: (qmail 27795 invoked by uid 550); 24 Sep 2021 12:43:05 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 27754 invoked from network); 24 Sep 2021 12:43:04 -0000 Date: Fri, 24 Sep 2021 08:42:52 -0400 From: Rich Felker To: Vince Fleming Cc: musl@lists.openwall.com Message-ID: <20210924124251.GF13220@brightrain.aerifal.cx> References: <20210923230914.GW13220@brightrain.aerifal.cx> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Subject: Re: [musl] dlopen() issue On Fri, Sep 24, 2021 at 08:12:33AM -0400, Vince Fleming wrote: > Yes, the statically-linked program is calling dlopen() to dynamically-link > in a library. This works fine with glibc. The library in question is > libaio, which I've also built with musl. This is expected to fail with "dynamic loading not supported" as the dlerror error message. There is no dynamic loader for static linked programs. Doing it is theoretically possible, but has a lot of limitations. glibc just ignores these rather than even trying to do it right, leading to a situation where it's unsafe if the glibc version available at runtime differs from the one you static-linked with, among other things. If we add it in some point in musl, it will need to be done in a way that doesn't have this problem. If you want to ship a self-contained program that needs dynamic loading, the easiest way that works at present is shipping ld-musl-$(ARCH).so.1, a dynamic binary, and a wrapper script that invokes ld-musl explicitly to load the dynamic binary. There's a proposal that will make an easier way in the future too but it's not upstream yet. > And, oddly, I am not rebuilding between runs - I'm executing the same > binary over and over again. The program is a disk benchmark (fio). The > errors are very random, so it's not dependent on the input to fio, which is > nearly identical anyway (reads vs writes with all other parameters the > same, for example). I have a wrapper that executes fio 6 times. Repeating > the wrapper run produces errors from dlopen() randomly - sometimes the > first fio fails, other times it works. Same for 2nd through 6th runs. It > randomly produces a "no such file", other times the "dynamic loading not > supported". I can't think of any explanation for this except that you're running different binaries or doing something that clobbers error state or displays the wrong error message (e.g. by inspecting errno first and printing strerror(errno) rather than dlerror()). There is no way it is "working sometimes" because there is no code here to do dynamic loading. > I'm puzzled by the randomness of it, and suspect that the cause is outside > of dlopen() but don't know where to start looking... any ideas? Running under strace would show you better what's happening. > On Thu, Sep 23, 2021 at 7:09 PM Rich Felker wrote: > > > On Thu, Sep 23, 2021 at 05:47:37PM -0400, Vince Fleming wrote: > > > Hi all; > > > > > > I seem to be having a problem with dynamically loading a library. It's > > > intermittent; it will succeed and work fine, then on the next run it'll > > > give "libaio: cannot open shared object file: No such file or directory", > > > or "Dynamic loading not supported", which appear to come from dlerror() > > in > > > musl, not the application I'm porting to musl. > > > > > > Has anyone else seen such behavior? > > > > The error means your program is static linked. It's not clear why > > you're not seeing it other times; presumably you're rebuilding (or at > > least relinking) the program between runs, or else running different > > versions of it each time. > > > > Rich > > > > > -- > Vince Fleming > Director, Solutions & Services, WekaIO > M 848-220-0041* ­*E vince@weka.io* ­*W https://www.weka.io/ > * > ­* * ­* > > *Join > our webinar:*The State of AI and Analytics Infrastructure 2021 > >