- Add a kvaddr_type to represent kernel virtual addresses instead of unsigned long. - Add a struct kvm_nlist which is a stripped down version of struct nlist that uses kvaddr_t for n_value. - Add a kvm_native() routine that returns true if an open kvm descriptor is for a native kernel and memory image. - Add a kvm_open2() function similar to kvm_openfiles(). It drops the unused 'swapfile' argument and adds a new function pointer argument for a symbol resolving function. Native kernels still use _fdnlist() from libc to resolve symbols if a resolver function is not supplied, but cross kernels require a resolver. - Add a kvm_nlist2() function similar to kvm_nlist() except that it uses struct kvm_nlist instead of struct nlist. - Add a kvm_read2() function similar to kvm_read() except that it uses kvaddr_t instead of unsigned long for the kernel virtual address. - Add a new kvm_arch switch of routines needed by a vmcore backend. Each backend is responsible for implementing kvm_read2() for a given vmcore format. - Use libelf to read headers from ELF kernels and cores (except for powerpc cores). - Add internal helper routines for the common page offset hash table used by the minidump backends. - Port all of the existing kvm backends to implement a kvm_arch switch and to be cross-friendly by using private constants instead of ones that vary by platform (e.g. PAGE_SIZE). Static assertions are present when a given backend is compiled natively to ensure the private constants match the real ones. - Enable all of the existing vmcore backends on all platforms. This means that libkvm on any platform should be able to perform KVA translation and read data from a vmcore of any platform. Tested on: amd64, i386, sparc64 (marius) Differential Revision: https://reviews.freebsd.org/D3341 |
||
---|---|---|
.. | ||
librescue | ||
rescue | ||
Makefile | ||
README |
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. For example, boot floppies could use this to conditionally compile out features to reduce executable size. 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 are likely to all rely on dynamic linking in the near future. 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. $FreeBSD$