Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Apr 2013 14:01:23 +0000 (UTC)
From:      Attilio Rao <attilio@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r249700 - in user/attilio/jeff-numa: . bin/chio bin/df bin/expr cddl/contrib/opensolaris/tools/ctf/cvt contrib/tzdata lib/csu lib/libprocstat sbin/gbde sbin/geom/class sbin/hastctl sbin...
Message-ID:  <201304201401.r3KE1Nxu006927@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: attilio
Date: Sat Apr 20 14:01:22 2013
New Revision: 249700
URL: http://svnweb.freebsd.org/changeset/base/249700

Log:
  MFC

Added:
  user/attilio/jeff-numa/lib/libprocstat/core.c
     - copied unchanged from r249699, user/attilio/vmcontention/lib/libprocstat/core.c
  user/attilio/jeff-numa/lib/libprocstat/core.h
     - copied unchanged from r249699, user/attilio/vmcontention/lib/libprocstat/core.h
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/namespace/nsarguments.c
     - copied unchanged from r249699, user/attilio/vmcontention/sys/contrib/dev/acpica/components/namespace/nsarguments.c
  user/attilio/jeff-numa/sys/dev/etherswitch/ukswitch/
     - copied from r249699, user/attilio/vmcontention/sys/dev/etherswitch/ukswitch/
Modified:
  user/attilio/jeff-numa/Makefile.inc1
  user/attilio/jeff-numa/UPDATING
  user/attilio/jeff-numa/bin/chio/chio.c
  user/attilio/jeff-numa/bin/df/df.c
  user/attilio/jeff-numa/bin/expr/Makefile
  user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/ctf.c
  user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/st_parse.c
  user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/traverse.c
  user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/util.c
  user/attilio/jeff-numa/contrib/tzdata/antarctica
  user/attilio/jeff-numa/contrib/tzdata/asia
  user/attilio/jeff-numa/contrib/tzdata/australasia
  user/attilio/jeff-numa/contrib/tzdata/southamerica
  user/attilio/jeff-numa/contrib/tzdata/zone.tab
  user/attilio/jeff-numa/lib/csu/Makefile.inc
  user/attilio/jeff-numa/lib/libprocstat/Makefile
  user/attilio/jeff-numa/lib/libprocstat/Symbol.map
  user/attilio/jeff-numa/lib/libprocstat/libprocstat.3
  user/attilio/jeff-numa/lib/libprocstat/libprocstat.c
  user/attilio/jeff-numa/lib/libprocstat/libprocstat.h
  user/attilio/jeff-numa/lib/libprocstat/libprocstat_internal.h
  user/attilio/jeff-numa/sbin/gbde/Makefile
  user/attilio/jeff-numa/sbin/geom/class/Makefile.inc
  user/attilio/jeff-numa/sbin/hastctl/Makefile
  user/attilio/jeff-numa/sbin/hastd/Makefile
  user/attilio/jeff-numa/sbin/md5/Makefile
  user/attilio/jeff-numa/share/man/man9/DELAY.9
  user/attilio/jeff-numa/share/mk/bsd.sys.mk
  user/attilio/jeff-numa/sys/cam/cam_xpt.c
  user/attilio/jeff-numa/sys/cam/scsi/scsi_ch.c
  user/attilio/jeff-numa/sys/cam/scsi/scsi_ch.h
  user/attilio/jeff-numa/sys/conf/files
  user/attilio/jeff-numa/sys/conf/options
  user/attilio/jeff-numa/sys/contrib/dev/acpica/changes.txt   (contents, props changed)
  user/attilio/jeff-numa/sys/contrib/dev/acpica/compiler/aslpredef.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/compiler/aslprepkg.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/debugger/dbdisply.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/debugger/dbexec.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/debugger/dbmethod.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/debugger/dbnames.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/events/evgpe.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/events/evregion.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/executer/exconfig.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/executer/exfldio.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/hardware/hwxface.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/namespace/nseval.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/namespace/nsinit.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/namespace/nspredef.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/namespace/nsprepkg.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/namespace/nsrepair.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/namespace/nsrepair2.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/namespace/nsxfeval.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/parser/psxface.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/resources/rsutils.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/utilities/uteval.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/utilities/utosi.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/utilities/utpredef.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/utilities/utxferror.c
  user/attilio/jeff-numa/sys/contrib/dev/acpica/include/acconfig.h
  user/attilio/jeff-numa/sys/contrib/dev/acpica/include/aclocal.h
  user/attilio/jeff-numa/sys/contrib/dev/acpica/include/acmacros.h
  user/attilio/jeff-numa/sys/contrib/dev/acpica/include/acnamesp.h
  user/attilio/jeff-numa/sys/contrib/dev/acpica/include/acoutput.h
  user/attilio/jeff-numa/sys/contrib/dev/acpica/include/acpixf.h
  user/attilio/jeff-numa/sys/contrib/dev/acpica/include/acpredef.h
  user/attilio/jeff-numa/sys/contrib/dev/acpica/include/acstruct.h
  user/attilio/jeff-numa/sys/contrib/dev/acpica/include/acutils.h
  user/attilio/jeff-numa/sys/dev/ath/if_ath.c
  user/attilio/jeff-numa/sys/dev/netmap/netmap.c
  user/attilio/jeff-numa/sys/dev/netmap/netmap_kern.h
  user/attilio/jeff-numa/sys/dev/netmap/netmap_mem2.c
  user/attilio/jeff-numa/sys/kern/kern_fork.c
  user/attilio/jeff-numa/sys/kern/uipc_syscalls.c
  user/attilio/jeff-numa/sys/modules/acpi/acpi/Makefile
  user/attilio/jeff-numa/sys/sys/chio.h
  user/attilio/jeff-numa/usr.bin/ar/Makefile
  user/attilio/jeff-numa/usr.bin/bc/Makefile
  user/attilio/jeff-numa/usr.bin/bzip2recover/Makefile
  user/attilio/jeff-numa/usr.bin/find/Makefile
  user/attilio/jeff-numa/usr.bin/gcore/Makefile
  user/attilio/jeff-numa/usr.bin/gcore/elfcore.c
  user/attilio/jeff-numa/usr.bin/indent/Makefile
  user/attilio/jeff-numa/usr.bin/m4/Makefile
  user/attilio/jeff-numa/usr.bin/mklocale/Makefile
  user/attilio/jeff-numa/usr.bin/procstat/procstat.1
  user/attilio/jeff-numa/usr.bin/procstat/procstat.c
  user/attilio/jeff-numa/usr.bin/procstat/procstat.h
  user/attilio/jeff-numa/usr.bin/procstat/procstat_args.c
  user/attilio/jeff-numa/usr.bin/procstat/procstat_auxv.c
  user/attilio/jeff-numa/usr.bin/procstat/procstat_bin.c
  user/attilio/jeff-numa/usr.bin/procstat/procstat_cred.c
  user/attilio/jeff-numa/usr.bin/procstat/procstat_kstack.c
  user/attilio/jeff-numa/usr.bin/procstat/procstat_rlimit.c
  user/attilio/jeff-numa/usr.bin/procstat/procstat_sigs.c
  user/attilio/jeff-numa/usr.bin/procstat/procstat_threads.c
  user/attilio/jeff-numa/usr.bin/procstat/procstat_vm.c
  user/attilio/jeff-numa/usr.sbin/acpi/acpidb/Makefile
  user/attilio/jeff-numa/usr.sbin/auditdistd/Makefile
  user/attilio/jeff-numa/usr.sbin/bluetooth/bthidd/Makefile
  user/attilio/jeff-numa/usr.sbin/bsnmpd/modules/Makefile.inc
  user/attilio/jeff-numa/usr.sbin/config/Makefile
  user/attilio/jeff-numa/usr.sbin/fifolog/lib/Makefile
  user/attilio/jeff-numa/usr.sbin/jail/Makefile
Directory Properties:
  user/attilio/jeff-numa/   (props changed)
  user/attilio/jeff-numa/cddl/   (props changed)
  user/attilio/jeff-numa/cddl/contrib/opensolaris/   (props changed)
  user/attilio/jeff-numa/contrib/tzdata/   (props changed)
  user/attilio/jeff-numa/sbin/   (props changed)
  user/attilio/jeff-numa/sys/   (props changed)
  user/attilio/jeff-numa/sys/conf/   (props changed)
  user/attilio/jeff-numa/sys/contrib/dev/acpica/   (props changed)
  user/attilio/jeff-numa/sys/contrib/dev/acpica/compiler/   (props changed)
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/debugger/   (props changed)
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/events/   (props changed)
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/executer/   (props changed)
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/hardware/   (props changed)
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/namespace/   (props changed)
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/parser/   (props changed)
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/resources/   (props changed)
  user/attilio/jeff-numa/sys/contrib/dev/acpica/components/utilities/   (props changed)
  user/attilio/jeff-numa/sys/contrib/dev/acpica/include/   (props changed)
  user/attilio/jeff-numa/sys/contrib/dev/acpica/os_specific/   (props changed)
  user/attilio/jeff-numa/usr.bin/procstat/   (props changed)
  user/attilio/jeff-numa/usr.sbin/jail/   (props changed)

Modified: user/attilio/jeff-numa/Makefile.inc1
==============================================================================
--- user/attilio/jeff-numa/Makefile.inc1	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/Makefile.inc1	Sat Apr 20 14:01:22 2013	(r249700)
@@ -1382,7 +1382,7 @@ _prebuild_libs=	${_kerberos5_lib_libasn1
 		${_kerberos5_lib_libwind} \
 		${_lib_atf_libatf_c} \
 		lib/libbz2 ${_libcom_err} lib/libcrypt \
-		lib/libexpat \
+		lib/libelf lib/libexpat \
 		${_lib_libgssapi} ${_lib_libipx} \
 		lib/libkiconv lib/libkvm lib/liblzma lib/libmd \
 		lib/ncurses/ncurses lib/ncurses/ncursesw \

Modified: user/attilio/jeff-numa/UPDATING
==============================================================================
--- user/attilio/jeff-numa/UPDATING	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/UPDATING	Sat Apr 20 14:01:22 2013	(r249700)
@@ -11,6 +11,11 @@ handbook:
 Items affecting the ports and packages system can be found in
 /usr/ports/UPDATING.  Please read that file before running portupgrade.
 
+NOTE: FreeBSD has switched from gcc to clang. If you have trouble bootstrapping
+from older versions of FreeBSD, try WITHOUT_CLANG and WITHOUT_CLANG_IS_CC to
+bootstrap to tip of head, and then rebuild without those options. The bootstrap
+process from older version of current is a bit fragile.
+
 NOTE TO PEOPLE WHO THINK THAT FreeBSD 10.x IS SLOW:
 	FreeBSD 10.x has many debugging features turned on, in both the kernel
 	and userland.  These features attempt to detect incorrect use of

Modified: user/attilio/jeff-numa/bin/chio/chio.c
==============================================================================
--- user/attilio/jeff-numa/bin/chio/chio.c	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/bin/chio/chio.c	Sat Apr 20 14:01:22 2013	(r249700)
@@ -54,6 +54,8 @@ __FBSDID("$FreeBSD$");
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <langinfo.h>
+#include <locale.h>
 
 #include "defs.h"
 #include "pathnames.h"
@@ -81,6 +83,7 @@ static	int do_status(const char *, int, 
 static	int do_ielem(const char *, int, char **);
 static	int do_return(const char *, int, char **);
 static	int do_voltag(const char *, int, char **);
+static	void print_designator(const char *, u_int8_t, u_int8_t);
 
 #ifndef CHET_VT
 #define	CHET_VT		10			/* Completely Arbitrary */
@@ -723,6 +726,10 @@ do_status(const char *cname, int argc, c
 					putchar('?');
 				putchar('>');
 			}
+			if (ces->ces_designator_length > 0)
+				print_designator(ces->ces_designator,
+						 ces->ces_code_set,
+						 ces->ces_designator_length);
 			putchar('\n');
 		}
 
@@ -1177,3 +1184,66 @@ usage(void)
 		"arg1 arg2 [arg3 [...]]\n", getprogname());
 	exit(1);
 }
+
+#define	UTF8CODESET	"UTF-8"
+
+static void
+print_designator(const char *designator, u_int8_t code_set,
+    u_int8_t designator_length)
+{
+	printf(" serial number: <");
+	switch (code_set) {
+	case CES_CODE_SET_ASCII: {
+		/*
+		 * The driver insures that the string is always NUL terminated.
+		 */
+		printf("%s", designator);
+		break;
+	}
+	case CES_CODE_SET_UTF_8: {
+		char *cs_native;
+
+		setlocale(LC_ALL, "");
+		cs_native = nl_langinfo(CODESET);
+
+		/* See if we can natively print UTF-8 */
+		if (strcmp(cs_native, UTF8CODESET) == 0)
+			cs_native = NULL;
+
+		if (cs_native == NULL) {
+			/* We can natively print UTF-8, so use printf. */
+			printf("%s", designator);
+		} else {
+			int i;
+
+			/*
+			 * We can't natively print UTF-8.  We should
+			 * convert it to the terminal's codeset, but that
+			 * requires iconv(3) and FreeBSD doesn't have
+			 * iconv(3) in the base system yet.  So we use %XX
+			 * notation for non US-ASCII characters instead.
+			 */
+			for (i = 0; i < designator_length &&
+			    designator[i] != '\0'; i++) {
+				if ((unsigned char)designator[i] < 0x80)
+					printf("%c", designator[i]);
+				else
+					printf("%%%02x",
+					    (unsigned char)designator[i]);
+			}
+		}
+		break;
+	}
+	case CES_CODE_SET_BINARY: {
+		int i;
+
+		for (i = 0; i < designator_length; i++)
+			printf("%02X%s", designator[i],
+			    (i == designator_length - 1) ? "" : " ");
+		break;
+	}
+	default:
+		break;
+	}
+	printf(">");
+}

Modified: user/attilio/jeff-numa/bin/df/df.c
==============================================================================
--- user/attilio/jeff-numa/bin/df/df.c	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/bin/df/df.c	Sat Apr 20 14:01:22 2013	(r249700)
@@ -114,6 +114,7 @@ main(int argc, char *argv[])
 
 	fstype = "ufs";
 	(void)setlocale(LC_ALL, "");
+	memset(&maxwidths, 0, sizeof(maxwidths));
 	memset(&totalbuf, 0, sizeof(totalbuf));
 	totalbuf.f_bsize = DEV_BSIZE;
 	strlcpy(totalbuf.f_mntfromname, "total", MNAMELEN);
@@ -200,7 +201,7 @@ main(int argc, char *argv[])
 	} else {
 		/* just the filesystems specified on the command line */
 		mntbuf = malloc(argc * sizeof(*mntbuf));
-		if (mntbuf == 0)
+		if (mntbuf == NULL)
 			err(1, "malloc()");
 		mntsize = 0;
 		/* continued in for loop below */
@@ -209,13 +210,13 @@ main(int argc, char *argv[])
 	/* iterate through specified filesystems */
 	for (; *argv; argv++) {
 		if (stat(*argv, &stbuf) < 0) {
-			if ((mntpt = getmntpt(*argv)) == 0) {
+			if ((mntpt = getmntpt(*argv)) == NULL) {
 				warn("%s", *argv);
 				rv = 1;
 				continue;
 			}
 		} else if (S_ISCHR(stbuf.st_mode)) {
-			if ((mntpt = getmntpt(*argv)) == 0) {
+			if ((mntpt = getmntpt(*argv)) == NULL) {
 				mdev.fspec = *argv;
 				mntpath = strdup("/tmp/df.XXXXXX");
 				if (mntpath == NULL) {
@@ -282,7 +283,7 @@ main(int argc, char *argv[])
 		mntbuf[mntsize++] = statfsbuf;
 	}
 
-	bzero(&maxwidths, sizeof(maxwidths));
+	memset(&maxwidths, 0, sizeof(maxwidths));
 	for (i = 0; i < mntsize; i++) {
 		if (aflag || (mntbuf[i].f_flags & MNT_IGNORE) == 0) {
 			update_maxwidths(&maxwidths, &mntbuf[i]);
@@ -295,6 +296,7 @@ main(int argc, char *argv[])
 			prtstat(&mntbuf[i], &maxwidths);
 	if (cflag)
 		prtstat(&totalbuf, &maxwidths);
+	free(mntbuf);
 	return (rv);
 }
 
@@ -309,7 +311,7 @@ getmntpt(const char *name)
 		if (!strcmp(mntbuf[i].f_mntfromname, name))
 			return (mntbuf[i].f_mntonname);
 	}
-	return (0);
+	return (NULL);
 }
 
 /*

Modified: user/attilio/jeff-numa/bin/expr/Makefile
==============================================================================
--- user/attilio/jeff-numa/bin/expr/Makefile	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/bin/expr/Makefile	Sat Apr 20 14:01:22 2013	(r249700)
@@ -4,4 +4,6 @@ PROG=	expr
 SRCS=	expr.y
 YFLAGS=
 
+NO_WMISSING_VARIABLE_DECLARATIONS=
+
 .include <bsd.prog.mk>

Modified: user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/ctf.c
==============================================================================
--- user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/ctf.c	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/ctf.c	Sat Apr 20 14:01:22 2013	(r249700)
@@ -47,7 +47,7 @@
  *
  * The value is only valid during a call to ctf_load.
  */
-char *curfile;
+static char *curfile;
 
 #define	CTF_BUF_CHUNK_SIZE	(64 * 1024)
 #define	RES_BUF_CHUNK_SIZE	(64 * 1024)

Modified: user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/st_parse.c
==============================================================================
--- user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/st_parse.c	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/st_parse.c	Sat Apr 20 14:01:22 2013	(r249700)
@@ -54,7 +54,7 @@ static int faketypenumber = 100000000;
 static tdesc_t *hash_table[BUCKETS];
 static tdesc_t *name_table[BUCKETS];
 
-list_t *typedbitfldmems;
+static list_t *typedbitfldmems;
 
 static void reset(void);
 static jmp_buf	resetbuf;

Modified: user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/traverse.c
==============================================================================
--- user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/traverse.c	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/traverse.c	Sat Apr 20 14:01:22 2013	(r249700)
@@ -37,8 +37,8 @@
 #include "traverse.h"
 #include "memory.h"
 
-int (*tddescenders[])(tdesc_t *, tdtrav_data_t *);
-tdtrav_cb_f tdnops[];
+static int (*tddescenders[])(tdesc_t *, tdtrav_data_t *);
+static tdtrav_cb_f tdnops[];
 
 void
 tdtrav_init(tdtrav_data_t *tdtd, int *vgenp, tdtrav_cb_f *firstops,
@@ -111,7 +111,7 @@ tdtrav_assert(tdesc_t *node __unused, td
 	return (-1);
 }
 
-tdtrav_cb_f tdnops[] = {
+static tdtrav_cb_f tdnops[] = {
 	NULL,
 	NULL,			/* intrinsic */
 	NULL,			/* pointer */
@@ -128,7 +128,7 @@ tdtrav_cb_f tdnops[] = {
 	NULL			/* restrict */
 };
 
-int (*tddescenders[])(tdesc_t *, tdtrav_data_t *) = {
+static int (*tddescenders[])(tdesc_t *, tdtrav_data_t *) = {
 	NULL,
 	NULL,			/* intrinsic */
 	tdtrav_plain,		/* pointer */

Modified: user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/util.c
==============================================================================
--- user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/util.c	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/cddl/contrib/opensolaris/tools/ctf/cvt/util.c	Sat Apr 20 14:01:22 2013	(r249700)
@@ -249,8 +249,8 @@ tdesc_name(tdesc_t *tdp)
 	return (tdp->t_name == NULL ? "(anon)" : tdp->t_name);
 }
 
-char	*watch_address = NULL;
-int	watch_length = 0;
+static char	*watch_address = NULL;
+static int	watch_length = 0;
 
 void
 watch_set(void *addr, int len)

Modified: user/attilio/jeff-numa/contrib/tzdata/antarctica
==============================================================================
--- user/attilio/jeff-numa/contrib/tzdata/antarctica	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/contrib/tzdata/antarctica	Sat Apr 20 14:01:22 2013	(r249700)
@@ -53,34 +53,6 @@ Rule	ChileAQ	2011	only	-	Aug	Sun>=16	4:0
 Rule	ChileAQ	2012	max	-	Apr	Sun>=23	3:00u	0	-
 Rule	ChileAQ	2012	max	-	Sep	Sun>=2	4:00u	1:00	S
 
-# These rules are stolen from the `australasia' file.
-Rule	AusAQ	1917	only	-	Jan	 1	0:01	1:00	-
-Rule	AusAQ	1917	only	-	Mar	25	2:00	0	-
-Rule	AusAQ	1942	only	-	Jan	 1	2:00	1:00	-
-Rule	AusAQ	1942	only	-	Mar	29	2:00	0	-
-Rule	AusAQ	1942	only	-	Sep	27	2:00	1:00	-
-Rule	AusAQ	1943	1944	-	Mar	lastSun	2:00	0	-
-Rule	AusAQ	1943	only	-	Oct	 3	2:00	1:00	-
-Rule	ATAQ	1967	only	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	ATAQ	1968	only	-	Mar	lastSun	2:00s	0	-
-Rule	ATAQ	1968	1985	-	Oct	lastSun	2:00s	1:00	-
-Rule	ATAQ	1969	1971	-	Mar	Sun>=8	2:00s	0	-
-Rule	ATAQ	1972	only	-	Feb	lastSun	2:00s	0	-
-Rule	ATAQ	1973	1981	-	Mar	Sun>=1	2:00s	0	-
-Rule	ATAQ	1982	1983	-	Mar	lastSun	2:00s	0	-
-Rule	ATAQ	1984	1986	-	Mar	Sun>=1	2:00s	0	-
-Rule	ATAQ	1986	only	-	Oct	Sun>=15	2:00s	1:00	-
-Rule	ATAQ	1987	1990	-	Mar	Sun>=15	2:00s	0	-
-Rule	ATAQ	1987	only	-	Oct	Sun>=22	2:00s	1:00	-
-Rule	ATAQ	1988	1990	-	Oct	lastSun	2:00s	1:00	-
-Rule	ATAQ	1991	1999	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	ATAQ	1991	2005	-	Mar	lastSun	2:00s	0	-
-Rule	ATAQ	2000	only	-	Aug	lastSun	2:00s	1:00	-
-Rule	ATAQ	2001	max	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	ATAQ	2006	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	ATAQ	2007	only	-	Mar	lastSun	2:00s	0	-
-Rule	ATAQ	2008	max	-	Apr	Sun>=1	2:00s	0	-
-
 # Argentina - year-round bases
 # Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
 # Esperanza, San Martin Land, -6323-05659, since 1952-12-17
@@ -122,10 +94,7 @@ Rule	ATAQ	2008	max	-	Apr	Sun>=1	2:00s	0	
 # </a>
 
 # From Steffen Thorsen (2010-03-10):
-# We got these changes from the Australian Antarctic Division:
-# - Macquarie Island will stay on UTC+11 for winter and therefore not
-# switch back from daylight savings time when other parts of Australia do
-# on 4 April.
+# We got these changes from the Australian Antarctic Division: ...
 #
 # - Casey station reverted to its normal time of UTC+8 on 5 March 2010.
 # The change to UTC+11 is being considered as a regular summer thing but
@@ -136,9 +105,6 @@ Rule	ATAQ	2008	max	-	Apr	Sun>=1	2:00s	0	
 #
 # - Mawson station stays on UTC+5.
 #
-# In addition to the Rule changes for Casey/Davis, it means that Macquarie
-# will no longer be like Hobart and will have to have its own Zone created.
-#
 # Background:
 # <a href="http://www.timeanddate.com/news/time/antartica-time-changes-2010.html">;
 # http://www.timeanddate.com/news/time/antartica-time-changes-2010.html
@@ -165,12 +131,6 @@ Zone Antarctica/Mawson	0	-	zzz	1954 Feb 
 			6:00	-	MAWT	2009 Oct 18 2:00
 						# Mawson Time
 			5:00	-	MAWT
-Zone Antarctica/Macquarie 0	-	zzz	1911
-			10:00	-	EST	1916 Oct 1 2:00
-			10:00	1:00	EST	1917 Feb
-			10:00	AusAQ	EST	1967
-			10:00	ATAQ	EST	2010 Apr 4 3:00
-			11:00	-	MIST	# Macquarie Island Time
 # References:
 # <a href="http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html">;
 # Casey Weather (1998-02-26)

Modified: user/attilio/jeff-numa/contrib/tzdata/asia
==============================================================================
--- user/attilio/jeff-numa/contrib/tzdata/asia	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/contrib/tzdata/asia	Sat Apr 20 14:01:22 2013	(r249700)
@@ -2291,11 +2291,20 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 # http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html
 # </a>
 
-# From Arthur David Olson (2012-03-27):
-# The timeanddate article for 2012 says that "the end date has not yet been
-# announced" and that "Last year, both...paused daylight saving time during...
-# Ramadan. It is not yet known [for] 2012."
-# For now, assume both switch back on the last Friday in September. XXX
+# From Steffen Thorsen (2013-03-26):
+# The following news sources tells that Palestine will "start daylight saving
+# time from midnight on Friday, March 29, 2013" (translated).
+# [These are in Arabic and are for Gaza and for Ramallah, respectively.]
+# http://www.samanews.com/index.php?act=Show&id=154120
+# http://safa.ps/details/news/99844/%D8%B1%D8%A7%D9%85-%D8%A7%D9%84%D9%84%D9%87-%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-29-%D8%A7%D9%84%D8%AC%D8%A7%D8%B1%D9%8A.html
+
+# From Paul Eggert (2013-04-15):
+# For future dates, guess the last Thursday in March at 24:00 through
+# the first Friday on or after September 21 at 01:00.  This is consistent with
+# the predictions in today's editions of the following URLs,
+# which are for Gaza and Hebron respectively:
+# http://www.timeanddate.com/worldclock/timezone.html?n=702
+# http://www.timeanddate.com/worldclock/timezone.html?n=2364
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	S
@@ -2309,19 +2318,20 @@ Rule Palestine	1999	2005	-	Apr	Fri>=15	0
 Rule Palestine	1999	2003	-	Oct	Fri>=15	0:00	0	-
 Rule Palestine	2004	only	-	Oct	 1	1:00	0	-
 Rule Palestine	2005	only	-	Oct	 4	2:00	0	-
-Rule Palestine	2006	2008	-	Apr	 1	0:00	1:00	S
+Rule Palestine	2006	2007	-	Apr	 1	0:00	1:00	S
 Rule Palestine	2006	only	-	Sep	22	0:00	0	-
 Rule Palestine	2007	only	-	Sep	Thu>=8	2:00	0	-
-Rule Palestine	2008	only	-	Aug	lastFri	0:00	0	-
-Rule Palestine	2009	only	-	Mar	lastFri	0:00	1:00	S
-Rule Palestine	2009	only	-	Sep	Fri>=1	2:00	0	-
-Rule Palestine	2010	only	-	Mar	lastSat	0:01	1:00	S
+Rule Palestine	2008	2009	-	Mar	lastFri	0:00	1:00	S
+Rule Palestine	2008	only	-	Sep	 1	0:00	0	-
+Rule Palestine	2009	only	-	Sep	Fri>=1	1:00	0	-
+Rule Palestine	2010	only	-	Mar	26	0:00	1:00	S
 Rule Palestine	2010	only	-	Aug	11	0:00	0	-
-
-# From Arthur David Olson (2011-09-20):
-# 2011 transitions per http://www.timeanddate.com as of 2011-09-20.
-# From Paul Eggert (2012-10-12):
-# 2012 transitions per http://www.timeanddate.com as of 2012-10-12.
+Rule Palestine	2011	only	-	Apr	 1	0:01	1:00	S
+Rule Palestine	2011	only	-	Aug	 1	0:00	0	-
+Rule Palestine	2011	only	-	Aug	30	0:00	1:00	S
+Rule Palestine	2011	only	-	Sep	30	0:00	0	-
+Rule Palestine	2012	max	-	Mar	lastThu	24:00	1:00	S
+Rule Palestine	2012	max	-	Sep	Fri>=21	1:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
@@ -2329,26 +2339,20 @@ Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
 			2:00 EgyptAsia	EE%sT	1967 Jun  5
 			2:00	Zion	I%sT	1996
 			2:00	Jordan	EE%sT	1999
-			2:00 Palestine	EE%sT	2011 Apr  2 12:01
-			2:00	1:00	EEST	2011 Aug  1
-			2:00	-	EET	2012 Mar 30
-			2:00	1:00	EEST	2012 Sep 21 1:00
-			2:00	-	EET
+			2:00 Palestine	EE%sT	2008 Aug 29 0:00
+			2:00	-	EET	2008 Sep
+			2:00 Palestine	EE%sT	2010
+			2:00	-	EET	2010 Mar 27 0:01
+			2:00 Palestine	EE%sT	2011 Aug  1
+			2:00	-	EET	2012
+			2:00 Palestine	EE%sT
 
 Zone	Asia/Hebron	2:20:23	-	LMT	1900 Oct
 			2:00	Zion	EET	1948 May 15
 			2:00 EgyptAsia	EE%sT	1967 Jun  5
 			2:00	Zion	I%sT	1996
 			2:00	Jordan	EE%sT	1999
-			2:00 Palestine	EE%sT	2008 Aug
-			2:00 	1:00	EEST	2008 Sep
-			2:00 Palestine	EE%sT	2011 Apr  1 12:01
-			2:00	1:00	EEST	2011 Aug  1
-			2:00	-	EET	2011 Aug 30
-			2:00	1:00	EEST	2011 Sep 30 3:00
-			2:00	-	EET	2012 Mar 30
-			2:00	1:00	EEST	2012 Sep 21 1:00
-			2:00	-	EET
+			2:00 Palestine	EE%sT
 
 # Paracel Is
 # no information

Modified: user/attilio/jeff-numa/contrib/tzdata/australasia
==============================================================================
--- user/attilio/jeff-numa/contrib/tzdata/australasia	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/contrib/tzdata/australasia	Sat Apr 20 14:01:22 2013	(r249700)
@@ -218,9 +218,26 @@ Zone Australia/Lord_Howe 10:36:20 -	LMT	
 # no times are set
 #
 # Macquarie
-# permanent occupation (scientific station) since 1948;
-# sealing and penguin oil station operated 1888/1917
-# like Australia/Hobart
+# Permanent occupation (scientific station) 1911-1915 and since 25 March 1948;
+# sealing and penguin oil station operated Nov 1899 to Apr 1919.  See the
+# Tasmania Parks & Wildlife Service history of sealing at Macquarie Island
+# <http://www.parks.tas.gov.au/index.aspx?base=1828>;
+# <http://www.parks.tas.gov.au/index.aspx?base=1831>.
+# Guess that it was like Australia/Hobart while inhabited before 2010.
+#
+# From Steffen Thorsen (2010-03-10):
+# We got these changes from the Australian Antarctic Division:
+# - Macquarie Island will stay on UTC+11 for winter and therefore not
+# switch back from daylight savings time when other parts of Australia do
+# on 4 April.
+Zone Antarctica/Macquarie 0	-	zzz	1899 Nov
+			10:00	-	EST	1916 Oct 1 2:00
+			10:00	1:00	EST	1917 Feb
+			10:00	Aus	EST	1919 Apr
+			0	-	zzz	1948 Mar 25
+			10:00	Aus	EST	1967
+			10:00	AT	EST	2010 Apr 4 3:00
+			11:00	-	MIST	# Macquarie I Standard Time
 
 # Christmas
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]

Modified: user/attilio/jeff-numa/contrib/tzdata/southamerica
==============================================================================
--- user/attilio/jeff-numa/contrib/tzdata/southamerica	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/contrib/tzdata/southamerica	Sat Apr 20 14:01:22 2013	(r249700)
@@ -1566,16 +1566,16 @@ Rule	Para	2005	2009	-	Mar	Sun>=8	0:00	0	
 # forward 60 minutes, in all the territory of the Paraguayan Republic.
 # ...
 Rule	Para	2010	max	-	Oct	Sun>=1	0:00	1:00	S
-Rule	Para	2010	max	-	Apr	Sun>=8	0:00	0	-
+Rule	Para	2010	2012	-	Apr	Sun>=8	0:00	0	-
 #
 # From Steffen Thorsen (2013-03-07):
 # Paraguay will end DST on 2013-03-24 00:00....
-# They do not tell if this will be a permanent change or just this year....
 # http://www.ande.gov.py/interna.php?id=1075
 #
-# From Paul Eggert (2013-03-07):
-# For now, assume it's just this year.
-Rule	Para	2013	only	-	Mar	24	0:00	0	-
+# From Carlos Raul Perasso (2013-03-15):
+# The change in Paraguay is now final.  Decree number 10780
+# http://www.presidencia.gov.py/uploads/pdf/presidencia-3b86ff4b691c79d4f5927ca964922ec74772ce857c02ca054a52a37b49afc7fb.pdf
+Rule	Para	2013	max	-	Mar	Sun>=22	0:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Asuncion	-3:50:40 -	LMT	1890

Modified: user/attilio/jeff-numa/contrib/tzdata/zone.tab
==============================================================================
--- user/attilio/jeff-numa/contrib/tzdata/zone.tab	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/contrib/tzdata/zone.tab	Sat Apr 20 14:01:22 2013	(r249700)
@@ -42,7 +42,6 @@ AQ	-6617+11031	Antarctica/Casey	Casey St
 AQ	-7824+10654	Antarctica/Vostok	Vostok Station, Lake Vostok
 AQ	-6640+14001	Antarctica/DumontDUrville	Dumont-d'Urville Station, Terre Adelie
 AQ	-690022+0393524	Antarctica/Syowa	Syowa Station, E Ongul I
-AQ	-5430+15857	Antarctica/Macquarie	Macquarie Island Station, Macquarie Island
 AR	-3436-05827	America/Argentina/Buenos_Aires	Buenos Aires (BA, CF)
 AR	-3124-06411	America/Argentina/Cordoba	most locations (CB, CC, CN, ER, FM, MN, SE, SF)
 AR	-2447-06525	America/Argentina/Salta	(SA, LP, NQ, RN)
@@ -58,6 +57,7 @@ AR	-5448-06818	America/Argentina/Ushuaia
 AS	-1416-17042	Pacific/Pago_Pago
 AT	+4813+01620	Europe/Vienna
 AU	-3133+15905	Australia/Lord_Howe	Lord Howe Island
+AU	-5430+15857	Antarctica/Macquarie	Macquarie Island
 AU	-4253+14719	Australia/Hobart	Tasmania - most locations
 AU	-3956+14352	Australia/Currie	Tasmania - King Island
 AU	-3749+14458	Australia/Melbourne	Victoria

Modified: user/attilio/jeff-numa/lib/csu/Makefile.inc
==============================================================================
--- user/attilio/jeff-numa/lib/csu/Makefile.inc	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/lib/csu/Makefile.inc	Sat Apr 20 14:01:22 2013	(r249700)
@@ -4,4 +4,6 @@ SSP_CFLAGS=
 
 SED_FIX_NOTE = -i "" -e '/\.note\.tag/s/progbits/note/'
 
+NO_WMISSING_VARIABLE_DECLARATIONS=
+
 .include "../Makefile.inc"

Modified: user/attilio/jeff-numa/lib/libprocstat/Makefile
==============================================================================
--- user/attilio/jeff-numa/lib/libprocstat/Makefile	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/lib/libprocstat/Makefile	Sat Apr 20 14:01:22 2013	(r249700)
@@ -6,6 +6,7 @@ LIB=	procstat
 
 SRCS=	cd9660.c	\
 	common_kvm.c	\
+	core.c		\
 	libprocstat.c	\
         msdosfs.c	\
 	udf.c
@@ -17,8 +18,8 @@ INCS=		libprocstat.h
 CFLAGS+=	-I. -I${.CURDIR} -D_KVM_VNODE
 SHLIB_MAJOR=	1
 
-DPADD=		${LIBKVM} ${LIBUTIL}
-LDADD=		-lkvm -lutil
+DPADD=		${LIBELF} ${LIBKVM} ${LIBUTIL}
+LDADD=		-lelf -lkvm -lutil
 
 MAN=		libprocstat.3
 

Modified: user/attilio/jeff-numa/lib/libprocstat/Symbol.map
==============================================================================
--- user/attilio/jeff-numa/lib/libprocstat/Symbol.map	Sat Apr 20 13:48:50 2013	(r249699)
+++ user/attilio/jeff-numa/lib/libprocstat/Symbol.map	Sat Apr 20 14:01:22 2013	(r249700)
@@ -16,5 +16,22 @@ FBSD_1.2 {
 };
 
 FBSD_1.3 {
+	procstat_freeargv;
+	procstat_freeauxv;
+	procstat_freeenvv;
+	procstat_freegroups;
+	procstat_freekstack;
+	procstat_freevmmap;
 	procstat_get_shm_info;
+	procstat_getargv;
+	procstat_getauxv;
+	procstat_getenvv;
+	procstat_getgroups;
+	procstat_getkstack;
+	procstat_getosrel;
+	procstat_getpathname;
+	procstat_getrlimit;
+	procstat_getumask;
+	procstat_getvmmap;
+	procstat_open_core;
 };

Copied: user/attilio/jeff-numa/lib/libprocstat/core.c (from r249699, user/attilio/vmcontention/lib/libprocstat/core.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/attilio/jeff-numa/lib/libprocstat/core.c	Sat Apr 20 14:01:22 2013	(r249700, copy of r249699, user/attilio/vmcontention/lib/libprocstat/core.c)
@@ -0,0 +1,432 @@
+/*-
+ * Copyright (c) 2013 Mikolaj Golub <trociny@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (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$
+ */
+
+#include <sys/param.h>
+#include <sys/elf.h>
+#include <sys/exec.h>
+#include <sys/user.h>
+
+#include <assert.h>
+#include <err.h>
+#include <fcntl.h>
+#include <gelf.h>
+#include <libelf.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "core.h"
+
+#define PROCSTAT_CORE_MAGIC	0x012DADB8
+struct procstat_core
+{
+	int		pc_magic;
+	int		pc_fd;
+	Elf		*pc_elf;
+	GElf_Ehdr	pc_ehdr;
+	GElf_Phdr	pc_phdr;
+};
+
+static bool	core_offset(struct procstat_core *core, off_t offset);
+static bool	core_read(struct procstat_core *core, void *buf, size_t len);
+static ssize_t	core_read_mem(struct procstat_core *core, void *buf,
+    size_t len, vm_offset_t addr, bool readall);
+static void	*get_args(struct procstat_core *core, vm_offset_t psstrings,
+    enum psc_type type, void *buf, size_t *lenp);
+
+struct procstat_core *
+procstat_core_open(const char *filename)
+{
+	struct procstat_core *core;
+	Elf *e;
+	GElf_Ehdr ehdr;
+	GElf_Phdr phdr;
+	size_t nph;
+	int fd, i;
+
+	if (elf_version(EV_CURRENT) == EV_NONE) {
+		warnx("ELF library too old");
+		return (NULL);
+	}
+	fd = open(filename, O_RDONLY, 0);
+	if (fd == -1) {
+		warn("open(%s)", filename);
+		return (NULL);
+	}
+	e = elf_begin(fd, ELF_C_READ, NULL);
+	if (e == NULL) {
+		warnx("elf_begin: %s", elf_errmsg(-1));
+		goto fail;
+	}
+	if (elf_kind(e) != ELF_K_ELF) {
+		warnx("%s is not an ELF object", filename);
+		goto fail;
+	}
+	if (gelf_getehdr(e, &ehdr) == NULL) {
+		warnx("gelf_getehdr: %s", elf_errmsg(-1));
+		goto fail;
+	}
+	if (ehdr.e_type != ET_CORE) {
+		warnx("%s is not a CORE file", filename);
+		goto fail;
+	}
+	if (elf_getphnum(e, &nph) == 0) {
+		warnx("program headers not found");
+		goto fail;
+	}
+	for (i = 0; i < ehdr.e_phnum; i++) {
+		if (gelf_getphdr(e, i, &phdr) != &phdr) {
+			warnx("gelf_getphdr: %s", elf_errmsg(-1));
+			goto fail;
+		}
+		if (phdr.p_type == PT_NOTE)
+			break;
+	}
+	if (i == ehdr.e_phnum) {
+		warnx("NOTE program header not found");
+		goto fail;
+	}
+	core = malloc(sizeof(struct procstat_core));
+	if (core == NULL) {
+		warn("malloc(%zu)", sizeof(struct procstat_core));
+		goto fail;
+	}
+	core->pc_magic = PROCSTAT_CORE_MAGIC;
+	core->pc_fd = fd;
+	core->pc_elf = e;
+	core->pc_ehdr = ehdr;
+	core->pc_phdr = phdr;
+
+	return (core);
+fail:
+	if (e != NULL)
+		elf_end(e);
+	close(fd);
+
+	return (NULL);
+}
+
+void
+procstat_core_close(struct procstat_core *core)
+{
+
+	assert(core->pc_magic == PROCSTAT_CORE_MAGIC);
+
+	elf_end(core->pc_elf);
+	close(core->pc_fd);
+	free(core);
+}
+
+void *
+procstat_core_get(struct procstat_core *core, enum psc_type type, void *buf,
+    size_t *lenp)
+{
+	Elf_Note nhdr;
+	off_t offset, eoffset;
+	vm_offset_t psstrings;
+	void *freebuf;
+	size_t len;
+	u_int32_t n_type;
+	int cstructsize, structsize;
+	char nbuf[8];
+
+	assert(core->pc_magic == PROCSTAT_CORE_MAGIC);
+
+	switch(type) {
+	case PSC_TYPE_PROC:
+		n_type = NT_PROCSTAT_PROC;
+		structsize = sizeof(struct kinfo_proc);
+		break;
+	case PSC_TYPE_FILES:
+		n_type = NT_PROCSTAT_FILES;
+		structsize = sizeof(struct kinfo_file);
+		break;
+	case PSC_TYPE_VMMAP:
+		n_type = NT_PROCSTAT_VMMAP;
+		structsize = sizeof(struct kinfo_vmentry);
+		break;
+	case PSC_TYPE_GROUPS:
+		n_type = NT_PROCSTAT_GROUPS;
+		structsize = sizeof(gid_t);
+		break;
+	case PSC_TYPE_UMASK:
+		n_type = NT_PROCSTAT_UMASK;
+		structsize = sizeof(u_short);
+		break;
+	case PSC_TYPE_RLIMIT:
+		n_type = NT_PROCSTAT_RLIMIT;
+		structsize = sizeof(struct rlimit) * RLIM_NLIMITS;
+		break;
+	case PSC_TYPE_OSREL:
+		n_type = NT_PROCSTAT_OSREL;
+		structsize = sizeof(int);
+		break;
+	case PSC_TYPE_PSSTRINGS:
+	case PSC_TYPE_ARGV:
+	case PSC_TYPE_ENVV:
+		n_type = NT_PROCSTAT_PSSTRINGS;
+		structsize = sizeof(vm_offset_t);
+		break;
+	case PSC_TYPE_AUXV:
+		n_type = NT_PROCSTAT_AUXV;
+		structsize = sizeof(Elf_Auxinfo);
+		break;
+	default:
+		warnx("unknown core stat type: %d", type);
+		return (NULL);
+	}
+
+	offset = core->pc_phdr.p_offset;
+	eoffset = offset + core->pc_phdr.p_filesz;
+
+	while (offset < eoffset) {
+		if (!core_offset(core, offset))
+			return (NULL);
+		if (!core_read(core, &nhdr, sizeof(nhdr)))
+			return (NULL);
+
+		offset += sizeof(nhdr) +
+		    roundup2(nhdr.n_namesz, sizeof(Elf32_Size)) +
+		    roundup2(nhdr.n_descsz, sizeof(Elf32_Size));
+
+		if (nhdr.n_namesz == 0 && nhdr.n_descsz == 0)
+			break;
+		if (nhdr.n_type != n_type)
+			continue;
+		if (nhdr.n_namesz != 8)
+			continue;
+		if (!core_read(core, nbuf, sizeof(nbuf)))
+			return (NULL);
+		if (strcmp(nbuf, "FreeBSD") != 0)
+			continue;
+		if (nhdr.n_descsz < sizeof(cstructsize)) {
+			warnx("corrupted core file");
+			return (NULL);
+		}
+		if (!core_read(core, &cstructsize, sizeof(cstructsize)))
+			return (NULL);
+		if (cstructsize != structsize) {
+			warnx("version mismatch");
+			return (NULL);
+		}
+		len = nhdr.n_descsz - sizeof(cstructsize);
+		if (len == 0)
+			return (NULL);
+		if (buf != NULL) {
+			len = MIN(len, *lenp);
+			freebuf = NULL;
+		} else {
+			freebuf = buf = malloc(len);
+			if (buf == NULL) {
+				warn("malloc(%zu)", len);
+				return (NULL);
+			}
+		}
+		if (!core_read(core, buf, len)) {
+			free(freebuf);
+			return (NULL);
+		}
+		if (type == PSC_TYPE_ARGV || type == PSC_TYPE_ENVV) {
+			if (len < sizeof(psstrings)) {
+				free(freebuf);
+				return (NULL);
+			}
+			psstrings = *(vm_offset_t *)buf;
+			if (freebuf == NULL)
+				len = *lenp;
+			else
+				buf = NULL;
+			free(freebuf);
+			buf = get_args(core, psstrings, type, buf, &len);
+		}
+		*lenp = len;
+		return (buf);
+        }
+
+	return (NULL);
+}
+
+static bool
+core_offset(struct procstat_core *core, off_t offset)
+{
+
+	assert(core->pc_magic == PROCSTAT_CORE_MAGIC);
+
+	if (lseek(core->pc_fd, offset, SEEK_SET) == -1) {
+		warn("core: lseek(%jd)", (intmax_t)offset);
+		return (false);
+	}
+	return (true);
+}
+
+static bool
+core_read(struct procstat_core *core, void *buf, size_t len)
+{
+	ssize_t n;
+
+	assert(core->pc_magic == PROCSTAT_CORE_MAGIC);
+
+	n = read(core->pc_fd, buf, len);
+	if (n == -1) {
+		warn("core: read");
+		return (false);
+	}
+	if (n < (ssize_t)len) {
+		warnx("core: short read");
+		return (false);
+	}
+	return (true);
+}
+
+static ssize_t
+core_read_mem(struct procstat_core *core, void *buf, size_t len,
+    vm_offset_t addr, bool readall)
+{
+	GElf_Phdr phdr;
+	off_t offset;
+	int i;
+
+	assert(core->pc_magic == PROCSTAT_CORE_MAGIC);
+
+	for (i = 0; i < core->pc_ehdr.e_phnum; i++) {
+		if (gelf_getphdr(core->pc_elf, i, &phdr) != &phdr) {
+			warnx("gelf_getphdr: %s", elf_errmsg(-1));
+			return (-1);
+		}
+		if (phdr.p_type != PT_LOAD)
+			continue;
+		if (addr < phdr.p_vaddr || addr > phdr.p_vaddr + phdr.p_memsz)
+			continue;
+		offset = phdr.p_offset + (addr - phdr.p_vaddr);
+		if ((phdr.p_vaddr + phdr.p_memsz) - addr < len) {
+			if (readall) {
+				warnx("format error: "
+				    "attempt to read out of segment");
+				return (-1);
+			}
+			len = (phdr.p_vaddr + phdr.p_memsz) - addr;
+		}
+		if (!core_offset(core, offset))
+			return (-1);
+		if (!core_read(core, buf, len))
+			return (-1);
+		return (len);
+	}
+	warnx("format error: address %ju not found", (uintmax_t)addr);
+	return (-1);
+}
+
+#define ARGS_CHUNK_SZ	256	/* Chunk size (bytes) for get_args operations. */
+
+static void *
+get_args(struct procstat_core *core, vm_offset_t psstrings, enum psc_type type,
+     void *args, size_t *lenp)
+{
+	struct ps_strings pss;
+	void *freeargs;
+	vm_offset_t addr;
+	char **argv, *p;
+	size_t chunksz, done, len, nchr, size;
+	ssize_t n;
+	u_int i, nstr;
+
+	assert(type == PSC_TYPE_ARGV || type == PSC_TYPE_ENVV);
+
+	if (core_read_mem(core, &pss, sizeof(pss), psstrings, true) == -1)
+		return (NULL);
+	if (type == PSC_TYPE_ARGV) {
+		addr = (vm_offset_t)pss.ps_argvstr;
+		nstr = pss.ps_nargvstr;
+	} else /* type == PSC_TYPE_ENVV */ {
+		addr = (vm_offset_t)pss.ps_envstr;
+		nstr = pss.ps_nenvstr;
+	}
+	if (addr == 0 || nstr == 0)
+		return (NULL);
+	if (nstr > ARG_MAX) {
+		warnx("format error");
+		return (NULL);
+	}
+	size = nstr * sizeof(char *);
+	argv = malloc(size);
+	if (argv == NULL) {
+		warn("malloc(%zu)", size);
+		return (NULL);
+	}
+	done = 0;
+	freeargs = NULL;
+	if (core_read_mem(core, argv, size, addr, true) == -1)
+		goto fail;
+	if (args != NULL) {
+		nchr = MIN(ARG_MAX, *lenp);
+	} else {
+		nchr = ARG_MAX;
+		freeargs = args = malloc(nchr);
+		if (args == NULL) {
+			warn("malloc(%zu)", nchr);
+			goto fail;
+		}
+	}
+	p = args;
+	for (i = 0; ; i++) {
+		if (i == nstr)
+			goto done;
+		/*
+		 * The program may have scribbled into its argv array, e.g. to
+		 * remove some arguments.  If that has happened, break out
+		 * before trying to read from NULL.
+		 */
+		if (argv[i] == NULL)
+			goto done;
+		for (addr = (vm_offset_t)argv[i]; ; addr += chunksz) {
+			chunksz = MIN(ARGS_CHUNK_SZ, nchr - 1 - done);
+			if (chunksz <= 0)
+				goto done;
+			n = core_read_mem(core, p, chunksz, addr, false);
+			if (n == -1)
+				goto fail;
+			len = strnlen(p, chunksz);
+			p += len;
+			done += len;
+			if (len != chunksz)
+				break;
+		}
+		*p++ = '\0';
+		done++;
+	}
+fail:
+	free(freeargs);
+	args = NULL;
+done:
+	*lenp = done;
+	free(argv);
+	return (args);
+}

Copied: user/attilio/jeff-numa/lib/libprocstat/core.h (from r249699, user/attilio/vmcontention/lib/libprocstat/core.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/attilio/jeff-numa/lib/libprocstat/core.h	Sat Apr 20 14:01:22 2013	(r249700, copy of r249699, user/attilio/vmcontention/lib/libprocstat/core.h)
@@ -0,0 +1,53 @@
+/*-
+ * Copyright (c) 2013 Mikolaj Golub <trociny@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304201401.r3KE1Nxu006927>