Date: Mon, 4 Sep 2006 20:10:13 GMT From: Paolo Pisati <piso@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 105655 for review Message-ID: <200609042010.k84KADwO014486@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=105655 Change 105655 by piso@piso_newluxor on 2006/09/04 20:09:45 IFC Affected files ... .. //depot/projects/soc2005/libalias/UPDATING#5 integrate .. //depot/projects/soc2005/libalias/contrib/openbsm/FREEBSD-upgrade#4 integrate .. //depot/projects/soc2005/libalias/contrib/openbsm/HISTORY#4 integrate .. //depot/projects/soc2005/libalias/contrib/openbsm/bin/auditd/auditd.c#3 integrate .. //depot/projects/soc2005/libalias/contrib/openbsm/configure#4 integrate .. //depot/projects/soc2005/libalias/contrib/openbsm/configure.ac#4 integrate .. //depot/projects/soc2005/libalias/contrib/openbsm/libbsm/bsm_token.c#5 integrate .. //depot/projects/soc2005/libalias/etc/mtree/BSD.usr.dist#4 integrate .. //depot/projects/soc2005/libalias/etc/rc.initdiskless#3 integrate .. //depot/projects/soc2005/libalias/lib/libc/gen/tls.c#3 integrate .. //depot/projects/soc2005/libalias/lib/libc/powerpc/gen/_set_tp.c#3 integrate .. //depot/projects/soc2005/libalias/lib/libc/stdlib/malloc.c#6 integrate .. //depot/projects/soc2005/libalias/lib/libpthread/arch/ia64/ia64/pthread_md.c#2 integrate .. //depot/projects/soc2005/libalias/lib/libpthread/arch/ia64/include/pthread_md.h#2 integrate .. //depot/projects/soc2005/libalias/lib/libpthread/arch/powerpc/include/pthread_md.h#2 integrate .. //depot/projects/soc2005/libalias/lib/libpthread/arch/powerpc/powerpc/pthread_md.c#2 integrate .. //depot/projects/soc2005/libalias/lib/libthr/arch/ia64/ia64/pthread_md.c#3 integrate .. //depot/projects/soc2005/libalias/lib/libthr/arch/ia64/include/pthread_md.h#3 integrate .. //depot/projects/soc2005/libalias/lib/libthr/arch/powerpc/include/pthread_md.h#3 integrate .. //depot/projects/soc2005/libalias/lib/libthr/arch/powerpc/powerpc/pthread_md.c#3 integrate .. //depot/projects/soc2005/libalias/lib/libutil/pw_util.c#2 integrate .. //depot/projects/soc2005/libalias/libexec/rtld-elf/ia64/reloc.c#3 integrate .. //depot/projects/soc2005/libalias/libexec/rtld-elf/powerpc/reloc.c#2 integrate .. //depot/projects/soc2005/libalias/libexec/rtld-elf/rtld.c#3 integrate .. //depot/projects/soc2005/libalias/release/doc/en_US.ISO8859-1/relnotes/common/new.sgml#8 integrate .. //depot/projects/soc2005/libalias/sbin/sysctl/sysctl.c#4 integrate .. //depot/projects/soc2005/libalias/share/man/man4/ata.4#4 integrate .. //depot/projects/soc2005/libalias/share/man/man4/audit.4#2 integrate .. //depot/projects/soc2005/libalias/share/man/man4/gem.4#2 integrate .. //depot/projects/soc2005/libalias/share/man/man4/ipfirewall.4#2 integrate .. //depot/projects/soc2005/libalias/share/man/man4/le.4#2 integrate .. //depot/projects/soc2005/libalias/share/man/man4/man4.sparc64/ebus.4#2 integrate .. //depot/projects/soc2005/libalias/share/man/man4/man4.sparc64/machfb.4#2 integrate .. //depot/projects/soc2005/libalias/share/man/man4/man4.sparc64/openfirm.4#2 integrate .. //depot/projects/soc2005/libalias/share/man/man4/man4.sparc64/sbus.4#2 integrate .. //depot/projects/soc2005/libalias/share/man/man5/periodic.conf.5#3 integrate .. //depot/projects/soc2005/libalias/share/man/man8/picobsd.8#2 integrate .. //depot/projects/soc2005/libalias/share/man/man9/bus_dma.9#3 integrate .. //depot/projects/soc2005/libalias/sys/bsm/audit_internal.h#3 integrate .. //depot/projects/soc2005/libalias/sys/compat/freebsd32/freebsd32_proto.h#5 integrate .. //depot/projects/soc2005/libalias/sys/compat/freebsd32/freebsd32_syscall.h#5 integrate .. //depot/projects/soc2005/libalias/sys/compat/freebsd32/freebsd32_syscalls.c#5 integrate .. //depot/projects/soc2005/libalias/sys/compat/freebsd32/freebsd32_sysent.c#5 integrate .. //depot/projects/soc2005/libalias/sys/compat/freebsd32/syscalls.master#5 integrate .. //depot/projects/soc2005/libalias/sys/compat/svr4/svr4_stat.c#2 integrate .. //depot/projects/soc2005/libalias/sys/dev/acpica/acpi_thermal.c#3 integrate .. //depot/projects/soc2005/libalias/sys/dev/aic7xxx/ahc_eisa.c#2 integrate .. //depot/projects/soc2005/libalias/sys/dev/aic7xxx/ahc_isa.c#2 integrate .. //depot/projects/soc2005/libalias/sys/dev/aic7xxx/ahc_pci.c#2 integrate .. //depot/projects/soc2005/libalias/sys/dev/aic7xxx/ahd_pci.c#2 integrate .. //depot/projects/soc2005/libalias/sys/dev/ata/ata-chipset.c#6 integrate .. //depot/projects/soc2005/libalias/sys/dev/ata/ata-dma.c#2 integrate .. //depot/projects/soc2005/libalias/sys/dev/ata/ata-pci.h#4 integrate .. //depot/projects/soc2005/libalias/sys/dev/atkbdc/atkbdc.c#2 integrate .. //depot/projects/soc2005/libalias/sys/dev/bge/if_bge.c#6 integrate .. //depot/projects/soc2005/libalias/sys/dev/bge/if_bgereg.h#5 integrate .. //depot/projects/soc2005/libalias/sys/dev/em/if_em.c#7 integrate .. //depot/projects/soc2005/libalias/sys/dev/gem/if_gem.c#2 integrate .. //depot/projects/soc2005/libalias/sys/dev/isp/isp_pci.c#6 integrate .. //depot/projects/soc2005/libalias/sys/dev/mk48txx/mk48txx.c#2 integrate .. //depot/projects/soc2005/libalias/sys/dev/ofw/openfirmio.c#2 integrate .. //depot/projects/soc2005/libalias/sys/dev/puc/pucdata.c#3 integrate .. //depot/projects/soc2005/libalias/sys/dev/usb/ohci_pci.c#2 integrate .. //depot/projects/soc2005/libalias/sys/dev/vge/if_vge.c#2 integrate .. //depot/projects/soc2005/libalias/sys/kern/bus_if.m#3 integrate .. //depot/projects/soc2005/libalias/sys/kern/init_sysent.c#6 integrate .. //depot/projects/soc2005/libalias/sys/kern/kern_umtx.c#4 integrate .. //depot/projects/soc2005/libalias/sys/kern/subr_bus.c#4 integrate .. //depot/projects/soc2005/libalias/sys/kern/syscalls.c#6 integrate .. //depot/projects/soc2005/libalias/sys/kern/syscalls.master#7 integrate .. //depot/projects/soc2005/libalias/sys/kern/systrace_args.c#3 integrate .. //depot/projects/soc2005/libalias/sys/modules/sound/sound/Makefile#3 integrate .. //depot/projects/soc2005/libalias/sys/net/bpf.h#2 integrate .. //depot/projects/soc2005/libalias/sys/netinet/udp_usrreq.c#3 integrate .. //depot/projects/soc2005/libalias/sys/security/audit/audit.h#4 integrate .. //depot/projects/soc2005/libalias/sys/sparc64/sparc64/mp_machdep.c#2 integrate .. //depot/projects/soc2005/libalias/sys/sys/_bus_dma.h#1 branch .. //depot/projects/soc2005/libalias/sys/sys/bus.h#3 integrate .. //depot/projects/soc2005/libalias/sys/sys/bus_dma.h#2 integrate .. //depot/projects/soc2005/libalias/sys/sys/msgbuf.h#2 integrate .. //depot/projects/soc2005/libalias/sys/sys/param.h#5 integrate .. //depot/projects/soc2005/libalias/sys/sys/syscall.h#6 integrate .. //depot/projects/soc2005/libalias/sys/sys/syscall.mk#6 integrate .. //depot/projects/soc2005/libalias/sys/sys/sysproto.h#6 integrate .. //depot/projects/soc2005/libalias/sys/vm/vm_contig.c#3 integrate .. //depot/projects/soc2005/libalias/sys/vm/vm_page.h#4 integrate .. //depot/projects/soc2005/libalias/tools/tools/netrate/http/http.c#2 integrate .. //depot/projects/soc2005/libalias/usr.bin/su/Makefile#2 integrate .. //depot/projects/soc2005/libalias/usr.bin/su/su.c#2 integrate .. //depot/projects/soc2005/libalias/usr.bin/tip/tip/Makefile#3 integrate .. //depot/projects/soc2005/libalias/usr.sbin/cron/crontab/crontab.c#2 integrate .. //depot/projects/soc2005/libalias/usr.sbin/eeprom/eeprom.8#2 integrate .. //depot/projects/soc2005/libalias/usr.sbin/eeprom/ofw_options.c#2 integrate .. //depot/projects/soc2005/libalias/usr.sbin/freebsd-update/Makefile#2 integrate .. //depot/projects/soc2005/libalias/usr.sbin/freebsd-update/freebsd-update.sh#2 integrate .. //depot/projects/soc2005/libalias/usr.sbin/ipfwpcap/ipfwpcap.c#2 integrate .. //depot/projects/soc2005/libalias/usr.sbin/lmcconfig/Makefile#2 integrate .. //depot/projects/soc2005/libalias/usr.sbin/portsnap/portsnap/Makefile#2 integrate .. //depot/projects/soc2005/libalias/usr.sbin/sysinstall/devices.c#4 integrate .. //depot/projects/soc2005/libalias/usr.sbin/watchdogd/watchdog.8#2 integrate .. //depot/projects/soc2005/libalias/usr.sbin/watchdogd/watchdogd.8#2 integrate .. //depot/projects/soc2005/libalias/usr.sbin/wpa/hostapd/hostapd.conf.5#2 integrate Differences ... ==== //depot/projects/soc2005/libalias/UPDATING#5 (text+ko) ==== @@ -44,6 +44,13 @@ the nve(4) driver. Please update your configuration accordingly. +20060514: + The i386-only lnc(4) driver for the AMD Am7900 LANCE and Am79C9xx + PCnet family of NICs has been removed. The new le(4) driver serves + as an equivalent but cross-platform replacement with the pcn(4) + driver still providing performance-optimized support for the subset + of AMD Am79C971 PCnet-FAST and greater chips as before. + 20060511: The machdep.* sysctls and the adjkerntz utility have been modified a bit. The new adjkerntz utility uses the new @@ -603,4 +610,4 @@ Contact Warner Losh if you have any questions about your use of this document. -$FreeBSD: src/UPDATING,v 1.453 2006/08/17 00:41:05 julian Exp $ +$FreeBSD: src/UPDATING,v 1.454 2006/09/02 22:17:15 marius Exp $ ==== //depot/projects/soc2005/libalias/contrib/openbsm/FREEBSD-upgrade#4 (text) ==== @@ -27,7 +27,15 @@ - Update any library, tool, or etc BSD Makefiles to add new files, defines, or other generally useful or necessary things. -Normally, the CVS vendor import goes along the following lines: +Certain files are present only in the vendor branch, and not in FreeBSD +development branches: + + contrib/openbsm/bsm audit.h audit_internal.h audit_kevents.h + audit_record.h + +This prevents confusion regarding whether the src/sys/bsm or contrib +versions of the include files should be used in the build. Normally, the +CVS vendor import goes along the following lines: cd ~/p4/projects/trustedbsd/openbsm cvs -n -d rwatson@repoman.FreeBSD.org:/home/ncvs -q import \ @@ -45,4 +53,4 @@ are necessary, and the commits to various parts of the system must be made in close succession. -$FreeBSD: src/contrib/openbsm/FREEBSD-upgrade,v 1.6 2006/08/26 10:35:54 rwatson Exp $ +$FreeBSD: src/contrib/openbsm/FREEBSD-upgrade,v 1.7 2006/09/02 09:56:28 rwatson Exp $ ==== //depot/projects/soc2005/libalias/contrib/openbsm/HISTORY#4 (text) ==== @@ -1,3 +1,9 @@ +OpenBSM 1.0 alpha 10 + +- auditd now generates complete audit records for its events, as required for + application-submitted audit records in the the FreeBSD kernel audit + implementation. + OpenBSM 1.0 alpha 9 - Rename many OpenBSM-specific constants and API elements containing the @@ -203,4 +209,4 @@ to support reloading of kernel event table. - Allow comments in /etc/security configuration files. -$P4: //depot/projects/trustedbsd/openbsm/HISTORY#25 $ +$P4: //depot/projects/trustedbsd/openbsm/HISTORY#26 $ ==== //depot/projects/soc2005/libalias/contrib/openbsm/bin/auditd/auditd.c#3 (text) ==== @@ -30,7 +30,7 @@ * * @APPLE_BSD_LICENSE_HEADER_END@ * - * $P4: //depot/projects/trustedbsd/openbsm/bin/auditd/auditd.c#17 $ + * $P4: //depot/projects/trustedbsd/openbsm/bin/auditd/auditd.c#18 $ */ #include <sys/types.h> @@ -366,6 +366,7 @@ static int close_all(void) { + struct auditinfo ai; int err_ret = 0; char TS[POSTFIX_LEN]; int aufd; @@ -378,6 +379,17 @@ else { if ((tok = au_to_text("auditd::Audit shutdown")) != NULL) au_write(aufd, tok); + /* + * XXX we need to implement extended subject tokens so we can + * effectively represent terminal lines with this token type. + */ + bzero(&ai, sizeof(ai)); + if ((tok = au_to_subject32(getuid(), geteuid(), getegid(), + getuid(), getgid(), getpid(), getpid(), &ai.ai_termid)) + != NULL) + au_write(aufd, tok); + if ((tok = au_to_return32(0, 0)) != NULL) + au_write(aufd, tok); if (au_close(aufd, 1, AUE_audit_shutdown) == -1) syslog(LOG_ERR, "Could not close audit shutdown event."); @@ -745,6 +757,7 @@ static void setup(void) { + struct auditinfo ai; auditinfo_t auinfo; int aufd; token_t *tok; @@ -781,8 +794,20 @@ if ((aufd = au_open()) == -1) syslog(LOG_ERR, "Could not create audit startup event."); else { + /* + * XXXCSJP Perhaps we wan't more robust audit records for + * audit start up and shutdown. This might include capturing + * failures to initialize the audit subsystem? + */ + bzero(&ai, sizeof(ai)); + if ((tok = au_to_subject32(getuid(), geteuid(), getegid(), + getuid(), getgid(), getpid(), getpid(), &ai.ai_termid)) + != NULL) + au_write(aufd, tok); if ((tok = au_to_text("auditd::Audit startup")) != NULL) au_write(aufd, tok); + if ((tok = au_to_return32(0, 0)) != NULL) + au_write(aufd, tok); if (au_close(aufd, 1, AUE_audit_startup) == -1) syslog(LOG_ERR, "Could not close audit startup event."); ==== //depot/projects/soc2005/libalias/contrib/openbsm/configure#4 (text) ==== @@ -1,7 +1,7 @@ #! /bin/sh -# From configure.ac P4: //depot/projects/trustedbsd/openbsm/configure.ac#27 . +# From configure.ac P4: //depot/projects/trustedbsd/openbsm/configure.ac#28 . # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for OpenBSM 1.0a9. +# Generated by GNU Autoconf 2.59 for OpenBSM 1.0a10. # # Report bugs to <trustedbsd-audit@TrustesdBSD.org>. # @@ -424,8 +424,8 @@ # Identity of this package. PACKAGE_NAME='OpenBSM' PACKAGE_TARNAME='openbsm' -PACKAGE_VERSION='1.0a9' -PACKAGE_STRING='OpenBSM 1.0a9' +PACKAGE_VERSION='1.0a10' +PACKAGE_STRING='OpenBSM 1.0a10' PACKAGE_BUGREPORT='trustedbsd-audit@TrustesdBSD.org' ac_unique_file="bin/auditreduce/auditreduce.c" @@ -955,7 +955,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures OpenBSM 1.0a9 to adapt to many kinds of systems. +\`configure' configures OpenBSM 1.0a10 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1021,7 +1021,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of OpenBSM 1.0a9:";; + short | recursive ) echo "Configuration of OpenBSM 1.0a10:";; esac cat <<\_ACEOF @@ -1162,7 +1162,7 @@ test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -OpenBSM configure 1.0a9 +OpenBSM configure 1.0a10 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -1176,7 +1176,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by OpenBSM $as_me 1.0a9, which was +It was created by OpenBSM $as_me 1.0a10, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -19278,7 +19278,7 @@ # Define the identity of the package. PACKAGE=OpenBSM - VERSION=1.0a9 + VERSION=1.0a10 cat >>confdefs.h <<_ACEOF @@ -23478,7 +23478,7 @@ } >&5 cat >&5 <<_CSEOF -This file was extended by OpenBSM $as_me 1.0a9, which was +This file was extended by OpenBSM $as_me 1.0a10, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23541,7 +23541,7 @@ cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -OpenBSM config.status 1.0a9 +OpenBSM config.status 1.0a10 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" ==== //depot/projects/soc2005/libalias/contrib/openbsm/configure.ac#4 (text) ==== @@ -2,8 +2,8 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT([OpenBSM], [1.0a9], [trustedbsd-audit@TrustesdBSD.org],[openbsm]) -AC_REVISION([$P4: //depot/projects/trustedbsd/openbsm/configure.ac#28 $]) +AC_INIT([OpenBSM], [1.0a10], [trustedbsd-audit@TrustesdBSD.org],[openbsm]) +AC_REVISION([$P4: //depot/projects/trustedbsd/openbsm/configure.ac#29 $]) AC_CONFIG_SRCDIR([bin/auditreduce/auditreduce.c]) AC_CONFIG_AUX_DIR(config) AC_CONFIG_HEADER([config/config.h]) ==== //depot/projects/soc2005/libalias/contrib/openbsm/libbsm/bsm_token.c#5 (text) ==== @@ -1055,7 +1055,7 @@ * text count null-terminated strings */ token_t * -au_to_exec_args(const char **argv) +au_to_exec_args(char **argv) { token_t *t; u_char *dptr = NULL; @@ -1096,7 +1096,7 @@ * text count null-terminated strings */ token_t * -au_to_exec_env(const char **envp) +au_to_exec_env(char **envp) { token_t *t; u_char *dptr = NULL; ==== //depot/projects/soc2005/libalias/etc/mtree/BSD.usr.dist#4 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/etc/mtree/BSD.usr.dist,v 1.319 2006/08/03 05:44:51 jb Exp $ +# $FreeBSD: src/etc/mtree/BSD.usr.dist,v 1.320 2006/09/02 20:58:37 marcel Exp $ # # Please see the file src/etc/mtree/README before making changes to this file. # @@ -661,6 +661,8 @@ .. i386 .. + powerpc + .. sparc64 .. .. @@ -694,6 +696,8 @@ .. i386 .. + powerpc + .. sparc64 .. .. @@ -766,6 +770,8 @@ .. i386 .. + powerpc + .. sparc64 .. .. ==== //depot/projects/soc2005/libalias/etc/rc.initdiskless#3 (text+ko) ==== @@ -24,7 +24,7 @@ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # -# $FreeBSD: src/etc/rc.initdiskless,v 1.50 2006/08/22 16:21:16 ru Exp $ +# $FreeBSD: src/etc/rc.initdiskless,v 1.51 2006/09/01 16:33:15 brooks Exp $ # On entry to this script the entire system consists of a read-only root # mounted via NFS. The kernel has run BOOTP and configured an interface @@ -76,6 +76,9 @@ # If the file contains a pathname starting with "/", then # the root path is prepended to it; this allows relocation of # the root filesystem without changing configuration files. +# Because mount_nfs understands ".." in paths, it is +# possible to mount from locations above the NFS root with +# paths such as "/../../etc". # # /conf/T/M/md_size # The contents of the file specifies the size of the memory @@ -97,6 +100,12 @@ # The list of paths contained in the file are rm -rf'd # relative to /SUBDIR. # +# /conf/diskless_remount +# Similar to /conf/T/M/diskless_remount above, but allows +# all of /conf to be remounted. This can be used to allow +# multiple roots to share the same /conf. +# +# # You will almost universally want to create the following files under /conf # # File Content @@ -222,8 +231,7 @@ # The list of filesystems to umount after the copy to_umount="" -# If /conf/diskless_remount exists, remount all of /conf. This allows -# multiple roots to share the same conf files. +# If /conf/diskless_remount exists, remount all of /conf. if [ -d /conf -a -f /conf/diskless_remount ]; then nfspt=`/bin/cat /conf/diskless_remount` if [ `expr "$nfspt" : '\(.\)'` = "/" ]; then @@ -300,7 +308,7 @@ subdir=${j##*/} if [ -d $j -a ! -f $j.cpio.gz ]; then create_md $subdir - cp -Rp $j/* /$subdir + cp -Rp $j/ /$subdir fi done for j in /conf/$i/*.cpio.gz ; do ==== //depot/projects/soc2005/libalias/lib/libc/gen/tls.c#3 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/lib/libc/gen/tls.c,v 1.10 2006/07/26 16:56:56 imp Exp $ + * $FreeBSD: src/lib/libc/gen/tls.c,v 1.12 2006/09/01 17:35:48 marcel Exp $ */ /* @@ -58,7 +58,7 @@ void *__libc_allocate_tls(void *oldtls, size_t tcbsize, size_t tcbalign); void __libc_free_tls(void *tls, size_t tcbsize, size_t tcbalign); -#if defined(__ia64__) || defined(__alpha__) || defined(__powerpc__) +#if defined(__ia64__) || defined(__powerpc__) #define TLS_VARIANT_I #endif #if defined(__i386__) || defined(__amd64__) || defined(__sparc64__) || \ @@ -73,9 +73,6 @@ static size_t tls_static_space; static size_t tls_init_size; -#ifdef TLS_VARIANT_I -static size_t tls_init_offset; -#endif static void *tls_init; #endif @@ -102,67 +99,69 @@ #ifdef TLS_VARIANT_I +#define TLS_TCB_SIZE (2 * sizeof(void *)) + /* * Free Static TLS using the Variant I method. */ void -__libc_free_tls(void *tls, size_t tcbsize __unused, size_t tcbalign __unused) +__libc_free_tls(void *tcb, size_t tcbsize, size_t tcbalign __unused) { - Elf_Addr* dtv; + Elf_Addr *dtv; + Elf_Addr **tls; - dtv = ((Elf_Addr**)tls)[0]; - free(tls); + tls = (Elf_Addr **)((Elf_Addr)tcb + tcbsize - TLS_TCB_SIZE); + dtv = tls[0]; free(dtv); + free(tcb); } /* * Allocate Static TLS using the Variant I method. */ void * -__libc_allocate_tls(void *oldtls, size_t tcbsize, size_t tcbalign __unused) +__libc_allocate_tls(void *oldtcb, size_t tcbsize, size_t tcbalign __unused) { - size_t size; - char *tls; Elf_Addr *dtv; + Elf_Addr **tls; + char *tcb; - size = tls_static_space; - if (size < tcbsize) - size = tcbsize; + if (oldtcb != NULL && tcbsize == TLS_TCB_SIZE) + return (oldtcb); - tls = calloc(1, size); - dtv = malloc(3 * sizeof(Elf_Addr)); + tcb = calloc(1, tls_static_space + tcbsize); + tls = (Elf_Addr **)(tcb + tcbsize - TLS_TCB_SIZE); - *(Elf_Addr **) tls = dtv; + if (oldtcb != NULL) { + memcpy(tls, oldtcb, tls_static_space + TLS_TCB_SIZE); + free(oldtcb); - dtv[0] = 1; - dtv[1] = 1; - dtv[2] = (Elf_Addr)(tls + tls_init_offset); - if (oldtls) { - /* - * Copy the static TLS block over whole. - */ - memcpy(tls + tls_init_offset, - (char *)oldtls + tls_init_offset, - tls_static_space - tls_init_offset); + /* Adjust the DTV. */ + dtv = tls[0]; + dtv[2] = (Elf_Addr)tls + TLS_TCB_SIZE; + } else { + dtv = malloc(3 * sizeof(Elf_Addr)); + tls[0] = dtv; + dtv[0] = 1; + dtv[1] = 1; + dtv[2] = (Elf_Addr)tls + TLS_TCB_SIZE; - /* - * We assume that this block was the one we created with - * allocate_initial_tls(). - */ - _rtld_free_tls(oldtls, 2 * sizeof(Elf_Addr), sizeof(Elf_Addr)); - } else { - memcpy(tls + tls_init_offset, tls_init, tls_init_size); - memset(tls + tls_init_offset + tls_init_size, - 0, tls_static_space - tls_init_size); + if (tls_init_size > 0) + memcpy((void*)dtv[2], tls_init, tls_init_size); + if (tls_static_space > tls_init_size) + memset((void*)(dtv[2] + tls_init_size), 0, + tls_static_space - tls_init_size); } - return tls; + return(tcb); } #endif #ifdef TLS_VARIANT_II +#define TLS_TCB_SIZE (3 * sizeof(Elf_Addr)) + /* * Free Static TLS using the Variant II method. */ @@ -293,22 +292,14 @@ for (i = 0; (unsigned) i < phnum; i++) { if (phdr[i].p_type == PT_TLS) { -#ifdef TLS_VARIANT_I - tls_static_space = round(2*sizeof(Elf_Addr), - phdr[i].p_align) + phdr[i].p_memsz; - tls_init_offset = round(2*sizeof(Elf_Addr), - phdr[i].p_align); -#else tls_static_space = round(phdr[i].p_memsz, phdr[i].p_align); -#endif tls_init_size = phdr[i].p_filesz; tls_init = (void*) phdr[i].p_vaddr; } } - tls = _rtld_allocate_tls(NULL, 3*sizeof(Elf_Addr), - sizeof(Elf_Addr)); + tls = _rtld_allocate_tls(NULL, TLS_TCB_SIZE, 1); _set_tp(tls); #endif ==== //depot/projects/soc2005/libalias/lib/libc/powerpc/gen/_set_tp.c#3 (text+ko) ==== @@ -23,13 +23,13 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/lib/libc/powerpc/gen/_set_tp.c,v 1.2 2006/08/30 00:57:35 marcel Exp $ + * $FreeBSD: src/lib/libc/powerpc/gen/_set_tp.c,v 1.3 2006/09/02 01:07:21 marcel Exp $ */ void _set_tp(void *tpval) { - register void *tp __asm__("r2"); + register void *tp __asm__("r2"); __asm __volatile("mr %0,%1" : "=r"(tp) : "r"((char*)tpval + 0x7008)); } ==== //depot/projects/soc2005/libalias/lib/libc/stdlib/malloc.c#6 (text+ko) ==== @@ -185,7 +185,7 @@ #endif #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/lib/libc/stdlib/malloc.c,v 1.134 2006/08/13 21:54:47 cperciva Exp $"); +__FBSDID("$FreeBSD: src/lib/libc/stdlib/malloc.c,v 1.136 2006/09/01 19:14:14 marcel Exp $"); #include "libc_private.h" #ifdef MALLOC_DEBUG @@ -253,7 +253,6 @@ #ifdef __ia64__ # define QUANTUM_2POW_MIN 4 # define SIZEOF_PTR 8 -# define NO_TLS #endif #ifdef __alpha__ # define QUANTUM_2POW_MIN 4 @@ -279,7 +278,6 @@ # define QUANTUM_2POW_MIN 4 # define SIZEOF_PTR 4 # define USE_BRK -# define NO_TLS #endif /* sizeof(int) == (1 << SIZEOF_INT_2POW). */ ==== //depot/projects/soc2005/libalias/lib/libpthread/arch/ia64/ia64/pthread_md.c#2 (text+ko) ==== @@ -1,5 +1,6 @@ /* * Copyright (c) 2003 Daniel Eischen <deischen@freebsd.org> + * Copyright (c) 2006 Marcel Moolenaar * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -23,11 +24,13 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/lib/libpthread/arch/ia64/ia64/pthread_md.c,v 1.3 2004/08/15 16:28:05 dfr Exp $ + * $FreeBSD: src/lib/libpthread/arch/ia64/ia64/pthread_md.c,v 1.5 2006/09/01 21:25:22 marcel Exp $ */ #include <stdlib.h> #include <strings.h> + +#include "rtld_tls.h" #include "pthread_md.h" /* @@ -36,21 +39,22 @@ struct tcb * _tcb_ctor(struct pthread *thread, int initial) { + register char *tp __asm("%r13"); struct tcb *tcb; - if ((tcb = malloc(sizeof(struct tcb))) != NULL) { - bzero(tcb, sizeof(struct tcb)); - tcb->tcb_thread = thread; - /* Allocate TDV */ - } + tcb = _rtld_allocate_tls((initial) ? tp : NULL, + sizeof(struct tcb), 16); + if (tcb == NULL) + return (NULL); + tcb->tcb_thread = thread; return (tcb); } void _tcb_dtor(struct tcb *tcb) { - /* Free TDV */ - free(tcb); + + _rtld_free_tls(tcb, sizeof(struct tcb), 16); } struct kcb * @@ -58,13 +62,14 @@ { struct kcb *kcb; - if ((kcb = malloc(sizeof(struct kcb))) != NULL) { - bzero(kcb, sizeof(struct kcb)); - kcb->kcb_faketcb.tcb_isfake = 1; - kcb->kcb_faketcb.tcb_tmbx.tm_flags = TMF_NOUPCALL; - kcb->kcb_curtcb = &kcb->kcb_faketcb; - kcb->kcb_kse = kse; - } + kcb = malloc(sizeof(struct kcb)); + if (kcb == NULL) + return (NULL); + bzero(kcb, sizeof(struct kcb)); + kcb->kcb_kse = kse; + kcb->kcb_faketcb.tcb_isfake = 1; + kcb->kcb_faketcb.tcb_tmbx.tm_flags = TMF_NOUPCALL; + kcb->kcb_curtcb = &kcb->kcb_faketcb; return (kcb); } ==== //depot/projects/soc2005/libalias/lib/libpthread/arch/ia64/include/pthread_md.h#2 (text+ko) ==== @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003 Marcel Moolenaar + * Copyright (c) 2003-2006 Marcel Moolenaar * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -23,7 +23,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/lib/libpthread/arch/ia64/include/pthread_md.h,v 1.16 2004/08/16 14:07:38 davidxu Exp $ + * $FreeBSD: src/lib/libpthread/arch/ia64/include/pthread_md.h,v 1.18 2006/09/01 21:25:22 marcel Exp $ */ #ifndef _PTHREAD_MD_H_ @@ -34,7 +34,7 @@ #include <ucontext.h> #define KSE_STACKSIZE 16384 -#define DTV_OFFSET offsetof(struct tcb, tcb_tp.tp_tdv) +#define DTV_OFFSET offsetof(struct tcb, tcb_tp.tp_dtv) #define THR_GETCONTEXT(ucp) _ia64_save_context(&(ucp)->uc_mcontext) #define THR_SETCONTEXT(ucp) PANIC("THR_SETCONTEXT() now in use!\n") @@ -45,19 +45,16 @@ struct kse; struct pthread; struct tcb; -struct tdv; /* We don't know what this is yet? */ /* - * tp points to one of these. We define the static TLS as an array - * of long double to enforce 16-byte alignment of the TLS memory, - * struct ia64_tp, struct tcb and also struct kcb. Both static and - * dynamic allocation of any of these structures will result in a - * valid, well-aligned thread pointer. + * tp points to one of these. We define the TLS structure as a union + * containing a long double to enforce 16-byte alignment. This makes + * sure that there will not be any padding in struct tcb after the + * TLS structure. */ -struct ia64_tp { - struct tdv *tp_tdv; /* dynamic TLS */ - uint64_t _reserved_; - long double tp_tls[0]; /* static TLS */ +union ia64_tp { + void *tp_dtv; + long double _align_; }; struct tcb { @@ -65,19 +62,31 @@ struct pthread *tcb_thread; struct kcb *tcb_curkcb; long tcb_isfake; - struct ia64_tp tcb_tp; + union ia64_tp tcb_tp; }; struct kcb { struct kse_mailbox kcb_kmbx; + struct kse *kcb_kse; + struct tcb *kcb_curtcb; struct tcb kcb_faketcb; - struct tcb *kcb_curtcb; - struct kse *kcb_kse; }; -register struct ia64_tp *_tp __asm("%r13"); +static __inline struct tcb * +ia64_get_tcb() +{ + register char *tp __asm("%r13"); + + return ((struct tcb *)(tp - offsetof(struct tcb, tcb_tp))); +} + +static __inline void +ia64_set_tcb(struct tcb *tcb) +{ + register char *tp __asm("%r13"); -#define _tcb ((struct tcb*)((char*)(_tp) - offsetof(struct tcb, tcb_tp))) + __asm __volatile("mov %0 = %1;;" : "=r"(tp) : "r"(&tcb->tcb_tp)); +} /* * The kcb and tcb constructors. @@ -92,7 +101,7 @@ _kcb_set(struct kcb *kcb) { /* There is no thread yet; use the fake tcb. */ - _tp = &kcb->kcb_faketcb.tcb_tp; + ia64_set_tcb(&kcb->kcb_faketcb); } /* @@ -104,7 +113,7 @@ static __inline struct kcb * _kcb_get(void) { - return (_tcb->tcb_curkcb); + return (ia64_get_tcb()->tcb_curkcb); } /* @@ -115,21 +124,23 @@ static __inline struct kse_thr_mailbox * _kcb_critical_enter(void) { + struct tcb *tcb; struct kse_thr_mailbox *crit; uint32_t flags; - if (_tcb->tcb_isfake != 0) { + tcb = ia64_get_tcb(); + if (tcb->tcb_isfake != 0) { /* * We already are in a critical region since * there is no current thread. */ crit = NULL; } else { - flags = _tcb->tcb_tmbx.tm_flags; - _tcb->tcb_tmbx.tm_flags |= TMF_NOUPCALL; - crit = _tcb->tcb_curkcb->kcb_kmbx.km_curthread; - _tcb->tcb_curkcb->kcb_kmbx.km_curthread = NULL; - _tcb->tcb_tmbx.tm_flags = flags; + flags = tcb->tcb_tmbx.tm_flags; + tcb->tcb_tmbx.tm_flags |= TMF_NOUPCALL; + crit = tcb->tcb_curkcb->kcb_kmbx.km_curthread; + tcb->tcb_curkcb->kcb_kmbx.km_curthread = NULL; + tcb->tcb_tmbx.tm_flags = flags; } return (crit); } @@ -137,28 +148,33 @@ static __inline void _kcb_critical_leave(struct kse_thr_mailbox *crit) { + struct tcb *tcb; + + tcb = ia64_get_tcb(); /* No need to do anything if this is a fake tcb. */ - if (_tcb->tcb_isfake == 0) - _tcb->tcb_curkcb->kcb_kmbx.km_curthread = crit; + if (tcb->tcb_isfake == 0) + tcb->tcb_curkcb->kcb_kmbx.km_curthread = crit; } static __inline int _kcb_in_critical(void) { + struct tcb *tcb; uint32_t flags; int ret; - if (_tcb->tcb_isfake != 0) { + tcb = ia64_get_tcb(); + if (tcb->tcb_isfake != 0) { /* * We are in a critical region since there is no * current thread. */ ret = 1; } else { - flags = _tcb->tcb_tmbx.tm_flags; - _tcb->tcb_tmbx.tm_flags |= TMF_NOUPCALL; - ret = (_tcb->tcb_curkcb->kcb_kmbx.km_curthread == NULL); - _tcb->tcb_tmbx.tm_flags = flags; + flags = tcb->tcb_tmbx.tm_flags; + tcb->tcb_tmbx.tm_flags |= TMF_NOUPCALL; + ret = (tcb->tcb_curkcb->kcb_kmbx.km_curthread == NULL); + tcb->tcb_tmbx.tm_flags = flags; } return (ret); } @@ -170,19 +186,19 @@ tcb = &kcb->kcb_faketcb; kcb->kcb_curtcb = tcb; tcb->tcb_curkcb = kcb; - _tp = &tcb->tcb_tp; + ia64_set_tcb(tcb); } static __inline struct tcb * _tcb_get(void) { - return (_tcb); + return (ia64_get_tcb()); } static __inline struct pthread * _get_curthread(void) { - return (_tcb->tcb_thread); + return (ia64_get_tcb()->tcb_thread); } /* @@ -193,7 +209,7 @@ static __inline struct kse * _get_curkse(void) { - return (_tcb->tcb_curkcb->kcb_kse); + return (ia64_get_tcb()->tcb_curkcb->kcb_kse); } void _ia64_break_setcontext(mcontext_t *mc); @@ -208,7 +224,7 @@ if (_ia64_save_context(&tcb->tcb_tmbx.tm_context.uc_mcontext) == 0) { /* Make the fake tcb the current thread. */ kcb->kcb_curtcb = &kcb->kcb_faketcb; - _tp = &kcb->kcb_faketcb.tcb_tp; + ia64_set_tcb(&kcb->kcb_faketcb); _ia64_enter_uts(kcb->kcb_kmbx.km_func, &kcb->kcb_kmbx, kcb->kcb_kmbx.km_stack.ss_sp, kcb->kcb_kmbx.km_stack.ss_size); ==== //depot/projects/soc2005/libalias/lib/libpthread/arch/powerpc/include/pthread_md.h#2 (text+ko) ==== @@ -1,5 +1,7 @@ /* - * Copyright 2004 by Peter Grehan. All rights reserved. + * Copyright 2004 by Peter Grehan. + * Copyright 2006 Marcel Moolenaar + * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -24,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/lib/libpthread/arch/powerpc/include/pthread_md.h,v 1.3 2004/08/16 05:41:38 grehan Exp $ + * $FreeBSD: src/lib/libpthread/arch/powerpc/include/pthread_md.h,v 1.6 2006/09/01 19:13:36 marcel Exp $ */ /* @@ -42,7 +44,7 @@ extern int _ppc32_getcontext(mcontext_t *); #define KSE_STACKSIZE 16384 -#define DTV_OFFSET offsetof(struct tcb, tcb_tp.tp_tdv) +#define DTV_OFFSET offsetof(struct tcb, tcb_tp.tp_dtv) #define THR_GETCONTEXT(ucp) _ppc32_getcontext(&(ucp)->uc_mcontext) #define THR_SETCONTEXT(ucp) _ppc32_setcontext(&(ucp)->uc_mcontext, 0, NULL) @@ -53,15 +55,14 @@ struct kse; struct pthread; struct tcb; -struct tdv; /* - * %r2 points to a struct kcb. + * %r2 points to the following. >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200609042010.k84KADwO014486>