HardenedBSD/rescue
Jessica Clarke ff6b71c2b2 rescue: Stop using LDADD_zstd
Ideally we'd be able to use LDADD_foo here for all our various libs and
get the implicit dependencies, but rescue is a bit special. Historically
this was just used to pick up the "private" in the name automatically
(as far as I can tell), but now that _DP_pthread includes c we end up
pulling in a -lc from this (along with -lcompiler_rt and -lsys). This
results in -lc being before -lmd (and after, implictly, from the
compiler driver), which, for the specific situation here, results in
both libc.a's and libmd.a's md5c.o being included, giving duplicate
definitions of _libmd_MD5Init and other symbols. With LLD 16+ we
currently make that not an error for other reasons (which should
probably be fixed), but not for older versions, nor for BFD, and so the
build fails.

Fix all this by just using -lprivatezstd in place of LDADD_zstd, which
results in the exact same clang command line as we used to have prior to
adding c (and sys) to _DP_pthread when linking rescue. Note that bsdbox
already uses -lprivatezstd rather than LDADD_zstd.

This reverts commit 5fead429eb.

Reviewed by:	imp
Fixes:		99ea675731 ("lib{c,sys}: move auxargs more firmly into libsys")
2024-02-22 20:56:05 +00:00
..
librescue
rescue rescue: Stop using LDADD_zstd 2024-02-22 20:56:05 +00:00
Makefile
README Remove $FreeBSD$: one-line bare tag 2023-08-16 11:55:20 -06:00

The /rescue build system here has three goals:

1) Produce a reliable standalone set of /rescue tools.

The contents of /rescue are all statically linked and do not depend on
anything in /bin or /sbin.  In particular, they'll continue to
function even if you've hosed your dynamic /bin and /sbin.  For
example, note that /rescue/mount runs /rescue/mount_nfs and not
/sbin/mount_nfs.  This is more subtle than it looks.

As an added bonus, /rescue is fairly small (thanks to crunchgen) and
includes a number of tools (such as gzip, bzip2, vi) that are not
normally found in /bin and /sbin.

2) Demonstrate robust use of crunchgen.

These Makefiles recompile each of the crunchgen components and include
support for overriding specific library entries.  Such techniques
should be useful elsewhere.

3) Produce a toolkit suitable for small distributions.

Install /rescue on a CD or CompactFlash disk, and symlink /bin and
/sbin to /rescue to produce a small and fairly complete FreeBSD
system.

These tools have one big disadvantage: being statically linked, they
cannot use some advanced library functions that rely on dynamic
linking.  In particular, nsswitch, locales, and pam all
rely on dynamic linking.


To compile:

# cd /usr/src/rescue
# make obj
# make
# make install

Note that rebuilds don't always work correctly; if you run into
trouble, try 'make clean' before recompiling.