Date: Thu, 11 Sep 2008 12:50:03 GMT From: Rui Paulo <rpaulo@FreeBSD.org> To: freebsd-amd64@FreeBSD.org Subject: Re: amd64/127276: ldd invokes linux yes Message-ID: <200809111250.m8BCo3Vu090473@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR amd64/127276; it has been noted by GNATS. From: Rui Paulo <rpaulo@FreeBSD.org> To: Dominic Fandrey <kamikaze@bsdforen.de> Cc: John Baldwin <jhb@freebsd.org>, freebsd-gnats-submit@freebsd.org, freebsd-amd64@freebsd.org Subject: Re: amd64/127276: ldd invokes linux yes Date: Thu, 11 Sep 2008 13:10:58 +0100 On Thu, Sep 11, 2008 at 07:01:09AM +0200, Dominic Fandrey wrote: > I don't need it to work, I just need it not to invoke linux binaries. I'm > using ldd in a script and by ldd not returning 0 the script should know that > it hasn't encountered a valid binary. Instead ldd opens a linux binary like > yes and the script spills out ys (yes) or waits for input from stdin > (md5sum). I'm pretty certain ldd is in no way meant to invoke programs. I chatted briefly with John about this. The way our ldd works is by setting the environment variable TRACE_LOADED_OBJECTS and after some dlopen() magic it exec()'s the binary. FreeBSD rtld detects the environmental variable, prints the list of shared objects and quits. Linux rtld doesn't work this way, so FreeBSD ldd on a Linux binary will just run the Linux binary (Linux rtld will ignore the rest). Also, ldd wil return 1 on static binaries. Your best bet is to use file(1) to detect FreeBSD binaries. Something like `file $binary | grep FreeBSD-style` does the trick. Regards, -- Rui Paulo
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200809111250.m8BCo3Vu090473>