Commit Graph

39 Commits

Author SHA1 Message Date
brucec
02105a8e4a hdr.elf.e_ident[EI_OSABI] is not a bitmask so '==' should been used.
Reported by: Artem Belevich <fbsdlist at src.cx>
2010-11-22 20:18:46 +00:00
jhb
192012a04e A few style and whitespace fixes.
Submitted by:	bde
2008-08-02 12:04:59 +00:00
jhb
a0f546e88f Tweak the support for using ldd on 32-bit objects a bit further.
Specifically, build a 32-bit /usr/bin/ldd32 on amd64 which handles 32-bit
objects.  Since it is a 32-bit binary, it can fork a child process which
can dlopen() a 32-bit shared library.  The current 32-bit support in ldd
can't do this because it does the dlopen() from a 64-bit process.  In order
to preserve an intuitive interface for users, the ldd binary automatically
execs /usr/bin/ldd32 for 32-bit objects.  The end result is that ldd on
amd64 now transparently handles 32-bit shared libraries in addition to
32-bit binaries.

Submitted by:	ps (indirectly)
2008-08-01 21:52:41 +00:00
edwin
969134af63 Fix text in the comment why we check for ELF32_R_TYPE
Approved by:	bde@
MFC after:	2 days2 days
2008-07-28 12:49:16 +00:00
edwin
7b9be5566f After the commit of SVN rev 180236, wilko@ noticed that the approach
doesn't work on the Alpha platform: machine/elf.h doesn't include
sys/elf32.h there.

PR:		related to bin/124906
Approved by:	bde@
MFC after:	1 week
2008-07-21 02:13:14 +00:00
edwin
d843d0392c On 64 bit architectures, you can run 32 bit executables and the rtld can trace them, but ldd(1) doesn't know yet how to detect them:
[/] root@ed-exigent>ldd `which httpd`
    ldd: /usr/local/sbin/httpd: can't read program header
    ldd: /usr/local/sbin/httpd: not a dynamic executable

    But...

    [/] root@ed-exigent>LD_32_TRACE_LOADED_OBJECTS==1 `which httpd`
    libm.so.4 => /lib32//libm.so.4 (0x280c8000)
    libaprutil-1.so.2 => /usr/local/lib/libaprutil-1.so.2 (0x280de000)
    libexpat.so.6 => /usr/local/lib/libexpat.so.6 (0x280f2000)
    libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x28110000)
    libapr-1.so.2 => /usr/local/lib/libapr-1.so.2 (0x281fd000)
    libcrypt.so.3 => /lib32//libcrypt.so.3 (0x2821d000)
    libpthread.so.2 => not found (0x0)
    libc.so.6 => /lib32//libc.so.6 (0x28235000)
    libpthread.so.2 => /usr/lib32/libpthread.so.2 (0x2830d000)

Added support in ldd(1) for the LD_32_xxx environment variables if
the architecture of the machine is >32 bits. If we ever go to 128
bit architectures this excercise will have to be repeated but thanks
to earlier commits today it will be relative simple.

PR:		bin/124906
Submitted by:	edwin
Approved by:	bde (mentor)
MFC after:	1 week
2008-07-03 22:37:51 +00:00
edwin
b5f1b55289 Extract the determination of the kind of (dynamic) executable from
the main-loop into a seperate function.
Instead of using hardcoded environment variables, define them in a
lookup table.
For the rest, no functionality changes.

Approved by:	bde (mentor)
MFC after:	1 week
2008-07-03 22:30:18 +00:00
edwin
13fa53db5e stylify ldd.c, no functional changes.
Approved by:	bde (mentor)
MFC after:	1 week
2008-07-03 22:26:43 +00:00
sobomax
62ac3ba58f Fix a problem with RTLD_TRACE flag to dlopen(3), which sometimes can return
even if there was no error occured (when trying to dlopen(3) object that
already linked into executable which does dlopen(3) call). This is more
proper fix for `ldd /usr/lib/libc.so' problem, because the new behaviour
conforms to documentation.

Remove workaround from ldd.c (rev.1.32).

PR:		35099
Submitted by:	Nathan Hawkins <utsl@quic.net>
MFC after:	1 week
2002-10-19 10:18:29 +00:00
knu
66c935d52f Fix a tiny bug in shlib support of ldd(1); if dlopen(lib, RTLD_TRACE)
returns, exit gracefully with 0.

This fixes the behavior you see when you specify libc.so.  It occurs
because ldd(1) itself is linked with libc.so.

	$ ldd /usr/lib/libc.so
	/usr/lib/libc.so:
	ldd: /usr/lib/libc.so: (null)
	/usr/lib/libc.so: exit status 1

Reviewed by:	silence of audit@
2002-05-17 17:06:56 +00:00
markm
2f918abe2e Warns; ANSIfy, constify and move declarations into a common header. 2002-04-28 12:55:35 +00:00
mike
70fe01a98d Include <arpa/inet.h> for prototype of ntohl() used in the N_BADMAG()
macro.
2002-04-20 20:09:29 +00:00
imp
74d826c7a6 remove __P 2002-03-22 01:22:50 +00:00
obrien
77f77a885c Add support such that if LD_TRACE_LOADED_OBJECTS_ALL is defined to a
non-empty string in the environment; we indicate which objects caused
each object to be loaded.

PR:		30908
Submitted-by:	Mike Meyer <mwm@mired.org>
2002-02-17 07:04:32 +00:00
sobomax
d491ac2a48 Inspect ELF header and reject any non-FreeBSD shared objects.
MFC after:	2 weeks
2002-02-08 04:08:57 +00:00
sobomax
0a68f500fa Allow ldd(1) be used on shared libraries in addition to executables. 2002-02-04 10:33:48 +00:00
sobomax
c61b7216e4 GC meaningless assignment.
MFC after:	3 days
2002-02-04 10:23:23 +00:00
brian
8636b161b3 Fix the type of the NULL arg to execl()
Idea from: Theo de Raadt <deraadt@openbsd.org>
2001-07-09 09:24:06 +00:00
obrien
538e761e02 * include/elf.h has been repo copied to include/elf-hints.h, and it no
longer includes machine/elf.h.
* consumers of elf.h now use the minimalist elf header possible.

This change is motivated by Binutils 2.11.0 and too much clashing over
our base elf headers and the Binutils elf headers.
2001-05-02 23:56:21 +00:00
ache
f15d921e9e Fix lseek args order (PR 23549)
Catch and report lseek errors too
While reading header don't attempt to continue reading
if some IO operation fails

PR:		23549
2000-12-15 13:20:43 +00:00
charnier
2363c20c22 Add rcsid. Remove unused #include. Remove error() definition and replace
with warn().
2000-12-10 20:54:13 +00:00
imp
3c95f9ccde getopt and friends are declared in <unistd.h>
getopt returns -1 not EOF.
2000-09-04 06:09:54 +00:00
peter
3b842d34e8 $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
dfr
2c574d9124 Make ldd work on alpha. 1998-09-16 09:31:48 +00:00
jdp
b192d17118 Fix a bug which caused ldd to execute scripts listed on its command
line, instead of skipping them.

Also make a few minor cleanups.

PR:		bin/7783
1998-08-30 18:30:59 +00:00
dfr
f28fdede6f Add ELF support. 1998-05-01 08:40:11 +00:00
jdp
24ac227fe1 Touch up the code that implements "ldd -v".
Bring the style of sods.c into better conformance.  Add code to
print the contents of each datum being relocated.  Correct the logic
that distinguishes between programs, shared libraries, and object
files.  Make the entire program "-Wall" clean.
1997-09-02 21:54:39 +00:00
peter
245ba20d12 Revert $FreeBSD$ to $Id$ 1997-02-22 15:48:31 +00:00
jkh
808a36ef65 Make the long-awaited change from $Id$ to $FreeBSD$
This will make a number of things easier in the future, as well as (finally!)
avoiding the Id-smashing problem which has plagued developers for so long.

Boy, I'm glad we're not using sup anymore.  This update would have been
insane otherwise.
1997-01-14 07:20:47 +00:00
jdp
cda6305fe1 Set LD_TRACE_LOADED_OBJECTS to "1" instead of to "". The dynamic linker
now treats empty "LD_*" environment variables as if they were unset, per
the standard SVR4 conventions.
1997-01-12 00:10:57 +00:00
bde
8c92e07907 Made the synopsis in the man page conform to the style guide.
Made the usage message conform to the style guide.

Don't use the implementation variable `__progname'.
1996-11-30 16:12:46 +00:00
peter
ab076d3a60 make the Usage string match reality
Submitted by:  faried nawaz <fn@uidaho.edu>, PR#2075
1996-11-22 13:58:03 +00:00
peter
8a114aa2ad oops, uninitialised variable.. -v mode depended on stack contents.
Submitted by: Masafumi NAKANE <max@wide.ad.jp>, PR#1920
1996-10-29 18:45:20 +00:00
peter
519e9b0911 Incorporate John Polstra's sods.c display of the details about the
dynamic linking information in the executable.  It's quite extensive.
It's connected to ldd's (new) -v option.
1996-10-01 02:16:16 +00:00
peter
7ad318175d Support for specifying printf-like output specs to control the ldd output
as present in the new rtld version.

Obtained from: NetBSD
Reviewed by: nate, jdp
1996-10-01 01:34:32 +00:00
nate
7f56eb7b93 Updated to recent version of Paul K.'s shlib code. This code has better
warning handling and allows for link-time warnings with a modified
version of gas.

Note: Not all of the newer bits were updated such as some of the non-x86
machine-dependant code is relevant to FreeBSD right now.

Obtained from: NetBSD
1994-12-23 22:31:35 +00:00
rich
c2b2b84657 Changes from Paul Kranenburg which bring us into sync with his sources:
handling of errors through the standard err() and warn()
 more fixes for Geoff Rehmet's NULL pointer bug.
 fixes NULL pointer bugs when linking mono and nested X servers.
 supports a `-nostdlib' option.
 accept object files without a symbol table
 don't attempt dynamic linking when `-A' is given

a few variable names have chaged (desc -> fd), and the formatting has
changed which should make it much easier to track his sources.

I tested 'make world' for /usr/src and X twice with these changes.
1994-06-15 22:41:19 +00:00
jkh
477937c24f This is Paul K's latest set of ld changes. A commit was necessary at this
late stage due to the fact that link.h was copyright Sun Microsystems.

This version of ld sync's us up with NetBSD's ld and supports compatablily
with NetBSD's -[zZ] flags (which we had reversed).  Compiling with this
new ld will give you RRS warnings for libraries which do not contain .type
infomation - these wsarnings are harmless and will go away as soon as you
recompile your libraries (cd /usr/src; make libraries).
1994-02-13 20:43:13 +00:00
paul
66fdbc00cf Imported NetBSD's ld for shared libs. 1993-11-03 23:41:59 +00:00