freebsd-dev/libexec
Konstantin Belousov 83aa9cc00c Add support for preinit, init and fini arrays. Some ABIs, in
particular on ARM, do require working init arrays.

Traditional FreeBSD crt1 calls _init and _fini of the binary, instead
of allowing runtime linker to arrange the calls.  This was probably
done to have the same crt code serve both statically and dynamically
linked binaries.  Since ABI mandates that first is called preinit
array functions, then init, and then init array functions, the init
have to be called from rtld now.

To provide binary compatibility to old FreeBSD crt1, which calls _init
itself, rtld only calls intializers and finalizers for main binary if
binary has a note indicating that new crt was used for linking.  Add
parsing of ELF notes to rtld, and cache p_osrel value since we parsed
it anyway.

The patch is inspired by init_array support for DragonflyBSD, written
by John Marino.

Reviewed by:	kan
Tested by:	andrew (arm, previous version), flo (sparc64, previous version)
MFC after:	3 weeks
2012-03-11 20:03:09 +00:00
..
atrun Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00
bootpd Spelling fixes for libexec/ 2012-01-07 16:09:54 +00:00
comsat Make comsat(8) approximately 15% smaller. 2011-12-10 18:35:26 +00:00
fingerd Forgot to initialize the debug variable. 2010-04-01 13:16:32 +00:00
ftpd Spelling fixes for libexec/ 2012-01-07 16:09:54 +00:00
getty Spelling fixes for libexec/ 2012-01-07 16:09:54 +00:00
lukemftpd Spelling fixes for libexec/ 2012-01-07 16:09:54 +00:00
mail.local Define several extra macros in bsd.sys.mk and sys/conf/kern.pre.mk, to 2012-02-28 18:30:18 +00:00
mknetid Replace index() and rindex() calls with strchr() and strrchr(). 2012-01-03 18:51:58 +00:00
pppoed In libexec/pppoed/pppoed.c, use the correct printf length modifier for a 2011-12-16 16:07:39 +00:00
rbootd Spelling fixes for libexec/ 2012-01-07 16:09:54 +00:00
revnetgroup Spelling fixes for libexec/ 2012-01-07 16:09:54 +00:00
rlogind Replace index() and rindex() calls with strchr() and strrchr(). 2012-01-03 18:51:58 +00:00
rpc.rquotad The NFS quota-reporting RPC uses 32-bit sized fields. We approximate 2010-04-25 00:05:51 +00:00
rpc.rstatd Fixed static linkage. 2010-02-26 09:41:16 +00:00
rpc.rusersd Port all apps in libexec/ from libulog to utmpx. 2010-01-13 18:28:58 +00:00
rpc.rwalld add __unused 2010-12-19 13:05:17 +00:00
rpc.sprayd Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00
rshd Spelling fixes for libexec/ 2012-01-07 16:09:54 +00:00
rtld-aout Spelling fixes for libexec/ 2012-01-07 16:09:54 +00:00
rtld-elf Add support for preinit, init and fini arrays. Some ABIs, in 2012-03-11 20:03:09 +00:00
save-entropy 1. Attempt to take one bullet out of the foot-shooting gun by silently 2006-08-28 06:41:50 +00:00
smrsh Define several extra macros in bsd.sys.mk and sys/conf/kern.pre.mk, to 2012-02-28 18:30:18 +00:00
talkd Remove unneeded use of struct timezone. 2010-08-08 02:45:48 +00:00
tcpd Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00
telnetd Convert telnetd(8) to use posix_openpt(2). 2008-11-13 19:05:27 +00:00
tftp-proxy Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00
tftpd Avoid error log for transfer stop w/o error code. 2012-02-21 14:59:07 +00:00
ulog-helper Minor cleanups to ulog-helper: 2011-06-21 17:59:51 +00:00
ypxfr Consistently set RPCGEN_CPP when running rpcgen, so the C preprocessor 2012-02-07 09:27:07 +00:00
Makefile Add a new library: libulog. 2009-12-03 15:48:24 +00:00
Makefile.inc Make WARNS=6 the default for libexec/. 2010-01-02 09:50:19 +00:00