auto import from //depot/cupcake/@135843
diff --git a/Android.mk b/Android.mk
deleted file mode 100644
index 582ddc9..0000000
--- a/Android.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-ifeq ($(TARGET_ARCH),arm)
-include $(call all-subdir-makefiles)
-endif
diff --git a/MODULE_LICENSE_GPL b/MODULE_LICENSE_GPL
deleted file mode 100644
index e69de29..0000000
--- a/MODULE_LICENSE_GPL
+++ /dev/null
diff --git a/NOTICE b/NOTICE
deleted file mode 100644
index d60c31a..0000000
--- a/NOTICE
+++ /dev/null
@@ -1,340 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/config.h b/config.h
deleted file mode 100644
index c220da5..0000000
--- a/config.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* config.h.  Generated by configure.  */
-/* config.h.in.  Generated from configure.in by autoheader.  */
-
-/* whether popt prototype takes a const char ** */
-#define CONST_POPT 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `bfd' library (-lbfd). */
-#define HAVE_LIBBFD 1
-
-/* Define to 1 if you have the `iberty' library (-liberty). */
-#define HAVE_LIBIBERTY 1
-
-/* Define to 1 if you have the <libiberty.h> header file. */
-/* #undef HAVE_LIBIBERTY_H */
-
-/* Define to 1 if you have the `popt' library (-lpopt). */
-#define HAVE_LIBPOPT 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `perfmonctl' function. */
-/* #undef HAVE_PERFMONCTL */
-
-/* Define to 1 if you have the `sched_setaffinity' function. */
-/* #undef HAVE_SCHED_SETAFFINITY */
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to 1 if you have the `xcalloc' function. */
-#undef HAVE_XCALLOC
-
-/* Define to 1 if you have the `xmemdup' function. */
-#undef HAVE_XMEMDUP
-
-/* whether malloc attribute is understood */
-#define MALLOC_ATTRIBUTE_OK 1
-
-/* whether to build ABI tools */
-#define OPROF_ABI 1
-
-/* package binary directory */
-#define OP_BINDIR "/usr/local/bin/"
-
-/* package data directory */
-#define OP_DATADIR "/usr/local/share/oprofile/"
-
-/* Name of package */
-#define PACKAGE "oprofile"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME ""
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING ""
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION ""
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Synthesize special symbols when needed */
-/* #undef SYNTHESIZE_SYMBOLS */
-
-/* whether bfd.h defines bool values */
-/* #undef TRUE_FALSE_ALREADY_DEFINED */
-
-/* Version number of package */
-#define VERSION "0.9.1"
-
-/* Define to 1 if the X Window System is missing or not being used. */
-/* #undef X_DISPLAY_MISSING */
diff --git a/daemon/Android.mk b/daemon/Android.mk
deleted file mode 100644
index abee74c..0000000
--- a/daemon/Android.mk
+++ /dev/null
@@ -1,33 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
-	init.c \
-	opd_anon.c \
-	opd_cookie.c \
-	opd_events.c \
-	opd_kernel.c \
-	opd_mangling.c \
-	opd_perfmon.c \
-	opd_pipe.c \
-	opd_sfile.c \
-	opd_spu.c \
-	opd_stats.c \
-	opd_trans.c \
-	oprofiled.c
-
-LOCAL_STATIC_LIBRARIES := \
-	libpopt libutil libdb libabi libop
-
-LOCAL_C_INCLUDES := \
-	$(LOCAL_PATH)/.. \
-	$(LOCAL_PATH)/../libdb \
-	$(LOCAL_PATH)/../libutil \
-	$(LOCAL_PATH)/../libop \
-	$(LOCAL_PATH)/../libabi
-
-LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
-LOCAL_MODULE_TAGS := debug
-LOCAL_MODULE:= oprofiled
-
-include $(BUILD_EXECUTABLE)
diff --git a/daemon/init.c b/daemon/init.c
deleted file mode 100644
index be0b9da..0000000
--- a/daemon/init.c
+++ /dev/null
@@ -1,373 +0,0 @@
-/**
- * @file daemon/init.c
- * Daemon set up and main loop for 2.6
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- * @Modifications Daniel Hansel
- * Modified by Aravind Menon for Xen
- * These modifications are:
- * Copyright (C) 2005 Hewlett-Packard Co.
- */
-
-#include "config.h"
- 
-#include "oprofiled.h"
-#include "opd_stats.h"
-#include "opd_sfile.h"
-#include "opd_pipe.h"
-#include "opd_kernel.h"
-#include "opd_trans.h"
-#include "opd_anon.h"
-#include "opd_perfmon.h"
-#include "opd_printf.h"
-
-#include "op_version.h"
-#include "op_config.h"
-#include "op_deviceio.h"
-#include "op_get_time.h"
-#include "op_libiberty.h"
-#include "op_fileio.h"
-
-#include <fcntl.h>
-#include <stdio.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <sys/time.h>
-#if ANDROID
-#include <sys/wait.h>
-#else
-#include <wait.h>
-#endif
-#include <string.h>
-
-size_t kernel_pointer_size;
-
-static fd_t devfd;
-static char * sbuf;
-static size_t s_buf_bytesize;
-extern char * session_dir;
-static char start_time_str[32];
-static int jit_conversion_running;
-
-static void opd_sighup(void);
-static void opd_alarm(void);
-static void opd_sigterm(void);
-static void opd_sigchild(void);
-static void opd_do_jitdumps(void);
-
-/**
- * opd_open_files - open necessary files
- *
- * Open the device files and the log file,
- * and mmap() the hash map.
- */
-static void opd_open_files(void)
-{
-	devfd = op_open_device("/dev/oprofile/buffer");
-	if (devfd == -1) {
-		if (errno == EINVAL)
-			fprintf(stderr, "Failed to open device. Possibly you have passed incorrect\n"
-				"parameters. Check /var/log/messages.");
-		else
-			perror("Failed to open profile device");
-		exit(EXIT_FAILURE);
-	}
-
-	/* give output before re-opening stdout as the logfile */
-	printf("Using log file %s\n", op_log_file);
-
-	/* set up logfile */
-	close(0);
-	close(1);
-
-	if (open("/dev/null", O_RDONLY) == -1) {
-		perror("oprofiled: couldn't re-open stdin as /dev/null: ");
-		exit(EXIT_FAILURE);
-	}
-
-	opd_open_logfile();
-	opd_create_pipe();
-
-	printf("oprofiled started %s", op_get_time());
-	printf("kernel pointer size: %lu\n",
-		(unsigned long)kernel_pointer_size);
-	fflush(stdout);
-}
- 
-
-/** Done writing out the samples, indicate with complete_dump file */
-static void complete_dump(void)
-{
-	FILE * status_file;
-
-retry:
-	status_file = fopen(op_dump_status, "w");
-
-	if (!status_file && errno == EMFILE) {
-		if (sfile_lru_clear()) {
-			printf("LRU cleared but file open fails for %s.\n",
-			       op_dump_status);
-			abort();
-		}
-		goto retry;
-	}
-
-	if (!status_file) {
-		perror("warning: couldn't set complete_dump: ");
-		return;
-	}
-
-	fprintf(status_file, "1\n");
-	fclose(status_file);
-}
-
- 
-/**
- * opd_do_samples - process a sample buffer
- * @param opd_buf  buffer to process
- *
- * Process a buffer of samples.
- *
- * If the sample could be processed correctly, it is written
- * to the relevant sample file.
- */
-static void opd_do_samples(char const * opd_buf, ssize_t count)
-{
-	size_t num = count / kernel_pointer_size;
- 
-	opd_stats[OPD_DUMP_COUNT]++;
-
-	verbprintf(vmisc, "Read buffer of %d entries.\n", (unsigned int)num);
- 
-	opd_process_samples(opd_buf, num);
-
-	complete_dump();
-}
- 
-static void opd_do_jitdumps(void)
-{ 
-	pid_t childpid;
-	int arg_num;
-	unsigned long long end_time = 0ULL;
-	struct timeval tv;
-	char end_time_str[32];
-	char opjitconv_path[PATH_MAX + 1];
-	char * exec_args[6];
-
-	if (jit_conversion_running)
-		return;
-	jit_conversion_running = 1;
-
-	childpid = fork();
-	switch (childpid) {
-		case -1:
-			perror("Error forking JIT dump process!");
-			break;
-		case 0:
-			gettimeofday(&tv, NULL);
-			end_time = tv.tv_sec;
-			sprintf(end_time_str, "%llu", end_time);
-			sprintf(opjitconv_path, "%s/%s", OP_BINDIR, "opjitconv");
-			arg_num = 0;
-			exec_args[arg_num++] = opjitconv_path;
-			if (vmisc)
-				exec_args[arg_num++] = "-d";
-			exec_args[arg_num++] = session_dir;
-			exec_args[arg_num++] = start_time_str;
-			exec_args[arg_num++] = end_time_str;
-			exec_args[arg_num] = (char *) NULL;
-			execvp("opjitconv", exec_args);
-			fprintf(stderr, "Failed to exec %s: %s\n",
-			        exec_args[0], strerror(errno));
-			/* We don't want any cleanup in the child */
-			_exit(EXIT_FAILURE);
-		default:
-			break;
-	} 
-
-} 
-
-/**
- * opd_do_read - enter processing loop
- * @param buf  buffer to read into
- * @param size  size of buffer
- *
- * Read some of a buffer from the device and process
- * the contents.
- */
-static void opd_do_read(char * buf, size_t size)
-{
-	opd_open_pipe();
-
-	while (1) {
-		ssize_t count = -1;
-
-		/* loop to handle EINTR */
-		while (count < 0) {
-			count = op_read_device(devfd, buf, size);
-
-			/* we can lose an alarm or a hup but
-			 * we don't care.
-			 */
-			if (signal_alarm) {
-				signal_alarm = 0;
-				opd_alarm();
-			}
-
-			if (signal_hup) {
-				signal_hup = 0;
-				opd_sighup();
-			}
-
-			if (signal_term)
-				opd_sigterm();
-
-			if (signal_child)
-				opd_sigchild();
-
-			if (signal_usr1) {
-				signal_usr1 = 0;
-				perfmon_start();
-			}
-
-			if (signal_usr2) {
-				signal_usr2 = 0;
-				perfmon_stop();
-			}
-
-			if (is_jitconv_requested()) {
-				verbprintf(vmisc, "Start opjitconv was triggered\n");
-				opd_do_jitdumps();
-			}
-		}
-
-		opd_do_samples(buf, count);
-	}
-	
-	opd_close_pipe();
-}
-
-
-/** opd_alarm - sync files and report stats */
-static void opd_alarm(void)
-{
-	sfile_sync_files();
-	opd_print_stats();
-	alarm(60 * 10);
-}
- 
-
-/** re-open files for logrotate/opcontrol --reset */
-static void opd_sighup(void)
-{
-	printf("Received SIGHUP.\n");
-	/* We just close them, and re-open them lazily as usual. */
-	sfile_close_files();
-	close(1);
-	close(2);
-	opd_open_logfile();
-}
-
-
-static void clean_exit(void)
-{
-	perfmon_exit();
-	unlink(op_lock_file);
-}
-
-
-static void opd_sigterm(void)
-{
-	opd_do_jitdumps();
-	opd_print_stats();
-	printf("oprofiled stopped %s", op_get_time());
-	exit(EXIT_FAILURE);
-}
-
-/* SIGCHLD received from JIT dump child process. */
-static void opd_sigchild(void)
-{
-	int child_status;
-	wait(&child_status);
-	jit_conversion_running = 0;
-	if (WIFEXITED(child_status) && (!WEXITSTATUS(child_status))) {
-		verbprintf(vmisc, "JIT dump processing complete.\n");
-	} else {
-		printf("JIT dump processing exited abnormally: %d\n",
-		       WEXITSTATUS(child_status));
-	}
-
-}
- 
-static void opd_26_init(void)
-{
-	size_t i;
-	size_t opd_buf_size;
-	unsigned long long start_time = 0ULL;
-	struct timeval tv;
-
-	opd_create_vmlinux(vmlinux, kernel_range);
-	opd_create_xen(xenimage, xen_range);
-
-	opd_buf_size = opd_read_fs_int("/dev/oprofile/", "buffer_size", 1);
-	kernel_pointer_size = opd_read_fs_int("/dev/oprofile/", "pointer_size", 1);
-
-	s_buf_bytesize = opd_buf_size * kernel_pointer_size;
-
-	sbuf = xmalloc(s_buf_bytesize);
-
-	opd_reread_module_info();
-
-	for (i = 0; i < OPD_MAX_STATS; i++)
-		opd_stats[i] = 0;
-
-	perfmon_init();
-
-	cookie_init();
-	sfile_init();
-	anon_init();
-
-	/* must be /after/ perfmon_init() at least */
-	if (atexit(clean_exit)) {
-		perfmon_exit();
-		perror("oprofiled: couldn't set exit cleanup: ");
-		exit(EXIT_FAILURE);
-	}
-
-	/* trigger kernel module setup before returning control to opcontrol */
-	opd_open_files();
-	gettimeofday(&tv, NULL);
-	start_time = 0ULL;
-	start_time = tv.tv_sec;
-	sprintf(start_time_str, "%llu", start_time);
-		  
-}
-
-
-static void opd_26_start(void)
-{
-	/* simple sleep-then-process loop */
-	opd_do_read(sbuf, s_buf_bytesize);
-}
-
-
-static void opd_26_exit(void)
-{
-	opd_print_stats();
-	printf("oprofiled stopped %s", op_get_time());
-
-	free(sbuf);
-	free(vmlinux);
-	/* FIXME: free kernel images, sfiles etc. */
-}
-
-struct oprofiled_ops opd_26_ops = {
-	.init = opd_26_init,
-	.start = opd_26_start,
-	.exit = opd_26_exit,
-};
diff --git a/daemon/opd_anon.c b/daemon/opd_anon.c
deleted file mode 100644
index 9caea3d..0000000
--- a/daemon/opd_anon.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/**
- * @file opd_anon.c
- * Anonymous region handling.
- *
- * Our caching of maps has some problems: if we get tgid reuse,
- * and it's the same application, we might end up with wrong
- * maps. The same happens in an unmap-remap case. There's not much
- * we can do about this, we just hope it's not too common...
- *
- * What is relatively common is expanding anon maps, which leaves us
- * with lots of separate sample files.
- *
- * @remark Copyright 2005 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @Modifications Gisle Dankel
- */
-
-#include "opd_anon.h"
-#include "opd_trans.h"
-#include "opd_sfile.h"
-#include "opd_printf.h"
-#include "op_libiberty.h"
-
-#include <limits.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#define HASH_SIZE 1024
-#define HASH_BITS (HASH_SIZE - 1)
-
-/*
- * Note that this value is tempered by the fact that when we miss in the
- * anon cache, we'll tear down all the mappings for that tgid. Thus, LRU
- * of a mapping can potentially clear out a much larger number of
- * mappings.
- */
-#define LRU_SIZE 8192
-#define LRU_AMOUNT (LRU_SIZE/8)
-
-static struct list_head hashes[HASH_SIZE];
-static struct list_head lru;
-static size_t nr_lru;
-
-static void do_lru(struct transient * trans)
-{
-	size_t nr_to_kill = LRU_AMOUNT;
-	struct list_head * pos;
-	struct list_head * pos2;
-	struct anon_mapping * entry;
-
-	list_for_each_safe(pos, pos2, &lru) {
-		entry = list_entry(pos, struct anon_mapping, lru_list);
-		if (trans->anon == entry)
-			clear_trans_current(trans);
-		if (trans->last_anon == entry)
-			clear_trans_last(trans);
-		sfile_clear_anon(entry);
-		list_del(&entry->list);
-		list_del(&entry->lru_list);
-		--nr_lru;
-		free(entry);
-		if (nr_to_kill-- == 0)
-			break;
-	}
-}
-
-
-static unsigned long hash_anon(pid_t tgid, cookie_t app)
-{
-	return ((app >> DCOOKIE_SHIFT) ^ (tgid >> 2)) & (HASH_SIZE - 1);
-}
- 
-
-static void clear_anon_maps(struct transient * trans)
-{
-	unsigned long hash = hash_anon(trans->tgid, trans->app_cookie);
-	pid_t tgid = trans->tgid;
-	cookie_t app = trans->app_cookie;
-	struct list_head * pos;
-	struct list_head * pos2;
-	struct anon_mapping * entry;
-
-	clear_trans_current(trans);
-
-	list_for_each_safe(pos, pos2, &hashes[hash]) {
-		entry = list_entry(pos, struct anon_mapping, list);
-		if (entry->tgid == tgid && entry->app_cookie == app) {
-			if (trans->last_anon == entry)
-				clear_trans_last(trans);
-			sfile_clear_anon(entry);
-			list_del(&entry->list);
-			list_del(&entry->lru_list);
-			--nr_lru;
-			free(entry);
-		}
-	}
-
-	if (vmisc) {
-		char const * name = verbose_cookie(app);
-		printf("Cleared anon maps for tgid %u (%s).\n", tgid, name);
-	}
-}
-
-
-static void
-add_anon_mapping(struct transient * trans, vma_t start, vma_t end, char * name)
-{
-	unsigned long hash = hash_anon(trans->tgid, trans->app_cookie);
-	struct anon_mapping * m = xmalloc(sizeof(struct anon_mapping));
-	m->tgid = trans->tgid;
-	m->app_cookie = trans->app_cookie;
-	m->start = start;
-	m->end = end;
-	strncpy(m->name, name, MAX_IMAGE_NAME_SIZE + 1);
-	list_add_tail(&m->list, &hashes[hash]);
-	list_add_tail(&m->lru_list, &lru);
-	if (++nr_lru == LRU_SIZE)
-		do_lru(trans);
-	if (vmisc) {
-		char const * name = verbose_cookie(m->app_cookie);
-		printf("Added anon map 0x%llx-0x%llx for tgid %u (%s).\n",
-		       start, end, m->tgid, name);
-	}
-}
-
-
-/* 42000000-4212f000 r-xp 00000000 16:03 424334 /lib/tls/libc-2.3.2.so */
-static void get_anon_maps(struct transient * trans)
-{
-	FILE * fp = NULL;
-	char buf[PATH_MAX];
-	vma_t start, end;
-	int ret;
-
-	snprintf(buf, PATH_MAX, "/proc/%d/maps", trans->tgid);
-	fp = fopen(buf, "r");
-	if (!fp)
-		return;
-
-	while (fgets(buf, PATH_MAX, fp) != NULL) {
-		char tmp[MAX_IMAGE_NAME_SIZE + 1];
-		char name[MAX_IMAGE_NAME_SIZE + 1];
-		/* Some anon maps have labels like
-		 * [heap], [stack], [vdso], [vsyscall] ...
-		 * Keep track of these labels. If a map has no name, call it "anon".
-		 * Ignore all mappings starting with "/" (file or shared memory object)
-		 */
-		strcpy(name, "anon");
-		ret = sscanf(buf, "%llx-%llx %20s %20s %20s %20s %20s",
-		             &start, &end, tmp, tmp, tmp, tmp, name);
-		if (ret < 6 || name[0] == '/')
-			continue;
-
-		add_anon_mapping(trans, start, end, name);
-	}
-
-	fclose(fp);
-}
-
-
-static int
-anon_match(struct transient const * trans, struct anon_mapping const * anon)
-{
-	if (!anon)
-		return 0;
-	if (trans->tgid != anon->tgid)
-		return 0;
-	if (trans->app_cookie != anon->app_cookie)
-		return 0;
-	if (trans->pc < anon->start)
-		return 0;
-	return (trans->pc < anon->end);
-}
-
-
-struct anon_mapping * find_anon_mapping(struct transient * trans)
-{
-	unsigned long hash = hash_anon(trans->tgid, trans->app_cookie);
-	struct list_head * pos;
-	struct anon_mapping * entry;
-	int tried = 0;
-
-	if (anon_match(trans, trans->anon))
-		return (trans->anon);
-
-retry:
-	list_for_each(pos, &hashes[hash]) {
-		entry = list_entry(pos, struct anon_mapping, list);
-		if (anon_match(trans, entry))
-			goto success;
-	}
-
-	if (!tried) {
-		clear_anon_maps(trans);
-		get_anon_maps(trans);
-		tried = 1;
-		goto retry;
-	}
-
-	return NULL;
-
-success:
-	/*
-	 * Typically, there's one big mapping that matches. Let's go
-	 * faster.
-	 */
-	list_del(&entry->list);
-	list_add(&entry->list, &hashes[hash]);
-
-	verbprintf(vmisc, "Found range 0x%llx-0x%llx for tgid %u, pc %llx.\n",
-	           entry->start, entry->end, (unsigned int)entry->tgid,
-		   trans->pc);
-	return entry;
-}
-
-
-void anon_init(void)
-{
-	size_t i;
-
-	for (i = 0; i < HASH_SIZE; ++i)
-		list_init(&hashes[i]);
-
-	list_init(&lru);
-}
diff --git a/daemon/opd_anon.h b/daemon/opd_anon.h
deleted file mode 100644
index 3f66b55..0000000
--- a/daemon/opd_anon.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * @file opd_anon.h
- * Anonymous region handling.
- *
- * @remark Copyright 2005 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- */
-
-#ifndef OPD_ANON_H
-#define OPD_ANON_H
-
-#include "op_types.h"
-#include "op_list.h"
-
-#include "opd_cookie.h"
-
-#include <sys/types.h>
-
-struct transient;
-
-/**
- * Shift useful bits into play for VMA hashing.
- */
-#define VMA_SHIFT 13 
-
-/* Maximum size of the image name considered */
-#define MAX_IMAGE_NAME_SIZE 20
-
-struct anon_mapping {
-	/** start of the mapping */
-	vma_t start;
-	/** end of the mapping */
-	vma_t end;
-	/** tgid of the app */
-	pid_t tgid;
-	/** cookie of the app */
-	cookie_t app_cookie;
-	/** hash list */
-	struct list_head list;
-	/** lru list */
-	struct list_head lru_list;
-	char name[MAX_IMAGE_NAME_SIZE+1];
-};
-
-/**
- * Try to find an anonymous mapping for the given pc/tgid pair.
- */
-struct anon_mapping * find_anon_mapping(struct transient *);
-
-void anon_init(void);
-
-#endif /* OPD_ANON_H */
diff --git a/daemon/opd_cookie.c b/daemon/opd_cookie.c
deleted file mode 100644
index 3578e48..0000000
--- a/daemon/opd_cookie.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/**
- * @file opd_cookie.c
- * cookie -> name cache
- *
- * @remark Copyright 2002, 2005 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- */
-
-#include "opd_cookie.h"
-#include "oprofiled.h"
-#include "op_list.h"
-#include "op_libiberty.h"
-
-#include <sys/syscall.h>
-#include <unistd.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#ifndef __NR_lookup_dcookie
-#if defined(__i386__)
-#define __NR_lookup_dcookie 253
-#elif defined(__x86_64__)
-#define __NR_lookup_dcookie 212
-#elif defined(__powerpc__)
-#define __NR_lookup_dcookie 235
-#elif defined(__alpha__)
-#define __NR_lookup_dcookie 406
-#elif defined(__hppa__)
-#define __NR_lookup_dcookie 223
-#elif defined(__ia64__)
-#define __NR_lookup_dcookie 1237
-#elif defined(__sparc__)
-/* untested */
-#define __NR_lookup_dcookie 208
-#elif defined(__s390__) || defined (__s390x__)
-#define __NR_lookup_dcookie 110
-#elif defined(__arm__)
-#define __NR_lookup_dcookie (__NR_SYSCALL_BASE+249)
-#elif defined(__mips__)
-#include <sgidefs.h>
-/* O32 */
-#if _MIPS_SIM == _MIPS_SIM_ABI32
-#define __NR_lookup_dcookie 4247
-/* N64 */
-#elif _MIPS_SIM == _MIPS_SIM_ABI64
-#define __NR_lookup_dcookie 5206
-/* N32 */
-#elif _MIPS_SIM == _MIPS_SIM_NABI32
-#define __NR_lookup_dcookie 6206
-#else
-#error Unknown MIPS ABI: Dunno __NR_lookup_dcookie
-#endif
-#else
-#error Please define __NR_lookup_dcookie for your architecture
-#endif
-#endif /* __NR_lookup_dcookie */
-
-#if (defined(__powerpc__) && !defined(__powerpc64__)) || defined(__hppa__)\
-	|| (defined(__s390__) && !defined(__s390x__)) \
-	|| (defined(__mips__) && (_MIPS_SIM == _MIPS_SIM_ABI32) \
-	    && defined(__MIPSEB__)) \
-        || (defined(__arm__) && defined(__ARM_EABI__) \
-            && defined(__ARMEB__))
-static inline int lookup_dcookie(cookie_t cookie, char * buf, size_t size)
-{
-	return syscall(__NR_lookup_dcookie, (unsigned long)(cookie >> 32),
-		       (unsigned long)(cookie & 0xffffffff), buf, size);
-}
-#elif (defined(__mips__) && (_MIPS_SIM == _MIPS_SIM_ABI32)) \
-	|| (defined(__arm__) && defined(__ARM_EABI__))
-static inline int lookup_dcookie(cookie_t cookie, char * buf, size_t size)
-{
-	return syscall(__NR_lookup_dcookie,
-		       (unsigned long)(cookie & 0xffffffff),
-		       (unsigned long)(cookie >> 32), buf, size);
-}
-#else
-static inline int lookup_dcookie(cookie_t cookie, char * buf, size_t size)
-{
-	return syscall(__NR_lookup_dcookie, cookie, buf, size);
-}
-#endif
-
-
-struct cookie_entry {
-	cookie_t value;
-	char * name;
-	int ignored;
-	struct list_head list;
-};
-
-
-#define HASH_SIZE 512
-#define HASH_BITS (HASH_SIZE - 1)
-
-static struct list_head hashes[HASH_SIZE];
-
-static struct cookie_entry * create_cookie(cookie_t cookie)
-{
-	int err;
-	struct cookie_entry * entry = xmalloc(sizeof(struct cookie_entry));
-
-	entry->value = cookie;
-	entry->name = xmalloc(PATH_MAX + 1);
-
-	err = lookup_dcookie(cookie, entry->name, PATH_MAX);
-
-	if (err < 0) {
-		fprintf(stderr, "Lookup of cookie %llx failed, errno=%d\n",
-		       cookie, errno); 
-		free(entry->name);
-		entry->name = NULL;
-		entry->ignored = 0;
-	} else {
-		entry->ignored = is_image_ignored(entry->name);
-	}
-
-	return entry;
-}
-
-
-/* Cookie monster want cookie! */
-static unsigned long hash_cookie(cookie_t cookie)
-{
-	return (cookie >> DCOOKIE_SHIFT) & (HASH_SIZE - 1);
-}
- 
-
-char const * find_cookie(cookie_t cookie)
-{
-	unsigned long hash = hash_cookie(cookie);
-	struct list_head * pos;
-	struct cookie_entry * entry;
-
-	if (cookie == INVALID_COOKIE || cookie == NO_COOKIE)
-		return NULL;
-
-	list_for_each(pos, &hashes[hash]) {
-		entry = list_entry(pos, struct cookie_entry, list);
-		if (entry->value == cookie)
-			goto out;
-	}
-
-	/* not sure this can ever happen due to is_cookie_ignored */
-	entry = create_cookie(cookie);
-	list_add(&entry->list, &hashes[hash]);
-out:
-	return entry->name;
-}
-
-
-int is_cookie_ignored(cookie_t cookie)
-{
-	unsigned long hash = hash_cookie(cookie);
-	struct list_head * pos;
-	struct cookie_entry * entry;
-
-	if (cookie == INVALID_COOKIE || cookie == NO_COOKIE)
-		return 1;
-
-	list_for_each(pos, &hashes[hash]) {
-		entry = list_entry(pos, struct cookie_entry, list);
-		if (entry->value == cookie)
-			goto out;
-	}
-
-	entry = create_cookie(cookie);
-	list_add(&entry->list, &hashes[hash]);
-out:
-	return entry->ignored;
-}
-
-
-char const * verbose_cookie(cookie_t cookie)
-{
-	unsigned long hash = hash_cookie(cookie);
-	struct list_head * pos;
-	struct cookie_entry * entry;
-
-	if (cookie == INVALID_COOKIE)
-		return "invalid";
-
-	if (cookie == NO_COOKIE)
-		return "anonymous";
-
-	list_for_each(pos, &hashes[hash]) {
-		entry = list_entry(pos, struct cookie_entry, list);
-		if (entry->value == cookie) {
-			if (!entry->name)
-				return "failed lookup";
-			return entry->name;
-		}
-	}
-
-	return "not hashed";
-}
-
-
-void cookie_init(void)
-{
-	size_t i;
-
-	for (i = 0; i < HASH_SIZE; ++i)
-		list_init(&hashes[i]);
-}
diff --git a/daemon/opd_cookie.h b/daemon/opd_cookie.h
deleted file mode 100644
index a9f13b1..0000000
--- a/daemon/opd_cookie.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * @file opd_cookie.h
- * cookie -> name cache
- *
- * @remark Copyright 2002, 2005 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- */
-
-#ifndef OPD_COOKIE_H
-#define OPD_COOKIE_H
-
-typedef unsigned long long cookie_t;
-
-#define INVALID_COOKIE ~0LLU
-#define NO_COOKIE 0LLU
-
-/**
- * Shift value to remove trailing zero on a dcookie value, 7 is sufficient
- * for most architecture
- */
-#define DCOOKIE_SHIFT 7
-
-/**
- * Return the name of the given dcookie. May return
- * NULL on failure.
- */
-char const * find_cookie(cookie_t cookie);
-
-/** return true if this cookie should be ignored */
-int is_cookie_ignored(cookie_t cookie);
-
-/** give a textual description of the cookie */
-char const * verbose_cookie(cookie_t cookie);
-
-void cookie_init(void);
-
-#endif /* OPD_COOKIE_H */
diff --git a/daemon/opd_events.c b/daemon/opd_events.c
deleted file mode 100644
index 81a87d2..0000000
--- a/daemon/opd_events.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/**
- * @file daemon/opd_events.c
- * Event details for each counter
- *
- * @remark Copyright 2002, 2003 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include "config.h"
- 
-#include "opd_events.h"
-#include "opd_printf.h"
-#include "oprofiled.h"
-
-#include "op_string.h"
-#include "op_config.h"
-#include "op_cpufreq.h"
-#include "op_cpu_type.h"
-#include "op_libiberty.h"
-#include "op_hw_config.h"
-#include "op_sample_file.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-
-extern op_cpu cpu_type;
-
-struct opd_event opd_events[OP_MAX_COUNTERS];
-
-static double cpu_speed;
-
-static void malformed_events(void)
-{
-	fprintf(stderr, "oprofiled: malformed events passed "
-	        "on the command line\n");
-	exit(EXIT_FAILURE);
-}
-
-
-static char * copy_token(char ** c, char delim)
-{
-	char * tmp = *c;
-	char * tmp2 = *c;
-	char * str;
-
-	if (!**c)
-		return NULL;
-
-	while (*tmp2 && *tmp2 != delim)
-		++tmp2;
-
-	if (tmp2 == tmp)
-		return NULL;
-
-	str = op_xstrndup(tmp, tmp2 - tmp);
-	*c = tmp2;
-	if (**c)
-		++*c;
-	return str;
-}
-
-
-static unsigned long copy_ulong(char ** c, char delim)
-{
-	unsigned long val = 0;
-	char * str = copy_token(c, delim);
-	if (!str)
-		malformed_events();
-	val = strtoul(str, NULL, 0);
-	free(str);
-	return val;
-}
-
-
-void opd_parse_events(char const * events)
-{
-	char * ev = xstrdup(events);
-	char * c;
-	size_t cur = 0;
-
-	if (cpu_type == CPU_TIMER_INT) {
-		struct opd_event * event = &opd_events[0];
-		event->name = xstrdup("TIMER");
-		event->value = event->counter
-			= event->count = event->um = 0;
-		event->kernel = 1;
-		event->user = 1;
-		return;
-	}
-
-	if (!ev || !strlen(ev)) {
-		fprintf(stderr, "oprofiled: no events passed.\n");
-		exit(EXIT_FAILURE);
-	}
-
-	verbprintf(vmisc, "Events: %s\n", ev);
-
-	c = ev;
-
-	while (*c && cur < op_nr_counters) {
-		struct opd_event * event = &opd_events[cur];
-
-		if (!(event->name = copy_token(&c, ':')))
-			malformed_events();
-		event->value = copy_ulong(&c, ':');
-		event->counter = copy_ulong(&c, ':');
-		event->count = copy_ulong(&c, ':');
-		event->um = copy_ulong(&c, ':');
-		event->kernel = copy_ulong(&c, ':');
-		event->user = copy_ulong(&c, ',');
-		++cur;
-	}
-
-	if (*c) {
-		fprintf(stderr, "oprofiled: too many events passed.\n");
-		exit(EXIT_FAILURE);
-	}
-
-	free(ev);
-
-	cpu_speed = op_cpu_frequency();
-}
-
-
-struct opd_event * find_counter_event(unsigned long counter)
-{
-	size_t i;
-
-	for (i = 0; i < op_nr_counters && opd_events[i].name; ++i) {
-		if (counter == opd_events[i].counter)
-			return &opd_events[i];
-	}
-
-	fprintf(stderr, "Unknown event for counter %lu\n", counter);
-	abort();
-	return NULL;
-}
-
-
-void fill_header(struct opd_header * header, unsigned long counter,
-                 vma_t anon_start, vma_t cg_to_anon_start,
-                 int is_kernel, int cg_to_is_kernel,
-                 int spu_samples, uint64_t embed_offset, time_t mtime)
-{
-	struct opd_event * event = find_counter_event(counter);
-
-	memset(header, '\0', sizeof(struct opd_header));
-	header->version = OPD_VERSION;
-	memcpy(header->magic, OPD_MAGIC, sizeof(header->magic));
-	header->cpu_type = cpu_type;
-	header->ctr_event = event->value;
-	header->ctr_count = event->count;
-	header->ctr_um = event->um;
-	header->is_kernel = is_kernel;
-	header->cg_to_is_kernel = cg_to_is_kernel;
-	header->cpu_speed = cpu_speed;
-	header->mtime = mtime;
-	header->anon_start = anon_start;
-	header->spu_profile = spu_samples;
-	header->embedded_offset = embed_offset;
-	header->cg_to_anon_start = cg_to_anon_start;
-}
diff --git a/daemon/opd_events.h b/daemon/opd_events.h
deleted file mode 100644
index 3bd0106..0000000
--- a/daemon/opd_events.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * @file daemon/opd_events.h
- * Event details for each counter
- *
- * @remark Copyright 2002, 2003 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OPD_EVENTS_H
-
-#include "op_types.h"
-
-#include <stdint.h>
-#include <time.h>
-
-/** event description for setup (perfmon) and mangling */
-struct opd_event {
-	char * name;
-	unsigned long value;
-	unsigned long counter;
-	unsigned long count;
-	unsigned long um;
-	unsigned long kernel;
-	unsigned long user;
-};
-
-/* needed for opd_perfmon.c */
-extern struct opd_event opd_events[];
-
-/** parse the events into the opd_events array */
-void opd_parse_events(char const * events);
-
-/** Find the event for the given counter */
-struct opd_event * find_counter_event(unsigned long counter);
-
-struct opd_header;
-
-/** fill the sample file header with event info etc. */
-void fill_header(struct opd_header * header, unsigned long counter,
-                 vma_t anon_start, vma_t anon_end,
-                 int is_kernel, int cg_to_is_kernel,
-                 int spu_samples, uint64_t embed_offset, time_t mtime);
-
-#endif /* OPD_EVENTS_H */
diff --git a/daemon/opd_interface.h b/daemon/opd_interface.h
deleted file mode 100644
index c876830..0000000
--- a/daemon/opd_interface.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * @file opd_interface.h
- *
- * Module / user space interface for 2.6 kernels and above
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- * Modified by Aravind Menon for Xen
- * These modifications are:
- * Copyright (C) 2005 Hewlett-Packard Co.
- */
-
-#ifndef OPD_INTERFACE_H
-#define OPD_INTERFACE_H
-
-#define CTX_SWITCH_CODE			1
-#define CPU_SWITCH_CODE			2
-#define COOKIE_SWITCH_CODE		3
-#define KERNEL_ENTER_SWITCH_CODE	4
-#define USER_ENTER_SWITCH_CODE		5
-#define MODULE_LOADED_CODE		6
-#define CTX_TGID_CODE			7
-#define TRACE_BEGIN_CODE		8
-/* Code 9 used to be TRACE_END_CODE which is not used anymore  */
-/* Code 9 is now considered an unknown escape code             */
-#define XEN_ENTER_SWITCH_CODE		10
-/*
- * Ugly work-around for the unfortunate collision between Xenoprof's
- * DOMAIN_SWITCH_CODE (in use on x86) and Cell's SPU_PROFILING_CODE
- * (in use with Power):
- */
-#if defined(__powerpc__)
-#define SPU_PROFILING_CODE		11
-#define SPU_CTX_SWITCH_CODE		12
-#define DOMAIN_SWITCH_CODE		13
-#define LAST_CODE			14
-#else
-#define DOMAIN_SWITCH_CODE		11
-#define LAST_CODE			12
-#endif
- 
-#endif /* OPD_INTERFACE_H */
diff --git a/daemon/opd_kernel.c b/daemon/opd_kernel.c
deleted file mode 100644
index 5ebc210..0000000
--- a/daemon/opd_kernel.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/**
- * @file daemon/opd_kernel.c
- * Dealing with the kernel and kernel module samples
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- * Modified by Aravind Menon for Xen
- * These modifications are:
- * Copyright (C) 2005 Hewlett-Packard Co.
- */
-
-#include "opd_kernel.h"
-#include "opd_sfile.h"
-#include "opd_trans.h"
-#include "opd_printf.h"
-#include "opd_stats.h"
-#include "oprofiled.h"
-
-#include "op_fileio.h"
-#include "op_config.h"
-#include "op_libiberty.h"
-
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <assert.h>
-
-static LIST_HEAD(modules);
-
-static struct kernel_image vmlinux_image;
-
-static struct kernel_image xen_image;
-
-void opd_create_vmlinux(char const * name, char const * arg)
-{
-	/* vmlinux is *not* on the list of modules */
-	list_init(&vmlinux_image.list);
-
-	/* for no vmlinux */
-	if (no_vmlinux) {
-		vmlinux_image.name = "no-vmlinux";
-		return;
-	}
-	
-	vmlinux_image.name = xstrdup(name);
-
-	sscanf(arg, "%llx,%llx", &vmlinux_image.start, &vmlinux_image.end);
-
-	verbprintf(vmisc, "kernel_start = %llx, kernel_end = %llx\n",
-	           vmlinux_image.start, vmlinux_image.end);
-
-	if (!vmlinux_image.start && !vmlinux_image.end) {
-		fprintf(stderr, "error: mis-parsed kernel range: %llx-%llx\n",
-		        vmlinux_image.start, vmlinux_image.end);
-		exit(EXIT_FAILURE);
-	}
-}
-
-void opd_create_xen(char const * name, char const * arg)
-{
-	/* xen is *not* on the list of modules */
-	list_init(&xen_image.list);
-
-	/* for no xen */
-	if (no_xen) {
-		xen_image.name = "no-xen";
-		return;
-	}
-
-	xen_image.name = xstrdup(name);
-
-	sscanf(arg, "%llx,%llx", &xen_image.start, &xen_image.end);
-
-	verbprintf(vmisc, "xen_start = %llx, xen_end = %llx\n",
-	           xen_image.start, xen_image.end);
-
-	if (!xen_image.start && !xen_image.end) {
-		fprintf(stderr, "error: mis-parsed xen range: %llx-%llx\n",
-		        xen_image.start, xen_image.end);
-		exit(EXIT_FAILURE);
-	}
-}
-
-
-/**
- * Allocate and initialise a kernel image description
- * @param name image name
- * @param start start address
- * @param end end address
- */
-static struct kernel_image *
-opd_create_module(char const * name, vma_t start, vma_t end)
-{
-	struct kernel_image * image = xmalloc(sizeof(struct kernel_image));
-
-	image->name = xstrdup(name);
-	image->start = start;
-	image->end = end;
-	list_add(&image->list, &modules);
-
-	return image;
-}
-
-
-/**
- * Clear and free all kernel image information and reset
- * values.
- */
-static void opd_clear_modules(void)
-{
-	struct list_head * pos;
-	struct list_head * pos2;
-	struct kernel_image * image;
-
-	list_for_each_safe(pos, pos2, &modules) {
-		image = list_entry(pos, struct kernel_image, list);
-		if (image->name)
-			free(image->name);
-		free(image);
-	}
-
-	list_init(&modules);
-
-	/* clear out lingering references */
-	sfile_clear_kernel();
-}
-
-
-/*
- * each line is in the format:
- *
- * module_name 16480 1 dependencies Live 0xe091e000
- *
- * without any blank space in each field
- */
-void opd_reread_module_info(void)
-{
-	FILE * fp;
-	char * line;
-	struct kernel_image * image;
-	int module_size;
-	char ref_count[32+1];
-	int ret;
-	char module_name[256+1];
-	char live_info[32+1];
-	char dependencies[4096+1];
-	unsigned long long start_address;
-
-	if (no_vmlinux)
-		return;
-
-	opd_clear_modules();
-
-	printf("Reading module info.\n");
-
-	fp = op_try_open_file("/proc/modules", "r");
-
-	if (!fp) {
-		printf("oprofiled: /proc/modules not readable, "
-			"can't process module samples.\n");
-		return;
-	}
-
-	while (1) {
-		line = op_get_line(fp);
-
-		if (!line)
-			break;
-
-		if (line[0] == '\0') {
-			free(line);
-			continue;
-		}
-
-		ret = sscanf(line, "%256s %u %32s %4096s %32s %llx",
-			     module_name, &module_size, ref_count,
-			     dependencies, live_info, &start_address);
-		if (ret != 6) {
-			printf("bad /proc/modules entry: %s\n", line);
-			free(line);
-			continue;
-		}
-
-		image = opd_create_module(module_name, start_address,
-		                          start_address + module_size);
-
-		verbprintf(vmodule, "module %s start %llx end %llx\n",
-			   image->name, image->start, image->end);
-
-		free(line);
-	}
-
-	op_close_file(fp);
-}
-
-
-/**
- * find a kernel image by PC value
- * @param trans holds PC value to look up
- *
- * find the kernel image which contains this PC.
- *
- * Return %NULL if not found.
- */
-struct kernel_image * find_kernel_image(struct transient const * trans)
-{
-	struct list_head * pos;
-	struct kernel_image * image = &vmlinux_image;
-
-	if (no_vmlinux)
-		return image;
-
-	if (image->start <= trans->pc && image->end > trans->pc)
-		return image;
-
-	list_for_each(pos, &modules) {
-		image = list_entry(pos, struct kernel_image, list);
-		if (image->start <= trans->pc && image->end > trans->pc)
-			return image;
-	}
-
-	if (xen_image.start <= trans->pc && xen_image.end > trans->pc)
-		return &xen_image;
-
-	return NULL;
-}
diff --git a/daemon/opd_kernel.h b/daemon/opd_kernel.h
deleted file mode 100644
index cb71a30..0000000
--- a/daemon/opd_kernel.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * @file daemon/opd_kernel.h
- * Dealing with the kernel and kernel module images
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- * Modified by Aravind Menon for Xen
- * These modifications are:
- * Copyright (C) 2005 Hewlett-Packard Co.
- */
-
-#ifndef OPD_KERNEL_H
-#define OPD_KERNEL_H
-
-#include "op_types.h"
-#include "op_list.h"
-
-struct transient;
-
-/** create the kernel image */
-void opd_create_vmlinux(char const * name, char const * arg);
-
-void opd_create_xen(char const * name, char const * arg);
-
-/** opd_reread_module_info - parse /proc/modules for kernel modules */
-void opd_reread_module_info(void);
-
-/** Describes a kernel module or vmlinux itself */
-struct kernel_image {
-	char * name;
-	vma_t start;
-	vma_t end;
-	struct list_head list;
-};
-
-/** Find a kernel_image based upon the given parameters in trans. */
-struct kernel_image *
-find_kernel_image(struct transient const * trans);
-
-#endif /* OPD_KERNEL_H */
diff --git a/daemon/opd_mangling.c b/daemon/opd_mangling.c
deleted file mode 100644
index 08a6079..0000000
--- a/daemon/opd_mangling.c
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- * @file daemon/opd_mangling.c
- * Mangling and opening of sample files
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include <sys/types.h>
- 
-#include "opd_mangling.h"
-#include "opd_kernel.h"
-#include "opd_cookie.h"
-#include "opd_sfile.h"
-#include "opd_anon.h"
-#include "opd_printf.h"
-#include "opd_events.h"
-#include "oprofiled.h"
-
-#include "op_file.h"
-#include "op_sample_file.h"
-#include "op_config.h"
-#include "op_mangle.h"
-#include "op_events.h"
-#include "op_libiberty.h"
-
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-
-static char const * get_dep_name(struct sfile const * sf)
-{
-	if (sf->anon)
-		return find_cookie(sf->app_cookie);
-
-	/* avoid to call find_cookie(), caller can recover using image_name */
-	if (sf->cookie == sf->app_cookie)
-		return NULL;
-
-	if (!separate_kernel && !(separate_lib && !sf->kernel))
-		return NULL;
-
-	/* this will fail if e.g. kernel thread */
-	if (sf->app_cookie == 0)
-		return NULL;
-
-	return find_cookie(sf->app_cookie);
-}
-
-
-static char * mangle_anon(struct anon_mapping const * anon)
-{
-	char * name = xmalloc(PATH_MAX);
-
-	snprintf(name, 1024, "%u.0x%llx.0x%llx", (unsigned int)anon->tgid,
-	       anon->start, anon->end);
-
-	return name;
-}
-
-
-static char *
-mangle_filename(struct sfile * last, struct sfile const * sf, int counter, int cg)
-{
-	char * mangled;
-	struct mangle_values values;
-	struct opd_event * event = find_counter_event(counter);
-
-	values.flags = 0;
-
-	if (sf->kernel) {
-		values.image_name = sf->kernel->name;
-		values.flags |= MANGLE_KERNEL;
-	} else if (sf->anon) {
-		values.flags |= MANGLE_ANON;
-		values.image_name = mangle_anon(sf->anon);
-		values.anon_name = sf->anon->name;
-	} else {
-		values.image_name = find_cookie(sf->cookie);
-	}
-
-	values.dep_name = get_dep_name(sf);
-	if (!values.dep_name)
-		values.dep_name = values.image_name;
- 
-	/* FIXME: log */
-	if (!values.image_name || !values.dep_name)
-		return NULL;
-
-	if (separate_thread) {
-		values.flags |= MANGLE_TGID | MANGLE_TID;
-		values.tid = sf->tid;
-		values.tgid = sf->tgid;
-	}
- 
-	if (separate_cpu) {
-		values.flags |= MANGLE_CPU;
-		values.cpu = sf->cpu;
-	}
-
-	if (cg) {
-		values.flags |= MANGLE_CALLGRAPH;
-		if (last->kernel) {
-			values.cg_image_name = last->kernel->name;
-		} else if (last->anon) {
-			values.flags |= MANGLE_CG_ANON;
-			values.cg_image_name = mangle_anon(last->anon);
-			values.anon_name = last->anon->name;
-		} else {
-			values.cg_image_name = find_cookie(last->cookie);
-		}
-
-		/* FIXME: log */
-		if (!values.cg_image_name) {
-			if (values.flags & MANGLE_ANON)
-				free((char *)values.image_name);
-			return NULL;
-		}
-	}
-
-	values.event_name = event->name;
-	values.count = event->count;
-	values.unit_mask = event->um;
-
-	mangled = op_mangle_filename(&values);
-
-	if (values.flags & MANGLE_ANON)
-		free((char *)values.image_name);
-	if (values.flags & MANGLE_CG_ANON)
-		free((char *)values.cg_image_name);
-	return mangled;
-}
-
-
-int opd_open_sample_file(odb_t * file, struct sfile * last,
-                         struct sfile * sf, int counter, int cg)
-{
-	char * mangled;
-	char const * binary;
-	int spu_profile = 0;
-	vma_t last_start = 0;
-	int err;
-
-	mangled = mangle_filename(last, sf, counter, cg);
-
-	if (!mangled)
-		return EINVAL;
-
-	verbprintf(vsfile, "Opening \"%s\"\n", mangled);
-
-	create_path(mangled);
-
-	/* locking sf will lock associated cg files too */
-	sfile_get(sf);
-	if (sf != last)
-		sfile_get(last);
-
-retry:
-	err = odb_open(file, mangled, ODB_RDWR, sizeof(struct opd_header));
-
-	/* This can naturally happen when racing against opcontrol --reset. */
-	if (err) {
-		if (err == EMFILE) {
-			if (sfile_lru_clear()) {
-				printf("LRU cleared but odb_open() fails for %s.\n", mangled);
-				abort();
-			}
-			goto retry;
-		}
-
-		fprintf(stderr, "oprofiled: open of %s failed: %s\n",
-		        mangled, strerror(err));
-		goto out;
-	}
-
-	if (!sf->kernel)
-		binary = find_cookie(sf->cookie);
-	else
-		binary = sf->kernel->name;
-
-	if (last && last->anon)
-		last_start = last->anon->start;
-
-	if (sf->embedded_offset != UNUSED_EMBEDDED_OFFSET)
-		spu_profile = 1;
-
-	fill_header(odb_get_data(file), counter,
-		    sf->anon ? sf->anon->start : 0, last_start,
-		    !!sf->kernel, last ? !!last->kernel : 0,
-		    spu_profile, sf->embedded_offset,
-		    binary ? op_get_mtime(binary) : 0);
-
-out:
-	sfile_put(sf);
-	if (sf != last)
-		sfile_put(last);
-	free(mangled);
-	return err;
-}
diff --git a/daemon/opd_mangling.h b/daemon/opd_mangling.h
deleted file mode 100644
index 0e46ec4..0000000
--- a/daemon/opd_mangling.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * @file daemon/opd_mangling.h
- * Mangling and opening of sample files
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OPD_MANGLING_H
-#define OPD_MANGLING_H
-
-#include "odb.h"
-
-struct sfile;
-
-/*
- * opd_open_sample_file - open a sample file
- * @param sf  sfile to open sample file for
- * @param counter  counter number
- * @param cg if this is a callgraph file
- *
- * Open image sample file for the sfile, counter
- * counter and set up memory mappings for it.
- *
- * Returns 0 on success.
- */
-int opd_open_sample_file(odb_t * file, struct sfile * last,
-                         struct sfile * sf, int counter, int cg);
-
-#endif /* OPD_MANGLING_H */
diff --git a/daemon/opd_perfmon.c b/daemon/opd_perfmon.c
deleted file mode 100644
index a1b158a..0000000
--- a/daemon/opd_perfmon.c
+++ /dev/null
@@ -1,496 +0,0 @@
-/**
- * @file opd_perfmon.c
- * perfmonctl() handling
- *
- * @remark Copyright 2003 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- */
-
-#ifdef __ia64__
-
-/* need this for sched_setaffinity() in <sched.h> */
-#define _GNU_SOURCE
-
-#include "oprofiled.h"
-#include "opd_perfmon.h"
-#include "opd_events.h"
-
-#include "op_cpu_type.h"
-#include "op_libiberty.h"
-#include "op_hw_config.h"
-
-#include <sys/syscall.h>
-#include <sys/wait.h>
-#include <unistd.h>
-#include <limits.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#ifdef HAVE_SCHED_SETAFFINITY
-#include <sched.h>
-#endif
-
-extern op_cpu cpu_type;
-
-#ifndef HAVE_SCHED_SETAFFINITY
-
-/* many glibc's are not yet up to date */
-#ifndef __NR_sched_setaffinity
-#define __NR_sched_setaffinity 1231
-#endif
-
-/* Copied from glibc's <sched.h> and <bits/sched.h> and munged */
-#define CPU_SETSIZE	1024
-#define __NCPUBITS	(8 * sizeof (unsigned long))
-typedef struct
-{
-	unsigned long __bits[CPU_SETSIZE / __NCPUBITS];
-} cpu_set_t;
-
-#define CPU_SET(cpu, cpusetp) \
-	((cpusetp)->__bits[(cpu)/__NCPUBITS] |= (1UL << ((cpu) % __NCPUBITS)))
-#define CPU_ZERO(cpusetp) \
-	memset((cpusetp), 0, sizeof(cpu_set_t))
-
-static int
-sched_setaffinity(pid_t pid, size_t len, cpu_set_t const * cpusetp)
-{
-	return syscall(__NR_sched_setaffinity, pid, len, cpusetp);
-}
-#endif
-
-
-#ifndef HAVE_PERFMONCTL
-#ifndef __NR_perfmonctl
-#define __NR_perfmonctl 1175
-#endif
-
-static int perfmonctl(int fd, int cmd, void * arg, int narg)
-{
-	return syscall(__NR_perfmonctl, fd, cmd, arg, narg);
-}
-#endif
-
-
-static unsigned char uuid[16] = {
-	0x77, 0x7a, 0x6e, 0x61, 0x20, 0x65, 0x73, 0x69,
-	0x74, 0x6e, 0x72, 0x20, 0x61, 0x65, 0x0a, 0x6c
-};
-
-
-static size_t nr_cpus;
-
-struct child {
-	pid_t pid;
-	int up_pipe[2];
-	int ctx_fd;
-	sig_atomic_t sigusr1;
-	sig_atomic_t sigusr2;
-	sig_atomic_t sigterm;
-};
-
-static struct child * children;
-
-static void perfmon_start_child(int ctx_fd)
-{
-	if (perfmonctl(ctx_fd, PFM_START, 0, 0) == -1) {
-		perror("Couldn't start perfmon: ");
-		exit(EXIT_FAILURE);
-	}
-}
-
-
-static void perfmon_stop_child(int ctx_fd)
-{
-	if (perfmonctl(ctx_fd, PFM_STOP, 0, 0) == -1) {
-		perror("Couldn't stop perfmon: ");
-		exit(EXIT_FAILURE);
-	}
-}
-
-
-static void child_sigusr1(int val __attribute__((unused)))
-{
-	size_t i;
-
-	for (i = 0; i < nr_cpus; ++i) {
-		if (children[i].pid == getpid()) {
-			children[i].sigusr1 = 1;
-			return;
-		}
-	}
-}
-
-
-static void child_sigusr2(int val __attribute__((unused)))
-{
-	size_t i;
-
-	for (i = 0; i < nr_cpus; ++i) {
-		if (children[i].pid == getpid()) {
-			children[i].sigusr2 = 1;
-			return;
-		}
-	}
-}
-
-
-static void child_sigterm(int val __attribute__((unused)))
-{
-	printf("Child received SIGTERM, killing parent.\n");
-	kill(getppid(), SIGTERM);
-}
-
-
-static void set_affinity(size_t cpu)
-{
-	cpu_set_t set;
-
-	CPU_ZERO(&set);
-	CPU_SET(cpu, &set);
-
-	int err = sched_setaffinity(getpid(), sizeof(set), &set);
-
-	if (err == -1) {
-		fprintf(stderr, "Failed to set affinity: %s\n",
-			    strerror(errno));
-		exit(EXIT_FAILURE);
-	}
-}
-
-
-static void setup_signals(void)
-{
-	struct sigaction act;
-	sigset_t mask;
-
-	sigemptyset(&mask);
-	sigaddset(&mask, SIGUSR1);
-	sigaddset(&mask, SIGUSR2);
-	sigprocmask(SIG_BLOCK, &mask, NULL);
-
-	act.sa_handler = child_sigusr1;
-	act.sa_flags = 0;
-	sigemptyset(&act.sa_mask);
-
-	if (sigaction(SIGUSR1, &act, NULL)) {
-		perror("oprofiled: install of SIGUSR1 handler failed: ");
-		exit(EXIT_FAILURE);
-	}
-
-	act.sa_handler = child_sigusr2;
-	act.sa_flags = 0;
-	sigemptyset(&act.sa_mask);
-
-	if (sigaction(SIGUSR2, &act, NULL)) {
-		perror("oprofiled: install of SIGUSR2 handler failed: ");
-		exit(EXIT_FAILURE);
-	}
-
-	act.sa_handler = child_sigterm;
-	act.sa_flags = 0;
-	sigemptyset(&act.sa_mask);
-
-	if (sigaction(SIGTERM, &act, NULL)) {
-		perror("oprofiled: install of SIGTERM handler failed: ");
-		exit(EXIT_FAILURE);
-	}
-}
-
-
-/** create the per-cpu context */
-static void create_context(struct child * self)
-{
-	pfarg_context_t ctx;
-	int err;
-
-	memset(&ctx, 0, sizeof(pfarg_context_t));
-	memcpy(&ctx.ctx_smpl_buf_id, &uuid, 16);
-	ctx.ctx_flags = PFM_FL_SYSTEM_WIDE;
-
-	err = perfmonctl(0, PFM_CREATE_CONTEXT, &ctx, 1);
-	if (err == -1) {
-		fprintf(stderr, "CREATE_CONTEXT failed: %s\n",
-		        strerror(errno));
-		exit(EXIT_FAILURE);
-	}
-
-	self->ctx_fd = ctx.ctx_fd;
-}
-
-
-/** program the perfmon counters */
-static void write_pmu(struct child * self)
-{
-	pfarg_reg_t pc[OP_MAX_COUNTERS];
-	pfarg_reg_t pd[OP_MAX_COUNTERS];
-	int err;
-	size_t i;
-
-	memset(pc, 0, sizeof(pc));
-	memset(pd, 0, sizeof(pd));
-
-#define PMC_GEN_INTERRUPT (1UL << 5)
-#define PMC_PRIV_MONITOR (1UL << 6)
-/* McKinley requires pmc4 to have bit 23 set (enable PMU).
- * It is supposedly ignored in other pmc registers.
- */
-#define PMC_MANDATORY (1UL << 23)
-#define PMC_USER (1UL << 3)
-#define PMC_KERNEL (1UL << 0)
-	for (i = 0; i < op_nr_counters && opd_events[i].name; ++i) {
-		struct opd_event * event = &opd_events[i];
-		pc[i].reg_num = event->counter + 4;
-		pc[i].reg_value = PMC_GEN_INTERRUPT;
-		pc[i].reg_value |= PMC_PRIV_MONITOR;
-		pc[i].reg_value |= PMC_MANDATORY;
-		(event->user) ? (pc[i].reg_value |= PMC_USER)
-		              : (pc[i].reg_value &= ~PMC_USER);
-		(event->kernel) ? (pc[i].reg_value |= PMC_KERNEL)
-		                : (pc[i].reg_value &= ~PMC_KERNEL);
-		pc[i].reg_value &= ~(0xff << 8);
-		pc[i].reg_value |= ((event->value & 0xff) << 8);
-		pc[i].reg_value &= ~(0xf << 16);
-		pc[i].reg_value |= ((event->um & 0xf) << 16);
-		pc[i].reg_smpl_eventid = event->counter;
-	}
-
-	for (i = 0; i < op_nr_counters && opd_events[i].name; ++i) {
-		struct opd_event * event = &opd_events[i];
-		pd[i].reg_value = ~0UL - event->count + 1;
-		pd[i].reg_short_reset = ~0UL - event->count + 1;
-		pd[i].reg_num = event->counter + 4;
-	}
-
-	err = perfmonctl(self->ctx_fd, PFM_WRITE_PMCS, pc, i);
-	if (err == -1) {
-		perror("Couldn't write PMCs: ");
-		exit(EXIT_FAILURE);
-	}
-
-	err = perfmonctl(self->ctx_fd, PFM_WRITE_PMDS, pd, i);
-	if (err == -1) {
-		perror("Couldn't write PMDs: ");
-		exit(EXIT_FAILURE);
-	}
-}
-
-
-static void load_context(struct child * self)
-{
-	pfarg_load_t load_args;
-	int err;
-
-	memset(&load_args, 0, sizeof(load_args));
-	load_args.load_pid = self->pid;
-
-	err = perfmonctl(self->ctx_fd, PFM_LOAD_CONTEXT, &load_args, 1);
-	if (err == -1) {
-		perror("Couldn't load context: ");
-		exit(EXIT_FAILURE);
-	}
-}
-
-
-static void notify_parent(struct child * self, size_t cpu)
-{
-	for (;;) {
-		ssize_t ret;
-		ret = write(self->up_pipe[1], &cpu, sizeof(size_t));
-		if (ret == sizeof(size_t))
-			break;
-		if (ret < 0 && errno != EINTR) {
-			fprintf(stderr, "Failed to write child pipe with %s\n",
-			        strerror(errno));
-			exit(EXIT_FAILURE);
-		}
-	}
-}
-
-
-static void run_child(size_t cpu)
-{
-	struct child * self = &children[cpu];
-
-	self->pid = getpid();
-	self->sigusr1 = 0;
-	self->sigusr2 = 0;
-	self->sigterm = 0;
-
-	setup_signals();
-
-	set_affinity(cpu);
-
-	create_context(self);
-
-	write_pmu(self);
-
-	load_context(self);
-
-	notify_parent(self, cpu);
-
-	for (;;) {
-		sigset_t sigmask;
-		sigfillset(&sigmask);
-		sigdelset(&sigmask, SIGUSR1);
-		sigdelset(&sigmask, SIGUSR2);
-		sigdelset(&sigmask, SIGTERM);
-
-		if (self->sigusr1) {
-			printf("PFM_START on CPU%d\n", (int)cpu);
-			fflush(stdout);
-			perfmon_start_child(self->ctx_fd);
-			self->sigusr1 = 0;
-		}
-
-		if (self->sigusr2) {
-			printf("PFM_STOP on CPU%d\n", (int)cpu);
-			fflush(stdout);
-			perfmon_stop_child(self->ctx_fd);
-			self->sigusr2 = 0;
-		}
-
-		sigsuspend(&sigmask);
-	}
-}
-
-
-static void wait_for_child(struct child * child)
-{
-	size_t tmp;
-	for (;;) {
-		ssize_t ret;
-		ret = read(child->up_pipe[0], &tmp, sizeof(size_t));
-		if (ret == sizeof(size_t))
-			break;
-		if (ret < 0 && errno != EINTR) {
-			fprintf(stderr, "Failed to read child pipe with %s\n",
-			        strerror(errno));
-			exit(EXIT_FAILURE);
-		}
-	}
-	printf("Perfmon child up on CPU%d\n", (int)tmp);
-	fflush(stdout);
-
-	close(child->up_pipe[0]);
-	close(child->up_pipe[1]);
-}
-
-static struct child* xen_ctx;
-
-void perfmon_init(void)
-{
-	size_t i;
-	long nr;
-
-	if (cpu_type == CPU_TIMER_INT)
-		return;
-
-	if (!no_xen) {
-		xen_ctx = xmalloc(sizeof(struct child));
-		xen_ctx->pid = getpid();
-		xen_ctx->up_pipe[0] = -1;
-		xen_ctx->up_pipe[1] = -1;
-		xen_ctx->sigusr1 = 0;
-		xen_ctx->sigusr2 = 0;
-		xen_ctx->sigterm = 0;
-
-		create_context(xen_ctx);
-
-		write_pmu(xen_ctx);
-		
-		load_context(xen_ctx);
-		return;
-	}
-	
-
-	nr = sysconf(_SC_NPROCESSORS_ONLN);
-	if (nr == -1) {
-		fprintf(stderr, "Couldn't determine number of CPUs.\n");
-		exit(EXIT_FAILURE);
-	}
-
-	nr_cpus = nr;
-
-	children = xmalloc(sizeof(struct child) * nr_cpus);
-
-	for (i = 0; i < nr_cpus; ++i) {
-		int ret;
-
-		if (pipe(children[i].up_pipe)) {
-			perror("Couldn't create child pipe.\n");
-			exit(EXIT_FAILURE);
-		}
-
-		ret = fork();
-		if (ret == -1) {
-			fprintf(stderr, "Couldn't fork perfmon child.\n");
-			exit(EXIT_FAILURE);
-		} else if (ret == 0) {
-			printf("Running perfmon child on CPU%d.\n", (int)i);
-			fflush(stdout);
-			run_child(i);
-		} else {
-			children[i].pid = ret;
-			printf("Waiting on CPU%d\n", (int)i);
-			wait_for_child(&children[i]);
-		}
-	}
-}
-
-
-void perfmon_exit(void)
-{
-	size_t i;
-
-	if (cpu_type == CPU_TIMER_INT)
-		return;
-
-	if (!no_xen)
-		return;
-
-	for (i = 0; i < nr_cpus; ++i) {
-		kill(children[i].pid, SIGKILL);
-		waitpid(children[i].pid, NULL, 0);
-	}
-}
-
-
-void perfmon_start(void)
-{
-	size_t i;
-
-	if (cpu_type == CPU_TIMER_INT)
-		return;
-
-	if (!no_xen) {
-		perfmon_start_child(xen_ctx->ctx_fd);
-		return;
-	}
-
-	for (i = 0; i < nr_cpus; ++i)
-		kill(children[i].pid, SIGUSR1);
-}
-
-
-void perfmon_stop(void)
-{
-	size_t i;
-
-	if (cpu_type == CPU_TIMER_INT)
-		return;
-
-	if (!no_xen) {
-		perfmon_stop_child(xen_ctx->ctx_fd);
-		return;
-	}
-	
-	for (i = 0; i < nr_cpus; ++i)
-		kill(children[i].pid, SIGUSR2);
-}
-
-#endif /* __ia64__ */
diff --git a/daemon/opd_perfmon.h b/daemon/opd_perfmon.h
deleted file mode 100644
index 9b4267f..0000000
--- a/daemon/opd_perfmon.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * @file opd_perfmon.h
- * perfmonctl() handling
- *
- * @remark Copyright 2003 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- */
-
-#ifndef OPD_PERFMON_H
-#define OPD_PERFMON_H
-
-#ifdef __ia64__
-
-#include <stdlib.h>
-
-void perfmon_init(void);
-void perfmon_exit(void);
-void perfmon_start(void);
-void perfmon_stop(void);
-
-/* The following is from asm/perfmon.h. When it's installed on
- * enough boxes, we can remove this and include the platform
- * perfmon.h
- */
-
-typedef unsigned char pfm_uuid_t[16];	/* custom sampling buffer identifier type */
-
-/*
- * Request structure used to define a context
- */
-typedef struct {
-	pfm_uuid_t     ctx_smpl_buf_id;	 /* which buffer format to use (if needed) */
-	unsigned long  ctx_flags;	 /* noblock/block */
-	unsigned short ctx_nextra_sets;	 /* number of extra event sets (you always get 1) */
-	unsigned short ctx_reserved1;	 /* for future use */
-	int	       ctx_fd;		 /* return arg: unique identification for context */
-	void	       *ctx_smpl_vaddr;	 /* return arg: virtual address of sampling buffer, is used */
-	unsigned long  ctx_reserved2[11];/* for future use */
-} pfarg_context_t;
-
-/*
- * Request structure used to write/read a PMC or PMD
- */
-typedef struct {
-	unsigned int	reg_num;	   /* which register */
-	unsigned short	reg_set;	   /* event set for this register */
-	unsigned short	reg_reserved1;	   /* for future use */
-
-	unsigned long	reg_value;	   /* initial pmc/pmd value */
-	unsigned long	reg_flags;	   /* input: pmc/pmd flags, return: reg error */
-
-	unsigned long	reg_long_reset;	   /* reset after buffer overflow notification */
-	unsigned long	reg_short_reset;   /* reset after counter overflow */
-
-	unsigned long	reg_reset_pmds[4]; /* which other counters to reset on overflow */
-	unsigned long	reg_random_seed;   /* seed value when randomization is used */
-	unsigned long	reg_random_mask;   /* bitmask used to limit random value */
-	unsigned long   reg_last_reset_val;/* return: PMD last reset value */
-
-	unsigned long	reg_smpl_pmds[4];  /* which pmds are accessed when PMC overflows */
-	unsigned long	reg_smpl_eventid;  /* opaque sampling event identifier */
-
-	unsigned long   reg_reserved2[3];   /* for future use */
-} pfarg_reg_t;
-
-typedef struct {
-	pid_t		load_pid;	   /* process to load the context into */
-	unsigned short	load_set;	   /* first event set to load */
-	unsigned short	load_reserved1;	   /* for future use */
-	unsigned long	load_reserved2[3]; /* for future use */
-} pfarg_load_t;
-
-#define PFM_WRITE_PMCS      0x01
-#define PFM_WRITE_PMDS      0x02
-#define PFM_STOP            0x04
-#define PFM_START           0x05
-#define PFM_CREATE_CONTEXT  0x08
-#define PFM_LOAD_CONTEXT    0x10
-#define PFM_FL_SYSTEM_WIDE  0x02
-
-#else
-
-void perfmon_init(void)
-{
-}
-
-
-void perfmon_exit(void)
-{
-}
-
-
-void perfmon_start(void)
-{
-}
-
-
-void perfmon_stop(void)
-{
-}
-
-#endif /* __ia64__ */
-
-#endif /* OPD_PERFMON_H */
diff --git a/daemon/opd_pipe.c b/daemon/opd_pipe.c
deleted file mode 100644
index a5c334a..0000000
--- a/daemon/opd_pipe.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- * @file daemon/opd_pipe.c
- * Functions handling the $SESSIONDIR/opd_pipe FIFO special file.
- * NOTE: This code is dealing with potentially insecure input.
- *
- * @remark Copyright 2008 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Daniel Hansel
- */
-
-#include "opd_pipe.h"
-#include "opd_printf.h"
-#include "op_config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/stat.h>
-
-static int fifo;
-
-void opd_create_pipe(void)
-{
-	mode_t orig_umask = umask(0111);
-	if (mkfifo(op_pipe_file, 0666) == -1) {
-		if (errno != EEXIST) {
-			perror("oprofiled: couldn't create pipe: ");
-			exit(EXIT_FAILURE);
-		}
-	}
-	umask(orig_umask);
-}
-
-
-void opd_open_pipe(void)
-{
-	fifo = open(op_pipe_file, O_RDONLY | O_NONBLOCK);
-	if (fifo == -1) {
-		perror("oprofiled: couldn't open pipe: ");
-		exit(EXIT_FAILURE);
-	}
-}
-
-
-void opd_close_pipe(void)
-{
-	close(fifo);
-}
-
-
-int is_jitconv_requested(void)
-{
-	/* number of dropped (unknown) requests */
-	static long nr_drops = 0;
-	/* modulus to output only a few warnings to avoid flooding oprofiled.log */
-	static int mod_cnt_drops = 1;
-	FILE * fd;
-	char line[256];
-	int i, ret = 0;
-
-	/* get a file descriptor to the pipe */
-	fd = fdopen(fifo, "r");
-
-	if (fd == NULL) {
-		perror("oprofiled: couldn't create file descriptor: ");
-		exit(EXIT_FAILURE);
-	}
-
-	/* read up to 99 lines to check for 'do_jitconv' */
-	for (i = 0; i < 99; i++) {
-		/* just break if no new line is found */
-		if (fgets(line, 256, fd) == NULL)
-			break;
-		line[strlen(line) - 1] = '\0';
-
-		if (strstr(line, "do_jitconv") != NULL) {
-			ret = 1;
-		} else {
-			nr_drops++;
-
-			if (nr_drops % mod_cnt_drops == 0) {
-				printf(
-				       "Warning: invalid pipe request received (dropped request(s): %ld)\n",
-				       nr_drops);
-				/* increase modulus to avoid flooding log file */
-				mod_cnt_drops *= 5;
-			}
-		}
-	}
-
-	return ret;
-}
diff --git a/daemon/opd_pipe.h b/daemon/opd_pipe.h
deleted file mode 100644
index 7f96b07..0000000
--- a/daemon/opd_pipe.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * @file daemon/opd_pipe.h
- * Functions handling the $SESSIONDIR/opd_pipe FIFO special file.
- * NOTE: This code is dealing with potencially insecure input.
- *
- * @remark Copyright 2008 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Daniel Hansel
- */
-
-#ifndef OPD_PIPE_H_
-#define OPD_PIPE_H_
- 
-/**
- * opd_create_pipe - creates the oprofiled fifo file
- *
- * Creates the Oprofile daemon fifo pipe to enable communication between
- * the daemon and the 'opcontrol --dump' command. Failure to create the pipe
- * is a fatal error.
- */
-void opd_create_pipe(void);
-
-/**
- * opd_open_pipe - opens the oprofiled fifo file
- */
-void opd_open_pipe(void);
-
-/**
- * opd_close_pipe - closes the oprofiled fifo file
- *
- * Closes the Oprofile daemon fifo pipe.
- */
-void opd_close_pipe(void);
-
-/**
- * is_jitconv_requested - check for request to jit conversion
- *
- * Checks the Oprofile daemon fifo pipe for do_jitconv request.
- * If jit conversion is requested ('do_jitconv' is sent) the check returns 1.
- * Otherwise it returns 0.
- */
-int is_jitconv_requested(void);
-
-#endif /*OPD_PIPE_H_*/
diff --git a/daemon/opd_printf.h b/daemon/opd_printf.h
deleted file mode 100644
index e1f8476..0000000
--- a/daemon/opd_printf.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * @file daemon/opd_printf.h
- * Output routines
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OPD_PRINTF_H
-#define OPD_PRINTF_H
-
-/// log all sample file name manipulation; sample files open, close,
-/// sfile LRU etc. voluminous. FIXME need to be splitted (filename manip, files
-/// handling) ?
-extern int vsfile;
-/// log samples, voluminous.
-extern int vsamples;
-/// log arc, very voluminous.
-extern int varcs;
-/// kernel module handling
-extern int vmodule;
-/// all others not fitting in above category, not voluminous.
-extern int vmisc;
-
-#define verbprintf(x, args...) \
-	do { \
-		/* look like fragile but we must catch verbrintf("%s", "") */ \
-		if (x == 1) \
-			printf(args); \
-	} while (0)
-
-#endif /* OPD_PRINTF_H */
diff --git a/daemon/opd_sfile.c b/daemon/opd_sfile.c
deleted file mode 100644
index 03ebf55..0000000
--- a/daemon/opd_sfile.c
+++ /dev/null
@@ -1,619 +0,0 @@
-/**
- * @file daemon/opd_sfile.c
- * Management of sample files
- *
- * @remark Copyright 2002, 2005 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include "opd_sfile.h"
-
-#include "opd_trans.h"
-#include "opd_kernel.h"
-#include "opd_mangling.h"
-#include "opd_anon.h"
-#include "opd_printf.h"
-#include "opd_stats.h"
-#include "oprofiled.h"
-
-#include "op_libiberty.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define HASH_SIZE 2048
-#define HASH_BITS (HASH_SIZE - 1)
-
-/** All sfiles are hashed into these lists */
-static struct list_head hashes[HASH_SIZE];
-
-/** All sfiles are on this list. */
-static LIST_HEAD(lru_list);
-
-
-/* FIXME: can undoubtedly improve this hashing */
-/** Hash the transient parameters for lookup. */
-static unsigned long
-sfile_hash(struct transient const * trans, struct kernel_image * ki)
-{
-	unsigned long val = 0;
-	
-	if (separate_thread) {
-		val ^= trans->tid << 2;
-		val ^= trans->tgid << 2;
-	}
-
-	if (separate_kernel || ((trans->anon || separate_lib) && !ki))
-		val ^= trans->app_cookie >> (DCOOKIE_SHIFT + 3);
-
-	if (separate_cpu)
-		val ^= trans->cpu;
-
-	/* cookie meaningless for kernel, shouldn't hash */
-	if (trans->in_kernel) {
-		val ^= ki->start >> 14;
-		val ^= ki->end >> 7;
-		return val & HASH_BITS;
-	}
-
-	if (trans->cookie != NO_COOKIE) {
-		val ^= trans->cookie >> DCOOKIE_SHIFT;
-		return val & HASH_BITS;
-	}
-
-	if (!separate_thread)
-		val ^= trans->tgid << 2;
-
-	if (trans->anon) {
-		val ^= trans->anon->start >> VMA_SHIFT;
-		val ^= trans->anon->end >> (VMA_SHIFT + 1);
-	}
-
-	return val & HASH_BITS;
-}
-
-
-static int
-do_match(struct sfile const * sf, cookie_t cookie, cookie_t app_cookie,
-         struct kernel_image const * ki, struct anon_mapping const * anon,
-         pid_t tgid, pid_t tid, unsigned int cpu)
-{
-	/* this is a simplified check for "is a kernel image" AND
-	 * "is the right kernel image". Also handles no-vmlinux
-	 * correctly.
-	 */
-	if (sf->kernel != ki)
-		return 0;
-
-	if (separate_thread) {
-		if (sf->tid != tid || sf->tgid != tgid)
-			return 0;
-	}
-
-	if (separate_cpu) {
-		if (sf->cpu != cpu)
-			return 0;
-	}
-
-	if (separate_kernel || ((anon || separate_lib) && !ki)) {
-		if (sf->app_cookie != app_cookie)
-			return 0;
-	}
-
-	/* ignore the cached trans->cookie for kernel images,
-	 * it's meaningless and we checked all others already
-	 */
-	if (ki)
-		return 1;
-
-	if (sf->anon != anon)
-		return 0;
-
-	return sf->cookie == cookie;
-}
-
-
-static int
-trans_match(struct transient const * trans, struct sfile const * sfile,
-            struct kernel_image const * ki)
-{
-	return do_match(sfile, trans->cookie, trans->app_cookie, ki,
-	                trans->anon, trans->tgid, trans->tid, trans->cpu);
-}
-
-
-static int
-sfile_equal(struct sfile const * sf, struct sfile const * sf2)
-{
-	return do_match(sf, sf2->cookie, sf2->app_cookie, sf2->kernel,
-	                sf2->anon, sf2->tgid, sf2->tid, sf2->cpu);
-}
-
-
-static int
-is_sf_ignored(struct sfile const * sf)
-{
-	if (sf->kernel) {
-		if (!is_image_ignored(sf->kernel->name))
-			return 0;
-
-		/* Let a dependent kernel image redeem the sf if we're
-		 * executing on behalf of an application.
-		 */
-		return is_cookie_ignored(sf->app_cookie);
-	}
-
-	/* Anon regions are always dependent on the application.
- 	 * Otherwise, let a dependent image redeem the sf.
-	 */
-	if (sf->anon || is_cookie_ignored(sf->cookie))
-		return is_cookie_ignored(sf->app_cookie);
-
-	return 0;
-}
-
-
-/** create a new sfile matching the current transient parameters */
-static struct sfile *
-create_sfile(unsigned long hash, struct transient const * trans,
-             struct kernel_image * ki)
-{
-	size_t i;
-	struct sfile * sf;
-
-	sf = xmalloc(sizeof(struct sfile));
-
-	sf->hashval = hash;
-
-	/* The logic here: if we're in the kernel, the cached cookie is
-	 * meaningless (though not the app_cookie if separate_kernel)
-	 */
-	sf->cookie = trans->in_kernel ? INVALID_COOKIE : trans->cookie;
-	sf->app_cookie = INVALID_COOKIE;
-	sf->tid = (pid_t)-1;
-	sf->tgid = (pid_t)-1;
-	sf->cpu = 0;
-	sf->kernel = ki;
-	sf->anon = trans->anon;
-
-	for (i = 0 ; i < op_nr_counters ; ++i)
-		odb_init(&sf->files[i]);
-
-	for (i = 0; i < CG_HASH_SIZE; ++i)
-		list_init(&sf->cg_hash[i]);
-
-	if (separate_thread)
-		sf->tid = trans->tid;
-	if (separate_thread || trans->cookie == NO_COOKIE)
-		sf->tgid = trans->tgid;
-
-	if (separate_cpu)
-		sf->cpu = trans->cpu;
-
-	if (separate_kernel || ((trans->anon || separate_lib) && !ki))
-		sf->app_cookie = trans->app_cookie;
-
-	sf->ignored = is_sf_ignored(sf);
-
-	sf->embedded_offset = trans->embedded_offset;
-
-	/* If embedded_offset is a valid value, it means we're
-	 * processing a Cell BE SPU profile; in which case, we
-	 * want sf->app_cookie to hold trans->app_cookie.
-	 */
-	if (trans->embedded_offset != UNUSED_EMBEDDED_OFFSET)
-		sf->app_cookie = trans->app_cookie;
-	return sf;
-}
-
-
-struct sfile * sfile_find(struct transient const * trans)
-{
-	struct sfile * sf;
-	struct list_head * pos;
-	struct kernel_image * ki = NULL;
-	unsigned long hash;
-
-	if (trans->tracing != TRACING_ON) {
-		opd_stats[OPD_SAMPLES]++;
-		opd_stats[trans->in_kernel == 1 ? OPD_KERNEL : OPD_PROCESS]++;
-	}
-
-	/* There is a small race where this *can* happen, see
-	 * caller of cpu_buffer_reset() in the kernel
-	 */
-	if (trans->in_kernel == -1) {
-		verbprintf(vsamples, "Losing sample at 0x%llx of unknown provenance.\n",
-		           trans->pc);
-		opd_stats[OPD_NO_CTX]++;
-		return NULL;
-	}
-
-	/* we might need a kernel image start/end to hash on */
-	if (trans->in_kernel) {
-		ki = find_kernel_image(trans);
-		if (!ki) {
-			verbprintf(vsamples, "Lost kernel sample %llx\n", trans->pc);
-			opd_stats[OPD_LOST_KERNEL]++;
-			return NULL;
-		}
-	} else if (trans->cookie == NO_COOKIE && !trans->anon) {
-		if (vsamples) {
-			char const * app = verbose_cookie(trans->app_cookie);
-			printf("No anon map for pc %llx, app %s.\n",
-			       trans->pc, app);
-		}
-		opd_stats[OPD_LOST_NO_MAPPING]++;
-		return NULL;
-	}
-
-	hash = sfile_hash(trans, ki);
-	list_for_each(pos, &hashes[hash]) {
-		sf = list_entry(pos, struct sfile, hash);
-		if (trans_match(trans, sf, ki)) {
-			sfile_get(sf);
-			goto lru;
-		}
-	}
-
-	sf = create_sfile(hash, trans, ki);
-	list_add(&sf->hash, &hashes[hash]);
-
-lru:
-	sfile_put(sf);
-	return sf;
-}
-
-
-static void sfile_dup(struct sfile * to, struct sfile * from)
-{
-	size_t i;
-
-	memcpy(to, from, sizeof (struct sfile));
-
-	for (i = 0 ; i < op_nr_counters ; ++i)
-		odb_init(&to->files[i]);
-
-	for (i = 0; i < CG_HASH_SIZE; ++i)
-		list_init(&to->cg_hash[i]);
-
-	list_init(&to->hash);
-	list_init(&to->lru);
-}
-
-
-static odb_t * get_file(struct transient const * trans, int is_cg)
-{
-	struct sfile * sf = trans->current;
-	struct sfile * last = trans->last;
-	struct cg_entry * cg;
-	struct list_head * pos;
-	unsigned long hash;
-	odb_t * file;
-
-	if (trans->event >= op_nr_counters) {
-		fprintf(stderr, "%s: Invalid counter %lu\n", __FUNCTION__,
-			trans->event);
-		abort();
-	}
-
-	file = &sf->files[trans->event];
-
-	if (!is_cg)
-		goto open;
-
-	hash = last->hashval & (CG_HASH_SIZE - 1);
-
-	/* Need to look for the right 'to'. Since we're looking for
-	 * 'last', we use its hash.
-	 */
-	list_for_each(pos, &sf->cg_hash[hash]) {
-		cg = list_entry(pos, struct cg_entry, hash);
-		if (sfile_equal(last, &cg->to)) {
-			file = &cg->to.files[trans->event];
-			goto open;
-		}
-	}
-
-	cg = xmalloc(sizeof(struct cg_entry));
-	sfile_dup(&cg->to, last);
-	list_add(&cg->hash, &sf->cg_hash[hash]);
-	file = &cg->to.files[trans->event];
-
-open:
-	if (!odb_open_count(file))
-		opd_open_sample_file(file, last, sf, trans->event, is_cg);
-
-	/* Error is logged by opd_open_sample_file */
-	if (!odb_open_count(file))
-		return NULL;
-
-	return file;
-}
-
-
-static void verbose_print_sample(struct sfile * sf, vma_t pc, uint counter)
-{
-	char const * app = verbose_cookie(sf->app_cookie);
-	printf("0x%llx(%u): ", pc, counter);
-	if (sf->anon) {
-		printf("anon (tgid %u, 0x%llx-0x%llx), ",
-		       (unsigned int)sf->anon->tgid,
-		       sf->anon->start, sf->anon->end);
-	} else if (sf->kernel) {
-		printf("kern (name %s, 0x%llx-0x%llx), ", sf->kernel->name,
-		       sf->kernel->start, sf->kernel->end);
-	} else {
-		printf("%s(%llx), ", verbose_cookie(sf->cookie),  sf->cookie);
-	}
-	printf("app %s(%llx)", app, sf->app_cookie);
-}
-
-
-static void verbose_sample(struct transient const * trans, vma_t pc)
-{
-	printf("Sample ");
-	verbose_print_sample(trans->current, pc, trans->event);
-	printf("\n");
-}
-
-
-static void
-verbose_arc(struct transient const * trans, vma_t from, vma_t to)
-{
-	printf("Arc ");
-	verbose_print_sample(trans->current, from, trans->event);
-	printf(" -> 0x%llx", to);
-	printf("\n");
-}
-
-
-static void sfile_log_arc(struct transient const * trans)
-{
-	int err;
-	vma_t from = trans->pc;
-	vma_t to = trans->last_pc;
-	uint64_t key;
-	odb_t * file;
-
-	file = get_file(trans, 1);
-
-	/* absolute value -> offset */
-	if (trans->current->kernel)
-		from -= trans->current->kernel->start;
-
-	if (trans->last->kernel)
-		to -= trans->last->kernel->start;
-
-	if (trans->current->anon)
-		from -= trans->current->anon->start;
-
-	if (trans->last->anon)
-		to -= trans->last->anon->start;
-
-	if (varcs)
-		verbose_arc(trans, from, to);
-
-	if (!file) {
-		opd_stats[OPD_LOST_SAMPLEFILE]++;
-		return;
-	}
-
-	/* Possible narrowings to 32-bit value only. */
-	key = to & (0xffffffff);
-	key |= ((uint64_t)from) << 32;
-
-	err = odb_update_node(file, key);
-	if (err) {
-		fprintf(stderr, "%s: %s\n", __FUNCTION__, strerror(err));
-		abort();
-	}
-}
-
-
-void sfile_log_sample(struct transient const * trans)
-{
-	int err;
-	vma_t pc = trans->pc;
-	odb_t * file;
-
-	if (trans->tracing == TRACING_ON) {
-		/* can happen if kernel sample falls through the cracks,
-		 * see opd_put_sample() */
-		if (trans->last)
-			sfile_log_arc(trans);
-		return;
-	}
-
-	file = get_file(trans, 0);
-
-	/* absolute value -> offset */
-	if (trans->current->kernel)
-		pc -= trans->current->kernel->start;
-
-	if (trans->current->anon)
-		pc -= trans->current->anon->start;
- 
-	if (vsamples)
-		verbose_sample(trans, pc);
-
-	if (!file) {
-		opd_stats[OPD_LOST_SAMPLEFILE]++;
-		return;
-	}
-
-	err = odb_update_node(file, (uint64_t)pc);
-	if (err) {
-		fprintf(stderr, "%s: %s\n", __FUNCTION__, strerror(err));
-		abort();
-	}
-}
-
-
-static int close_sfile(struct sfile * sf, void * data __attribute__((unused)))
-{
-	size_t i;
-
-	/* it's OK to close a non-open odb file */
-	for (i = 0; i < op_nr_counters; ++i)
-		odb_close(&sf->files[i]);
-
-	return 0;
-}
-
-
-static void kill_sfile(struct sfile * sf)
-{
-	close_sfile(sf, NULL);
-	list_del(&sf->hash);
-	list_del(&sf->lru);
-}
-
-
-static int sync_sfile(struct sfile * sf, void * data __attribute__((unused)))
-{
-	size_t i;
-
-	for (i = 0; i < op_nr_counters; ++i)
-		odb_sync(&sf->files[i]);
-
-	return 0;
-}
-
-
-static int is_sfile_kernel(struct sfile * sf, void * data __attribute__((unused)))
-{
-	return !!sf->kernel;
-}
-
-
-static int is_sfile_anon(struct sfile * sf, void * data)
-{
-	return sf->anon == data;
-}
-
-
-typedef int (*sfile_func)(struct sfile *, void *);
-
-static void
-for_one_sfile(struct sfile * sf, sfile_func func, void * data)
-{
-	size_t i;
-	int free_sf = func(sf, data);
-
-	for (i = 0; i < CG_HASH_SIZE; ++i) {
-		struct list_head * pos;
-		struct list_head * pos2;
-		list_for_each_safe(pos, pos2, &sf->cg_hash[i]) {
-			struct cg_entry * cg =
-				list_entry(pos, struct cg_entry, hash);
-			if (free_sf || func(&cg->to, data)) {
-				kill_sfile(&cg->to);
-				list_del(&cg->hash);
-				free(cg);
-			}
-		}
-	}
-
-	if (free_sf) {
-		kill_sfile(sf);
-		free(sf);
-	}
-}
-
-
-static void for_each_sfile(sfile_func func, void * data)
-{
-	struct list_head * pos;
-	struct list_head * pos2;
-
-	list_for_each_safe(pos, pos2, &lru_list) {
-		struct sfile * sf = list_entry(pos, struct sfile, lru);
-		for_one_sfile(sf, func, data);
-	}
-}
-
-
-void sfile_clear_kernel(void)
-{
-	for_each_sfile(is_sfile_kernel, NULL);
-}
-
-
-void sfile_clear_anon(struct anon_mapping * anon)
-{
-	for_each_sfile(is_sfile_anon, anon);
-}
-
-
-void sfile_sync_files(void)
-{
-	for_each_sfile(sync_sfile, NULL);
-}
-
-
-void sfile_close_files(void)
-{
-	for_each_sfile(close_sfile, NULL);
-}
-
-
-static int always_true(void)
-{
-	return 1;
-}
-
-
-#define LRU_AMOUNT 256
-
-/*
- * Clear out older sfiles. Note the current sfiles we're using
- * will not be present in this list, due to sfile_get/put() pairs
- * around the caller of this.
- */
-int sfile_lru_clear(void)
-{
-	struct list_head * pos;
-	struct list_head * pos2;
-	int amount = LRU_AMOUNT;
-
-	if (list_empty(&lru_list))
-		return 1;
-
-	list_for_each_safe(pos, pos2, &lru_list) {
-		struct sfile * sf;
-		if (!--amount)
-			break;
-		sf = list_entry(pos, struct sfile, lru);
-		for_one_sfile(sf, (sfile_func)always_true, NULL);
-	}
-
-	return 0;
-}
-
-
-void sfile_get(struct sfile * sf)
-{
-	if (sf)
-		list_del(&sf->lru);
-}
-
-
-void sfile_put(struct sfile * sf)
-{
-	if (sf)
-		list_add_tail(&sf->lru, &lru_list);
-}
-
-
-void sfile_init(void)
-{
-	size_t i = 0;
-
-	for (; i < HASH_SIZE; ++i)
-		list_init(&hashes[i]);
-}
diff --git a/daemon/opd_sfile.h b/daemon/opd_sfile.h
deleted file mode 100644
index 86d5025..0000000
--- a/daemon/opd_sfile.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- * @file daemon/opd_sfile.h
- * Management of sample files
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OPD_SFILE_H
-#define OPD_SFILE_H
-
-#include "opd_cookie.h"
-
-#include "odb.h"
-#include "op_hw_config.h"
-#include "op_types.h"
-#include "op_list.h"
-
-#include <sys/types.h>
-
-struct kernel_image;
-struct transient;
-
-#define CG_HASH_SIZE 16
-#define UNUSED_EMBEDDED_OFFSET ~0LLU
-
-/**
- * Each set of sample files (where a set is over the physical counter
- * types) will have one of these for it. We match against the
- * descriptions here to find which sample DB file we need to modify.
- *
- * cg files are stored in the hash.
- */
-struct sfile {
-	/** hash value for this sfile */
-	unsigned long hashval;
-	/** cookie value for the binary profiled */
-	cookie_t cookie;
-	/** cookie value for the application owner, INVALID_COOKIE if not set */
-	cookie_t app_cookie;
-	/** thread ID, -1 if not set */
-	pid_t tid;
-	/** thread group ID, -1 if not set */
-	pid_t tgid;
-	/** CPU number */
-	unsigned int cpu;
-	/** kernel image if applicable */
-	struct kernel_image * kernel;
-	/** anonymous mapping */
-	struct anon_mapping * anon;
-	/** embedded offset for Cell BE SPU */
-	uint64_t embedded_offset;
-
-	/** hash table link */
-	struct list_head hash;
-	/** lru list */
-	struct list_head lru;
-	/** true if this file should be ignored in profiles */
-	int ignored;
-	/** opened sample files */
-	odb_t files[OP_MAX_COUNTERS];
-	/** hash table of opened cg sample files */
-	struct list_head cg_hash[CG_HASH_SIZE];
-};
-
-/** a call-graph entry */
-struct cg_entry {
-	/** where arc is to */
-	struct sfile to;
-	/** next in the hash slot */
-	struct list_head hash;
-};
-
-/** clear any sfiles that are for the kernel */
-void sfile_clear_kernel(void);
-
-struct anon_mapping;
-
-/** clear any sfiles for the given anon mapping */
-void sfile_clear_anon(struct anon_mapping *);
-
-/** sync sample files */
-void sfile_sync_files(void);
-
-/** close sample files */
-void sfile_close_files(void);
-
-/** clear out a certain amount of LRU entries
- * return non-zero if the lru is already empty */
-int sfile_lru_clear(void);
-
-/** remove a sfile from the lru list, protecting it from sfile_lru_clear() */
-void sfile_get(struct sfile * sf);
-
-/** add this sfile to lru list */
-void sfile_put(struct sfile * sf);
-
-/**
- * Find the sfile for the current parameters. Note that is required
- * that the PC value be set appropriately (needed for kernel images)
- */
-struct sfile * sfile_find(struct transient const * trans);
-
-/** Log the sample in a previously located sfile. */
-void sfile_log_sample(struct transient const * trans);
-
-/** initialise hashes */
-void sfile_init(void);
-
-#endif /* OPD_SFILE_H */
diff --git a/daemon/opd_spu.c b/daemon/opd_spu.c
deleted file mode 100644
index 62a2c2b..0000000
--- a/daemon/opd_spu.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * @file daemon/opd_spu.c
- * Processing the sample buffer for Cell BE SPU profile
- *
- * @remark Copyright 2007 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Maynard Johnson
- * (C) Copyright IBM Corporation 2007
- */
-
-#include "opd_interface.h"
-#include "opd_printf.h"
-#include "opd_sfile.h"
-#include "opd_stats.h"
-#include "opd_trans.h"
-#include "op_libiberty.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-
-struct spu_context_info {
-	pid_t tid;
-	pid_t tgid;
-	cookie_t app_cookie;
-	uint64_t embedded_offset;
-	cookie_t spu_cookie;
-};
-
-static struct spu_context_info * spu_context_cache;
-
-/* Forward declaration */
-static void process_spu_samples(struct transient * trans);
-
-void (*special_processor)(struct transient *);
-
-/*
- * This function is called when the first value found in the
- * buffer (after the beginning ESCAPE_CODE) is SPU_PROFILING_CODE.
- * Once we get here, the rest of the processing of the buffer is
- * Cell-SPU-specific, so we do not need to return until the
- * trans.buffer is empty.
- */
-void code_spu_profiling(struct transient * trans)
-{
-	/* Next value in buffer is the number of SPUs. */
-	unsigned long long num_spus = pop_buffer_value(trans);
-	/* Free the cache from previous run */
-	free(spu_context_cache);
-	spu_context_cache = xmalloc(sizeof(struct spu_context_info) * num_spus);
-	special_processor = process_spu_samples;
-	process_spu_samples(trans);
-}
-
-void code_spu_ctx_switch(struct transient * trans)
-{
-	clear_trans_current(trans);
-
-	if (!enough_remaining(trans, 6)) {
-		trans->remaining = 0;
-		return;
-	}
-
-	/* First value in the buffer for an SPU context switch is
-	 * the SPU number.  For SPU profiling, 'cpu' = 'spu'.
-	 */
-	trans->cpu = pop_buffer_value(trans);
-	trans->tid = pop_buffer_value(trans);
-	trans->tgid = pop_buffer_value(trans);
-	trans->app_cookie = pop_buffer_value(trans);
-
-	if (vmisc) {
-		char const * app = find_cookie(trans->app_cookie);
-		printf("SPU_CTX_SWITCH to tid %lu, tgid %lu, cookie %llx(%s)\n",
-		       (unsigned long)trans->tid, (unsigned long)trans->tgid,
-		       trans->app_cookie, app ? app : "none");
-	}
-
-	/* The trans->cookie will point to the binary file where the SPU ELF
-	 * can be found.  If the SPU ELF is embedded, it may be embedded in
-	 * either the executable application binary or a shared lib.  If shared
-	 * library, then trans->cookie will differ from the previously obtained
-	 * trans->app_cookie.  For the non-embedded case, trans->cookie always
-	 * points to a separate binary file.
-	 */
-	trans->cookie = pop_buffer_value(trans);
-	trans->embedded_offset = pop_buffer_value(trans);
-}
-
-
-static void cache_spu_context_info(struct transient * trans)
-{
-	int i = trans->cpu;
-	spu_context_cache[i].tid = trans->tid;
-	spu_context_cache[i].tgid = trans->tgid;
-	spu_context_cache[i].app_cookie = trans->app_cookie;
-	spu_context_cache[i].embedded_offset = trans->embedded_offset;
-	spu_context_cache[i].spu_cookie = trans->cookie;
-}
-
-static void update_trans_for_spu(struct transient * trans)
-{
-	int i = trans->cpu;
-	trans->tid = spu_context_cache[i].tid;
-	trans->tgid = spu_context_cache[i].tgid;
-	trans->app_cookie = spu_context_cache[i].app_cookie;
-	trans->embedded_offset = spu_context_cache[i].embedded_offset;
-	trans->cookie = spu_context_cache[i].spu_cookie;
-}
-#define SPU_NUM_MASK 0xFFFFFFFF00000000ULL
-#define SPU_CYCLES_COUNTER 0
-
-static void opd_put_spu_sample
-(struct transient * trans, unsigned long long pc)
-{
-	unsigned long spu_number = (pc & SPU_NUM_MASK) >> 32;
-	if (trans->cpu != spu_number) {
-		trans->cpu = spu_number;
-	        clear_trans_current(trans);
-		update_trans_for_spu(trans);
-	}
-	/* get the current sfile if needed */
-	if (!trans->current)
-		trans->current = sfile_find(trans);
-
-	if (trans->tracing != TRACING_ON)
-		trans->event = SPU_CYCLES_COUNTER;
-
-	trans->pc = (pc & ~SPU_NUM_MASK);
-	/* log the sample or arc */
-	sfile_log_sample(trans);
-
-	/* switch to trace mode */
-	if (trans->tracing == TRACING_START)
-		trans->tracing = TRACING_ON;
-
-	update_trans_last(trans);
-}
-
-/*
- * This function processes SPU context switches and
- * SPU program counter samples.  After processing a
- * context switch (via handlers[code)), we cache the
- * SPU context information that has been temporarily
- * stored in trans.
- */
-static void process_spu_samples(struct transient * trans)
-{
-	unsigned long long code;
-	trans->in_kernel = 0;
-	while (trans->remaining) {
-		code = pop_buffer_value(trans);
-
-		if (!is_escape_code(code)) {
-			opd_put_spu_sample(trans, code);
-			continue;
-		}
-
-		if (!trans->remaining) {
-			verbprintf(vmisc, "Dangling ESCAPE_CODE.\n");
-			opd_stats[OPD_DANGLING_CODE]++;
-			break;
-		}
-
-		/* started with ESCAPE_CODE, next is type */
-		code = pop_buffer_value(trans);
-
-		if (code >= LAST_CODE) {
-			fprintf(stderr, "Unknown code %llu\n", code);
-			abort();
-		}
-
-		handlers[code](trans);
-		cache_spu_context_info(trans);
-	}
-}
diff --git a/daemon/opd_stats.c b/daemon/opd_stats.c
deleted file mode 100644
index ddb1940..0000000
--- a/daemon/opd_stats.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * @file daemon/opd_stats.c
- * Management of daemon statistics
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include "opd_stats.h"
-#include "oprofiled.h"
-
-#include "op_get_time.h"
-
-#include <dirent.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-unsigned long opd_stats[OPD_MAX_STATS];
-
-/**
- * print_if - print an integer value read from file filename,
- * do nothing if the value read == -1 except if force is non-zero
- */
-static void print_if(char const * fmt, char const * path, char const * filename, int force)
-{
-	int value = opd_read_fs_int(path, filename, 0);
-	if (value != -1 || force)
-		printf(fmt, value);
-}
-
-/**
- * opd_print_stats - print out latest statistics
- */
-void opd_print_stats(void)
-{
-	DIR * dir;
-	struct dirent * dirent;
-
-	printf("\n%s\n", op_get_time());
-	printf("Nr. sample dumps: %lu\n", opd_stats[OPD_DUMP_COUNT]);
-	printf("Nr. non-backtrace samples: %lu\n", opd_stats[OPD_SAMPLES]);
-	printf("Nr. kernel samples: %lu\n", opd_stats[OPD_KERNEL]);
-	printf("Nr. lost samples (no kernel/user): %lu\n", opd_stats[OPD_NO_CTX]);
-	printf("Nr. lost kernel samples: %lu\n", opd_stats[OPD_LOST_KERNEL]);
-	printf("Nr. incomplete code structs: %lu\n", opd_stats[OPD_DANGLING_CODE]);
-	printf("Nr. samples lost due to sample file open failure: %lu\n",
-		opd_stats[OPD_LOST_SAMPLEFILE]);
-	printf("Nr. samples lost due to no permanent mapping: %lu\n",
-		opd_stats[OPD_LOST_NO_MAPPING]);
-	print_if("Nr. event lost due to buffer overflow: %u\n",
-	       "/dev/oprofile/stats", "event_lost_overflow", 1);
-	print_if("Nr. samples lost due to no mapping: %u\n",
-	       "/dev/oprofile/stats", "sample_lost_no_mapping", 1);
-	print_if("Nr. backtraces skipped due to no file mapping: %u\n",
-	       "/dev/oprofile/stats", "bt_lost_no_mapping", 0);
-	print_if("Nr. samples lost due to no mm: %u\n",
-	       "/dev/oprofile/stats", "sample_lost_no_mm", 1);
-
-	if (!(dir = opendir("/dev/oprofile/stats/")))
-		goto out;
-	while ((dirent = readdir(dir))) {
-		int cpu_nr;
-		char path[256];
-		if (sscanf(dirent->d_name, "cpu%d", &cpu_nr) != 1)
-			continue;
-		snprintf(path, 256, "/dev/oprofile/stats/%s", dirent->d_name);
-
-		print_if("Nr. samples lost cpu buffer overflow: %u\n",
-		     path, "sample_lost_overflow", 1);
-		print_if("Nr. samples lost task exit: %u\n",
-		     path, "sample_lost_task_exit", 0);
-		print_if("Nr. samples received: %u\n",
-		     path, "sample_received", 1);
-		print_if("Nr. backtrace aborted: %u\n", 
-		     path, "backtrace_aborted", 0);
-		print_if("Nr. samples lost invalid pc: %u\n", 
-		     path, "sample_invalid_eip", 0);
-	}
-	closedir(dir);
-out:
-	fflush(stdout);
-}
diff --git a/daemon/opd_stats.h b/daemon/opd_stats.h
deleted file mode 100644
index 177b86a..0000000
--- a/daemon/opd_stats.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * @file daemon/opd_stats.h
- * Management of daemon statistics
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OPD_STATS_H
-#define OPD_STATS_H
-
-extern unsigned long opd_stats[];
-
-enum {	OPD_SAMPLES, /**< nr. samples */
-	OPD_KERNEL, /**< nr. kernel samples */
-	OPD_PROCESS, /**< nr. userspace samples */
-	OPD_NO_CTX, /**< nr. samples lost due to not knowing if in the kernel or not */
-	OPD_LOST_KERNEL,  /**< nr. kernel samples lost */
-	OPD_LOST_SAMPLEFILE, /**< nr samples for which sample file can't be opened */
-	OPD_LOST_NO_MAPPING, /**< nr samples lost due to no mapping */
-	OPD_DUMP_COUNT, /**< nr. of times buffer is read */
-	OPD_DANGLING_CODE, /**< nr. partial code notifications (buffer overflow */
-	OPD_MAX_STATS /**< end of stats */
-};
-
-void opd_print_stats(void);
-
-#endif /* OPD_STATS_H */
diff --git a/daemon/opd_trans.c b/daemon/opd_trans.c
deleted file mode 100644
index 871e6e6..0000000
--- a/daemon/opd_trans.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/**
- * @file daemon/opd_trans.c
- * Processing the sample buffer
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- * Modified by Aravind Menon for Xen
- * These modifications are:
- * Copyright (C) 2005 Hewlett-Packard Co.
- *
- * Modified by Maynard Johnson <maynardj@us.ibm.com>
- * These modifications are:
- * (C) Copyright IBM Corporation 2007
- */
-
-#include "opd_trans.h"
-#include "opd_kernel.h"
-#include "opd_sfile.h"
-#include "opd_anon.h"
-#include "opd_stats.h"
-#include "opd_printf.h"
-#include "opd_interface.h"
- 
-#include <limits.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <errno.h>
-
-extern size_t kernel_pointer_size;
-
-
-void clear_trans_last(struct transient * trans)
-{
-	trans->last = NULL;
-	trans->last_anon = NULL;
-}
-
-
-void clear_trans_current(struct transient * trans)
-{
-	trans->current = NULL;
-	trans->anon = NULL;
-}
-
-
-uint64_t pop_buffer_value(struct transient * trans)
-{
-	uint64_t val;
-
-	if (!trans->remaining) {
-		fprintf(stderr, "BUG: popping empty buffer !\n");
-		abort();
-	}
-
-	if (kernel_pointer_size == 4) {
-		uint32_t const * lbuf = (void const *)trans->buffer;
-		val = *lbuf;
-	} else {
-		uint64_t const * lbuf = (void const *)trans->buffer;
-		val = *lbuf;
-	}
-
-	trans->remaining--;
-	trans->buffer += kernel_pointer_size;
-	return val;
-}
-
-
-int enough_remaining(struct transient * trans, size_t size)
-{
-	if (trans->remaining >= size)
-		return 1;
-
-	verbprintf(vmisc, "Dangling ESCAPE_CODE.\n");
-	opd_stats[OPD_DANGLING_CODE]++;
-	return 0;
-}
-
-
-static void opd_put_sample(struct transient * trans, unsigned long long pc)
-{
-	unsigned long long event;
-
-	if (!enough_remaining(trans, 1)) {
-		trans->remaining = 0;
-		return;
-	}
-
-	event = pop_buffer_value(trans);
-
-	if (trans->tracing != TRACING_ON)
-		trans->event = event;
-
-	trans->pc = pc;
-
-	/* sfile can change at each sample for kernel */
-	if (trans->in_kernel != 0)
-		clear_trans_current(trans);
-
-	if (!trans->in_kernel && trans->cookie == NO_COOKIE)
-		trans->anon = find_anon_mapping(trans);
-
-	/* get the current sfile if needed */
-	if (!trans->current)
-		trans->current = sfile_find(trans);
-
-	/*
-	 * can happen if kernel sample falls through the cracks, or if
-	 * it's a sample from an anon region we couldn't find
-	 */
-	if (!trans->current)
-		goto out;
-
-	/* FIXME: this logic is perhaps too harsh? */
-	if (trans->current->ignored || (trans->last && trans->last->ignored))
-		goto out;
-
-	/* log the sample or arc */
-	sfile_log_sample(trans);
-
-out:
-	/* switch to trace mode */
-	if (trans->tracing == TRACING_START)
-		trans->tracing = TRACING_ON;
-
-	update_trans_last(trans);
-}
-
-
-static void code_unknown(struct transient * trans __attribute__((unused)))
-{
-	fprintf(stderr, "Unknown code !\n");
-	abort();
-}
-
-
-static void code_ctx_switch(struct transient * trans)
-{
-	clear_trans_current(trans);
-
-	if (!enough_remaining(trans, 5)) {
-		trans->remaining = 0;
-		return;
-	}
-
-	trans->tid = pop_buffer_value(trans);
-	trans->app_cookie = pop_buffer_value(trans);
-	/* must be ESCAPE_CODE, CTX_TGID_CODE, tgid. Like this
-	 * because tgid was added later in a compatible manner.
-	 */
-	pop_buffer_value(trans);
-	pop_buffer_value(trans);
-	trans->tgid = pop_buffer_value(trans);
-
-	if (vmisc) {
-		char const * app = find_cookie(trans->app_cookie);
-		printf("CTX_SWITCH to tid %lu, tgid %lu, cookie %llx(%s)\n",
-		       (unsigned long)trans->tid, (unsigned long)trans->tgid,
-		       trans->app_cookie, app ? app : "none");
-	}
-}
-
-
-static void code_cpu_switch(struct transient * trans)
-{
-	clear_trans_current(trans);
-
-	if (!enough_remaining(trans, 1)) {
-		trans->remaining = 0;
-		return;
-	}
-
-	trans->cpu = pop_buffer_value(trans);
-	verbprintf(vmisc, "CPU_SWITCH to %lu\n", trans->cpu);
-}
-
-
-static void code_cookie_switch(struct transient * trans)
-{
-	clear_trans_current(trans);
-
-	if (!enough_remaining(trans, 1)) {
-		trans->remaining = 0;
-		return;
-	}
-
-	trans->cookie = pop_buffer_value(trans);
-
-	if (vmisc) {
-		char const * name = verbose_cookie(trans->cookie);
-		verbprintf(vmisc, "COOKIE_SWITCH to cookie %s(%llx)\n",
-		           name, trans->cookie);
-	}
-}
-
-
-static void code_kernel_enter(struct transient * trans)
-{
-	verbprintf(vmisc, "KERNEL_ENTER_SWITCH to kernel\n");
-	trans->in_kernel = 1;
-	clear_trans_current(trans);
-	/* subtlety: we must keep trans->cookie cached,
-	 * even though it's meaningless for the kernel -
-	 * we won't necessarily get a cookie switch on
-	 * kernel exit. See comments in opd_sfile.c
-	 */
-}
-
-
-static void code_user_enter(struct transient * trans)
-{
-	verbprintf(vmisc, "USER_ENTER_SWITCH to user-space\n");
-	trans->in_kernel = 0;
-	clear_trans_current(trans);
-	clear_trans_last(trans);
-}
-
-
-static void code_module_loaded(struct transient * trans __attribute__((unused)))
-{
-	verbprintf(vmodule, "MODULE_LOADED_CODE\n");
-	opd_reread_module_info();
-	clear_trans_current(trans);
-	clear_trans_last(trans);
-}
-
-
-/*
- * This also implicitly signals the end of the previous
- * trace, so we never explicitly set TRACING_OFF when
- * processing a buffer.
- */
-static void code_trace_begin(struct transient * trans)
-{
-	verbprintf(varcs, "TRACE_BEGIN\n");
-	trans->tracing = TRACING_START;
-}
-
-static void code_xen_enter(struct transient * trans)
-{
-	verbprintf(vmisc, "XEN_ENTER_SWITCH to xen\n");
-	trans->in_kernel = 1;
-	trans->current = NULL;
-	/* subtlety: we must keep trans->cookie cached, even though it's 
-	 * meaningless for Xen - we won't necessarily get a cookie switch 
-	 * on Xen exit. See comments in opd_sfile.c. It seems that we can 
-	 * get away with in_kernel = 1 as long as we supply the correct 
-	 * Xen image, and its address range in startup find_kernel_image 
-	 * is modified to look in the Xen image also
-	 */
-}
-
-extern void code_spu_profiling(struct transient * trans);
-extern void code_spu_ctx_switch(struct transient * trans);
-
-handler_t handlers[LAST_CODE + 1] = {
-	&code_unknown,
-	&code_ctx_switch,
-	&code_cpu_switch,
-	&code_cookie_switch,
-	&code_kernel_enter,
- 	&code_user_enter,
-	&code_module_loaded,
-	/* tgid handled differently */
-	&code_unknown,
-	&code_trace_begin,
-	&code_unknown,
- 	&code_xen_enter,
-#if defined(__powerpc__)
-	&code_spu_profiling,
-	&code_spu_ctx_switch,
-#endif
-	&code_unknown,
-};
-
-extern void (*special_processor)(struct transient *);
-
-void opd_process_samples(char const * buffer, size_t count)
-{
-	struct transient trans = {
-		.buffer = buffer,
-		.remaining = count,
-		.tracing = TRACING_OFF,
-		.current = NULL,
-		.last = NULL,
-		.cookie = INVALID_COOKIE,
-		.app_cookie = INVALID_COOKIE,
-		.anon = NULL,
-		.last_anon = NULL,
-		.pc = 0,
-		.last_pc = 0,
-		.event = 0,
-		.in_kernel = -1,
-		.cpu = -1,
-		.tid = -1,
-		.embedded_offset = UNUSED_EMBEDDED_OFFSET,
-		.tgid = -1
-	};
-
-	/* FIXME: was uint64_t but it can't compile on alpha where uint64_t
-	 * is an unsigned long and below the printf("..." %llu\n", code)
-	 * generate a warning, this look like a stopper to use c98 types :/
-	 */
-	unsigned long long code;
-
-	if (special_processor) {
-		special_processor(&trans);
-		return;
-	}
-
-    int i;
-
-    for (i = 0; i < count && i < 200; i++) {
-        verbprintf(vmisc, "buffer[%d] is %x\n", i, buffer[i]);
-    }
-
-	while (trans.remaining) {
-		code = pop_buffer_value(&trans);
-
-        verbprintf(vmisc, "In opd_process_samples (code is %lld)\n", code);
-
-		if (!is_escape_code(code)) {
-			opd_put_sample(&trans, code);
-			continue;
-		}
-
-		if (!trans.remaining) {
-			verbprintf(vmisc, "Dangling ESCAPE_CODE.\n");
-			opd_stats[OPD_DANGLING_CODE]++;
-			break;
-		}
-
-		// started with ESCAPE_CODE, next is type
-		code = pop_buffer_value(&trans);
-	
-        verbprintf(vmisc, "next code is %lld\n", code);
-		if (code >= LAST_CODE) {
-			fprintf(stderr, "Unknown code %llu\n", code);
-			abort();
-		}
-
-		handlers[code](&trans);
-	}
-}
diff --git a/daemon/opd_trans.h b/daemon/opd_trans.h
deleted file mode 100644
index ab4e816..0000000
--- a/daemon/opd_trans.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * @file daemon/opd_trans.h
- * Processing the sample buffer
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- *
- * Modified by Maynard Johnson <maynardj@us.ibm.com>
- * These modifications are:
- * (C) Copyright IBM Corporation 2007
- */
-
-#ifndef OPD_TRANS_H
-#define OPD_TRANS_H
-
-#include "opd_cookie.h"
-#include "op_types.h"
-
-#include <stdint.h>
-
-struct sfile;
-struct anon_mapping;
-
-enum tracing_type {
-	TRACING_OFF,
-	TRACING_START,
-	TRACING_ON
-};
-
-/**
- * Transient values used for parsing the event buffer.
- * Note that these are reset for each buffer read, but
- * that should be ok as in the kernel, cpu_buffer_reset()
- * ensures that a correct context starts off the buffer.
- */
-struct transient {
-	char const * buffer;
-	size_t remaining;
-	enum tracing_type tracing;
-	struct sfile * current;
-	struct sfile * last;
-	struct anon_mapping * anon;
-	struct anon_mapping * last_anon;
-	cookie_t cookie;
-	cookie_t app_cookie;
-	vma_t pc;
-	vma_t last_pc;
-	unsigned long event;
-	int in_kernel;
-	unsigned long cpu;
-	pid_t tid;
-	pid_t tgid;
-	uint64_t embedded_offset;
-};
-
-typedef void (*handler_t)(struct transient *);
-extern handler_t handlers[];
-
-uint64_t pop_buffer_value(struct transient * trans);
-int enough_remaining(struct transient * trans, size_t size);
-static inline void update_trans_last(struct transient * trans)
-{
-	trans->last = trans->current;
-	trans->last_anon = trans->anon;
-	trans->last_pc = trans->pc;
-}
-
-extern size_t kernel_pointer_size;
-static inline int is_escape_code(uint64_t code)
-{
-	return kernel_pointer_size == 4 ? code == ~0LU : code == ~0LLU;
-}
-
-void opd_process_samples(char const * buffer, size_t count);
-
-/** used when we need to clear data that's been freed */
-void clear_trans_last(struct transient * trans);
-
-/** used when we need to clear data that's been freed */
-void clear_trans_current(struct transient * trans);
-
-#endif /* OPD_TRANS_H */
diff --git a/daemon/oprofiled.c b/daemon/oprofiled.c
deleted file mode 100644
index ec2ea1b..0000000
--- a/daemon/oprofiled.c
+++ /dev/null
@@ -1,522 +0,0 @@
-/**
- * @file daemon/oprofiled.c
- * Initialisation and setup
- *
- * @remark Copyright 2002, 2003 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- * Modified by Aravind Menon for Xen
- * These modifications are:
- * Copyright (C) 2005 Hewlett-Packard Co.
- */
-
-#include "config.h"
- 
-#include "oprofiled.h"
-#include "opd_printf.h"
-#include "opd_events.h"
-
-#include "op_config.h"
-#include "op_version.h"
-#include "op_hw_config.h"
-#include "op_libiberty.h"
-#include "op_file.h"
-#include "op_abi.h"
-#include "op_string.h"
-#include "op_cpu_type.h"
-#include "op_popt.h"
-#include "op_lockfile.h"
-#include "op_list.h"
-#include "op_fileio.h"
-
-#include <sys/types.h>
-#include <sys/resource.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <assert.h>
-#include <dirent.h>
-#include <limits.h>
-
-sig_atomic_t signal_alarm;
-sig_atomic_t signal_hup;
-sig_atomic_t signal_term;
-sig_atomic_t signal_child;
-sig_atomic_t signal_usr1;
-sig_atomic_t signal_usr2;
-
-uint op_nr_counters;
-op_cpu cpu_type;
-int vsfile;
-int vsamples;
-int varcs;
-int vmodule;
-int vmisc;
-int separate_lib;
-int separate_kernel;
-int separate_thread;
-int separate_cpu;
-int no_vmlinux;
-char * vmlinux;
-char * kernel_range;
-char * session_dir;
-int no_xen;
-char * xenimage;
-char * xen_range;
-static char * verbose;
-static char * binary_name_filter;
-static char * events;
-static int showvers;
-static struct oprofiled_ops * opd_ops;
-extern struct oprofiled_ops opd_24_ops;
-extern struct oprofiled_ops opd_26_ops;
-
-#define OPD_IMAGE_FILTER_HASH_SIZE 32
-static struct list_head images_filter[OPD_IMAGE_FILTER_HASH_SIZE];
-
-static struct poptOption options[] = {
-	{ "session-dir", 0, POPT_ARG_STRING, &session_dir, 0, "place sample database in dir instead of default location", "/var/lib/oprofile", },
-	{ "kernel-range", 'r', POPT_ARG_STRING, &kernel_range, 0, "Kernel VMA range", "start-end", },
-	{ "vmlinux", 'k', POPT_ARG_STRING, &vmlinux, 0, "vmlinux kernel image", "file", },
-	{ "no-vmlinux", 0, POPT_ARG_NONE, &no_vmlinux, 0, "vmlinux kernel image file not available", NULL, },
-	{ "xen-range", 0, POPT_ARG_STRING, &xen_range, 0, "Xen VMA range", "start-end", },
-	{ "xen-image", 0, POPT_ARG_STRING, &xenimage, 0, "Xen image", "file", },
-	{ "image", 0, POPT_ARG_STRING, &binary_name_filter, 0, "image name filter", "profile these comma separated image" },
-	{ "separate-lib", 0, POPT_ARG_INT, &separate_lib, 0, "separate library samples for each distinct application", "[0|1]", },
-	{ "separate-kernel", 0, POPT_ARG_INT, &separate_kernel, 0, "separate kernel samples for each distinct application", "[0|1]", },
-	{ "separate-thread", 0, POPT_ARG_INT, &separate_thread, 0, "thread-profiling mode", "[0|1]" },
-	{ "separate-cpu", 0, POPT_ARG_INT, &separate_cpu, 0, "separate samples for each CPU", "[0|1]" },
-	{ "events", 'e', POPT_ARG_STRING, &events, 0, "events list", "[events]" },
-	{ "version", 'v', POPT_ARG_NONE, &showvers, 0, "show version", NULL, },
-	{ "verbose", 'V', POPT_ARG_STRING, &verbose, 0, "be verbose in log file", "all,sfile,arcs,samples,module,misc", },
-	POPT_AUTOHELP
-	{ NULL, 0, 0, NULL, 0, NULL, NULL, },
-};
- 
-
-void opd_open_logfile(void)
-{
-	if (open(op_log_file, O_WRONLY|O_CREAT|O_NOCTTY|O_APPEND, 0644) == -1) {
-		perror("oprofiled: couldn't re-open stdout: ");
-		exit(EXIT_FAILURE);
-	}
-
-	if (dup2(1, 2) == -1) {
-		perror("oprofiled: couldn't dup stdout to stderr: ");
-		exit(EXIT_FAILURE);
-	}
-}
- 
-
-/**
- * opd_fork - fork and return as child
- *
- * fork() and exit the parent with _exit().
- * Failure is fatal.
- */
-static void opd_fork(void)
-{
-	switch (fork()) {
-		case -1:
-			perror("oprofiled: fork() failed: ");
-			exit(EXIT_FAILURE);
-			break;
-		case 0:
-			break;
-		default:
-			/* parent */
-			_exit(EXIT_SUCCESS);
-			break;
-	}
-}
-
- 
-static void opd_go_daemon(void)
-{
-	opd_fork();
-
-	if (chdir(op_session_dir)) {
-		fprintf(stderr, "oprofiled: opd_go_daemon: couldn't chdir to %s: %s",
-			op_session_dir, strerror(errno));
-		exit(EXIT_FAILURE);
-	}
-
-	if (setsid() < 0) {
-		perror("oprofiled: opd_go_daemon: couldn't setsid: ");
-		exit(EXIT_FAILURE);
-	}
-
-	opd_fork();
-}
-
-
-static void opd_write_abi(void)
-{
-	char * cbuf;
- 
-	cbuf = xmalloc(strlen(op_session_dir) + 5);
-	strcpy(cbuf, op_session_dir);
-	strcat(cbuf, "/abi");
-	op_write_abi_to_file(cbuf);
-	free(cbuf);
-}
-
-
-/**
- * opd_alarm - sync files and report stats
- */
-static void opd_alarm(int val __attribute__((unused)))
-{
-	signal_alarm = 1;
-}
- 
-
-/* re-open logfile for logrotate */
-static void opd_sighup(int val __attribute__((unused)))
-{
-	signal_hup = 1;
-}
-
-
-static void opd_sigterm(int val __attribute__((unused)))
-{
-	signal_term = 1;
-}
-
-static void opd_sigchild(int val __attribute__((unused)))
-{
-	signal_child = 1;
-}
- 
-
-static void opd_sigusr1(int val __attribute__((unused)))
-{
-	signal_usr1 = 1;
-}
-
- 
-static void opd_sigusr2(int val __attribute__((unused)))
-{
-	signal_usr2 = 1;
-}
-
-
-static void opd_setup_signals(void)
-{
-	struct sigaction act;
- 
-	act.sa_handler = opd_alarm;
-	act.sa_flags = 0;
-	sigemptyset(&act.sa_mask);
-
-	if (sigaction(SIGALRM, &act, NULL)) {
-		perror("oprofiled: install of SIGALRM handler failed: ");
-		exit(EXIT_FAILURE);
-	}
-
-	act.sa_handler = opd_sighup;
-	act.sa_flags = 0;
-	sigemptyset(&act.sa_mask);
-	sigaddset(&act.sa_mask, SIGALRM);
-
-	if (sigaction(SIGHUP, &act, NULL)) {
-		perror("oprofiled: install of SIGHUP handler failed: ");
-		exit(EXIT_FAILURE);
-	}
-
-	act.sa_handler = opd_sigterm;
-	act.sa_flags = 0;
-	sigemptyset(&act.sa_mask);
-	sigaddset(&act.sa_mask, SIGTERM);
-
-	if (sigaction(SIGTERM, &act, NULL)) {
-		perror("oprofiled: install of SIGTERM handler failed: ");
-		exit(EXIT_FAILURE);
-	}
-
-	act.sa_handler = opd_sigchild;
-	act.sa_flags = 0;
-	sigemptyset(&act.sa_mask);
-	sigaddset(&act.sa_mask, SIGCHLD);
-
-	if (sigaction(SIGCHLD, &act, NULL)) {
-		perror("oprofiled: install of SIGCHLD handler failed: ");
-		exit(EXIT_FAILURE);
-	}
-
-	act.sa_handler = opd_sigusr1;
-	act.sa_flags = 0;
-	sigemptyset(&act.sa_mask);
-	sigaddset(&act.sa_mask, SIGTERM);
-
-	if (sigaction(SIGUSR1, &act, NULL)) {
-		perror("oprofiled: install of SIGUSR1 handler failed: ");
-		exit(EXIT_FAILURE);
-	}
-
-	act.sa_handler = opd_sigusr2;
-	act.sa_flags = 0;
-	sigemptyset(&act.sa_mask);
-	sigaddset(&act.sa_mask, SIGTERM);
-
-	if (sigaction(SIGUSR2, &act, NULL)) {
-		perror("oprofiled: install of SIGUSR2 handler failed: ");
-		exit(EXIT_FAILURE);
-	}
-}
-
-
-struct opd_hashed_name {
-	char * name;
-	struct list_head next;
-};
-
-
-static void add_image_filter(char const * name)
-{
-	size_t hash;
-	struct opd_hashed_name * elt = xmalloc(sizeof(struct opd_hashed_name));
-	elt->name = xmalloc(PATH_MAX);
-	if (!realpath(name, elt->name)) {
-		free(elt->name);
-		free(elt);
-		return;
-	}
-	hash = op_hash_string(elt->name);
-	verbprintf(vmisc, "Adding to image filter: \"%s\"\n", elt->name);
-	list_add(&elt->next, &images_filter[hash % OPD_IMAGE_FILTER_HASH_SIZE]);
-}
-
-
-static void opd_parse_image_filter(void)
-{
-	size_t i;
-	char const * last = binary_name_filter;
-	char const * cur = binary_name_filter;
-
-	if (!binary_name_filter)
-		return;
-
-	for (i = 0; i < OPD_IMAGE_FILTER_HASH_SIZE; ++i)
-		list_init(&images_filter[i]);
-
-	while ((cur = strchr(last, ',')) != NULL) {
-		char * tmp = op_xstrndup(last, cur - last);
-		add_image_filter(tmp);
-		free(tmp);
-		last = cur + 1;
-	}
-	add_image_filter(last);
-}
-
-
-int is_image_ignored(char const * name)
-{
-	size_t hash;
-	struct list_head * pos;
-
-	if (!binary_name_filter)
-		return 0;
-	
-	hash = op_hash_string(name);
-
-	list_for_each(pos, &images_filter[hash % OPD_IMAGE_FILTER_HASH_SIZE]) {
-		struct opd_hashed_name * hashed_name =
-			list_entry(pos, struct opd_hashed_name, next);
-		if (!strcmp(hashed_name->name, name))
-			return 0;
-	}
-
-	return 1;
-}
-
-
-/** return the int in the given oprofilefs file */
-int opd_read_fs_int(char const * path, char const * name, int fatal)
-{
-	char filename[PATH_MAX + 1];
-	snprintf(filename, PATH_MAX, "%s/%s", path, name);
-	return op_read_int_from_file(filename, fatal);
-}
-
-
-static void opd_handle_verbose_option(char const * name)
-{
-	if (!strcmp(name, "all")) {
-		vsfile = 1;
-		vsamples = 1;
-		varcs = 1;
-		vmodule = 1;
-		vmisc = 1;
-	} else if (!strcmp(name, "sfile")) {
-		vsfile = 1;
-	} else if (!strcmp(name, "arcs")) {
-		varcs = 1;
-	} else if (!strcmp(name, "samples")) {
-		vsamples = 1;
-	} else if (!strcmp(name, "module")) {
-		vmodule = 1;
-	} else if (!strcmp(name, "misc")) {
-		vmisc = 1;
-	} else {
-		fprintf(stderr, "unknown verbose options\n");
-		exit(EXIT_FAILURE);
-	}
-}
-
-static void opd_parse_verbose(void)
-{
-	char const * last = verbose;
-	char const * cur = verbose;
-
-	if (!verbose)
-		return;
-
-	while ((cur = strchr(last, ',')) != NULL) {
-		char * tmp = op_xstrndup(last, cur - last);
-		opd_handle_verbose_option(tmp);
-		free(tmp);
-		last = cur + 1;
-	}
-	opd_handle_verbose_option(last);
-}
-
-
-static void opd_options(int argc, char const * argv[])
-{
-	poptContext optcon;
-	char * tmp;
-
-	optcon = op_poptGetContext(NULL, argc, argv, options, 0);
-
-	if (showvers)
-		show_version(argv[0]);
-
-	opd_parse_verbose();
-
-	if (separate_kernel)
-		separate_lib = 1;
-
-	cpu_type = op_get_cpu_type();
-	op_nr_counters = op_get_nr_counters(cpu_type);
-
-	if (!no_vmlinux) {
-		if (!vmlinux || !strcmp("", vmlinux)) {
-			fprintf(stderr, "oprofiled: no vmlinux specified.\n");
-			poptPrintHelp(optcon, stderr, 0);
-			exit(EXIT_FAILURE);
-		}
-
-		/* canonicalise vmlinux filename. fix #637805 */
-		tmp = xmalloc(PATH_MAX);
-		if (realpath(vmlinux, tmp))
-			vmlinux = tmp;
-		else
-			free(tmp);
-
-		if (!kernel_range || !strcmp("", kernel_range)) {
-			fprintf(stderr, "oprofiled: no kernel VMA range specified.\n");
-			poptPrintHelp(optcon, stderr, 0);
-			exit(EXIT_FAILURE);
-		}
-	}
-
-	if (events == NULL) {
-		fprintf(stderr, "oprofiled: no events specified.\n");
-		poptPrintHelp(optcon, stderr, 0);
-		exit(EXIT_FAILURE);
-	}
-
-	if (!xenimage || !strcmp("", xenimage)) {
-		no_xen = 1;
-	} else {
-		no_xen = 0;
-
-		/* canonicalise xen image filename. */
-		tmp = xmalloc(PATH_MAX);
-		if (realpath(xenimage, tmp))
-			xenimage = tmp;
-		else
-			free(tmp);
-
-		if (!xen_range || !strcmp("", xen_range)) {
-			fprintf(stderr, "oprofiled: no Xen VMA range specified.\n");
-			poptPrintHelp(optcon, stderr, 0);
-			exit(EXIT_FAILURE);
-		}
-	}
-
-	opd_parse_events(events);
-
-	opd_parse_image_filter();
-
-	poptFreeContext(optcon);
-}
-
-
-/* determine what kernel we're running and which daemon
- * to use
- */
-static struct oprofiled_ops * get_ops(void)
-{
-	switch (op_get_interface()) {
-#ifndef ANDROID
-		case OP_INTERFACE_24:
-			printf("Using 2.4 OProfile kernel interface.\n");
-			return &opd_24_ops;
-#endif
-		case OP_INTERFACE_26:
-			printf("Using 2.6+ OProfile kernel interface.\n");
-			return &opd_26_ops;
-		default:
-			break;
-	}
-
-	fprintf(stderr, "Couldn't determine kernel version.\n");
-	exit(EXIT_FAILURE);
-	return NULL;
-}
-
-
-int main(int argc, char const * argv[])
-{
-	int err;
-	struct rlimit rlim = { 2048, 2048 };
-
-	opd_options(argc, argv);
-	init_op_config_dirs(session_dir);
-
-	opd_setup_signals();
-
-	err = setrlimit(RLIMIT_NOFILE, &rlim);
-	if (err)
-		perror("warning: could not set RLIMIT_NOFILE to 2048: ");
-
-	opd_write_abi();
-
-	opd_ops = get_ops();
-
-	opd_ops->init();
-
-	opd_go_daemon();
-
-	/* clean up every 10 minutes */
-	alarm(60 * 10);
-
-	if (op_write_lock_file(op_lock_file)) {
-		fprintf(stderr, "oprofiled: could not create lock file %s\n",
-			op_lock_file);
-		exit(EXIT_FAILURE);
-	}
-
-	opd_ops->start();
-
-	opd_ops->exit();
-
-	return 0;
-}
diff --git a/daemon/oprofiled.h b/daemon/oprofiled.h
deleted file mode 100644
index b319df1..0000000
--- a/daemon/oprofiled.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * @file daemon/oprofiled.h
- * Initialisation and setup
- *
- * @remark Copyright 2002, 2003 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- * Modified by Aravind Menon for Xen
- * These modifications are:
- * Copyright (C) 2005 Hewlett-Packard Co.
- */
-
-#ifndef OPROFILED_H
-
-#include <signal.h>
-
-struct oprofiled_ops {
-	void (*init)(void);
-	void (*start)(void);
-	void (*exit)(void);
-};
-
-
-/**
- * opd_open_logfile - open the log file
- *
- * Open the logfile on stdout and stderr. This function
- * assumes that 1 and 2 are the lowest close()d file
- * descriptors. Failure to open on either descriptor is
- * a fatal error.
- */
-void opd_open_logfile(void);
-
- 
-/**
- * is_image_ignored - check if we must ignore this image
- * @param name the name to check
- *
- * Return true if the image should not be profiled
- */
-int is_image_ignored(char const * name);
-
-/** return the int in the given oprofilefs file, error is fatal if !is_fatal */
-int opd_read_fs_int(char const * path, char const * name, int is_fatal);
-
-
-/** global variable positioned by signal handler */
-extern sig_atomic_t signal_alarm;
-extern sig_atomic_t signal_hup;
-extern sig_atomic_t signal_term;
-extern sig_atomic_t signal_child;
-extern sig_atomic_t signal_usr1;
-extern sig_atomic_t signal_usr2;
-
-extern unsigned int op_nr_counters;
-extern int separate_lib;
-extern int separate_kernel;
-extern int separate_thread;
-extern int separate_cpu;
-extern int no_vmlinux;
-extern char * vmlinux;
-extern char * kernel_range;
-extern int no_xen;
-extern char * xenimage;
-extern char * xen_range;
-
-#endif /* OPROFILED_H */
diff --git a/libabi/Android.mk b/libabi/Android.mk
deleted file mode 100644
index 3213c1e..0000000
--- a/libabi/Android.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= op_abi.c
-
-LOCAL_MODULE := libabi
-
-LOCAL_C_INCLUDES := \
-	$(LOCAL_PATH)/.. \
-	$(LOCAL_PATH)/../libdb \
-	$(LOCAL_PATH)/../libutil \
-	$(LOCAL_PATH)/../libop
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/libabi/abi.cpp b/libabi/abi.cpp
deleted file mode 100644
index 04a6b2d..0000000
--- a/libabi/abi.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * @file abi.cpp
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Graydon Hoare
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include "abi.h"
-#include "op_abi.h"
-#include "odb.h"
-#include "op_sample_file.h"
-
-#include <iostream>
-#include <cassert>
-
-using namespace std;
-
-typedef map<string, int> abi_map;
-typedef abi_map::const_iterator abi_iter;
-
-abi_exception::abi_exception(string const d) : desc(d) {}
-
-
-abi::abi()
-{
-	op_abi_entry const * entry = get_abi();
-	for ( ; entry->name != 0; ++entry)
-		slots[entry->name] = entry->offset;
-
-	slots["little_endian"] = op_little_endian();
-}
-
-
-int abi::need(string const key) const throw (abi_exception)
-{
-	if (slots.find(key) != slots.end())
-		return slots.find(key)->second;
-	else
-		throw abi_exception(string("missing ABI key: ") + key);
-}
-
-
-bool abi::operator==(abi const & other) const
-{
-	return slots == other.slots;
-}
-
-
-ostream & operator<<(ostream & o, abi const & abi)
-{
-	abi_iter i = abi.slots.begin();
-	abi_iter e = abi.slots.end();
-
-	for (; i != e; ++i)
-		o << i->first << " " << i->second << endl;
-
-	return o;
-}
-
-
-istream & operator>>(istream & i, abi & abi)
-{
-	string key;
-	int val;
-	abi.slots.clear();
-
-	while(i >> key >> val)
-		abi.slots[key] = val;
-
-	return i;
-}
diff --git a/libabi/abi.h b/libabi/abi.h
deleted file mode 100644
index 8b63e7f..0000000
--- a/libabi/abi.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * @file abi.h
- *
- * Contains internal ABI management class
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Graydon Hoare
- */
-
-#ifndef OPROF_ABI_H
-#define OPROF_ABI_H
- 
-#include <string>
-#include <map>
-#include <iosfwd>
-
-struct abi_exception : std::exception {
-	std::string const desc;
- 
-	explicit abi_exception(std::string const d);
- 
-	~abi_exception() throw() {}
-};
-
-
-class abi {
-public:
-	abi();
-
-	int need(std::string const key) const throw (abi_exception);
-
-	bool operator==(abi const & other) const;
-	friend std::ostream & operator<<(std::ostream & o, abi const & abi);
-	friend std::istream & operator>>(std::istream & i, abi & abi);
-
-private:
-	std::map<std::string, int> slots;
-};
-
-#endif // OPROF_ABI_H
diff --git a/libabi/op_abi.c b/libabi/op_abi.c
deleted file mode 100644
index 283e3ff..0000000
--- a/libabi/op_abi.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- * @file op_abi.c
- * This file contains a simple C interface to the ABI-describing functionality,
- * the majority of which is implemented in C++. This is the file which is 
- * intended for use in files outside the /libabi directory.
- *
- * @remark Copyright 2002, 2005 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Graydon Hoare
- * @author Philippe Elie
- */
-
-#include "op_abi.h"
-#include "odb.h"
-#include "op_sample_file.h"
-
-#include <stdio.h>
-#include <stddef.h>
-#include <assert.h>
-
-static struct op_abi_entry const abi_entries[] = {
-	{ "sizeof_double", sizeof(double) },
-	{ "sizeof_time_t", sizeof(time_t) },
-	{ "sizeof_u8", sizeof(u8) },
-	{ "sizeof_u32", sizeof(u32) },
-	{ "sizeof_int", sizeof(int) },
-	{ "sizeof_unsigned_int", sizeof(unsigned int) },
-	{ "sizeof_odb_key_t", sizeof(odb_key_t) },
-	{ "sizeof_odb_index_t", sizeof(odb_index_t) },
-	{ "sizeof_odb_value_t", sizeof(odb_value_t) },
-	{ "sizeof_odb_node_nr_t", sizeof(odb_node_nr_t) },
-	{ "sizeof_odb_descr_t", sizeof(odb_descr_t) },
-	{ "sizeof_odb_node_t", sizeof(odb_node_t) },
-	{ "sizeof_struct_opd_header", sizeof(struct opd_header) },
-	
-	{ "offsetof_node_key", offsetof(odb_node_t, key) },
-	{ "offsetof_node_value", offsetof(odb_node_t, value) },
-	{ "offsetof_node_next", offsetof(odb_node_t, next) },
-	
-	{ "offsetof_descr_size", offsetof(odb_descr_t, size) },
-	{ "offsetof_descr_current_size", offsetof(odb_descr_t, current_size) },
-	
-	{ "offsetof_header_magic", offsetof(struct opd_header, magic) },
-	{ "offsetof_header_version", offsetof(struct opd_header, version) },
-	{ "offsetof_header_cpu_type", offsetof(struct opd_header, cpu_type) },
-	{ "offsetof_header_ctr_event", offsetof(struct opd_header, ctr_event) },
-	{ "offsetof_header_ctr_um", offsetof(struct opd_header, ctr_um) },
-	{ "offsetof_header_ctr_count", offsetof(struct opd_header, ctr_count) },
-	{ "offsetof_header_is_kernel", offsetof(struct opd_header, is_kernel) },
-	{ "offsetof_header_cpu_speed", offsetof(struct opd_header, cpu_speed) },
-	{ "offsetof_header_mtime", offsetof(struct opd_header, mtime) },
-	{ "offsetof_header_cg_to_is_kernel", offsetof(struct opd_header, cg_to_is_kernel), },
-	{ "offsetof_header_anon_start", offsetof(struct opd_header, anon_start) },
-	{ "offsetof_header_cg_to_anon_start", offsetof(struct opd_header, cg_to_anon_start) },
-	
-	{ NULL, 0 },
-};
-
-
-struct op_abi_entry const * get_abi(void)
-{
-	return abi_entries;
-}
-
-
-int op_little_endian(void)
-{
-	unsigned int probe = 0xff;
-	size_t sz = sizeof(unsigned int);
-	unsigned char * probe_byte = (unsigned char *)&probe;
-
-	assert(probe_byte[0] == 0xff || probe_byte[sz - 1] == 0xff);
-
-	return probe_byte[0] == 0xff;
-}
-
-
-int op_write_abi_to_file(char const * abi_file)
-{
-	FILE * fp;
-	struct op_abi_entry const * abi_entry;
-
-	if ((fp = fopen(abi_file, "w")) == NULL)
-		return 0;
-
-	for (abi_entry = get_abi() ; abi_entry->name != NULL; ++abi_entry)
-		fprintf(fp, "%s %u\n", abi_entry->name, abi_entry->offset);
-	fprintf(fp, "little_endian %d\n", op_little_endian());
-
-	fclose(fp);
-
-	return 1;
-}
diff --git a/libabi/op_abi.h b/libabi/op_abi.h
deleted file mode 100644
index fbd337b..0000000
--- a/libabi/op_abi.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * @file op_abi.h
- * This file contains a simple C interface to the ABI-describing functionality,
- * the majority of which is implemented in C++. this is the file which is 
- * intended for use in files outside the /libabi directory.
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Graydon Hoare
- * @author Philippe Elie
- */
-
-#ifndef OP_ABI_H
-#define OP_ABI_H
-
-struct op_abi_entry {
-	char const * name;
-	/// offset or size of the named entry
-	int offset;
-};
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/// return array is terminated by a NULL entry in name field
-struct op_abi_entry const * get_abi(void);
-
-/// return non zero if the abi is little endian
-int op_little_endian(void);
-
-/**
- * Write current abi to file.
- * return 1 on success, 0 on failure
- */
-int op_write_abi_to_file(char const * abi_file);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // OP_ABI_H
diff --git a/libabi/opimport.cpp b/libabi/opimport.cpp
deleted file mode 100644
index 57f74a7..0000000
--- a/libabi/opimport.cpp
+++ /dev/null
@@ -1,225 +0,0 @@
-/**
- * @file opimport.cpp
- * Import sample files from other ABI
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Graydon Hoare
- */
-
-#include "abi.h"
-#include "odb.h"
-#include "popt_options.h"
-#include "op_sample_file.h"
-
-#include <fstream>
-#include <iostream>
-#include <vector>
-#include <cassert>
-#include <cstring>
-#include <cstdlib>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <cstdlib>
-#include <cstring>
-
-using namespace std;
-
-namespace {
-	string output_filename;
-	string abi_filename;
-	bool verbose;
-	bool force;
-};
-
-
-popt::option options_array[] = {
-	popt::option(verbose, "verbose", 'V', "verbose output"),
-	popt::option(output_filename, "output", 'o', "output to file", "filename"),
-	popt::option(abi_filename, "abi", 'a', "abi description", "filename"),
-	popt::option(force, "force", 'f', "force conversion, even if identical")
-};
-
-
-struct extractor {
-
-	abi const & theabi;
-
-	unsigned char const * begin;
-	unsigned char const * end;
-	bool little_endian;
-
-	explicit
-	extractor(abi const & a, unsigned char const * src, size_t len)
-		: theabi(a), begin(src), end(src + len) {
-		little_endian = theabi.need(string("little_endian")) == 1;
-		if (verbose) {
-			cerr << "source byte order is: "
-			     << string(little_endian ? "little" : "big")
-			     << " endian" << endl;
-		}
-	}
-
-	template <typename T>
-	void extract(T & targ, void const * src_,
-	             char const * sz, char const * off);
-};
-
-
-template <typename T>
-void extractor::extract(T & targ, void const * src_,
-                        char const * sz, char const * off)
-{
-	unsigned char const * src = static_cast<unsigned char const *>(src_)
-		+ theabi.need(off);
-	size_t nbytes = theabi.need(sz);
-	
-	if (nbytes == 0)
-		return;
-	
-	assert(nbytes <= sizeof(T));
-	assert(src >= begin);
-	assert(src + nbytes <= end);
-	
-	if (verbose)
-		cerr << hex << "get " << sz << " = " << nbytes
-		     << " bytes @ " << off << " = " << (src - begin)
-		     << " : ";
-
-	targ = 0;
-	if (little_endian)
-		while(nbytes--)
-			targ = (targ << 8) | src[nbytes];
-	else
-		for(size_t i = 0; i < nbytes; ++i)
-			targ = (targ << 8) | src[i];
-	
-	if (verbose)
-		cerr << " = " << targ << endl;
-}
-
-
-void import_from_abi(abi const & abi, void const * srcv,
-                     size_t len, odb_t * dest) throw (abi_exception)
-{
-	struct opd_header * head =
-		static_cast<opd_header *>(odb_get_data(dest));
-	unsigned char const * src = static_cast<unsigned char const *>(srcv);
-	unsigned char const * const begin = src;
-	extractor ext(abi, src, len);	
-
-	memcpy(head->magic, src + abi.need("offsetof_header_magic"), 4);
-
-	// begin extracting opd header
-	ext.extract(head->version, src, "sizeof_u32", "offsetof_header_version");
-	ext.extract(head->cpu_type, src, "sizeof_u32", "offsetof_header_cpu_type");
-	ext.extract(head->ctr_event, src, "sizeof_u32", "offsetof_header_ctr_event");
-	ext.extract(head->ctr_um, src, "sizeof_u32", "offsetof_header_ctr_um");
-	ext.extract(head->ctr_count, src, "sizeof_u32", "offsetof_header_ctr_count");
-	ext.extract(head->is_kernel, src, "sizeof_u32", "offsetof_header_is_kernel");
-	// "double" extraction is unlikely to work
-	head->cpu_speed = 0.0;
-	ext.extract(head->mtime, src, "sizeof_time_t", "offsetof_header_mtime");
-	ext.extract(head->cg_to_is_kernel, src, "sizeof_u32",
-		"offsetof_header_cg_to_is_kernel");
-	ext.extract(head->anon_start, src, "sizeof_u32",
-		"offsetof_header_anon_start");
-	ext.extract(head->cg_to_anon_start, src, "sizeof_u32",
-		"offsetof_header_cg_to_anon_start");
-	src += abi.need("sizeof_struct_opd_header");
-	// done extracting opd header
-
-	// begin extracting necessary parts of descr
-	odb_node_nr_t node_nr;
-	ext.extract(node_nr, src, "sizeof_odb_node_nr_t", "offsetof_descr_current_size");
-	src += abi.need("sizeof_odb_descr_t");
-	// done extracting descr
-
-	// skip node zero, it is reserved and contains nothing usefull
-	src += abi.need("sizeof_odb_node_t");
-
-	// begin extracting nodes
-	unsigned int step = abi.need("sizeof_odb_node_t");
-	if (verbose)
-		cerr << "extracting " << node_nr << " nodes of " << step << " bytes each " << endl;
-
-	assert(src + (node_nr * step) <= begin + len);
-
-	for (odb_node_nr_t i = 1 ; i < node_nr ; ++i, src += step) {
-		odb_key_t key;
-		odb_value_t val;
-		ext.extract(key, src, "sizeof_odb_key_t", "offsetof_node_key");
-		ext.extract(val, src, "sizeof_odb_value_t", "offsetof_node_value");
-		int rc = odb_add_node(dest, key, val);
-		if (rc != EXIT_SUCCESS) {
-			cerr << strerror(rc) << endl;
-			exit(EXIT_FAILURE);
-		}
-	}
-	// done extracting nodes
-}
-
-
-int main(int argc, char const ** argv)
-{
-
-	vector<string> inputs;
-	popt::parse_options(argc, argv, inputs);
-
-	if (inputs.size() != 1) {
-		cerr << "error: must specify exactly 1 input file" << endl;
-		exit(1);
-	}
-
-	abi current_abi, input_abi;
-
-	{
-		ifstream abi_file(abi_filename.c_str());
-		if (!abi_file) {
-			cerr << "error: cannot open abi file "
-			     << abi_filename << endl;
-			exit(1);
-		}
-		abi_file >> input_abi;
-	}
-
-	if (!force && current_abi == input_abi) {
-		cerr << "input abi is identical to native. "
-		     << "no conversion necessary." << endl;
-		exit(1);
-	}
-
-	int in_fd;
-	struct stat statb;
-	void * in;
-	odb_t dest;
-	int rc;
-
-	assert((in_fd = open(inputs[0].c_str(), O_RDONLY)) > 0);		
-	assert(fstat(in_fd, &statb) == 0);
-	assert((in = mmap(0, statb.st_size, PROT_READ,
-			  MAP_PRIVATE, in_fd, 0)) != (void *)-1);
-
-	rc = odb_open(&dest, output_filename.c_str(), ODB_RDWR,
-		      sizeof(struct opd_header));
-	if (rc) {
-		cerr << "odb_open() fail:\n"
-		     << strerror(rc) << endl;
-		exit(EXIT_FAILURE);
-	}
-
-	try {
-		import_from_abi(input_abi, in, statb.st_size, &dest);
-	} catch (abi_exception & e) {
-		cerr << "caught abi exception: " << e.desc << endl;
-	}
-
-	odb_close(&dest);
-
-	assert(munmap(in, statb.st_size) == 0);
-}
diff --git a/libdb/Android.mk b/libdb/Android.mk
deleted file mode 100644
index 1594fe8..0000000
--- a/libdb/Android.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
-	db_debug.c \
-	db_insert.c \
-	db_manage.c \
-	db_stat.c \
-	db_travel.c
-
-LOCAL_C_INCLUDES := \
-	$(LOCAL_PATH)/.. \
-	$(LOCAL_PATH)/../libutil
-
-LOCAL_MODULE := libdb
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/libdb/db_debug.c b/libdb/db_debug.c
deleted file mode 100644
index 0575570..0000000
--- a/libdb/db_debug.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * @file db_debug.c
- * Debug routines for libdb
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Philippe Elie
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "odb.h"
-
-static int check_circular_list(odb_data_t const * data)
-{
-	odb_node_nr_t pos;
-	int do_abort = 0;
-	unsigned char * bitmap = malloc(data->descr->current_size);
-	memset(bitmap, '\0', data->descr->current_size);
-
-	for (pos = 0 ; pos < data->descr->size * BUCKET_FACTOR ; ++pos) {
-
-		odb_index_t index = data->hash_base[pos];
-		if (index && !do_abort) {
-			while (index) {
-				if (bitmap[index])
-					do_abort = 1;
-
-				bitmap[index] = 1;
-				index = data->node_base[index].next;
-			}
-		}
-
-		if (do_abort) {
-			printf("circular list detected size: %d\n",
-			       data->descr->current_size);
-
-			memset(bitmap, '\0', data->descr->current_size);
-
-			index = data->hash_base[pos];
-			while (index) {
-				printf("%d ", index);
-				if (bitmap[index])
-					exit(1);
-
-				bitmap[index] = 1;
-				index = data->node_base[index].next;
-			}
-		}
-
-		/* purely an optimization: intead of memset the map reset only
-		 * the needed part: not my use to optimize test but here the
-		 * test was so slow it was useless */
-		index = data->hash_base[pos];
-		while (index) {
-			bitmap[index] = 1;
-			index = data->node_base[index].next;
-		}
-	}
-
-	free(bitmap);
-
-	return do_abort;
-}
-
-static int check_redundant_key(odb_data_t const * data, odb_key_t max)
-{
-	odb_node_nr_t pos;
-
-	unsigned char * bitmap = malloc(max + 1);
-	memset(bitmap, '\0', max + 1);
-
-	for (pos = 1 ; pos < data->descr->current_size ; ++pos) {
-		if (bitmap[data->node_base[pos].key]) {
-			printf("redundant key found %lld\n",
-			       (unsigned long long)data->node_base[pos].key);
-			return 1;
-		}
-		bitmap[data->node_base[pos].key] = 1;
-	}
-	free(bitmap);
-
-	return 0;
-}
-
-int odb_check_hash(odb_t const * odb)
-{
-	odb_node_nr_t pos;
-	odb_node_nr_t nr_node = 0;
-	odb_node_nr_t nr_node_out_of_bound = 0;
-	int ret = 0;
-	odb_key_t max = 0;
-	odb_data_t * data = odb->data;
-
-	for (pos = 0 ; pos < data->descr->size * BUCKET_FACTOR ; ++pos) {
-		odb_index_t index = data->hash_base[pos];
-		while (index) {
-			if (index >= data->descr->current_size) {
-				nr_node_out_of_bound++;
-				break;
-			}
-			++nr_node;
-
-			if (data->node_base[index].key > max)
-				max = data->node_base[index].key;
-
-			index = data->node_base[index].next;
-		}
-	}
-
-	if (nr_node != data->descr->current_size - 1) {
-		printf("hash table walk found %d node expect %d node\n",
-		       nr_node, data->descr->current_size - 1);
-		ret = 1;
-	}
-
-	if (nr_node_out_of_bound) {
-		printf("out of bound node index: %d\n", nr_node_out_of_bound);
-		ret = 1;
-	}
-
-	if (ret == 0)
-		ret = check_circular_list(data);
-
-	if (ret == 0)
-		ret = check_redundant_key(data, max);
-
-	return ret;
-}
diff --git a/libdb/db_insert.c b/libdb/db_insert.c
deleted file mode 100644
index 018c294..0000000
--- a/libdb/db_insert.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * @file db_insert.c
- * Inserting a key-value pair into a DB
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Philippe Elie
- */
-
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include "odb.h"
-
-
-static inline int add_node(odb_data_t * data, odb_key_t key, odb_value_t value)
-{
-	odb_index_t new_node;
-	odb_node_t * node;
-	odb_index_t index;
-
-	/* no locking is necessary: iteration interface retrieve data through
-	 * the node_base array, we doesn't increase current_size now but it's
-	 * done by odb_commit_reservation() so the new slot is visible only
-	 * after the increment
-	 */
-	if (data->descr->current_size >= data->descr->size) {
-		if (odb_grow_hashtable(data))
-			return EINVAL;
-	}
-	new_node = data->descr->current_size;
-
-	node = &data->node_base[new_node];
-	node->value = value;
-	node->key = key;
-
-	index = odb_do_hash(data, key);
-	node->next = data->hash_base[index];
-	data->hash_base[index] = new_node;
-
-	/* FIXME: we need wrmb() here */
-	odb_commit_reservation(data);
-
-	return 0;
-}
-
-int odb_update_node(odb_t * odb, odb_key_t key)
-{
-	odb_index_t index;
-	odb_node_t * node;
-	odb_data_t * data;
-
-	data = odb->data;
-	index = data->hash_base[odb_do_hash(data, key)];
-	while (index) {
-		node = &data->node_base[index];
-		if (node->key == key) {
-			if (node->value + 1 != 0) {
-				node->value += 1;
-			} else {
-				/* post profile tools must handle overflow */
-				/* FIXME: the tricky way will be just to add
-				 * a goto to jump right before the return
-				 * add_node(), in this way we no longer can
-				 * overflow. It'll work because new node are
-				 * linked at the start of the node list for
-				 * this bucket so this loop will see first a
-				 * non overflowed node if one exist. When we
-				 * grow the hashtable the most recently
-				 * allocated node for this key will be setup
-				 * last, so again it'll be linked at start of
-				 * the list. pp tools looke like ok with this
-				 * change.
-				 *
-				 * This change doesn't involve any file format
-				 * change but perhaps it's a bit hacky to do
-				 * this w/o bumping the sample file format
-				 * version. The drawback of this is the added
-				 * node are additive not multiplicative.
-				 * (multiplicative as if we add more bits to
-				 * store a value)
-				 */
-			}
-			return 0;
-		}
-
-		index = node->next;
-	}
-
-	return add_node(data, key, 1);
-}
-
-
-int odb_add_node(odb_t * odb, odb_key_t key, odb_value_t value)
-{
-	return add_node(odb->data, key, value);
-}
diff --git a/libdb/db_manage.c b/libdb/db_manage.c
deleted file mode 100644
index d8a6fcb..0000000
--- a/libdb/db_manage.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/**
- * @file db_manage.c
- * Management of a DB file
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Philippe Elie
- */
-
-#define _GNU_SOURCE
-
-#include <stdlib.h>
-#ifndef ANDROID
-#include <sys/fcntl.h>
-#else
-#include <fcntl.h>
-#endif
-#include <sys/mman.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-
-#include "odb.h"
-#include "op_string.h"
-#include "op_libiberty.h"
-
- 
-static __inline odb_descr_t * odb_to_descr(odb_data_t * data)
-{
-	return (odb_descr_t *)(((char*)data->base_memory) + data->sizeof_header);
-}
-
- 
-static __inline odb_node_t * odb_to_node_base(odb_data_t * data)
-{
-	return (odb_node_t *)(((char *)data->base_memory) + data->offset_node);
-}
-
- 
-static __inline odb_index_t * odb_to_hash_base(odb_data_t * data)
-{
-	return (odb_index_t *)(((char *)data->base_memory) + 
-				data->offset_node +
-				(data->descr->size * sizeof(odb_node_t)));
-}
-
- 
-/**
- * return the number of bytes used by hash table, node table and header.
- */
-static unsigned int tables_size(odb_data_t const * data, odb_node_nr_t node_nr)
-{
-	size_t size;
-
-	size = node_nr * (sizeof(odb_index_t) * BUCKET_FACTOR);
-	size += node_nr * sizeof(odb_node_t);
-	size += data->offset_node;
-
-	return size;
-}
-
-
-int odb_grow_hashtable(odb_data_t * data)
-{
-	unsigned int old_file_size;
-	unsigned int new_file_size;
-	unsigned int pos;
-	void * new_map;
-
-	old_file_size = tables_size(data, data->descr->size);
-	new_file_size = tables_size(data, data->descr->size * 2);
-
-	if (ftruncate(data->fd, new_file_size))
-		return 1;
-
-	new_map = mremap(data->base_memory,
-			 old_file_size, new_file_size, MREMAP_MAYMOVE);
-
-	if (new_map == MAP_FAILED)
-		return 1;
-
-	data->base_memory = new_map;
-	data->descr = odb_to_descr(data);
-	data->descr->size *= 2;
-	data->node_base = odb_to_node_base(data);
-	data->hash_base = odb_to_hash_base(data);
-	data->hash_mask = (data->descr->size * BUCKET_FACTOR) - 1;
-
-	/* rebuild the hash table, node zero is never used. This works
-	 * because layout of file is node table then hash table,
-	 * sizeof(node) > sizeof(bucket) and when we grow table we
-	 * double size ==> old hash table and new hash table can't
-	 * overlap so on the new hash table is entirely in the new
-	 * memory area (the grown part) and we know the new hash
-	 * hash table is zeroed. That's why we don't need to zero init
-	 * the new table */
-	/* OK: the above is not exact
-	 * if BUCKET_FACTOR < sizeof(bd_node_t) / sizeof(bd_node_nr_t)
-	 * all things are fine and we don't need to init the hash
-	 * table because in this case the new hash table is completely
-	 * inside the new growed part. Avoiding to touch this memory is
-	 * useful.
-	 */
-#if 0
-	for (pos = 0 ; pos < data->descr->size*BUCKET_FACTOR ; ++pos)
-		data->hash_base[pos] = 0;
-#endif
-
-	for (pos = 1; pos < data->descr->current_size; ++pos) {
-		odb_node_t * node = &data->node_base[pos];
-		size_t index = odb_do_hash(data, node->key);
-		node->next = data->hash_base[index];
-		data->hash_base[index] = pos;
-	}
-
-	return 0;
-}
-
-
-void odb_init(odb_t * odb)
-{
-	odb->data = NULL;
-}
-
-
-/* the default number of page, calculated to fit in 4096 bytes */
-#define DEFAULT_NODE_NR(offset_node)	128
-#define FILES_HASH_SIZE                 512
-
-static struct list_head files_hash[FILES_HASH_SIZE];
-
-
-static void init_hash()
-{
-	size_t i;
-	for (i = 0; i < FILES_HASH_SIZE; ++i)
-		list_init(&files_hash[i]);
-}
-
-
-static odb_data_t *
-find_samples_data(size_t hash, char const * filename)
-{
-	struct list_head * pos;
-
-	/* FIXME: maybe an initial init routine ? */
-	if (files_hash[0].next == NULL) {
-		init_hash();
-		return NULL;
-	}
-
-	list_for_each(pos, &files_hash[hash]) {
-		odb_data_t * entry = list_entry(pos, odb_data_t, list);
-		if (strcmp(entry->filename, filename) == 0)
-			return entry;
-	}
-
-	return NULL;
-}
-
-
-int odb_open(odb_t * odb, char const * filename, enum odb_rw rw,
-	     size_t sizeof_header)
-{
-	struct stat stat_buf;
-	odb_node_nr_t nr_node;
-	odb_data_t * data;
-	size_t hash;
-	int err = 0;
-
-	int flags = (rw == ODB_RDWR) ? (O_CREAT | O_RDWR) : O_RDONLY;
-	int mmflags = (rw == ODB_RDWR) ? (PROT_READ | PROT_WRITE) : PROT_READ;
-
-	hash = op_hash_string(filename) % FILES_HASH_SIZE;
-	data = find_samples_data(hash, filename);
-	if (data) {
-		odb->data = data;
-		data->ref_count++;
-		return 0;
-	}
-
-	data = xmalloc(sizeof(odb_data_t));
-	memset(data, '\0', sizeof(odb_data_t));
-	list_init(&data->list);
-	data->offset_node = sizeof_header + sizeof(odb_descr_t);
-	data->sizeof_header = sizeof_header;
-	data->ref_count = 1;
-	data->filename = xstrdup(filename);
-
-	data->fd = open(filename, flags, 0644);
-	if (data->fd < 0) {
-		err = errno;
-		goto out;
-	}
-
-	if (fstat(data->fd, &stat_buf)) {
-		err = errno;
-		goto fail;
-	}
-
-	if (stat_buf.st_size == 0) {
-		size_t file_size;
-
-		if (rw == ODB_RDONLY) {
-			err = EIO;
-			goto fail;
-		}
-
-		nr_node = DEFAULT_NODE_NR(data->offset_node);
-
-		file_size = tables_size(data, nr_node);
-		if (ftruncate(data->fd, file_size)) {
-			err = errno;
-			goto fail;
-		}
-	} else {
-		/* Calculate nr node allowing a sanity check later */
-		nr_node = (stat_buf.st_size - data->offset_node) /
-			((sizeof(odb_index_t) * BUCKET_FACTOR) + sizeof(odb_node_t));
-	}
-
-	data->base_memory = mmap(0, tables_size(data, nr_node), mmflags,
-				MAP_SHARED, data->fd, 0);
-
-	if (data->base_memory == MAP_FAILED) {
-		err = errno;
-		goto fail;
-	}
-
-	data->descr = odb_to_descr(data);
-
-	if (stat_buf.st_size == 0) {
-		data->descr->size = nr_node;
-		/* page zero is not used */
-		data->descr->current_size = 1;
-	} else {
-		/* file already exist, sanity check nr node */
-		if (nr_node != data->descr->size) {
-			err = EINVAL;
-			goto fail_unmap;
-		}
-	}
-
-	data->hash_base = odb_to_hash_base(data);
-	data->node_base = odb_to_node_base(data);
-	data->hash_mask = (data->descr->size * BUCKET_FACTOR) - 1;
-
-	list_add(&data->list, &files_hash[hash]);
-	odb->data = data;
-out:
-	return err;
-fail_unmap:
-	munmap(data->base_memory, tables_size(data, nr_node));
-fail:
-	close(data->fd);
-	free(data->filename);
-	free(data);
-	odb->data = NULL;
-	goto out;
-}
-
-
-void odb_close(odb_t * odb)
-{
-	odb_data_t * data = odb->data;
-
-	if (data) {
-		data->ref_count--;
-		if (data->ref_count == 0) {
-			size_t size = tables_size(data, data->descr->size);
-			list_del(&data->list);
-			munmap(data->base_memory, size);
-			if (data->fd >= 0)
-				close(data->fd);
-			free(data->filename);
-			free(data);
-			odb->data = NULL;
-		}
-	}
-}
-
-
-int odb_open_count(odb_t const * odb)
-{
-	if (!odb->data)
-		return 0;
-	return odb->data->ref_count;
-}
-
-
-void * odb_get_data(odb_t * odb)
-{
-	return odb->data->base_memory;
-}
-
-
-void odb_sync(odb_t const * odb)
-{
-	odb_data_t * data = odb->data;
-	size_t size;
-
-	if (!data)
-		return;
-
-	size = tables_size(data, data->descr->size);
-	msync(data->base_memory, size, MS_ASYNC);
-}
diff --git a/libdb/db_stat.c b/libdb/db_stat.c
deleted file mode 100644
index 6d29e9a..0000000
--- a/libdb/db_stat.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * @file db_stat.c
- * Statistics routines for libdb
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Philippe Elie
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "odb.h"
-#include "op_types.h"
-
-/// hold various statistics data for a db file
-struct odb_hash_stat_t {
-	odb_node_nr_t node_nr;			/**< allocated node number */
-	odb_node_nr_t used_node_nr;		/**< in use node number */
-	count_type    total_count;		/**< cumulated samples count */
-	odb_index_t   hash_table_size;		/**< hash table entry number */
-	odb_node_nr_t max_list_length;		/**< worst case   */
-	double       average_list_length;	/**< average case */
-	/* do we need variance ? */
-};
-
-odb_hash_stat_t * odb_hash_stat(odb_t const * odb)
-{
-	size_t max_length = 0;
-	double total_length = 0.0;
-	size_t nr_non_empty_list = 0;
-	size_t pos;
-	odb_data_t * data = odb->data;
-
-	odb_hash_stat_t * result = calloc(1, sizeof(odb_hash_stat_t));
-	if (!result) {
-		fprintf(stderr, "not enough memory\n");
-		exit(EXIT_FAILURE);
-	}
-
-	result->node_nr = data->descr->size;
-	result->used_node_nr = data->descr->current_size;
-	result->hash_table_size = data->descr->size * BUCKET_FACTOR;
-
-	/* FIXME: I'm dubious if this do right statistics for hash table
-	 * efficiency check */
-
-	for (pos = 0 ; pos < result->hash_table_size ; ++pos) {
-		size_t cur_length = 0;
-		size_t index = data->hash_base[pos];
-		while (index) {
-			result->total_count += data->node_base[index].value;
-			index = data->node_base[index].next;
-			++cur_length;
-		}
-
-		if (cur_length > max_length)
-			max_length = cur_length;
-
-		if (cur_length) {
-			total_length += cur_length;
-			++nr_non_empty_list;
-		}
-	}
-
-	result->max_list_length = max_length;
-	result->average_list_length = total_length / nr_non_empty_list;
-
-	return result;
-}
-
-
-void odb_hash_display_stat(odb_hash_stat_t const * stat)
-{
-	printf("total node number:   %d\n", stat->node_nr);
-	printf("total used node:     %d\n", stat->used_node_nr);
-	printf("total count:         %llu\n", stat->total_count);
-	printf("hash table size:     %d\n", stat->hash_table_size);
-	printf("greater list length: %d\n", stat->max_list_length);
-	printf("average non empty list length: %2.4f\n", stat->average_list_length);
-}
-
-
-void odb_hash_free_stat(odb_hash_stat_t * stat)
-{
-	free(stat);
-}
diff --git a/libdb/db_travel.c b/libdb/db_travel.c
deleted file mode 100644
index 3ed467b..0000000
--- a/libdb/db_travel.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * @file db_travel.c
- * Inspection of a DB
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Philippe Elie
- */
-
-#include "odb.h"
-
-odb_node_t * odb_get_iterator(odb_t const * odb, odb_node_nr_t * nr)
-{
-	/* node zero is unused */
-	*nr = odb->data->descr->current_size - 1;
-	return odb->data->node_base + 1;
-}
diff --git a/libdb/odb.h b/libdb/odb.h
deleted file mode 100644
index c190b57..0000000
--- a/libdb/odb.h
+++ /dev/null
@@ -1,223 +0,0 @@
-/**
- * @file odb.h
- * This file contains various definitions and interface for management
- * of in-memory, through mmaped file, growable hash table, that stores
- * sample files.
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Philippe Elie
- */
-
-#ifndef ODB_HASH_H
-#define ODB_HASH_H
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "op_list.h"
-
-/** the type of key. 64-bit because CG needs 32-bit pair {from,to} */
-typedef uint64_t odb_key_t;
-/** the type of an information in the database */
-typedef unsigned int odb_value_t;
-/** the type of index (node number), list are implemented through index */
-typedef unsigned int odb_index_t;
-/** the type store node number */
-typedef odb_index_t odb_node_nr_t;
-/** store the hash mask, hash table size are always power of two */
-typedef odb_index_t odb_hash_mask_t;
-
-/* there is (bucket factor * nr node) entry in hash table, this can seem
- * excessive but hash coding eip don't give a good distributions and our
- * goal is to get a O(1) amortized insert time. bucket factor must be a
- * power of two. FIXME: see big comment in odb_hash_add_node, you must
- * re-enable zeroing hash table if BUCKET_FACTOR > 2 (roughly exact, you
- * want to read the comment in odb_hash_add_node() if you tune this define)
- */
-#define BUCKET_FACTOR 1
-
-/** a db hash node */
-typedef struct {
-	odb_key_t key;			/**< eip */
-	odb_value_t value;		/**< samples count */
-	odb_index_t next;		/**< next entry for this bucket */
-} odb_node_t;
-
-/** the minimal information which must be stored in the file to reload
- * properly the data base, following this header is the node array then
- * the hash table (when growing we avoid to copy node array)
- */
-typedef struct {
-	odb_node_nr_t size;		/**< in node nr (power of two) */
-	odb_node_nr_t current_size;	/**< nr used node + 1, node 0 unused */
-	int padding[6];			/**< for padding and future use */
-} odb_descr_t;
-
-/** a "database". this is an in memory only description.
- *
- * We allow to manage a database inside a mapped file with an "header" of
- * unknown size so odb_open get a parameter to specify the size of this header.
- * A typical use is:
- *
- * struct header { int etc; ... };
- * odb_open(&hash, filename, ODB_RW, sizeof(header));
- * so on this library have no dependency on the header type.
- *
- * the internal memory layout from base_memory is:
- *  the unknown header (sizeof_header)
- *  odb_descr_t
- *  the node array: (descr->size * sizeof(odb_node_t) entries
- *  the hash table: array of odb_index_t indexing the node array 
- *    (descr->size * BUCKET_FACTOR) entries
- */
-typedef struct odb_data {
-	odb_node_t * node_base;		/**< base memory area of the page */
-	odb_index_t * hash_base;	/**< base memory of hash table */
-	odb_descr_t * descr;		/**< the current state of database */
-	odb_hash_mask_t hash_mask;	/**< == descr->size - 1 */
-	unsigned int sizeof_header;	/**< from base_memory to odb header */
-	unsigned int offset_node;	/**< from base_memory to node array */
-	void * base_memory;		/**< base memory of the maped memory */
-	int fd;				/**< mmaped memory file descriptor */
-	char * filename;                /**< full path name of sample file */
-	int ref_count;                  /**< reference count */
-	struct list_head list;          /**< hash bucket list */
-} odb_data_t;
-
-typedef struct {
-	odb_data_t * data;
-} odb_t;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* db_manage.c */
-
-/** how to open the DB file */
-enum odb_rw {
-	ODB_RDONLY = 0,	/**< open for read only */
-	ODB_RDWR = 1	/**< open for read and/or write */
-};
-
-/**
- * odb_init - initialize a DB file
- * @param odb the DB file to init
- */
-void odb_init(odb_t * odb);
-
-/**
- * odb_open - open a DB file
- * @param odb the data base object to setup
- * @param filename the filename where go the maped memory
- * @param rw \enum ODB_RW if opening for writing, else \enum ODB_RDONLY
- * @param sizeof_header size of the file header if any
- *
- * The sizeof_header parameter allows the data file to have a header
- * at the start of the file which is skipped.
- * odb_open() always preallocate a few number of pages.
- * returns 0 on success, errno on failure
- */
-int odb_open(odb_t * odb, char const * filename,
-             enum odb_rw rw, size_t sizeof_header);
-
-/** Close the given ODB file */
-void odb_close(odb_t * odb);
-
-/** return the number of times this sample file is open */
-int odb_open_count(odb_t const * odb);
-
-/** return the start of the mapped data */
-void * odb_get_data(odb_t * odb);
-
-/** issue a msync on the used size of the mmaped file */
-void odb_sync(odb_t const * odb);
-
-/**
- * grow the hashtable in such way current_size is the index of the first free
- * node. Take care all node pointer can be invalidated by this call.
- *
- * Node allocation is done in a two step way 1st) ensure a free node exist
- * eventually, caller can setup it, 2nd) commit the node allocation with
- * odb_commit_reservation().
- * This is done in this way to ensure node setup is visible from another
- * process like pp tools in an atomic way.
- *
- * returns 0 on success, non zero on failure in this case this function do
- * nothing and errno is set by the first libc call failure allowing to retry
- * after cleanup some program resource.
- */
-int odb_grow_hashtable(odb_data_t * data);
-/**
- * commit a previously successfull node reservation. This can't fail.
- */
-static __inline void odb_commit_reservation(odb_data_t * data)
-{
-	++data->descr->current_size;
-}
-
-/** "immpossible" node number to indicate an error from odb_hash_add_node() */
-#define ODB_NODE_NR_INVALID ((odb_node_nr_t)-1)
-
-/* db_debug.c */
-/** check that the hash is well built */
-int odb_check_hash(odb_t const * odb);
-
-/* db_stat.c */
-typedef struct odb_hash_stat_t odb_hash_stat_t;
-odb_hash_stat_t * odb_hash_stat(odb_t const * odb);
-void odb_hash_display_stat(odb_hash_stat_t const * stats);
-void odb_hash_free_stat(odb_hash_stat_t * stats);
-
-/* db_insert.c */
-/** update info at key by incrementing its associated value by one, 
- * if the key does not exist a new node is created and the value associated
- * is set to one.
- *
- * returns EXIT_SUCCESS on success, EXIT_FAILURE on failure
- */
-int odb_update_node(odb_t * odb, odb_key_t key);
-
-/** Add a new node w/o regarding if a node with the same key already exists
- *
- * returns EXIT_SUCCESS on success, EXIT_FAILURE on failure
- */
-int odb_add_node(odb_t * odb, odb_key_t key, odb_value_t value);
-
-/* db_travel.c */
-/**
- * return a base pointer to the node array and number of node in this array
- * caller then will iterate through:
- *
- * odb_node_nr_t node_nr, pos;
- * odb_node_t * node = odb_get_iterator(odb, &node_nr);
- *	for ( pos = 0 ; pos < node_nr ; ++pos)
- *		// do something
- *
- *  note than caller does not need to filter nil key as it's a valid key,
- * The returned range is all valid (i.e. should never contain zero value).
- */
-odb_node_t * odb_get_iterator(odb_t const * odb, odb_node_nr_t * nr);
-
-static __inline unsigned int
-odb_do_hash(odb_data_t const * data, odb_key_t value)
-{
-	/* FIXME: better hash for eip value, needs to instrument code
-	 * and do a lot of tests ... */
-	/* trying to combine high order bits his a no-op: inside a binary image
-	 * high order bits don't vary a lot, hash table start with 7 bits mask
-	 * so this hash coding use bits 0-7, 8-15. Hash table is stored in
-	 * files avoiding to rebuilding them at profiling re-start so
-	 * on changing do_hash() change the file format!
-	 */
-	uint32_t temp = (value >> 32) ^ value;
-	return ((temp << 0) ^ (temp >> 8)) & data->hash_mask;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !ODB_H */
diff --git a/libop/Android.mk b/libop/Android.mk
deleted file mode 100644
index 8fbd1e6..0000000
--- a/libop/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
-	op_alloc_counter.c \
-	op_config.c \
-	op_cpu_type.c \
-	op_events.c \
-	op_get_interface.c \
-	op_mangle.c \
-	op_parse_event.c
-
-LOCAL_C_INCLUDES := \
-	$(LOCAL_PATH)/.. \
-	$(LOCAL_PATH)/../libutil
-
-LOCAL_MODULE := libop
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/libop/op_alloc_counter.c b/libop/op_alloc_counter.c
deleted file mode 100644
index 353100a..0000000
--- a/libop/op_alloc_counter.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/**
- * @file op_alloc_counter.c
- * hardware counter allocation
- *
- * You can have silliness here.
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <dirent.h>
-
-#include "op_events.h"
-#include "op_libiberty.h"
-
-
-typedef struct counter_arc_head {
-	/** the head of allowed counter for this event */
-	struct list_head next;
-} counter_arc_head;
-
-
-typedef struct counter_arc {
-	/** counter nr */
-	int counter;
-	/** the next counter allowed for this event */
-	struct list_head next;
-} counter_arc;
-
-
-/**
- * @param pev  an array of event
- * @param nr_events  number of entry in pev
- *
- * build an array of counter list allowed for each events
- *  counter_arc_head[i] is the list of allowed counter for pev[i] events
- * The returned pointer is an array of nr_events entry
- */
-static counter_arc_head *
-build_counter_arc(struct op_event const * pev[], int nr_events)
-{
-	counter_arc_head * ctr_arc;
-	int i;
-
-	ctr_arc = xmalloc(nr_events * sizeof(*ctr_arc));
-
-	for (i = 0; i < nr_events; ++i) {
-		int j;
-		u32 mask = pev[i]->counter_mask;
-
-		list_init(&ctr_arc[i].next);
-		for (j = 0; mask; ++j) {
-			if (mask & (1 << j)) {
-				counter_arc * arc = 
-					xmalloc(sizeof(counter_arc));
-				arc->counter = j;
-				/* we are looping by increasing counter number,
-				 * allocation use a left to right tree walking
-				 * so we add at end to ensure counter will
-				 * be allocated by increasing number: it's not
-				 * required but a bit less surprising when
-				 * debugging code
-				 */
-				list_add_tail(&arc->next, &ctr_arc[i].next);
-				mask &= ~(1 << j);
-			}
-		}
-	}
-
-	return ctr_arc;
-}
-
-
-/**
- * @param ctr_arc  the array to deallocate
- * @param nr_events  number of entry in array
- *
- *  deallocate all previously allocated resource by build_counter_arc()
- */
-static void delete_counter_arc(counter_arc_head * ctr_arc, int nr_events)
-{
-	int i;
-	for (i = 0; i < nr_events; ++i) {
-		struct list_head * pos, * pos2;
-		list_for_each_safe(pos, pos2, &ctr_arc[i].next) {
-			counter_arc * arc = list_entry(pos, counter_arc, next);
-			list_del(&arc->next);
-			free(arc);
-		}
-	}
-	free(ctr_arc);
-}
-
-
-/**
- * @param ctr_arc  tree description, ctr_arc[i] is the i-th level of tree.
- * @param max_depth  number of entry in array ctr_arc == depth of tree
- * @param depth  current level we are exploring
- * @param allocated_mask  current counter already allocated mask
- * @param counter_map  array of counter number mapping, returned results go
- *   here
- *
- * return non zero on succees, in this case counter_map is set to the counter
- * mapping number.
- *
- * Solution is searched through a simple backtracking exploring recursively all
- * possible solution until one is found, prunning is done in O(1) by tracking
- * a bitmask of already allocated counter. Walking through node is done in
- * preorder left to right.
- *
- * Possible improvment if neccessary: partition counters in class of counter,
- * two counter belong to the same class if they allow exactly the same set of
- * event. Now using a variant of the backtrack algo can works on class of
- * counter rather on counter (this is not an improvment if each counter goes
- * in it's own class)
- */
-static int
-allocate_counter(counter_arc_head const * ctr_arc, int max_depth, int depth,
-		 u32 allocated_mask, size_t * counter_map)
-{
-	struct list_head * pos;
-
-	if (depth == max_depth)
-		return 1;
-
-	list_for_each(pos, &ctr_arc[depth].next) {
-		counter_arc const * arc = list_entry(pos, counter_arc, next);
-
-		if (allocated_mask & (1 << arc->counter))
-			continue;
-
-		counter_map[depth] = arc->counter;
-
-		if (allocate_counter(ctr_arc, max_depth, depth + 1,
-		                     allocated_mask | (1 << arc->counter),
-		                     counter_map))
-			return 1;
-	}
-
-	return 0;
-}
-
-/* determine which directories are counter directories
- */
-static int perfcounterdir(const struct dirent * entry)
-{
-	return (isdigit(entry->d_name[0]));
-}
-
-
-/**
- * @param mask pointer where to place bit mask of unavailable counters
- *
- * return >= 0 number of counters that are available
- *        < 0  could not determine number of counters
- *
- */
-static int op_get_counter_mask(u32 * mask)
-{
-	struct dirent **counterlist;
-	int count, i;
-	/* assume nothing is available */
-	u32 available=0;
-
-	count = scandir("/dev/oprofile", &counterlist, perfcounterdir, alphasort);
-	if (count < 0)
-		/* unable to determine bit mask */
-		return -1;
-	/* convert to bit map (0 where counter exists) */
-	for (i=0; i<count; ++i) {
-		available |= 1 << atoi(counterlist[i]->d_name);
-		free(counterlist[i]);
-	}
-	*mask=~available;
-	free(counterlist);
-	return count;
-}
-
-size_t * map_event_to_counter(struct op_event const * pev[], int nr_events,
-                              op_cpu cpu_type)
-{
-	counter_arc_head * ctr_arc;
-	size_t * counter_map;
-	int nr_counters;
-	u32 unavailable_counters = 0;
-
-	nr_counters = op_get_counter_mask(&unavailable_counters);
-	/* no counters then probably perfmon managing perfmon hw */
-	if (nr_counters <= 0) {
-		nr_counters = op_get_nr_counters(cpu_type);
-		unavailable_counters = (~0) << nr_counters;
-	}
-	if (nr_counters < nr_events)
-		return 0;
-
-	ctr_arc = build_counter_arc(pev, nr_events);
-
-	counter_map = xmalloc(nr_counters * sizeof(size_t));
-
-	if (!allocate_counter(ctr_arc, nr_events, 0, unavailable_counters,
-			      counter_map)) {
-		free(counter_map);
-		counter_map = 0;
-	}
-
-	delete_counter_arc(ctr_arc, nr_events);
-	return counter_map;
-}
diff --git a/libop/op_alloc_counter.h b/libop/op_alloc_counter.h
deleted file mode 100644
index 40b4ebf..0000000
--- a/libop/op_alloc_counter.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * @file op_alloc_counter.h
- * hardware counter allocation
- *
- * You can have silliness here.
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_ALLOC_COUNTER_H
-#define OP_ALLOC_COUNTER_H
-
-#include <stddef.h>
-
-#include "op_cpu_type.h"
-
-struct op_event;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @param pev  array of selected event we want to bind to counter
- * @param nr_events  size of pev array
- * @param cpu_type  cpu type
- *
- * Try to calculate a binding between passed event in pev and counter number.
- * The binding is returned in a size_t * where returned ptr[i] is the counter
- * number bound to pev[i]
- */
-size_t * map_event_to_counter(struct op_event const * pev[], int nr_events,
-                              op_cpu cpu_type);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !OP_ALLOC_COUNTER_H */
diff --git a/libop/op_config.c b/libop/op_config.c
deleted file mode 100644
index 837242b..0000000
--- a/libop/op_config.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * @file op_config.c
- * Oprofile configuration parameters.
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Nathan Tallent
- * @Modifications Daniel Hansel
- */
-
-#include "op_config.h"
-#include "op_config_24.h"
-
-#include <limits.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-/* paths in op_config.h */
-char op_session_dir[PATH_MAX];
-char op_samples_dir[PATH_MAX];
-char op_samples_current_dir[PATH_MAX];
-char op_lock_file[PATH_MAX];
-char op_log_file[PATH_MAX];
-char op_pipe_file[PATH_MAX];
-char op_dump_status[PATH_MAX];
-
-/* paths in op_config_24.h */
-char op_device[PATH_MAX];
-char op_note_device[PATH_MAX];
-char op_hash_device[PATH_MAX];
-
-void
-init_op_config_dirs(char const * session_dir)
-{
-	int session_dir_len;
-
-	assert(session_dir);	
-	session_dir_len = strlen(session_dir);
-
-	if (session_dir_len + strlen("/samples/oprofiled.log") > PATH_MAX) {
-		fprintf(stderr, "Session_dir string \"%s\" is too large.\n", 
-			session_dir);
-		exit(EXIT_FAILURE);
-	}
-	
-	strcpy(op_session_dir, session_dir);
-	
-	strcpy(op_samples_dir, op_session_dir);
-	strcat(op_samples_dir, "/samples/");
-	
-	strcpy(op_samples_current_dir, op_samples_dir);
-	strcat(op_samples_current_dir, "/current/");
-
-	strcpy(op_lock_file, op_session_dir);
-	strcat(op_lock_file, "/lock");
-
-	strcpy(op_pipe_file, op_session_dir);
-	strcat(op_pipe_file, "/opd_pipe");
-
-	strcpy(op_log_file, op_samples_dir);
-	strcat(op_log_file, "oprofiled.log");
-
-	strcpy(op_dump_status, op_session_dir);
-	strcat(op_dump_status, "/complete_dump");
-
-	strcpy(op_device, op_session_dir);
-	strcat(op_device, "/opdev");
-
-	strcpy(op_note_device, op_session_dir);
-	strcat(op_note_device, "/opnotedev");
-
-	strcpy(op_hash_device, op_session_dir);
-	strcat(op_hash_device, "/ophashmapdev");
-}
diff --git a/libop/op_config.h b/libop/op_config.h
deleted file mode 100644
index b384497..0000000
--- a/libop/op_config.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * @file op_config.h
- *
- * Parameters a user may want to change. See
- * also op_config_24.h
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- * @Modifications Daniel Hansel
- */
-
-#ifndef OP_CONFIG_H
-#define OP_CONFIG_H
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-  
-/** 
- * must be called to initialize the paths below.
- * @param session_dir  the non-NULL value of the base session directory
- */
-void init_op_config_dirs(char const * session_dir);
-
-/* 
- * various paths, corresponding to opcontrol, that should be
- * initialized by init_op_config_dirs() above. 
- */
-extern char op_session_dir[];
-extern char op_samples_dir[];
-extern char op_samples_current_dir[];
-extern char op_lock_file[];
-extern char op_log_file[];
-extern char op_pipe_file[];
-extern char op_dump_status[];
-
-#define OP_DRIVER_BASE  "/dev/oprofile"
-#define OP_DATA_DIR     "/data/oprofile"
-
-/* Global directory that stores debug files */
-#ifndef DEBUGDIR
-#define DEBUGDIR "/usr/lib/debug"
-#endif
-
-#define OPD_MAGIC "DAE\n"
-#define OPD_VERSION 0x11
-
-#define OP_MIN_CPU_BUF_SIZE 2048
-#define OP_MAX_CPU_BUF_SIZE 131072
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif /* OP_CONFIG_H */
diff --git a/libop/op_config_24.h b/libop/op_config_24.h
deleted file mode 100644
index 1786fae..0000000
--- a/libop/op_config_24.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * @file op_config_24.h
- *
- * Parameters a user may want to change
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_CONFIG_24_H
-#define OP_CONFIG_24_H
-
-#define OP_MOUNT "/proc/sys/dev/oprofile/"
-
-extern char op_device[];
-extern char op_note_device[];
-extern char op_hash_device[];
-
-/*@{\name module default/min/max settings */
-
-/** 65536 * sizeof(op_sample) */
-#define OP_DEFAULT_BUF_SIZE 65536
-/** 
- * we don't try to wake-up daemon until it remains more than this free entry
- * in eviction buffer 
- */
-#define OP_PRE_WATERMARK(buffer_size)			\
-	(((buffer_size) / 8) < OP_MIN_PRE_WATERMARK	\
-		? OP_MIN_PRE_WATERMARK			\
-		: (buffer_size) / 8)
-/** minimal buffer water mark before we try to wakeup daemon */
-#define OP_MIN_PRE_WATERMARK 8192
-/** maximum number of entry in samples eviction buffer */
-#define OP_MAX_BUF_SIZE	1048576
-/** minimum number of entry in samples eviction buffer */
-#define OP_MIN_BUF_SIZE	(32768 + OP_PRE_WATERMARK(32768))
-
-/** 16384 * sizeof(op_note) = 273680 bytes default */
-#define OP_DEFAULT_NOTE_SIZE 16384
-/** 
- * we don't try to wake-up daemon until it remains more than this free entry
- * in note buffer 
- */
-#define OP_PRE_NOTE_WATERMARK(note_size)		\
-	(((note_size) / 32) < OP_MIN_NOTE_PRE_WATERMARK	\
-		? OP_MIN_NOTE_PRE_WATERMARK		\
-		: (note_size) / 32)
-/** minimal note buffer water mark before we try to wakeup daemon */
-#define OP_MIN_NOTE_PRE_WATERMARK 512
-/** maximum number of entry in note buffer */
-#define OP_MAX_NOTE_TABLE_SIZE	1048576
-/** minimum number of entry in note buffer */
-#define OP_MIN_NOTE_TABLE_SIZE	(1024 + OP_PRE_NOTE_WATERMARK(1024))
-
-/** maximum sampling rate when using RTC */
-#define OP_MAX_RTC_COUNT	4096
-/** minimum sampling rate when using RTC */
-#define OP_MIN_RTC_COUNT	2
-
-/*@}*/
-
-/** 
- * nr entries in hash map. This is the maximum number of name components
- * allowed. Must be a prime number 
- */
-#define OP_HASH_MAP_NR 4093
-
-/** size of string pool in bytes */
-#define POOL_SIZE 65536
-
-#ifndef NR_CPUS
-/** maximum number of cpus present in the box */
-#define NR_CPUS 32
-#endif
-
-#endif /* OP_CONFIG_24_H */
diff --git a/libop/op_cpu_type.c b/libop/op_cpu_type.c
deleted file mode 100644
index b9d13de..0000000
--- a/libop/op_cpu_type.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * @file op_cpu_type.c
- * CPU type determination
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "op_cpu_type.h"
-
-struct cpu_descr {
-	char const * pretty;
-	char const * name;
-	op_cpu cpu;
-	unsigned int nr_counters;
-};
-
-static struct cpu_descr const cpu_descrs[MAX_CPU_TYPE] = {
-	{ "Pentium Pro", "i386/ppro", CPU_PPRO, 2 },
-	{ "PII", "i386/pii", CPU_PII, 2 },
-	{ "PIII", "i386/piii", CPU_PIII, 2 },
-	{ "Athlon", "i386/athlon", CPU_ATHLON, 4 },
-	{ "CPU with timer interrupt", "timer", CPU_TIMER_INT, 1 },
-	{ "CPU with RTC device", "rtc", CPU_RTC, 1 },
-	{ "P4 / Xeon", "i386/p4", CPU_P4, 8 },
-	{ "IA64", "ia64/ia64", CPU_IA64, 4 },
-	{ "Itanium", "ia64/itanium", CPU_IA64_1, 4 },
-	{ "Itanium 2", "ia64/itanium2", CPU_IA64_2, 4 },
-	{ "AMD64 processors", "x86-64/hammer", CPU_HAMMER, 4 },
-	{ "P4 / Xeon with 2 hyper-threads", "i386/p4-ht", CPU_P4_HT2, 4 },
-	{ "Alpha EV4", "alpha/ev4", CPU_AXP_EV4, 2 },
-	{ "Alpha EV5", "alpha/ev5", CPU_AXP_EV5, 3 },
-	{ "Alpha PCA56", "alpha/pca56", CPU_AXP_PCA56, 3 },
-	{ "Alpha EV6", "alpha/ev6", CPU_AXP_EV6, 2 },
-	{ "Alpha EV67", "alpha/ev67", CPU_AXP_EV67, 20 },
-	{ "Pentium M (P6 core)", "i386/p6_mobile", CPU_P6_MOBILE, 2 },
-	{ "ARM/XScale PMU1", "arm/xscale1", CPU_ARM_XSCALE1, 3 },
-	{ "ARM/XScale PMU2", "arm/xscale2", CPU_ARM_XSCALE2, 5 },
-	{ "ppc64 POWER4", "ppc64/power4", CPU_PPC64_POWER4, 8 },
-	{ "ppc64 POWER5", "ppc64/power5", CPU_PPC64_POWER5, 6 },
-	{ "ppc64 POWER5+", "ppc64/power5+", CPU_PPC64_POWER5p, 6 },
-	{ "ppc64 970", "ppc64/970", CPU_PPC64_970, 8 },
-	{ "MIPS 20K", "mips/20K", CPU_MIPS_20K, 1},
-	{ "MIPS 24K", "mips/24K", CPU_MIPS_24K, 2},
-	{ "MIPS 25K", "mips/25K", CPU_MIPS_25K, 2},
-	{ "MIPS 34K", "mips/34K", CPU_MIPS_34K, 4},
-	{ "MIPS 5K", "mips/5K", CPU_MIPS_5K, 2},
-	{ "MIPS R10000", "mips/r10000", CPU_MIPS_R10000, 2 },
-	{ "MIPS R12000", "mips/r12000", CPU_MIPS_R12000, 4 },
-	{ "QED RM7000", "mips/rm7000", CPU_MIPS_RM7000, 1 },
-	{ "PMC-Sierra RM9000", "mips/rm9000", CPU_MIPS_RM9000, 2 },
-	{ "Sibyte SB1", "mips/sb1", CPU_MIPS_SB1, 4 },
-	{ "NEC VR5432", "mips/vr5432", CPU_MIPS_VR5432, 2 },
-	{ "NEC VR5500", "mips/vr5500", CPU_MIPS_VR5500, 2 },
-	{ "e500", "ppc/e500", CPU_PPC_E500, 4 },
-	{ "e500v2", "ppc/e500v2", CPU_PPC_E500_2, 4 },
-	{ "Core Solo / Duo", "i386/core", CPU_CORE, 2 },
-	{ "PowerPC G4", "ppc/7450",  CPU_PPC_7450, 6 },
-	{ "Core 2", "i386/core_2", CPU_CORE_2, 2 },
-	{ "ppc64 POWER6", "ppc64/power6", CPU_PPC64_POWER6, 4 },
-	{ "ppc64 970MP", "ppc64/970MP", CPU_PPC64_970MP, 8 },
-	{ "ppc64 Cell Broadband Engine", "ppc64/cell-be", CPU_PPC64_CELL, 8 },
-	{ "AMD64 family10", "x86-64/family10", CPU_FAMILY10, 4 },
-	{ "ppc64 PA6T", "ppc64/pa6t", CPU_PPC64_PA6T, 6 },
-	{ "ARM MPCore", "arm/mpcore", CPU_ARM_MPCORE, 2 },
-	{ "ARM V6 PMU", "arm/armv6", CPU_ARM_V6, 3 },
-	{ "ppc64 POWER5++", "ppc64/power5++", CPU_PPC64_POWER5pp, 6 },
-	{ "e300", "ppc/e300", CPU_PPC_E300, 4 },
-	{ "AVR32", "avr32", CPU_AVR32, 3 },
-};
- 
-static size_t const nr_cpu_descrs = sizeof(cpu_descrs) / sizeof(struct cpu_descr);
-
-op_cpu op_get_cpu_type(void)
-{
-	int cpu_type = CPU_NO_GOOD;
-	char str[100];
-	FILE * fp;
-
-	fp = fopen("/proc/sys/dev/oprofile/cpu_type", "r");
-	if (!fp) {
-		/* Try 2.6's oprofilefs one instead. */
-		fp = fopen("/dev/oprofile/cpu_type", "r");
-		if (!fp) {
-			fprintf(stderr, "Unable to open cpu_type file for reading\n");
-			fprintf(stderr, "Make sure you have done opcontrol --init\n");
-			return cpu_type;
-		}
-	}
-
-	if (!fgets(str, 99, fp)) {
-		fprintf(stderr, "Could not read cpu type.\n");
-		return CPU_NO_GOOD;
-	}
-
-	cpu_type = op_get_cpu_number(str);
-
-	fclose(fp);
-
-	return cpu_type;
-}
-
-
-op_cpu op_get_cpu_number(char const * cpu_string)
-{
-	int cpu_type = CPU_NO_GOOD;
-	size_t i;
-	
-	for (i = 0; i < nr_cpu_descrs; ++i) {
-		if (!strcmp(cpu_descrs[i].name, cpu_string)) {
-			cpu_type = cpu_descrs[i].cpu;
-			break;
-		}
-	}
-
-	/* Attempt to convert into a number */
-	if (cpu_type == CPU_NO_GOOD)
-		sscanf(cpu_string, "%d\n", &cpu_type);
-	
-	if (cpu_type <= CPU_NO_GOOD || cpu_type >= MAX_CPU_TYPE)
-		cpu_type = CPU_NO_GOOD;
-
-	return cpu_type;
-}
-
-
-char const * op_get_cpu_type_str(op_cpu cpu_type)
-{
-	if (cpu_type <= CPU_NO_GOOD || cpu_type >= MAX_CPU_TYPE)
-		return "invalid cpu type";
-
-	return cpu_descrs[cpu_type].pretty;
-}
-
-
-char const * op_get_cpu_name(op_cpu cpu_type)
-{
-	if (cpu_type <= CPU_NO_GOOD || cpu_type >= MAX_CPU_TYPE)
-		return "invalid cpu type";
-
-	return cpu_descrs[cpu_type].name;
-}
-
-
-int op_get_nr_counters(op_cpu cpu_type)
-{
-	if (cpu_type <= CPU_NO_GOOD || cpu_type >= MAX_CPU_TYPE)
-		return 0;
-
-	return cpu_descrs[cpu_type].nr_counters;
-}
diff --git a/libop/op_cpu_type.h b/libop/op_cpu_type.h
deleted file mode 100644
index be95ae2..0000000
--- a/libop/op_cpu_type.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- * @file op_cpu_type.h
- * CPU type determination
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_CPU_TYPE_H
-#define OP_CPU_TYPE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Supported cpu type.  Always add new CPU types at the very end.
- */
-typedef enum {
-	CPU_NO_GOOD = -1, /**< unsupported CPU type */
-	CPU_PPRO, /**< Pentium Pro */
-	CPU_PII, /**< Pentium II series */
-	CPU_PIII, /**< Pentium III series */
-	CPU_ATHLON, /**< AMD P6 series */
-	CPU_TIMER_INT, /**< CPU using the timer interrupt */
-	CPU_RTC, /**< other CPU to use the RTC */
-	CPU_P4,  /**< Pentium 4 / Xeon series */
-	CPU_IA64, /**< Generic IA64 */
-	CPU_IA64_1, /**< IA64 Merced */
-	CPU_IA64_2, /**< IA64 McKinley */
-	CPU_HAMMER, /**< AMD Hammer family */
-	CPU_P4_HT2, /**< Pentium 4 / Xeon series with 2 hyper-threads */
-	CPU_AXP_EV4, /**< Alpha EV4 family */
-	CPU_AXP_EV5, /**< Alpha EV5 family */
-	CPU_AXP_PCA56, /**< Alpha PCA56 family */
-	CPU_AXP_EV6, /**< Alpha EV6 family */
-	CPU_AXP_EV67, /**< Alpha EV67 family */
-	CPU_P6_MOBILE, /**< Pentium M series */
-	CPU_ARM_XSCALE1, /**< ARM XScale 1 */
-	CPU_ARM_XSCALE2, /**< ARM XScale 2 */
-	CPU_PPC64_POWER4, /**< ppc64 POWER4 family */
-	CPU_PPC64_POWER5, /**< ppc64 POWER5 family */
-	CPU_PPC64_POWER5p, /**< ppc64 Power5+ family */
-	CPU_PPC64_970, /**< ppc64 970 family */
-	CPU_MIPS_20K, /**< MIPS 20K */
-	CPU_MIPS_24K, /**< MIPS 24K */
-	CPU_MIPS_25K, /**< MIPS 25K */
-	CPU_MIPS_34K, /**< MIPS 34K */
-	CPU_MIPS_5K, /**< MIPS 5K */
-	CPU_MIPS_R10000, /**< MIPS R10000 */
-	CPU_MIPS_R12000, /**< MIPS R12000 */
-	CPU_MIPS_RM7000, /**< QED  RM7000 */
-	CPU_MIPS_RM9000, /**< PMC-Sierra RM9000 */
-	CPU_MIPS_SB1, /**< Broadcom SB1 */
-	CPU_MIPS_VR5432, /**< NEC VR5432 */
-	CPU_MIPS_VR5500, /**< MIPS VR5500, VR5532 and VR7701 */
-	CPU_PPC_E500,	/**< e500 */
-	CPU_PPC_E500_2,	/**< e500v2 */
-	CPU_CORE, /**< Core Solo / Duo series */
-	CPU_PPC_7450, /**< PowerPC G4 */
-	CPU_CORE_2, /**< Intel Core 2 */
-	CPU_PPC64_POWER6, /**< ppc64 POWER6 family */
-	CPU_PPC64_970MP, /**< ppc64 970MP */
-	CPU_PPC64_CELL, /**< ppc64 Cell Broadband Engine*/
-	CPU_FAMILY10, /**< AMD family 10 */
- 	CPU_PPC64_PA6T, /**< ppc64 PA6T */
-	CPU_ARM_MPCORE, /**< ARM MPCore */
-	CPU_ARM_V6, /**< ARM V6 */
-	CPU_PPC64_POWER5pp,  /**< ppc64 Power5++ family */
-	CPU_PPC_E300, /**< e300 */
-	CPU_AVR32, /**< AVR32 */
-	MAX_CPU_TYPE
-} op_cpu;
-
-/**
- * get the CPU type from the kernel
- *
- * returns CPU_NO_GOOD if the CPU could not be identified.
- * This function can not work if the module is not loaded
- */
-op_cpu op_get_cpu_type(void);
-
-/**
- * get the cpu number based on string
- * @param cpu_string with either the cpu type identifier or cpu type number
- *
- * The function returns CPU_NO_GOOD if no matching string was found.
- */
-op_cpu op_get_cpu_number(char const * cpu_string);
-
-/**
- * get the cpu string.
- * @param cpu_type the cpu type identifier
- *
- * The function always return a valid char const * the core cpu denomination
- * or "invalid cpu type" if cpu_type is not valid.
- */
-char const * op_get_cpu_type_str(op_cpu cpu_type);
-
-/**
- * op_get_cpu_name - get the cpu name
- * @param cpu_type  the cpu identifier name
- *
- * The function always return a valid char const *
- * Return the OProfile CPU name, e.g. "i386/pii"
- */
-char const * op_get_cpu_name(op_cpu cpu_type);
-
-/**
- * compute the number of counters available
- * @param cpu_type numeric processor type
- *
- * returns 0 if the CPU could not be identified
- */
-int op_get_nr_counters(op_cpu cpu_type);
-
-typedef enum {
-	OP_INTERFACE_NO_GOOD = -1,
-	OP_INTERFACE_24,
-	OP_INTERFACE_26
-} op_interface;
-
-/**
- * get the INTERFACE used to communicate between daemon and the kernel
- *
- * returns OP_INTERFACE_NO_GOOD if the INTERFACE could not be identified.
- * This function will identify the interface as OP_INTERFACE_NO_GOOD if
- * the module is not loaded.
- */
-op_interface op_get_interface(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OP_CPU_TYPE_H */
diff --git a/libop/op_events.c b/libop/op_events.c
deleted file mode 100644
index b4a10e7..0000000
--- a/libop/op_events.c
+++ /dev/null
@@ -1,862 +0,0 @@
-/**
- * @file op_events.c
- * Details of PMC profiling events
- *
- * You can have silliness here.
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include "op_events.h"
-#include "op_libiberty.h"
-#include "op_fileio.h"
-#include "op_string.h"
-#include "op_cpufreq.h"
-
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-static LIST_HEAD(events_list);
-static LIST_HEAD(um_list);
-
-static char const * filename;
-static unsigned int line_nr;
-
-static void parse_error(char const * context)
-{
-	fprintf(stderr, "oprofile: parse error in %s, line %u\n",
-		filename, line_nr);
-	fprintf(stderr, "%s\n", context);
-	exit(EXIT_FAILURE);
-}
-
-
-static int parse_int(char const * str)
-{
-	int value;
-	if (sscanf(str, "%d", &value) != 1)
-		parse_error("expected decimal value");
-
-	return value;
-}
-
-
-static int parse_hex(char const * str)
-{
-	int value;
-	/* 0x/0X to force the use of hexa notation for field intended to
-	   be in hexadecimal */
-	if (sscanf(str, "0x%x", &value) != 1 &&
-	    sscanf(str, "0X%x", &value) != 1)
-		parse_error("expected hexadecimal value");
-
-	return value;
-}
-
-
-static u64 parse_long_hex(char const * str)
-{
-	u64 value;
-	if (sscanf(str, "%Lx", &value) != 1)
-		parse_error("expected long hexadecimal value");
-
-	fflush(stderr);
-	return value;
-}
-
-
-/* name:MESI type:bitmask default:0x0f */
-static void parse_um(struct op_unit_mask * um, char const * line)
-{
-	int seen_name = 0;
-	int seen_type = 0;
-       	int seen_default = 0;
-	char const * valueend = line + 1;
-       	char const * tagend = line + 1;
-	char const * start = line;
-
-	while (*valueend) {
-		valueend = skip_nonws(valueend);
-
-		while (*tagend != ':' && *tagend)
-			++tagend;
-
-		if (valueend == tagend)
-			break;
-
-		if (!*tagend)
-			parse_error("parse_um() expected :value");
-
-		++tagend;
-
-		if (strisprefix(start, "name")) {
-			if (seen_name)
-				parse_error("duplicate name: tag");
-			seen_name = 1;
-			um->name = op_xstrndup(tagend, valueend - tagend);
-		} else if (strisprefix(start, "type")) {
-			if (seen_type)
-				parse_error("duplicate type: tag");
-			seen_type = 1;
-			if (strisprefix(tagend, "mandatory")) {
-				um->unit_type_mask = utm_mandatory;
-			} else if (strisprefix(tagend, "bitmask")) {
-				um->unit_type_mask = utm_bitmask;
-			} else if (strisprefix(tagend, "exclusive")) {
-				um->unit_type_mask = utm_exclusive;
-			} else {
-				parse_error("invalid unit mask type");
-			}
-		} else if (strisprefix(start, "default")) {
-			if (seen_default)
-				parse_error("duplicate default: tag");
-			seen_default = 1;
-			um->default_mask = parse_hex(tagend);
-		} else {
-			parse_error("invalid unit mask tag");
-		}
-
-		valueend = skip_ws(valueend);
-		tagend = valueend;
-		start = valueend;
-	}
-}
-
-
-/* \t0x08 (M)odified cache state */
-static void parse_um_entry(struct op_described_um * entry, char const * line)
-{
-	char const * c = line;
-
-	c = skip_ws(c);
-	entry->value = parse_hex(c);
-	c = skip_nonws(c);
-
-	if (!*c)
-		parse_error("invalid unit mask entry");
-
-	c = skip_ws(c);
-
-	if (!*c)
-		parse_error("invalid unit mask entry");
-
-	entry->desc = xstrdup(c);
-}
-
-
-static struct op_unit_mask * new_unit_mask(void)
-{
-	struct op_unit_mask * um = xmalloc(sizeof(struct op_unit_mask));
-	memset(um, '\0', sizeof(struct op_unit_mask));
-	list_add_tail(&um->um_next, &um_list);
-
-	return um;
-}
-
-
-/*
- * name:zero type:mandatory default:0x0
- * \t0x0 No unit mask
- */
-static void read_unit_masks(char const * file)
-{
-	struct op_unit_mask * um = NULL;
-	char * line;
-	FILE * fp = fopen(file, "r");
-
-	if (!fp) {
-		fprintf(stderr,
-			"oprofile: could not open unit mask description file %s\n", file);
-		exit(EXIT_FAILURE);
-	}
-
-	filename = file;
-	line_nr = 1;
-
-	line = op_get_line(fp);
-
-	while (line) {
-		if (empty_line(line) || comment_line(line))
-			goto next;
-
-		if (line[0] != '\t') {
-			um = new_unit_mask();
-			parse_um(um, line);
-		} else {
-			if (!um)
-				parse_error("no unit mask name line");
-			if (um->num >= MAX_UNIT_MASK)
-				parse_error("oprofile: maximum unit mask entries exceeded");
-
-			parse_um_entry(&um->um[um->num], line);
-			++(um->num);
-		}
-
-next:
-		free(line);
-		line = op_get_line(fp);
-		++line_nr;
-	}
-
-	fclose(fp);
-}
-
-
-static u32 parse_counter_mask(char const * str)
-{
-	u32 mask = 0;
-	char const * numstart = str;
-
-	while (*numstart) {
-		mask |= 1 << parse_int(numstart);
-
-		while (*numstart && *numstart != ',')
-			++numstart;
-		/* skip , unless we reach eos */
-		if (*numstart)
-			++numstart;
-
-		numstart = skip_ws(numstart);
-	}
-
-	return mask;
-}
-
-
-static struct op_unit_mask * find_um(char const * value)
-{
-	struct list_head * pos;
-
-	list_for_each(pos, &um_list) {
-		struct op_unit_mask * um = list_entry(pos, struct op_unit_mask, um_next);
-		if (strcmp(value, um->name) == 0)
-			return um;
-	}
-
-	fprintf(stderr, "oprofile: could not find unit mask %s\n", value);
-	exit(EXIT_FAILURE);
-}
-
-
-/* parse either a "tag:value" or a ": trailing description string" */
-static int next_token(char const ** cp, char ** name, char ** value)
-{
-	size_t tag_len;
-	size_t val_len;
-	char const * c = *cp;
-	char const * end;
-	char const * colon;
-
-	c = skip_ws(c);
-	end = colon = c;
-	end = skip_nonws(end);
-
-	colon = strchr(colon, ':');
-
-	if (!colon) {
-		if (*c)
-			parse_error("next_token(): garbage at end of line");
-		return 0;
-	}
-
-	if (colon >= end)
-		parse_error("next_token() expected ':'");
-
-	tag_len = colon - c;
-	val_len = end - (colon + 1);
-
-	if (!tag_len) {
-		/* : trailing description */
-		end = skip_ws(end);
-		*name = xstrdup("desc");
-		*value = xstrdup(end);
-		end += strlen(end);
-	} else {
-		/* tag:value */
-		*name = op_xstrndup(c, tag_len);
-		*value = op_xstrndup(colon + 1, val_len);
-		end = skip_ws(end);
-	}
-
-	*cp = end;
-	return 1;
-}
-
-
-static struct op_event * new_event(void)
-{
-	struct op_event * event = xmalloc(sizeof(struct op_event));
-	memset(event, '\0', sizeof(struct op_event));
-	list_add_tail(&event->event_next, &events_list);
-
-	return event;
-}
-
-
-/* event:0x00 counters:0 um:zero minimum:4096 name:ISSUES : Total issues */
-static void read_events(char const * file)
-{
-	struct op_event * event = NULL;
-	char * line;
-	char * name;
-	char * value;
-	char const * c;
-	int seen_event, seen_counters, seen_um, seen_minimum, seen_name;
-	FILE * fp = fopen(file, "r");
-
-	if (!fp) {
-		fprintf(stderr, "oprofile: could not open event description file %s\n", file);
-		exit(EXIT_FAILURE);
-	}
-
-	filename = file;
-	line_nr = 1;
-
-	line = op_get_line(fp);
-
-	while (line) {
-		if (empty_line(line) || comment_line(line))
-			goto next;
-
-		seen_name = 0;
-		seen_event = 0;
-		seen_counters = 0;
-		seen_um = 0;
-		seen_minimum = 0;
-		event = new_event();
-
-		c = line;
-		while (next_token(&c, &name, &value)) {
-			if (strcmp(name, "name") == 0) {
-				if (seen_name)
-					parse_error("duplicate name: tag");
-				seen_name = 1;
-				if (strchr(value, '/') != NULL)
-					parse_error("invalid event name");
-				if (strchr(value, '.') != NULL)
-					parse_error("invalid event name");
-				event->name = value;
-			} else if (strcmp(name, "event") == 0) {
-				if (seen_event)
-					parse_error("duplicate event: tag");
-				seen_event = 1;
-				event->val = parse_hex(value);
-				free(value);
-			} else if (strcmp(name, "counters") == 0) {
-				if (seen_counters)
-					parse_error("duplicate counters: tag");
-				seen_counters = 1;
-				event->counter_mask = parse_counter_mask(value);
-				free(value);
-			} else if (strcmp(name, "um") == 0) {
-				if (seen_um)
-					parse_error("duplicate um: tag");
-				seen_um = 1;
-				event->unit = find_um(value);
-				event->unit->used = 1;
-				free(value);
-			} else if (strcmp(name, "minimum") == 0) {
-				if (seen_minimum)
-					parse_error("duplicate minimum: tag");
-				seen_minimum = 1;
-				event->min_count = parse_int(value);
-				free(value);
-			} else if (strcmp(name, "desc") == 0) {
-				event->desc = value;
-			} else {
-				parse_error("unknown tag");
-			}
-
-			free(name);
-		}
-next:
-		free(line);
-		line = op_get_line(fp);
-		++line_nr;
-	}
-
-	fclose(fp);
-}
-
-
-/* usefull for make check */
-static void check_unit_mask(struct op_unit_mask const * um,
-	char const * cpu_name)
-{
-	u32 i;
-
-	if (!um->used) {
-		fprintf(stderr, "um %s is not used\n", um->name);
-		exit(EXIT_FAILURE);
-	}
-
-	if (um->unit_type_mask == utm_mandatory && um->num != 1) {
-		fprintf(stderr, "mandatory um %s doesn't contain exactly one "
-			"entry (%s)\n", um->name, cpu_name);
-		exit(EXIT_FAILURE);
-	} else if (um->unit_type_mask == utm_bitmask) {
-		u32 default_mask = um->default_mask;
-		for (i = 0; i < um->num; ++i)
-			default_mask &= ~um->um[i].value;
-
-		if (default_mask) {
-			fprintf(stderr, "um %s default mask is not valid "
-				"(%s)\n", um->name, cpu_name);
-			exit(EXIT_FAILURE);
-		}
-	} else {
-		for (i = 0; i < um->num; ++i) {
-			if (um->default_mask == um->um[i].value)
-				break;
-		}
-
-		if (i == um->num) {
-			fprintf(stderr, "exclusive um %s default value is not "
-				"valid (%s)\n", um->name, cpu_name);
-			exit(EXIT_FAILURE);
-		}
-	}
-}
-
-
-static void load_events(op_cpu cpu_type)
-{
-	char const * cpu_name = op_get_cpu_name(cpu_type);
-	char * event_dir;
-	char * event_file;
-	char * um_file;
-	char * dir;
-	struct list_head * pos;
-
-	if (!list_empty(&events_list))
-		return;
-
-	dir = getenv("OPROFILE_EVENTS_DIR");
-	if (dir == NULL)
-		dir = OP_DATADIR;
-
-	event_dir = xmalloc(strlen(dir) + strlen("/") + strlen(cpu_name) +
-                            strlen("/") + 1);
-	strcpy(event_dir, dir);
-	strcat(event_dir, "/"); 
-
-	strcat(event_dir, cpu_name);
-	strcat(event_dir, "/");
-
-	event_file = xmalloc(strlen(event_dir) + strlen("events") + 1);
-	strcpy(event_file, event_dir);
-	strcat(event_file, "events");
-
-	um_file = xmalloc(strlen(event_dir) + strlen("unit_masks") + 1);
-	strcpy(um_file, event_dir);
-	strcat(um_file, "unit_masks");
-
-	read_unit_masks(um_file);
-	read_events(event_file);
-
-	/* sanity check: all unit mask must be used */
-	list_for_each(pos, &um_list) {
-		struct op_unit_mask * um = list_entry(pos, struct op_unit_mask, um_next);
-
-		check_unit_mask(um, cpu_name);
-	}
-	
-	free(um_file);
-	free(event_file);
-	free(event_dir);
-}
-
-
-struct list_head * op_events(op_cpu cpu_type)
-{
-	load_events(cpu_type);
-	return &events_list;
-}
-
-
-static void delete_unit_mask(struct op_unit_mask * unit)
-{
-	u32 cur;
-	for (cur = 0 ; cur < unit->num ; ++cur) {
-		if (unit->um[cur].desc)
-			free(unit->um[cur].desc);
-	}
-
-	if (unit->name)
-		free(unit->name);
-
-	list_del(&unit->um_next);
-	free(unit);
-}
-
-
-static void delete_event(struct op_event * event)
-{
-	if (event->name)
-		free(event->name);
-	if (event->desc)
-		free(event->desc);
-
-	list_del(&event->event_next);
-	free(event);
-}
-
-
-void op_free_events(void)
-{
-	struct list_head * pos, * pos2;
-	list_for_each_safe(pos, pos2, &events_list) {
-		struct op_event * event = list_entry(pos, struct op_event, event_next);
-		delete_event(event);
-	}
-
-	list_for_each_safe(pos, pos2, &um_list) {
-		struct op_unit_mask * unit = list_entry(pos, struct op_unit_mask, um_next);
-		delete_unit_mask(unit);
-	}
-}
-
-
-static struct op_event * find_event(u32 nr)
-{
-	struct list_head * pos;
-
-	list_for_each(pos, &events_list) {
-		struct op_event * event = list_entry(pos, struct op_event, event_next);
-		if (event->val == nr)
-			return event;
-	}
-
-	return NULL;
-}
-
-
-static FILE * open_event_mapping_file(char const * cpu_name) 
-{
-	char * ev_map_file;
-	char * dir;
-	dir = getenv("OPROFILE_EVENTS_DIR");
-	if (dir == NULL)
-		dir = OP_DATADIR;
-
-	ev_map_file = xmalloc(strlen(dir) + strlen("/") + strlen(cpu_name) +
-	                    strlen("/") + + strlen("event_mappings") + 1);
-	strcpy(ev_map_file, dir);
-	strcat(ev_map_file, "/");
-
-	strcat(ev_map_file, cpu_name);
-	strcat(ev_map_file, "/");
-	strcat(ev_map_file, "event_mappings");
-	filename = ev_map_file;
-	return (fopen(ev_map_file, "r"));
-}
-
-
-/**
- *  This function is PPC64-specific.
- */
-static char const * get_mapping(u32 nr, FILE * fp) 
-{
-	char * line;
-	char * name;
-	char * value;
-	char const * c;
-	char * map = NULL;
-	int seen_event = 0, seen_mmcr0 = 0, seen_mmcr1 = 0, seen_mmcra = 0;
-	u32 mmcr0 = 0;
-	u64 mmcr1 = 0;
-	u32 mmcra = 0;
-	int event_found = 0;
-
-	line_nr = 1;
-	line = op_get_line(fp);
-	while (line && !event_found) {
-		if (empty_line(line) || comment_line(line))
-			goto next;
-
-		seen_event = 0;
-		seen_mmcr0 = 0;
-		seen_mmcr1 = 0;
-		seen_mmcra = 0;
-		mmcr0 = 0;
-		mmcr1 = 0;
-		mmcra = 0;
-
-		c = line;
-		while (next_token(&c, &name, &value)) {
-			if (strcmp(name, "event") == 0) {
-				u32 evt;
-				if (seen_event)
-					parse_error("duplicate event tag");
-				seen_event = 1;
-				evt = parse_hex(value);
-				if (evt == nr)
-					event_found = 1;
-				free(value);
-			} else if (strcmp(name, "mmcr0") == 0) {
-				if (seen_mmcr0)
-					parse_error("duplicate mmcr0 tag");
-				seen_mmcr0 = 1;
-				mmcr0 = parse_hex(value);
-				free(value);
-			} else if (strcmp(name, "mmcr1") == 0) {
-				if (seen_mmcr1)
-					parse_error("duplicate mmcr1: tag");
-				seen_mmcr1 = 1;
-				mmcr1 = parse_long_hex(value);
-				free(value);
-			} else if (strcmp(name, "mmcra") == 0) {
-				if (seen_mmcra)
-					parse_error("duplicate mmcra: tag");
-				seen_mmcra = 1;
-				mmcra = parse_hex(value);
-				free(value);
-			} else {
-				parse_error("unknown tag");
-			}
-
-			free(name);
-		}
-next:
-		free(line);
-		line = op_get_line(fp);
-		++line_nr;
-	}
-	if (event_found) {
-		if (!seen_mmcr0 || !seen_mmcr1 || !seen_mmcra) {
-			fprintf(stderr, "Error: Missing information in line %d of event mapping file %s\n", line_nr, filename);
-			exit(EXIT_FAILURE);
-		}
-		map = xmalloc(70);
-		snprintf(map, 70, "mmcr0:%u mmcr1:%Lu mmcra:%u",
-		         mmcr0, mmcr1, mmcra);
-	}
-
-	return map;
-}
-
-
-char const * find_mapping_for_event(u32 nr, op_cpu cpu_type)
-{
-	char const * cpu_name = op_get_cpu_name(cpu_type);
-	FILE * fp = open_event_mapping_file(cpu_name);
-	char const * map = NULL;
-	switch (cpu_type) {
-		case CPU_PPC64_PA6T:
-		case CPU_PPC64_970:
-		case CPU_PPC64_970MP:
-		case CPU_PPC64_POWER4:
-		case CPU_PPC64_POWER5:
-		case CPU_PPC64_POWER5p:
-		case CPU_PPC64_POWER5pp:
-		case CPU_PPC64_POWER6:
-			if (!fp) {
-				fprintf(stderr, "oprofile: could not open event mapping file %s\n", filename);
-				exit(EXIT_FAILURE);
-			} else {
-				map = get_mapping(nr, fp);
-			}
-			break;			
-		default:
-			break;
-	}
-
-	if (fp)
-		fclose(fp);
-
-	return map;
-}
-
-
-struct op_event * find_event_by_name(char const * name)
-{
-	struct list_head * pos;
-
-	list_for_each(pos, &events_list) {
-		struct op_event * event = list_entry(pos, struct op_event, event_next);
-		if (strcmp(event->name, name) == 0)
-			return event;
-	}
-
-	return NULL;
-}
-
-
-struct op_event * op_find_event(op_cpu cpu_type, u32 nr)
-{
-	struct op_event * event;
-
-	load_events(cpu_type);
-
-	event = find_event(nr);
-
-	return event;
-}
-
-
-int op_check_events(int ctr, u32 nr, u32 um, op_cpu cpu_type)
-{
-	int ret = OP_OK_EVENT;
-	struct op_event * event;
-	size_t i;
-	u32 ctr_mask = 1 << ctr;
-
-	load_events(cpu_type);
-
-	event = find_event(nr);
-
-	if (!event) {
-		ret |= OP_INVALID_EVENT;
-		return ret;
-	}
-
-	if ((event->counter_mask & ctr_mask) == 0)
-		ret |= OP_INVALID_COUNTER;
-
-	if (event->unit->unit_type_mask == utm_bitmask) {
-		for (i = 0; i < event->unit->num; ++i)
-			um &= ~(event->unit->um[i].value);			
-		
-		if (um)
-			ret |= OP_INVALID_UM;
-
-	} else {
-		for (i = 0; i < event->unit->num; ++i) {
-			if (event->unit->um[i].value == um)
-				break;
-		}
-
-		if (i == event->unit->num)
-			ret |= OP_INVALID_UM;
-	}
-
-	return ret;
-}
-
-
-void op_default_event(op_cpu cpu_type, struct op_default_event_descr * descr)
-{
-	descr->name = "";
-	descr->um = 0x0;
-	/* A fixed value of CPU cycles; this should ensure good
-	 * granulity even on faster CPUs, though it will generate more
-	 * interrupts.
-	 */
-	descr->count = 100000;
-
-	switch (cpu_type) {
-		case CPU_PPRO:
-		case CPU_PII:
-		case CPU_PIII:
-		case CPU_P6_MOBILE:
-		case CPU_CORE:
-		case CPU_CORE_2:
-		case CPU_ATHLON:
-		case CPU_HAMMER:
-		case CPU_FAMILY10:
-			descr->name = "CPU_CLK_UNHALTED";
-			break;
-
-		case CPU_RTC:
-			descr->name = "RTC_INTERRUPTS";
-			descr->count = 1024;
-			break;
-
-		case CPU_P4:
-		case CPU_P4_HT2:
-			descr->name = "GLOBAL_POWER_EVENTS";
-			descr->um = 0x1;
-			break;
-
-		case CPU_IA64:
-		case CPU_IA64_1:
-		case CPU_IA64_2:
-			descr->count = 1000000;
-			descr->name = "CPU_CYCLES";
-			break;
-
-		case CPU_AXP_EV4:
-		case CPU_AXP_EV5:
-		case CPU_AXP_PCA56:
-		case CPU_AXP_EV6:
-		case CPU_AXP_EV67:
-			descr->name = "CYCLES";
-			break;
-
-		// we could possibly use the CCNT
-		case CPU_ARM_XSCALE1:
-		case CPU_ARM_XSCALE2:
-		case CPU_ARM_MPCORE:
-		case CPU_ARM_V6:
-		case CPU_AVR32:
-			descr->name = "CPU_CYCLES";
-			break;
-
-		case CPU_PPC64_PA6T:
-		case CPU_PPC64_970:
-		case CPU_PPC64_970MP:
-		case CPU_PPC_7450:
-		case CPU_PPC64_POWER4:
-		case CPU_PPC64_POWER5:
-		case CPU_PPC64_POWER6:
-		case CPU_PPC64_POWER5p:
-		case CPU_PPC64_POWER5pp:
-		case CPU_PPC64_CELL:
-			descr->name = "CYCLES";
-			break;
-
-		case CPU_MIPS_20K:
-			descr->name = "CYCLES";
-			break;
-
-		case CPU_MIPS_24K:
-			descr->name = "INSTRUCTIONS";
-			break;
-
-		case CPU_MIPS_34K:
-			descr->name = "INSTRUCTIONS";
-			break;
-
-		case CPU_MIPS_5K:
-		case CPU_MIPS_25K:
-			descr->name = "CYCLES";
-			break;
-
-		case CPU_MIPS_R10000:
-		case CPU_MIPS_R12000:
-			descr->name = "INSTRUCTIONS_GRADUATED";
-			break;
-
-		case CPU_MIPS_RM7000:
-		case CPU_MIPS_RM9000:
-			descr->name = "INSTRUCTIONS_ISSUED";
-			break;
-
-		case CPU_MIPS_SB1:
-			descr->name = "INSN_SURVIVED_STAGE7";
-			break;
-
-		case CPU_MIPS_VR5432:
-		case CPU_MIPS_VR5500:
-			descr->name = "INSTRUCTIONS_EXECUTED";
-			break;
-
-		case CPU_PPC_E500:
-		case CPU_PPC_E500_2:
-		case CPU_PPC_E300:
-			descr->name = "CPU_CLK";
-			break;
-
-		// don't use default, if someone add a cpu he wants a compiler
-		// warning if he forgets to handle it here.
-		case CPU_TIMER_INT:
-		case CPU_NO_GOOD:
-		case MAX_CPU_TYPE:
-			break;
-	}
-}
diff --git a/libop/op_events.h b/libop/op_events.h
deleted file mode 100644
index f6462fc..0000000
--- a/libop/op_events.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- * @file op_events.h
- * Details of PMC profiling events
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_EVENTS_H
-#define OP_EVENTS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "op_cpu_type.h"
-#include "op_types.h"
-#include "op_list.h"
-
-/** Describe an unit mask type. Events can optionally use a filter called
- * the unit mask. the mask type can be a bitmask or a discrete value */
-enum unit_mask_type {
-	utm_mandatory,		/**< useless but required by the hardware */
-	utm_exclusive,		/**< only one of the values is allowed */
-	utm_bitmask		/**< bitmask */
-};
-
-/** up to thirty two allowed unit masks */
-#define MAX_UNIT_MASK 32
-
-
-/** Describe an unit mask. */
-struct op_unit_mask {
-	char * name;		/**< name of unit mask type */
-	u32 num;		/**< number of possible unit masks */
-	enum unit_mask_type unit_type_mask;
-	u32 default_mask;	/**< only the gui use it */
-	struct op_described_um {
-		u32 value;
-		char * desc;
-	} um[MAX_UNIT_MASK];
-	struct list_head um_next; /**< next um in list */
-	int used;                 /**< used by events file parser */
-};
-
-
-/** Describe an event. */
-struct op_event {
-	u32 counter_mask;	/**< bitmask of allowed counter  */
-	u32 val;		/**< event number */
-	/** which unit mask if any allowed */
-	struct op_unit_mask * unit;			
-	char * name;		/**< the event name */
-	char * desc;      	/**< the event description */
-	int min_count;		/**< minimum counter value allowed */
-	struct list_head event_next;   /**< next event in list */
-};
-
-/** Return the known events list. Idempotent */
-struct list_head * op_events(op_cpu cpu_type);
-
-/** Find a given event, returns NULL on error */
-struct op_event * op_find_event(op_cpu cpu_type, u32 nr);
-
-/** Find a given event by name */
-struct op_event * find_event_by_name(char const * name);
-
-/**
- * Find a mapping for a given event ID for architectures requiring additional information
- * from what is held in the events file. 
- */
-char const * find_mapping_for_event(u32 val, op_cpu cpu_type);
-
-
-/** op_check_events() return code */
-enum op_event_check {
-	OP_OK_EVENT = 0, /**< event is valid and allowed */
-	OP_INVALID_EVENT = 1, /**< event number is invalid */
-	OP_INVALID_UM = 2, /**< unit mask is invalid */
-	OP_INVALID_COUNTER = 4 /**< event is not allowed for the given counter */
-};
-
-/**
- * sanity check event values
- * @param ctr counter number
- * @param event value for counter
- * @param um unit mask for counter
- * @param cpu_type processor type
- *
- * Check that the counter event and unit mask values are allowed.
- *
- * The function returns bitmask of failure cause 0 otherwise
- *
- * \sa op_cpu, OP_EVENTS_OK
- */
-int op_check_events(int ctr, u32 event, u32 um, op_cpu cpu_type);
-
-/**
- * free memory used by any call to above function. Need to be called only once
- */
-void op_free_events(void);
-
-struct op_default_event_descr {
-	char * name;
-	unsigned long count;
-	unsigned long um;
-};
-
-/**
- * op_default_event - return the details of the default event
- * @param cpu_type  cpu type
- * @param descr filled event description
- *
- * Fills in the event description if applicable
- */
-void op_default_event(op_cpu cpu_type, struct op_default_event_descr * descr);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OP_EVENTS_H */
diff --git a/libop/op_get_interface.c b/libop/op_get_interface.c
deleted file mode 100644
index bdf72a5..0000000
--- a/libop/op_get_interface.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * @file op_get_interface.c
- * Determine which oprofile kernel interface used
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Will Cohen
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "op_cpu_type.h"
-#include "op_file.h"
-
-op_interface op_get_interface(void)
-{
-	static op_interface current_interface = OP_INTERFACE_NO_GOOD;
-
-	if (current_interface != OP_INTERFACE_NO_GOOD)
-		return current_interface;
-
-	if (op_file_readable("/proc/sys/dev/oprofile/cpu_type")) {
-		current_interface = OP_INTERFACE_24;
-	} else if (op_file_readable("/dev/oprofile/cpu_type")) {
-		current_interface = OP_INTERFACE_26;
-	}
-
-	return current_interface;
-}
diff --git a/libop/op_hw_config.h b/libop/op_hw_config.h
deleted file mode 100644
index 169b36b..0000000
--- a/libop/op_hw_config.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * @file op_hw_config.h
- * Configuration parameters that are dependent on CPU/architecture
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_HW_CONFIG_H
-#define OP_HW_CONFIG_H
-
-/** maximum number of counters, up to 4 for Athlon (18 for P4). The primary
- * use of this variable is for static/local array dimension. Never use it in
- * loop or in array index access/index checking unless you know what you
- * made. */
-#ifdef __alpha__
-#define OP_MAX_COUNTERS	20
-#else
-#define OP_MAX_COUNTERS	8
-#endif
-
-/** maximum number of events between interrupts. Counters are 40 bits, but
- * for convenience we only use 32 bits. The top bit is used for overflow
- * detection, so user can set up to (2^31)-1 */
-#define OP_MAX_PERF_COUNT	2147483647UL
-
-#endif /* OP_HW_CONFIG_H */
diff --git a/libop/op_interface.h b/libop/op_interface.h
deleted file mode 100644
index fa2ecbd..0000000
--- a/libop/op_interface.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * @file op_interface.h
- *
- * Module / user space interface for 2.4
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_INTERFACE_H
-#define OP_INTERFACE_H
-
-#include "op_config.h"
-#include "op_types.h"
-
-/*@{\name notifications types encoded in op_note::type */
-/** fork(),vfork(),clone() */
-#define OP_FORK 1
-/** mapping */
-#define OP_MAP 2
-/** execve() */
-#define OP_EXEC 4
-/** init_module() */
-#define OP_DROP_MODULES 8
-/** exit() */
-#define OP_EXIT 16
-/*@}*/
-
-/** Data type to transfer samples counts from the module to the daemon */
-struct op_sample {
-	unsigned long eip; /**< eip value where occur interrupt */
-	u32 counter; /**< counter nr */
-	u32 pid; /**< 32 bits can hold any pid */
-	u32 tgid; /**< always equal to pid for kernel < 2.4.0 */
-};
-
-/** the current kernel-side profiler state */
-enum oprof_state {
-	STOPPED = 0,
-	STOPPING = 1,
-	RUNNING = 2
-};
- 
-/**
- * The head structure of a kernel sample buffer.
- */
-struct op_buffer_head {
-	int cpu_nr; /**< the CPU number of this buffer */
-	size_t count; /**< number of samples in this buffer */
-	enum oprof_state state; /**< current profiler state */
-	struct op_sample buffer[0]; /**< the sample buffer */
-} __attribute__((__packed__));
-	 
-/**
- * Data type used by the module to notify daemon of fork/exit/mapping etc.
- * Meanings of fields depend on the type of notification encoded in the type
- * field.
- * \sa OP_FORK, OP_EXEC, OP_MAP, OP_DROP_MODULES and OP_EXIT
- */
-struct op_note {
-	unsigned long   addr;
-	unsigned long   len;
-	unsigned long   offset;
-	unsigned int    hash;
-	unsigned int	pid;
-	unsigned int    tgid;
-	unsigned short	type;
-};
-
-/**
- * A path component. Directory name are stored as a stack of path components.
- * Note than the name index acts also as an unique identifier
- */
-struct op_hash_index {
-	/** index inside the string pool */
-	u32 name;
-	/** parent component, zero if this component is the root */
-	u32 parent;
-} __attribute__((__packed__));
-
-/** size of hash map in bytes */
-#define OP_HASH_MAP_SIZE (OP_HASH_MAP_NR * sizeof(struct op_hash_index) + POOL_SIZE)
-
-#endif /* OP_INTERFACE_H */
diff --git a/libop/op_mangle.c b/libop/op_mangle.c
deleted file mode 100644
index 1efe5b1..0000000
--- a/libop/op_mangle.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * @file op_mangle.c
- * Mangling of sample file names
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include "op_mangle.h"
-
-#include <string.h>
-#include <stdio.h>
-
-#include "op_libiberty.h"
-
-#include "op_sample_file.h"
-#include "op_config.h"
-
-static void append_image(char * dest, int flags, int anon, char const * name, char const * anon_name)
-{
-	if ((flags & MANGLE_KERNEL) && !strchr(name, '/')) {
-		strcat(dest, "{kern}/");
-	} else if (anon) {
-		strcat(dest, "{anon:");
-		strcat(dest, anon_name);
-		strcat(dest,"}/");
-	} else {
-		strcat(dest, "{root}/");
-	}
-
-	strcat(dest, name);
-	strcat(dest, "/");
-}
-
-char * op_mangle_filename(struct mangle_values const * values)
-{
-	char * mangled;
-	size_t len;
-	int anon = values->flags & MANGLE_ANON;
-	int cg_anon = values->flags & MANGLE_CG_ANON;
-	/* if dep_name != image_name we need to invert them (and so revert them
-	 * unconditionally because if they are equal it doesn't hurt to invert
-	 * them), see P:3, FIXME: this is a bit weirds, we prolly need to
-	 * reword pp_interface */
-	char const * image_name = values->dep_name;
-	char const * anon_name = values->anon_name;
-	char const * dep_name = values->image_name;
-	char const * cg_image_name = values->cg_image_name;
-
-	len = strlen(op_samples_current_dir) + strlen(dep_name) + 1
-		+ strlen(values->event_name) + 1 + strlen(image_name) + 1;
-
-	if (values->flags & MANGLE_CALLGRAPH)
-		len += strlen(cg_image_name) + 1;
-
-	if (anon || cg_anon)
-		len += strlen(anon_name);
-
-	/* provision for tgid, tid, unit_mask, cpu and some {root}, {dep},
-	 * {kern}, {anon} and {cg} marker */
-	/* FIXME: too ugly */
-	len += 256;
-
-	mangled = xmalloc(len);
-
-	strcpy(mangled, op_samples_current_dir);
-	append_image(mangled, values->flags, 0, image_name, anon_name);
-
-	strcat(mangled, "{dep}" "/");
-	append_image(mangled, values->flags, anon, dep_name, anon_name);
-
-	if (values->flags & MANGLE_CALLGRAPH) {
-		strcat(mangled, "{cg}" "/");
-		append_image(mangled, values->flags, cg_anon,
-		             cg_image_name, anon_name);
-	}
-
-	strcat(mangled, values->event_name);
-	sprintf(mangled + strlen(mangled), ".%d.%d.",
-	        values->count, values->unit_mask);
-
-	if (values->flags & MANGLE_TGID) {
-		sprintf(mangled + strlen(mangled), "%d.", values->tgid);
-	} else {
-		sprintf(mangled + strlen(mangled), "%s.", "all");
-	}
-
-	if (values->flags & MANGLE_TID) {
-		sprintf(mangled + strlen(mangled), "%d.", values->tid);
-	} else {
-		sprintf(mangled + strlen(mangled), "%s.", "all");
-	}
-
-	if (values->flags & MANGLE_CPU) {
-		sprintf(mangled + strlen(mangled), "%d", values->cpu);
-	} else {
-		sprintf(mangled + strlen(mangled), "%s", "all");
-	}
-
-	return mangled;
-}
diff --git a/libop/op_mangle.h b/libop/op_mangle.h
deleted file mode 100644
index 9b600dc..0000000
--- a/libop/op_mangle.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * @file op_mangle.h
- * Mangling of sample file names
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_MANGLE_H
-#define OP_MANGLE_H
-
-#include <sys/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum mangle_flags {
-	MANGLE_NONE      = 0,
-	MANGLE_CPU       = (1 << 0),
-	MANGLE_TGID      = (1 << 1),
-	MANGLE_TID       = (1 << 2),
-	MANGLE_KERNEL    = (1 << 3),
-	MANGLE_CALLGRAPH = (1 << 4),
-	MANGLE_ANON      = (1 << 5),
-	MANGLE_CG_ANON   = (1 << 6),
-};
-
-/**
- * Temporary structure for passing parameters to
- * op_mangle_filename.
- */
-struct mangle_values {
-	int flags;
-
-	char const * image_name;
-	char const * anon_name;
-	char const * dep_name;
-	char const * cg_image_name;
-	char const * event_name;
-	int count;
-	unsigned int unit_mask;
-	pid_t tgid;
-	pid_t tid;
-	int cpu;
-};
-
-/**
- * op_mangle_filename - mangle a sample filename
- * @param values  parameters to use as mangling input
- *
- * See also PP:3 for the encoding scheme
- *
- * Returns a char* pointer to the mangled string. Caller
- * is responsible for freeing this string.
- */
-char * op_mangle_filename(struct mangle_values const * values);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OP_MANGLE_H */
diff --git a/libop/op_parse_event.c b/libop/op_parse_event.c
deleted file mode 100644
index 920d617..0000000
--- a/libop/op_parse_event.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * @file op_parse_event.c
- * event parsing
- *
- * You can have silliness here.
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "op_parse_event.h"
-#include "op_string.h"
-
-static char * next_part(char const ** str)
-{
-	char const * c;
-	char * ret;
-
-	if ((*str)[0] == '\0')
-		return NULL;
-
-	if ((*str)[0] == ':')
-		++(*str);
-
-	c = *str;
-
-	while (*c != '\0' && *c != ':')
-		++c;
-
-	if (c == *str)
-		return NULL;
-
-	ret = op_xstrndup(*str, c - *str);
-	*str += c - *str;
-	return ret;
-}
-
-
-static int parse_ulong(char const * str)
-{
-	unsigned long value;
-	char * end;
-	value = strtoul(str, &end, 0);
-	if (end && *end) {
-		fprintf(stderr, "Invalid event part %s\n", str);
-		exit(EXIT_FAILURE);
-	}
-
-	return value;
-}
-
-
-size_t parse_events(struct parsed_event * parsed_events, size_t max_events,
-                  char const * const * events)
-{
-	size_t i = 0;
-
-	while (events[i]) {
-		char const * cp = events[i];
-		char * part = next_part(&cp);
-
-		if (i >= max_events) {
-			fprintf(stderr, "Too many events specified: CPU "
-			        "only has %lu counters.\n",
-				(unsigned long) max_events);
-			exit(EXIT_FAILURE);
-		}
-
-		if (!part) {
-			fprintf(stderr, "Invalid event %s\n", cp);
-			exit(EXIT_FAILURE);
-		}
-
-		parsed_events[i].name = part;
-
-		part = next_part(&cp);
-
-		if (!part) {
-			fprintf(stderr, "Invalid count for event %s\n", events[i]);
-			exit(EXIT_FAILURE);
-		}
-
-		parsed_events[i].count = parse_ulong(part);
-		free(part);
-
-		parsed_events[i].unit_mask = 0;
-		part = next_part(&cp);
-
-		if (part) {
-			parsed_events[i].unit_mask = parse_ulong(part);
-			free(part);
-		}
-
-		parsed_events[i].kernel = 1;
-		part = next_part(&cp);
-
-		if (part) {
-			parsed_events[i].kernel = parse_ulong(part);
-			free(part);
-		}
-
-		parsed_events[i].user = 1;
-		part = next_part(&cp);
-
-		if (part) {
-			parsed_events[i].user = parse_ulong(part);
-			free(part);
-		}
-	
-		++i;
-	}
-
-	return i;
-}
diff --git a/libop/op_parse_event.h b/libop/op_parse_event.h
deleted file mode 100644
index 247a355..0000000
--- a/libop/op_parse_event.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * @file op_parse_event.h
- * event parsing
- *
- * You can have silliness here.
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_PARSE_EVENT_H
-#define OP_PARSE_EVENT_H
-
-#include <stddef.h>
-
-struct parsed_event {
-	char * name;
-	int count;
-	int unit_mask;
-	int kernel;
-	int user;
-};
-
-/**
- * @param parsed_events  array of events to fill in
- * @param max_events  size of parsed_events
- * @param events  null terminated array of events string on the form
- *   event_name:count[:unit_mask:kernel:user]
- *
- * parse events given by the nil terminated array events and fill in
- * parsed_events with results. Events validity are not checked except.
- * A fatal error occur if number of events is greater than max_events.
- *
- * Return the number of events parsed.
- */
-size_t parse_events(struct parsed_event * parsed_events, size_t max_events,
-                    char const * const * events);
-
-#endif /* !OP_PARSE_EVENT_H */
diff --git a/libop/op_sample_file.h b/libop/op_sample_file.h
deleted file mode 100644
index 4f9f1d0..0000000
--- a/libop/op_sample_file.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * @file op_sample_file.h
- * Sample file format
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_SAMPLE_FILE_H
-#define OP_SAMPLE_FILE_H
-
-#include "op_types.h"
-
-#include <stdint.h>
-#include <time.h>
-
-/* header of the sample files */
-struct opd_header {
-	u8 magic[4];
-	u32 version;
-	u32 cpu_type;
-	u32 ctr_event;
-	u32 ctr_um;
-	u32 ctr_count;
-	// for cg file the from_cg_is_kernel
-	u32 is_kernel;
-	double cpu_speed;
-	time_t mtime;
-	u32 cg_to_is_kernel;
-	/* spu_profile=1 says sample file contains Cell BE SPU profile data */
-	u32 spu_profile;
-	uint64_t embedded_offset;
-	u64 anon_start;
-	u64 cg_to_anon_start;
-	/* binary compatibility reserve */
-	u32 reserved1[1];
-};
-
-#endif /* OP_SAMPLE_FILE_H */
diff --git a/libpopt/Android.mk b/libpopt/Android.mk
deleted file mode 100644
index b20cf55..0000000
--- a/libpopt/Android.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
-	findme.c \
-	popt.c \
-	poptconfig.c \
-	popthelp.c \
-	poptparse.c
-
-LOCAL_CFLAGS += -DHAVE_CONFIG_H
-
-LOCAL_MODULE := libpopt
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/libpopt/config.h b/libpopt/config.h
deleted file mode 100644
index 73a0817..0000000
--- a/libpopt/config.h
+++ /dev/null
@@ -1,329 +0,0 @@
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
-   systems. This function is required for `alloca.c' support on those systems.
-   */
-#undef CRAY_STACKSEG_END
-
-/* Define to 1 if using `alloca.c'. */
-#undef C_ALLOCA
-
-/* Define to 1 if translation of program messages to the user's native
-   language is requested. */
-#undef ENABLE_NLS
-
-/* Define to 1 if you have `alloca', as a function or macro. */
-#undef HAVE_ALLOCA
-
-/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
-   */
-#undef HAVE_ALLOCA_H
-
-/* Define to 1 if you have the <argz.h> header file. */
-#undef HAVE_ARGZ_H
-
-/* Define to 1 if you have the `asprintf' function. */
-#undef HAVE_ASPRINTF
-
-/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
-   CoreFoundation framework. */
-#undef HAVE_CFLOCALECOPYCURRENT
-
-/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
-   the CoreFoundation framework. */
-#undef HAVE_CFPREFERENCESCOPYAPPVALUE
-
-/* Define if the GNU dcgettext() function is already present or preinstalled.
-   */
-#undef HAVE_DCGETTEXT
-
-/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
-   don't. */
-#undef HAVE_DECL_FEOF_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FGETS_UNLOCKED
-
-/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
-   don't. */
-#undef HAVE_DECL_GETC_UNLOCKED
-
-/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
-   don't. */
-#undef HAVE_DECL__SNPRINTF
-
-/* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you
-   don't. */
-#undef HAVE_DECL__SNWPRINTF
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define to 1 if you have the <float.h> header file. */
-#define HAVE_FLOAT_H 1
-
-/* Define to 1 if you have the `fwprintf' function. */
-#undef HAVE_FWPRINTF
-
-/* Define to 1 if you have the `getcwd' function. */
-#undef HAVE_GETCWD
-
-/* Define to 1 if you have the `getegid' function. */
-#undef HAVE_GETEGID
-
-/* Define to 1 if you have the `geteuid' function. */
-#undef HAVE_GETEUID
-
-/* Define to 1 if you have the `getgid' function. */
-#undef HAVE_GETGID
-
-/* Define to 1 if you have the `getpagesize' function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define if the GNU gettext() function is already present or preinstalled. */
-#undef HAVE_GETTEXT
-
-/* Define to 1 if you have the `getuid' function. */
-#undef HAVE_GETUID
-
-/* Define if you have the iconv() function. */
-#undef HAVE_ICONV
-
-/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
-#undef HAVE_INTMAX_T
-
-/* Define if <inttypes.h> exists and doesn't clash with <sys/types.h>. */
-#define HAVE_INTTYPES_H 1
-
-/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
-   declares uintmax_t. */
-#undef HAVE_INTTYPES_H_WITH_UINTMAX
-
-/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
-#undef HAVE_LANGINFO_CODESET
-
-/* Define if your <locale.h> file defines LC_MESSAGES. */
-#undef HAVE_LC_MESSAGES
-
-/* Define to 1 if you have the <libintl.h> header file. */
-#undef HAVE_LIBINTL_H
-
-/* Define to 1 if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define to 1 if you have the <locale.h> header file. */
-#undef HAVE_LOCALE_H
-
-/* Define if you have the 'long double' type. */
-#undef HAVE_LONG_DOUBLE
-
-/* Define if you have the 'long long' type. */
-#define HAVE_LONG_LONG 1
-
-/* Define to 1 if you have the <malloc.h> header file. */
-#define HAVE_MALLOC_H 1
-
-/* Define to 1 if you have the <mcheck.h> header file. */
-#undef HAVE_MCHECK_H
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `mempcpy' function. */
-#define HAVE_MEMPCPY 1
-
-/* Define to 1 if you have a working `mmap' system call. */
-#define HAVE_MMAP 1
-
-/* Define to 1 if you have the `mtrace' function. */
-#undef HAVE_MTRACE
-
-/* Define to 1 if you have the `munmap' function. */
-#define HAVE_MUNMAP 1
-
-/* Define to 1 if you have the <nl_types.h> header file. */
-#undef HAVE_NL_TYPES_H
-
-/* Define if your printf() function supports format strings with positions. */
-#define HAVE_POSIX_PRINTF 1
-
-/* Define to 1 if you have the `putenv' function. */
-#undef HAVE_PUTENV
-
-/* Define to 1 if you have the `setenv' function. */
-#undef HAVE_SETENV
-
-/* Define to 1 if you have the `setlocale' function. */
-#undef HAVE_SETLOCALE
-
-/* Define to 1 if you have the `setregid' function. */
-#undef HAVE_SETREGID
-
-/* Define to 1 if you have the `snprintf' function. */
-#define HAVE_SNPRINTF 1
-
-/* Define to 1 if you have the <stddef.h> header file. */
-#define HAVE_STDDEF_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
-   uintmax_t. */
-#undef HAVE_STDINT_H_WITH_UINTMAX
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the `stpcpy' function. */
-#undef HAVE_STPCPY
-
-/* Define to 1 if you have the `strcasecmp' function. */
-#undef HAVE_STRCASECMP
-
-/* Define to 1 if you have the `strdup' function. */
-#undef HAVE_STRDUP
-
-/* Define to 1 if you have the `strerror' function. */
-#define HAVE_STRERROR 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `strtoul' function. */
-#undef HAVE_STRTOUL
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#undef HAVE_SYS_PARAM_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the `tsearch' function. */
-#undef HAVE_TSEARCH
-
-/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
-#undef HAVE_UINTMAX_T
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define if you have the 'unsigned long long' type. */
-#undef HAVE_UNSIGNED_LONG_LONG
-
-/* Define if you have the 'wchar_t' type. */
-#undef HAVE_WCHAR_T
-
-/* Define to 1 if you have the `wcslen' function. */
-#undef HAVE_WCSLEN
-
-/* Define if you have the 'wint_t' type. */
-#undef HAVE_WINT_T
-
-/* Define to 1 if you have the `__argz_count' function. */
-#undef HAVE___ARGZ_COUNT
-
-/* Define to 1 if you have the `__argz_next' function. */
-#undef HAVE___ARGZ_NEXT
-
-/* Define to 1 if you have the `__argz_stringify' function. */
-#undef HAVE___ARGZ_STRINGIFY
-
-/* Define to 1 if you have the `__fsetlocking' function. */
-#undef HAVE___FSETLOCKING
-
-/* Define to 1 if you have the `__secure_getenv' function. */
-#undef HAVE___SECURE_GETENV
-
-/* Define as const if the declaration of iconv() needs const. */
-#undef ICONV_CONST
-
-/* Define if integer division by zero raises signal SIGFPE. */
-#undef INTDIV0_RAISES_SIGFPE
-
-/* Name of package */
-#define PACKAGE "popt"
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Full path to popt top_srcdir. */
-#undef POPT_SOURCE_PATH
-
-/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
-#undef PRI_MACROS_BROKEN
-
-/* Define to 1 if the C compiler supports function prototypes. */
-#undef PROTOTYPES
-
-/* Define as the maximum value of type 'size_t', if the system doesn't define
-   it. */
-#undef SIZE_MAX
-
-/* If using the C implementation of alloca, define if you know the
-   direction of stack growth for your system; otherwise it will be
-   automatically deduced at run-time.
-	STACK_DIRECTION > 0 => grows toward higher addresses
-	STACK_DIRECTION < 0 => grows toward lower addresses
-	STACK_DIRECTION = 0 => direction of growth unknown */
-#undef STACK_DIRECTION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Version number of package */
-#undef VERSION
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-#undef _FILE_OFFSET_BITS
-
-/* Define for large files, on AIX-style hosts. */
-#undef _LARGE_FILES
-
-/* Define like PROTOTYPES; this can be used by system headers. */
-#undef __PROTOTYPES
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
-   calls it, or to nothing if 'inline' is not supported under any name.  */
-#ifndef __cplusplus
-#undef inline
-#endif
-
-/* Define to `long' if <sys/types.h> does not define. */
-#undef off_t
-
-/* Define as the type of the result of subtracting two pointers, if the system
-   doesn't define it. */
-#undef ptrdiff_t
-
-/* Define to empty if the C compiler doesn't support this keyword. */
-#undef signed
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-#undef size_t
-
-/* Define to unsigned long or unsigned long long if <stdint.h> and
-   <inttypes.h> don't define. */
-#undef uintmax_t
diff --git a/libpopt/findme.c b/libpopt/findme.c
deleted file mode 100644
index 78363e5..0000000
--- a/libpopt/findme.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/** \ingroup popt
- * \file popt/findme.c
- */
-
-/* (C) 1998-2002 Red Hat, Inc. -- Licensing details are in the COPYING
-   file accompanying popt source distributions, available from 
-   ftp://ftp.rpm.org/pub/rpm/dist. */
-
-#include "system.h"
-#include "findme.h"
-#include <unistd.h>
-
-const char * findProgramPath(const char * argv0)
-{
-    char * path = getenv("PATH");
-    char * pathbuf;
-    char * start, * chptr;
-    char * buf;
-
-    if (argv0 == NULL) return NULL;	/* XXX can't happen */
-    /* If there is a / in the argv[0], it has to be an absolute path */
-    if (strchr(argv0, '/'))
-	return xstrdup(argv0);
-
-    if (path == NULL) return NULL;
-
-    start = pathbuf = alloca(strlen(path) + 1);
-    buf = malloc(strlen(path) + strlen(argv0) + sizeof("/"));
-    if (buf == NULL) return NULL;	/* XXX can't happen */
-    strcpy(pathbuf, path);
-
-    chptr = NULL;
-    /*@-branchstate@*/
-    do {
-	if ((chptr = strchr(start, ':')))
-	    *chptr = '\0';
-	sprintf(buf, "%s/%s", start, argv0);
-
-	if (!access(buf, X_OK))
-	    return buf;
-
-	if (chptr) 
-	    start = chptr + 1;
-	else
-	    start = NULL;
-    } while (start && *start);
-    /*@=branchstate@*/
-
-    free(buf);
-
-    return NULL;
-}
diff --git a/libpopt/findme.h b/libpopt/findme.h
deleted file mode 100644
index a016b86..0000000
--- a/libpopt/findme.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/** \ingroup popt
- * \file popt/findme.h
- */
-
-/* (C) 1998-2000 Red Hat, Inc. -- Licensing details are in the COPYING
-   file accompanying popt source distributions, available from 
-   ftp://ftp.rpm.org/pub/rpm/dist. */
-
-#ifndef H_FINDME
-#define H_FINDME
-
-/**
- * Return absolute path to executable by searching PATH.
- * @param argv0		name of executable
- * @return		(malloc'd) absolute path to executable (or NULL)
- */
-/*@null@*/ const char * findProgramPath(/*@null@*/ const char * argv0)
-	/*@*/;
-
-#endif
diff --git a/libpopt/popt.c b/libpopt/popt.c
deleted file mode 100644
index 4f9e325..0000000
--- a/libpopt/popt.c
+++ /dev/null
@@ -1,1262 +0,0 @@
-/** \ingroup popt
- * \file popt/popt.c
- */
-
-/* (C) 1998-2002 Red Hat, Inc. -- Licensing details are in the COPYING
-   file accompanying popt source distributions, available from
-   ftp://ftp.rpm.org/pub/rpm/dist */
-
-#undef	MYDEBUG
-
-#include "system.h"
-
-#if HAVE_FLOAT_H
-#include <float.h>
-#endif
-#include <math.h>
-
-#include "findme.h"
-#include "poptint.h"
-
-#ifdef	MYDEBUG
-/*@unchecked@*/
-int _popt_debug = 0;
-#endif
-
-#if !defined(HAVE_STRERROR) && !defined(__LCLINT__)
-static char * strerror(int errno)
-{
-    extern int sys_nerr;
-    extern char * sys_errlist[];
-
-    if ((0 <= errno) && (errno < sys_nerr))
-	return sys_errlist[errno];
-    else
-	return POPT_("unknown errno");
-}
-#endif
-
-#ifdef MYDEBUG
-/*@unused@*/
-static void prtcon(const char *msg, poptContext con)
-{
-    if (msg) fprintf(stderr, "%s", msg);
-    fprintf(stderr, "\tcon %p os %p nextCharArg \"%s\" nextArg \"%s\" argv[%d] \"%s\"\n",
-	con, con->os,
-	(con->os->nextCharArg ? con->os->nextCharArg : ""),
-	(con->os->nextArg ? con->os->nextArg : ""),
-	con->os->next,
-	(con->os->argv && con->os->argv[con->os->next]
-		? con->os->argv[con->os->next] : ""));
-}
-#endif
-
-void poptSetExecPath(poptContext con, const char * path, int allowAbsolute)
-{
-    con->execPath = _free(con->execPath);
-    con->execPath = xstrdup(path);
-    con->execAbsolute = allowAbsolute;
-    /*@-nullstate@*/ /* LCL: con->execPath not NULL */
-    return;
-    /*@=nullstate@*/
-}
-
-static void invokeCallbacksPRE(poptContext con, const struct poptOption * opt)
-	/*@globals internalState@*/
-	/*@modifies internalState@*/
-{
-    if (opt != NULL)
-    for (; opt->longName || opt->shortName || opt->arg; opt++) {
-	if (opt->arg == NULL) continue;		/* XXX program error. */
-	if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
-	    void * arg = opt->arg;
-/*@-branchstate@*/
-	    /* XXX sick hack to preserve pretense of ABI. */
-	    if (arg == poptHelpOptions) arg = poptHelpOptionsI18N;
-/*@=branchstate@*/
-	    /* Recurse on included sub-tables. */
-	    invokeCallbacksPRE(con, arg);
-	} else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK &&
-		   (opt->argInfo & POPT_CBFLAG_PRE))
-	{   /*@-castfcnptr@*/
-	    poptCallbackType cb = (poptCallbackType)opt->arg;
-	    /*@=castfcnptr@*/
-	    /* Perform callback. */
-	    /*@-noeffectuncon @*/
-	    cb(con, POPT_CALLBACK_REASON_PRE, NULL, NULL, opt->descrip);
-	    /*@=noeffectuncon @*/
-	}
-    }
-}
-
-static void invokeCallbacksPOST(poptContext con, const struct poptOption * opt)
-	/*@globals internalState@*/
-	/*@modifies internalState@*/
-{
-    if (opt != NULL)
-    for (; opt->longName || opt->shortName || opt->arg; opt++) {
-	if (opt->arg == NULL) continue;		/* XXX program error. */
-	if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
-	    void * arg = opt->arg;
-/*@-branchstate@*/
-	    /* XXX sick hack to preserve pretense of ABI. */
-	    if (arg == poptHelpOptions) arg = poptHelpOptionsI18N;
-/*@=branchstate@*/
-	    /* Recurse on included sub-tables. */
-	    invokeCallbacksPOST(con, arg);
-	} else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK &&
-		   (opt->argInfo & POPT_CBFLAG_POST))
-	{   /*@-castfcnptr@*/
-	    poptCallbackType cb = (poptCallbackType)opt->arg;
-	    /*@=castfcnptr@*/
-	    /* Perform callback. */
-	    /*@-noeffectuncon @*/
-	    cb(con, POPT_CALLBACK_REASON_POST, NULL, NULL, opt->descrip);
-	    /*@=noeffectuncon @*/
-	}
-    }
-}
-
-static void invokeCallbacksOPTION(poptContext con,
-				  const struct poptOption * opt,
-				  const struct poptOption * myOpt,
-				  /*@null@*/ const void * myData, int shorty)
-	/*@globals internalState@*/
-	/*@modifies internalState@*/
-{
-    const struct poptOption * cbopt = NULL;
-
-    if (opt != NULL)
-    for (; opt->longName || opt->shortName || opt->arg; opt++) {
-	if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
-	    void * arg = opt->arg;
-/*@-branchstate@*/
-	    /* XXX sick hack to preserve pretense of ABI. */
-	    if (arg == poptHelpOptions) arg = poptHelpOptionsI18N;
-/*@=branchstate@*/
-	    /* Recurse on included sub-tables. */
-	    if (opt->arg != NULL)	/* XXX program error */
-		invokeCallbacksOPTION(con, opt->arg, myOpt, myData, shorty);
-	} else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK &&
-		  !(opt->argInfo & POPT_CBFLAG_SKIPOPTION)) {
-	    /* Save callback info. */
-	    cbopt = opt;
-	} else if (cbopt != NULL &&
-		   ((myOpt->shortName && opt->shortName && shorty &&
-			myOpt->shortName == opt->shortName) ||
-		    (myOpt->longName && opt->longName &&
-		/*@-nullpass@*/		/* LCL: opt->longName != NULL */
-			!strcmp(myOpt->longName, opt->longName)))
-		/*@=nullpass@*/
-		   )
-	{   /*@-castfcnptr@*/
-	    poptCallbackType cb = (poptCallbackType)cbopt->arg;
-	    /*@=castfcnptr@*/
-	    const void * cbData = (cbopt->descrip ? cbopt->descrip : myData);
-	    /* Perform callback. */
-	    if (cb != NULL) {	/* XXX program error */
-		/*@-noeffectuncon @*/
-		cb(con, POPT_CALLBACK_REASON_OPTION, myOpt,
-			con->os->nextArg, cbData);
-		/*@=noeffectuncon @*/
-	    }
-	    /* Terminate (unless explcitly continuing). */
-	    if (!(cbopt->argInfo & POPT_CBFLAG_CONTINUE))
-		return;
-	}
-    }
-}
-
-poptContext poptGetContext(const char * name, int argc, const char ** argv,
-			   const struct poptOption * options, int flags)
-{
-    poptContext con = malloc(sizeof(*con));
-
-    if (con == NULL) return NULL;	/* XXX can't happen */
-    memset(con, 0, sizeof(*con));
-
-    con->os = con->optionStack;
-    con->os->argc = argc;
-    /*@-dependenttrans -assignexpose@*/	/* FIX: W2DO? */
-    con->os->argv = argv;
-    /*@=dependenttrans =assignexpose@*/
-    con->os->argb = NULL;
-
-    if (!(flags & POPT_CONTEXT_KEEP_FIRST))
-	con->os->next = 1;			/* skip argv[0] */
-
-    con->leftovers = calloc( (argc + 1), sizeof(*con->leftovers) );
-    /*@-dependenttrans -assignexpose@*/	/* FIX: W2DO? */
-    con->options = options;
-    /*@=dependenttrans =assignexpose@*/
-    con->aliases = NULL;
-    con->numAliases = 0;
-    con->flags = flags;
-    con->execs = NULL;
-    con->numExecs = 0;
-    con->finalArgvAlloced = argc * 2;
-    con->finalArgv = calloc( con->finalArgvAlloced, sizeof(*con->finalArgv) );
-    con->execAbsolute = 1;
-    con->arg_strip = NULL;
-
-    if (getenv("POSIXLY_CORRECT") || getenv("POSIX_ME_HARDER"))
-	con->flags |= POPT_CONTEXT_POSIXMEHARDER;
-
-    if (name) {
-	char * t = malloc(strlen(name) + 1);
-	if (t) con->appName = strcpy(t, name);
-    }
-
-    /*@-internalglobs@*/
-    invokeCallbacksPRE(con, con->options);
-    /*@=internalglobs@*/
-
-    return con;
-}
-
-static void cleanOSE(/*@special@*/ struct optionStackEntry *os)
-	/*@uses os @*/
-	/*@releases os->nextArg, os->argv, os->argb @*/
-	/*@modifies os @*/
-{
-    os->nextArg = _free(os->nextArg);
-    os->argv = _free(os->argv);
-    os->argb = PBM_FREE(os->argb);
-}
-
-/*@-boundswrite@*/
-void poptResetContext(poptContext con)
-{
-    int i;
-
-    if (con == NULL) return;
-    while (con->os > con->optionStack) {
-	cleanOSE(con->os--);
-    }
-    con->os->argb = PBM_FREE(con->os->argb);
-    con->os->currAlias = NULL;
-    con->os->nextCharArg = NULL;
-    con->os->nextArg = NULL;
-    con->os->next = 1;			/* skip argv[0] */
-
-    con->numLeftovers = 0;
-    con->nextLeftover = 0;
-    con->restLeftover = 0;
-    con->doExec = NULL;
-
-    if (con->finalArgv != NULL)
-    for (i = 0; i < con->finalArgvCount; i++) {
-	/*@-unqualifiedtrans@*/		/* FIX: typedef double indirection. */
-	con->finalArgv[i] = _free(con->finalArgv[i]);
-	/*@=unqualifiedtrans@*/
-    }
-
-    con->finalArgvCount = 0;
-    con->arg_strip = PBM_FREE(con->arg_strip);
-    /*@-nullstate@*/	/* FIX: con->finalArgv != NULL */
-    return;
-    /*@=nullstate@*/
-}
-/*@=boundswrite@*/
-
-/* Only one of longName, shortName should be set, not both. */
-/*@-boundswrite@*/
-static int handleExec(/*@special@*/ poptContext con,
-		/*@null@*/ const char * longName, char shortName)
-	/*@uses con->execs, con->numExecs, con->flags, con->doExec,
-		con->finalArgv, con->finalArgvAlloced, con->finalArgvCount @*/
-	/*@modifies con @*/
-{
-    poptItem item;
-    int i;
-
-    if (con->execs == NULL || con->numExecs <= 0) /* XXX can't happen */
-	return 0;
-
-    for (i = con->numExecs - 1; i >= 0; i--) {
-	item = con->execs + i;
-	if (longName && !(item->option.longName &&
-			!strcmp(longName, item->option.longName)))
-	    continue;
-	else if (shortName != item->option.shortName)
-	    continue;
-	break;
-    }
-    if (i < 0) return 0;
-
-
-    if (con->flags & POPT_CONTEXT_NO_EXEC)
-	return 1;
-
-    if (con->doExec == NULL) {
-	con->doExec = con->execs + i;
-	return 1;
-    }
-
-    /* We already have an exec to do; remember this option for next
-       time 'round */
-    if ((con->finalArgvCount + 1) >= (con->finalArgvAlloced)) {
-	con->finalArgvAlloced += 10;
-	con->finalArgv = realloc(con->finalArgv,
-			sizeof(*con->finalArgv) * con->finalArgvAlloced);
-    }
-
-    i = con->finalArgvCount++;
-    if (con->finalArgv != NULL)	/* XXX can't happen */
-    {	char *s  = malloc((longName ? strlen(longName) : 0) + 3);
-	if (s != NULL) {	/* XXX can't happen */
-	    if (longName)
-		sprintf(s, "--%s", longName);
-	    else
-		sprintf(s, "-%c", shortName);
-	    con->finalArgv[i] = s;
-	} else
-	    con->finalArgv[i] = NULL;
-    }
-
-    /*@-nullstate@*/	/* FIX: con->finalArgv[] == NULL */
-    return 1;
-    /*@=nullstate@*/
-}
-/*@=boundswrite@*/
-
-/* Only one of longName, shortName may be set at a time */
-static int handleAlias(/*@special@*/ poptContext con,
-		/*@null@*/ const char * longName, char shortName,
-		/*@exposed@*/ /*@null@*/ const char * nextCharArg)
-	/*@uses con->aliases, con->numAliases, con->optionStack, con->os,
-		con->os->currAlias, con->os->currAlias->option.longName @*/
-	/*@modifies con @*/
-{
-    poptItem item = con->os->currAlias;
-    int rc;
-    int i;
-
-    if (item) {
-	if (longName && (item->option.longName &&
-		!strcmp(longName, item->option.longName)))
-	    return 0;
-	if (shortName && shortName == item->option.shortName)
-	    return 0;
-    }
-
-    if (con->aliases == NULL || con->numAliases <= 0) /* XXX can't happen */
-	return 0;
-
-    for (i = con->numAliases - 1; i >= 0; i--) {
-	item = con->aliases + i;
-	if (longName && !(item->option.longName &&
-			!strcmp(longName, item->option.longName)))
-	    continue;
-	else if (shortName != item->option.shortName)
-	    continue;
-	break;
-    }
-    if (i < 0) return 0;
-
-    if ((con->os - con->optionStack + 1) == POPT_OPTION_DEPTH)
-	return POPT_ERROR_OPTSTOODEEP;
-
-/*@-boundsread@*/
-    if (nextCharArg && *nextCharArg)
-	con->os->nextCharArg = nextCharArg;
-/*@=boundsread@*/
-
-    con->os++;
-    con->os->next = 0;
-    con->os->stuffed = 0;
-    con->os->nextArg = NULL;
-    con->os->nextCharArg = NULL;
-    con->os->currAlias = con->aliases + i;
-    rc = poptDupArgv(con->os->currAlias->argc, con->os->currAlias->argv,
-		&con->os->argc, &con->os->argv);
-    con->os->argb = NULL;
-
-    return (rc ? rc : 1);
-}
-
-/*@-bounds -boundswrite @*/
-static int execCommand(poptContext con)
-	/*@globals internalState @*/
-	/*@modifies internalState @*/
-{
-    poptItem item = con->doExec;
-    const char ** argv;
-    int argc = 0;
-    int rc;
-
-    if (item == NULL) /*XXX can't happen*/
-	return POPT_ERROR_NOARG;
-
-    if (item->argv == NULL || item->argc < 1 ||
-	(!con->execAbsolute && strchr(item->argv[0], '/')))
-	    return POPT_ERROR_NOARG;
-
-    argv = malloc(sizeof(*argv) *
-			(6 + item->argc + con->numLeftovers + con->finalArgvCount));
-    if (argv == NULL) return POPT_ERROR_MALLOC;
-
-    if (!strchr(item->argv[0], '/') && con->execPath != NULL) {
-	char *s = alloca(strlen(con->execPath) + strlen(item->argv[0]) + sizeof("/"));
-	sprintf(s, "%s/%s", con->execPath, item->argv[0]);
-	argv[argc] = s;
-    } else
-	argv[argc] = findProgramPath(item->argv[0]);
-    if (argv[argc++] == NULL) return POPT_ERROR_NOARG;
-
-    if (item->argc > 1) {
-	memcpy(argv + argc, item->argv + 1, sizeof(*argv) * (item->argc - 1));
-	argc += (item->argc - 1);
-    }
-
-    if (con->finalArgv != NULL && con->finalArgvCount > 0) {
-	memcpy(argv + argc, con->finalArgv,
-		sizeof(*argv) * con->finalArgvCount);
-	argc += con->finalArgvCount;
-    }
-
-    if (con->leftovers != NULL && con->numLeftovers > 0) {
-	memcpy(argv + argc, con->leftovers, sizeof(*argv) * con->numLeftovers);
-	argc += con->numLeftovers;
-    }
-
-    argv[argc] = NULL;
-
-#if defined(hpux) || defined(__hpux)
-    rc = setresgid(getgid(), getgid(),-1);
-    if (rc) return POPT_ERROR_ERRNO;
-    rc = setresuid(getuid(), getuid(),-1);
-    if (rc) return POPT_ERROR_ERRNO;
-#else
-/*
- * XXX " ... on BSD systems setuid() should be preferred over setreuid()"
- * XXX 	sez' Timur Bakeyev <mc@bat.ru>
- * XXX	from Norbert Warmuth <nwarmuth@privat.circular.de>
- */
-#if defined(HAVE_SETUID)
-    rc = setgid(getgid());
-    if (rc) return POPT_ERROR_ERRNO;
-    rc = setuid(getuid());
-    if (rc) return POPT_ERROR_ERRNO;
-#elif defined (HAVE_SETREUID)
-    rc = setregid(getgid(), getgid());
-    if (rc) return POPT_ERROR_ERRNO;
-    rc = setreuid(getuid(), getuid());
-    if (rc) return POPT_ERROR_ERRNO;
-#else
-    ; /* Can't drop privileges */
-#endif
-#endif
-
-    if (argv[0] == NULL)
-	return POPT_ERROR_NOARG;
-
-#ifdef	MYDEBUG
-if (_popt_debug)
-    {	const char ** avp;
-	fprintf(stderr, "==> execvp(%s) argv[%d]:", argv[0], argc);
-	for (avp = argv; *avp; avp++)
-	    fprintf(stderr, " '%s'", *avp);
-	fprintf(stderr, "\n");
-    }
-#endif
-
-    rc = execvp(argv[0], (char *const *)argv);
-
-    return POPT_ERROR_ERRNO;
-}
-/*@=bounds =boundswrite @*/
-
-/*@-boundswrite@*/
-/*@observer@*/ /*@null@*/ static const struct poptOption *
-findOption(const struct poptOption * opt, /*@null@*/ const char * longName,
-		char shortName,
-		/*@null@*/ /*@out@*/ poptCallbackType * callback,
-		/*@null@*/ /*@out@*/ const void ** callbackData,
-		int singleDash)
-	/*@modifies *callback, *callbackData */
-{
-    const struct poptOption * cb = NULL;
-
-    /* This happens when a single - is given */
-    if (singleDash && !shortName && (longName && *longName == '\0'))
-	shortName = '-';
-
-    for (; opt->longName || opt->shortName || opt->arg; opt++) {
-
-	if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
-	    const struct poptOption * opt2;
-	    void * arg = opt->arg;
-
-/*@-branchstate@*/
-	    /* XXX sick hack to preserve pretense of ABI. */
-	    if (arg == poptHelpOptions) arg = poptHelpOptionsI18N;
-/*@=branchstate@*/
-	    /* Recurse on included sub-tables. */
-	    if (arg == NULL) continue;	/* XXX program error */
-	    opt2 = findOption(arg, longName, shortName, callback,
-			      callbackData, singleDash);
-	    if (opt2 == NULL) continue;
-	    /* Sub-table data will be inheirited if no data yet. */
-	    if (!(callback && *callback)) return opt2;
-	    if (!(callbackData && *callbackData == NULL)) return opt2;
-	    /*@-observertrans -dependenttrans @*/
-	    *callbackData = opt->descrip;
-	    /*@=observertrans =dependenttrans @*/
-	    return opt2;
-	} else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK) {
-	    cb = opt;
-	} else if (longName && opt->longName &&
-		   (!singleDash || (opt->argInfo & POPT_ARGFLAG_ONEDASH)) &&
-		/*@-nullpass@*/		/* LCL: opt->longName != NULL */
-		   !strcmp(longName, opt->longName))
-		/*@=nullpass@*/
-	{
-	    break;
-	} else if (shortName && shortName == opt->shortName) {
-	    break;
-	}
-    }
-
-    if (!opt->longName && !opt->shortName)
-	return NULL;
-    /*@-modobserver -mods @*/
-    if (callback) *callback = NULL;
-    if (callbackData) *callbackData = NULL;
-    if (cb) {
-	if (callback)
-	/*@-castfcnptr@*/
-	    *callback = (poptCallbackType)cb->arg;
-	/*@=castfcnptr@*/
-	if (!(cb->argInfo & POPT_CBFLAG_INC_DATA)) {
-	    if (callbackData)
-		/*@-observertrans@*/	/* FIX: typedef double indirection. */
-		*callbackData = cb->descrip;
-		/*@=observertrans@*/
-	}
-    }
-    /*@=modobserver =mods @*/
-
-    return opt;
-}
-/*@=boundswrite@*/
-
-static const char * findNextArg(/*@special@*/ poptContext con,
-		unsigned argx, int delete_arg)
-	/*@uses con->optionStack, con->os,
-		con->os->next, con->os->argb, con->os->argc, con->os->argv @*/
-	/*@modifies con @*/
-{
-    struct optionStackEntry * os = con->os;
-    const char * arg;
-
-    do {
-	int i;
-	arg = NULL;
-	while (os->next == os->argc && os > con->optionStack) os--;
-	if (os->next == os->argc && os == con->optionStack) break;
-	if (os->argv != NULL)
-	for (i = os->next; i < os->argc; i++) {
-	    /*@-sizeoftype@*/
-	    if (os->argb && PBM_ISSET(i, os->argb))
-		/*@innercontinue@*/ continue;
-	    if (*os->argv[i] == '-')
-		/*@innercontinue@*/ continue;
-	    if (--argx > 0)
-		/*@innercontinue@*/ continue;
-	    arg = os->argv[i];
-	    if (delete_arg) {
-		if (os->argb == NULL) os->argb = PBM_ALLOC(os->argc);
-		if (os->argb != NULL)	/* XXX can't happen */
-		PBM_SET(i, os->argb);
-	    }
-	    /*@innerbreak@*/ break;
-	    /*@=sizeoftype@*/
-	}
-	if (os > con->optionStack) os--;
-    } while (arg == NULL);
-    return arg;
-}
-
-/*@-boundswrite@*/
-static /*@only@*/ /*@null@*/ const char *
-expandNextArg(/*@special@*/ poptContext con, const char * s)
-	/*@uses con->optionStack, con->os,
-		con->os->next, con->os->argb, con->os->argc, con->os->argv @*/
-	/*@modifies con @*/
-{
-    const char * a = NULL;
-    size_t alen;
-    char *t, *te;
-    size_t tn = strlen(s) + 1;
-    char c;
-
-    te = t = malloc(tn);;
-    if (t == NULL) return NULL;		/* XXX can't happen */
-    while ((c = *s++) != '\0') {
-	switch (c) {
-#if 0	/* XXX can't do this */
-	case '\\':	/* escape */
-	    c = *s++;
-	    /*@switchbreak@*/ break;
-#endif
-	case '!':
-	    if (!(s[0] == '#' && s[1] == ':' && s[2] == '+'))
-		/*@switchbreak@*/ break;
-	    /* XXX Make sure that findNextArg deletes only next arg. */
-	    if (a == NULL) {
-		if ((a = findNextArg(con, 1, 1)) == NULL)
-		    /*@switchbreak@*/ break;
-	    }
-	    s += 3;
-
-	    alen = strlen(a);
-	    tn += alen;
-	    *te = '\0';
-	    t = realloc(t, tn);
-	    te = t + strlen(t);
-	    strncpy(te, a, alen); te += alen;
-	    continue;
-	    /*@notreached@*/ /*@switchbreak@*/ break;
-	default:
-	    /*@switchbreak@*/ break;
-	}
-	*te++ = c;
-    }
-    *te = '\0';
-    t = realloc(t, strlen(t) + 1);	/* XXX memory leak, hard to plug */
-    return t;
-}
-/*@=boundswrite@*/
-
-static void poptStripArg(/*@special@*/ poptContext con, int which)
-	/*@uses con->arg_strip, con->optionStack @*/
-	/*@defines con->arg_strip @*/
-	/*@modifies con @*/
-{
-    /*@-sizeoftype@*/
-    if (con->arg_strip == NULL)
-	con->arg_strip = PBM_ALLOC(con->optionStack[0].argc);
-    if (con->arg_strip != NULL)		/* XXX can't happen */
-    PBM_SET(which, con->arg_strip);
-    /*@=sizeoftype@*/
-    /*@-compdef@*/ /* LCL: con->arg_strip udefined? */
-    return;
-    /*@=compdef@*/
-}
-
-int poptSaveLong(long * arg, int argInfo, long aLong)
-{
-    /* XXX Check alignment, may fail on funky platforms. */
-    if (arg == NULL || (((unsigned long)arg) & (sizeof(*arg)-1)))
-	return POPT_ERROR_NULLARG;
-
-    if (argInfo & POPT_ARGFLAG_NOT)
-	aLong = ~aLong;
-    switch (argInfo & POPT_ARGFLAG_LOGICALOPS) {
-    case 0:
-	*arg = aLong;
-	break;
-    case POPT_ARGFLAG_OR:
-	*arg |= aLong;
-	break;
-    case POPT_ARGFLAG_AND:
-	*arg &= aLong;
-	break;
-    case POPT_ARGFLAG_XOR:
-	*arg ^= aLong;
-	break;
-    default:
-	return POPT_ERROR_BADOPERATION;
-	/*@notreached@*/ break;
-    }
-    return 0;
-}
-
-int poptSaveInt(/*@null@*/ int * arg, int argInfo, long aLong)
-{
-    /* XXX Check alignment, may fail on funky platforms. */
-    if (arg == NULL || (((unsigned long)arg) & (sizeof(*arg)-1)))
-	return POPT_ERROR_NULLARG;
-
-    if (argInfo & POPT_ARGFLAG_NOT)
-	aLong = ~aLong;
-    switch (argInfo & POPT_ARGFLAG_LOGICALOPS) {
-    case 0:
-	*arg = aLong;
-	break;
-    case POPT_ARGFLAG_OR:
-	*arg |= aLong;
-	break;
-    case POPT_ARGFLAG_AND:
-	*arg &= aLong;
-	break;
-    case POPT_ARGFLAG_XOR:
-	*arg ^= aLong;
-	break;
-    default:
-	return POPT_ERROR_BADOPERATION;
-	/*@notreached@*/ break;
-    }
-    return 0;
-}
-
-/*@-boundswrite@*/
-/* returns 'val' element, -1 on last item, POPT_ERROR_* on error */
-int poptGetNextOpt(poptContext con)
-{
-    const struct poptOption * opt = NULL;
-    int done = 0;
-
-    if (con == NULL)
-	return -1;
-    while (!done) {
-	const char * origOptString = NULL;
-	poptCallbackType cb = NULL;
-	const void * cbData = NULL;
-	const char * longArg = NULL;
-	int canstrip = 0;
-	int shorty = 0;
-
-	while (!con->os->nextCharArg && con->os->next == con->os->argc
-		&& con->os > con->optionStack) {
-	    cleanOSE(con->os--);
-	}
-	if (!con->os->nextCharArg && con->os->next == con->os->argc) {
-	    /*@-internalglobs@*/
-	    invokeCallbacksPOST(con, con->options);
-	    /*@=internalglobs@*/
-	    if (con->doExec) return execCommand(con);
-	    return -1;
-	}
-
-	/* Process next long option */
-	if (!con->os->nextCharArg) {
-	    char * localOptString, * optString;
-	    int thisopt;
-
-	    /*@-sizeoftype@*/
-	    if (con->os->argb && PBM_ISSET(con->os->next, con->os->argb)) {
-		con->os->next++;
-		continue;
-	    }
-	    /*@=sizeoftype@*/
-	    thisopt = con->os->next;
-	    if (con->os->argv != NULL)	/* XXX can't happen */
-	    origOptString = con->os->argv[con->os->next++];
-
-	    if (origOptString == NULL)	/* XXX can't happen */
-		return POPT_ERROR_BADOPT;
-
-	    if (con->restLeftover || *origOptString != '-' ||
-		(*origOptString == '-' && origOptString[1] == '\0'))
-	    {
-		if (con->flags & POPT_CONTEXT_POSIXMEHARDER)
-		    con->restLeftover = 1;
-		if (con->flags & POPT_CONTEXT_ARG_OPTS) {
-		    con->os->nextArg = xstrdup(origOptString);
-		    return 0;
-		}
-		if (con->leftovers != NULL)	/* XXX can't happen */
-		    con->leftovers[con->numLeftovers++] = origOptString;
-		continue;
-	    }
-
-	    /* Make a copy we can hack at */
-	    localOptString = optString =
-		strcpy(alloca(strlen(origOptString) + 1), origOptString);
-
-	    if (optString[0] == '\0')
-		return POPT_ERROR_BADOPT;
-
-	    if (optString[1] == '-' && !optString[2]) {
-		con->restLeftover = 1;
-		continue;
-	    } else {
-		char *oe;
-		int singleDash;
-
-		optString++;
-		if (*optString == '-')
-		    singleDash = 0, optString++;
-		else
-		    singleDash = 1;
-
-		/* XXX aliases with arg substitution need "--alias=arg" */
-		if (handleAlias(con, optString, '\0', NULL))
-		    continue;
-
-		if (handleExec(con, optString, '\0'))
-		    continue;
-
-		/* Check for "--long=arg" option. */
-		for (oe = optString; *oe && *oe != '='; oe++)
-		    {};
-		if (*oe == '=') {
-		    *oe++ = '\0';
-		    /* XXX longArg is mapped back to persistent storage. */
-		    longArg = origOptString + (oe - localOptString);
-		}
-
-		opt = findOption(con->options, optString, '\0', &cb, &cbData,
-				 singleDash);
-		if (!opt && !singleDash)
-		    return POPT_ERROR_BADOPT;
-	    }
-
-	    if (!opt) {
-		con->os->nextCharArg = origOptString + 1;
-	    } else {
-		if (con->os == con->optionStack &&
-		   opt->argInfo & POPT_ARGFLAG_STRIP)
-		{
-		    canstrip = 1;
-		    poptStripArg(con, thisopt);
-		}
-		shorty = 0;
-	    }
-	}
-
-	/* Process next short option */
-	/*@-branchstate@*/		/* FIX: W2DO? */
-	if (con->os->nextCharArg) {
-	    origOptString = con->os->nextCharArg;
-
-	    con->os->nextCharArg = NULL;
-
-	    if (handleAlias(con, NULL, *origOptString, origOptString + 1))
-		continue;
-
-	    if (handleExec(con, NULL, *origOptString)) {
-		/* Restore rest of short options for further processing */
-		origOptString++;
-		if (*origOptString != '\0')
-		    con->os->nextCharArg = origOptString;
-		continue;
-	    }
-
-	    opt = findOption(con->options, NULL, *origOptString, &cb,
-			     &cbData, 0);
-	    if (!opt)
-		return POPT_ERROR_BADOPT;
-	    shorty = 1;
-
-	    origOptString++;
-	    if (*origOptString != '\0')
-		con->os->nextCharArg = origOptString;
-	}
-	/*@=branchstate@*/
-
-	if (opt == NULL) return POPT_ERROR_BADOPT;	/* XXX can't happen */
-	if (opt->arg && (opt->argInfo & POPT_ARG_MASK) == POPT_ARG_NONE) {
-	    if (poptSaveInt((int *)opt->arg, opt->argInfo, 1L))
-		return POPT_ERROR_BADOPERATION;
-	} else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_VAL) {
-	    if (opt->arg) {
-		if (poptSaveInt((int *)opt->arg, opt->argInfo, (long)opt->val))
-		    return POPT_ERROR_BADOPERATION;
-	    }
-	} else if ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_NONE) {
-	    con->os->nextArg = _free(con->os->nextArg);
-	    /*@-usedef@*/	/* FIX: W2DO? */
-	    if (longArg) {
-	    /*@=usedef@*/
-		longArg = expandNextArg(con, longArg);
-		con->os->nextArg = longArg;
-	    } else if (con->os->nextCharArg) {
-		longArg = expandNextArg(con, con->os->nextCharArg);
-		con->os->nextArg = longArg;
-		con->os->nextCharArg = NULL;
-	    } else {
-		while (con->os->next == con->os->argc &&
-		       con->os > con->optionStack) {
-		    cleanOSE(con->os--);
-		}
-		if (con->os->next == con->os->argc) {
-		    if (!(opt->argInfo & POPT_ARGFLAG_OPTIONAL))
-			/*@-compdef@*/	/* FIX: con->os->argv not defined */
-			return POPT_ERROR_NOARG;
-			/*@=compdef@*/
-		    con->os->nextArg = NULL;
-		} else {
-
-		    /*
-		     * Make sure this isn't part of a short arg or the
-		     * result of an alias expansion.
-		     */
-		    if (con->os == con->optionStack &&
-			(opt->argInfo & POPT_ARGFLAG_STRIP) &&
-			canstrip) {
-			poptStripArg(con, con->os->next);
-		    }
-		
-		    if (con->os->argv != NULL) {	/* XXX can't happen */
-			/* XXX watchout: subtle side-effects live here. */
-			longArg = con->os->argv[con->os->next++];
-			longArg = expandNextArg(con, longArg);
-			con->os->nextArg = longArg;
-		    }
-		}
-	    }
-	    longArg = NULL;
-
-	    if (opt->arg) {
-		switch (opt->argInfo & POPT_ARG_MASK) {
-		case POPT_ARG_STRING:
-		    /* XXX memory leak, hard to plug */
-		    *((const char **) opt->arg) = (con->os->nextArg)
-			? xstrdup(con->os->nextArg) : NULL;
-		    /*@switchbreak@*/ break;
-
-		case POPT_ARG_INT:
-		case POPT_ARG_LONG:
-		{   long aLong = 0;
-		    char *end;
-
-		    if (con->os->nextArg) {
-			aLong = strtol(con->os->nextArg, &end, 0);
-			if (!(end && *end == '\0'))
-			    return POPT_ERROR_BADNUMBER;
-		    }
-
-		    if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_LONG) {
-			if (aLong == LONG_MIN || aLong == LONG_MAX)
-			    return POPT_ERROR_OVERFLOW;
-			if (poptSaveLong((long *)opt->arg, opt->argInfo, aLong))
-			    return POPT_ERROR_BADOPERATION;
-		    } else {
-			if (aLong > INT_MAX || aLong < INT_MIN)
-			    return POPT_ERROR_OVERFLOW;
-			if (poptSaveInt((int *)opt->arg, opt->argInfo, aLong))
-			    return POPT_ERROR_BADOPERATION;
-		    }
-		}   /*@switchbreak@*/ break;
-
-		case POPT_ARG_FLOAT:
-		case POPT_ARG_DOUBLE:
-		{   double aDouble = 0.0;
-		    char *end;
-
-		    if (con->os->nextArg) {
-			/*@-mods@*/
-			int saveerrno = errno;
-			errno = 0;
-			aDouble = strtod(con->os->nextArg, &end);
-			if (errno == ERANGE)
-			    return POPT_ERROR_OVERFLOW;
-			errno = saveerrno;
-			/*@=mods@*/
-			if (*end != '\0')
-			    return POPT_ERROR_BADNUMBER;
-		    }
-
-		    if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_DOUBLE) {
-			*((double *) opt->arg) = aDouble;
-		    } else {
-#define _ABS(a)	((((a) - 0.0) < DBL_EPSILON) ? -(a) : (a))
-			if ((_ABS(aDouble) - FLT_MAX) > DBL_EPSILON)
-			    return POPT_ERROR_OVERFLOW;
-			if ((FLT_MIN - _ABS(aDouble)) > DBL_EPSILON)
-			    return POPT_ERROR_OVERFLOW;
-			*((float *) opt->arg) = aDouble;
-		    }
-		}   /*@switchbreak@*/ break;
-		default:
-		    fprintf(stdout,
-			POPT_("option type (%d) not implemented in popt\n"),
-			(opt->argInfo & POPT_ARG_MASK));
-		    exit(EXIT_FAILURE);
-		    /*@notreached@*/ /*@switchbreak@*/ break;
-		}
-	    }
-	}
-
-	if (cb) {
-	    /*@-internalglobs@*/
-	    invokeCallbacksOPTION(con, con->options, opt, cbData, shorty);
-	    /*@=internalglobs@*/
-	} else if (opt->val && ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_VAL))
-	    done = 1;
-
-	if ((con->finalArgvCount + 2) >= (con->finalArgvAlloced)) {
-	    con->finalArgvAlloced += 10;
-	    con->finalArgv = realloc(con->finalArgv,
-			    sizeof(*con->finalArgv) * con->finalArgvAlloced);
-	}
-
-	if (con->finalArgv != NULL)
-	{   char *s = malloc((opt->longName ? strlen(opt->longName) : 0) + 3);
-	    if (s != NULL) {	/* XXX can't happen */
-		if (opt->longName)
-		    sprintf(s, "%s%s",
-			((opt->argInfo & POPT_ARGFLAG_ONEDASH) ? "-" : "--"),
-			opt->longName);
-		else
-		    sprintf(s, "-%c", opt->shortName);
-		con->finalArgv[con->finalArgvCount++] = s;
-	    } else
-		con->finalArgv[con->finalArgvCount++] = NULL;
-	}
-
-	if (opt->arg && (opt->argInfo & POPT_ARG_MASK) == POPT_ARG_NONE)
-	    /*@-ifempty@*/ ; /*@=ifempty@*/
-	else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_VAL)
-	    /*@-ifempty@*/ ; /*@=ifempty@*/
-	else if ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_NONE) {
-	    if (con->finalArgv != NULL && con->os->nextArg)
-	        con->finalArgv[con->finalArgvCount++] =
-			/*@-nullpass@*/	/* LCL: con->os->nextArg != NULL */
-			xstrdup(con->os->nextArg);
-			/*@=nullpass@*/
-	}
-    }
-
-    return (opt ? opt->val : -1);	/* XXX can't happen */
-}
-/*@=boundswrite@*/
-
-const char * poptGetOptArg(poptContext con)
-{
-    const char * ret = NULL;
-    /*@-branchstate@*/
-    if (con) {
-	ret = con->os->nextArg;
-	con->os->nextArg = NULL;
-    }
-    /*@=branchstate@*/
-    return ret;
-}
-
-const char * poptGetArg(poptContext con)
-{
-    const char * ret = NULL;
-    if (con && con->leftovers != NULL && con->nextLeftover < con->numLeftovers)
-	ret = con->leftovers[con->nextLeftover++];
-    return ret;
-}
-
-const char * poptPeekArg(poptContext con)
-{
-    const char * ret = NULL;
-    if (con && con->leftovers != NULL && con->nextLeftover < con->numLeftovers)
-	ret = con->leftovers[con->nextLeftover];
-    return ret;
-}
-
-/*@-boundswrite@*/
-const char ** poptGetArgs(poptContext con)
-{
-    if (con == NULL ||
-	con->leftovers == NULL || con->numLeftovers == con->nextLeftover)
-	return NULL;
-
-    /* some apps like [like RPM ;-) ] need this NULL terminated */
-    con->leftovers[con->numLeftovers] = NULL;
-
-    /*@-nullret -nullstate @*/	/* FIX: typedef double indirection. */
-    return (con->leftovers + con->nextLeftover);
-    /*@=nullret =nullstate @*/
-}
-/*@=boundswrite@*/
-
-poptContext poptFreeContext(poptContext con)
-{
-    poptItem item;
-    int i;
-
-    if (con == NULL) return con;
-    poptResetContext(con);
-    con->os->argb = _free(con->os->argb);
-
-    if (con->aliases != NULL)
-    for (i = 0; i < con->numAliases; i++) {
-	item = con->aliases + i;
-	/*@-modobserver -observertrans -dependenttrans@*/
-	item->option.longName = _free(item->option.longName);
-	item->option.descrip = _free(item->option.descrip);
-	item->option.argDescrip = _free(item->option.argDescrip);
-	/*@=modobserver =observertrans =dependenttrans@*/
-	item->argv = _free(item->argv);
-    }
-    con->aliases = _free(con->aliases);
-
-    if (con->execs != NULL)
-    for (i = 0; i < con->numExecs; i++) {
-	item = con->execs + i;
-	/*@-modobserver -observertrans -dependenttrans@*/
-	item->option.longName = _free(item->option.longName);
-	item->option.descrip = _free(item->option.descrip);
-	item->option.argDescrip = _free(item->option.argDescrip);
-	/*@=modobserver =observertrans =dependenttrans@*/
-	item->argv = _free(item->argv);
-    }
-    con->execs = _free(con->execs);
-
-    con->leftovers = _free(con->leftovers);
-    con->finalArgv = _free(con->finalArgv);
-    con->appName = _free(con->appName);
-    con->otherHelp = _free(con->otherHelp);
-    con->execPath = _free(con->execPath);
-    con->arg_strip = PBM_FREE(con->arg_strip);
-    
-    con = _free(con);
-    return con;
-}
-
-int poptAddAlias(poptContext con, struct poptAlias alias,
-		/*@unused@*/ int flags)
-{
-    poptItem item = alloca(sizeof(*item));
-    memset(item, 0, sizeof(*item));
-    item->option.longName = alias.longName;
-    item->option.shortName = alias.shortName;
-    item->option.argInfo = POPT_ARGFLAG_DOC_HIDDEN;
-    item->option.arg = 0;
-    item->option.val = 0;
-    item->option.descrip = NULL;
-    item->option.argDescrip = NULL;
-    item->argc = alias.argc;
-    item->argv = alias.argv;
-    return poptAddItem(con, item, 0);
-}
-
-/*@-boundswrite@*/
-/*@-mustmod@*/ /* LCL: con not modified? */
-int poptAddItem(poptContext con, poptItem newItem, int flags)
-{
-    poptItem * items, item;
-    int * nitems;
-
-    switch (flags) {
-    case 1:
-	items = &con->execs;
-	nitems = &con->numExecs;
-	break;
-    case 0:
-	items = &con->aliases;
-	nitems = &con->numAliases;
-	break;
-    default:
-	return 1;
-	/*@notreached@*/ break;
-    }
-
-    *items = realloc((*items), ((*nitems) + 1) * sizeof(**items));
-    if ((*items) == NULL)
-	return 1;
-
-    item = (*items) + (*nitems);
-
-    item->option.longName =
-	(newItem->option.longName ? xstrdup(newItem->option.longName) : NULL);
-    item->option.shortName = newItem->option.shortName;
-    item->option.argInfo = newItem->option.argInfo;
-    item->option.arg = newItem->option.arg;
-    item->option.val = newItem->option.val;
-    item->option.descrip =
-	(newItem->option.descrip ? xstrdup(newItem->option.descrip) : NULL);
-    item->option.argDescrip =
-       (newItem->option.argDescrip ? xstrdup(newItem->option.argDescrip) : NULL);
-    item->argc = newItem->argc;
-    item->argv = newItem->argv;
-
-    (*nitems)++;
-
-    return 0;
-}
-/*@=mustmod@*/
-/*@=boundswrite@*/
-
-const char * poptBadOption(poptContext con, int flags)
-{
-    struct optionStackEntry * os = NULL;
-
-    if (con != NULL)
-	os = (flags & POPT_BADOPTION_NOALIAS) ? con->optionStack : con->os;
-
-    /*@-nullderef@*/	/* LCL: os->argv != NULL */
-    return (os && os->argv ? os->argv[os->next - 1] : NULL);
-    /*@=nullderef@*/
-}
-
-const char * poptStrerror(const int error)
-{
-    switch (error) {
-      case POPT_ERROR_NOARG:
-	return POPT_("missing argument");
-      case POPT_ERROR_BADOPT:
-	return POPT_("unknown option");
-      case POPT_ERROR_BADOPERATION:
-	return POPT_("mutually exclusive logical operations requested");
-      case POPT_ERROR_NULLARG:
-	return POPT_("opt->arg should not be NULL");
-      case POPT_ERROR_OPTSTOODEEP:
-	return POPT_("aliases nested too deeply");
-      case POPT_ERROR_BADQUOTE:
-	return POPT_("error in parameter quoting");
-      case POPT_ERROR_BADNUMBER:
-	return POPT_("invalid numeric value");
-      case POPT_ERROR_OVERFLOW:
-	return POPT_("number too large or too small");
-      case POPT_ERROR_MALLOC:
-	return POPT_("memory allocation failed");
-      case POPT_ERROR_ERRNO:
-	return strerror(errno);
-      default:
-	return POPT_("unknown error");
-    }
-}
-
-int poptStuffArgs(poptContext con, const char ** argv)
-{
-    int argc;
-    int rc;
-
-    if ((con->os - con->optionStack) == POPT_OPTION_DEPTH)
-	return POPT_ERROR_OPTSTOODEEP;
-
-    for (argc = 0; argv[argc]; argc++)
-	{};
-
-    con->os++;
-    con->os->next = 0;
-    con->os->nextArg = NULL;
-    con->os->nextCharArg = NULL;
-    con->os->currAlias = NULL;
-    rc = poptDupArgv(argc, argv, &con->os->argc, &con->os->argv);
-    con->os->argb = NULL;
-    con->os->stuffed = 1;
-
-    return rc;
-}
-
-const char * poptGetInvocationName(poptContext con)
-{
-    return (con->os->argv ? con->os->argv[0] : "");
-}
-
-/*@-boundswrite@*/
-int poptStrippedArgv(poptContext con, int argc, char ** argv)
-{
-    int numargs = argc;
-    int j = 1;
-    int i;
-    
-    /*@-sizeoftype@*/
-    if (con->arg_strip)
-    for (i = 1; i < argc; i++) {
-	if (PBM_ISSET(i, con->arg_strip))
-	    numargs--;
-    }
-    
-    for (i = 1; i < argc; i++) {
-	if (con->arg_strip && PBM_ISSET(i, con->arg_strip))
-	    continue;
-	argv[j] = (j < numargs) ? argv[i] : NULL;
-	j++;
-    }
-    /*@=sizeoftype@*/
-    
-    return numargs;
-}
-/*@=boundswrite@*/
diff --git a/libpopt/popt.h b/libpopt/popt.h
deleted file mode 100644
index 4f85d9e..0000000
--- a/libpopt/popt.h
+++ /dev/null
@@ -1,564 +0,0 @@
-/** \file popt/popt.h
- * \ingroup popt
- */
-
-/* (C) 1998-2000 Red Hat, Inc. -- Licensing details are in the COPYING
-   file accompanying popt source distributions, available from 
-   ftp://ftp.rpm.org/pub/rpm/dist. */
-
-#ifndef H_POPT
-#define H_POPT
-
-#include <stdio.h>			/* for FILE * */
-
-#define POPT_OPTION_DEPTH	10
-
-/** \ingroup popt
- * \name Arg type identifiers
- */
-/*@{*/
-#define POPT_ARG_NONE		0	/*!< no arg */
-#define POPT_ARG_STRING		1	/*!< arg will be saved as string */
-#define POPT_ARG_INT		2	/*!< arg will be converted to int */
-#define POPT_ARG_LONG		3	/*!< arg will be converted to long */
-#define POPT_ARG_INCLUDE_TABLE	4	/*!< arg points to table */
-#define POPT_ARG_CALLBACK	5	/*!< table-wide callback... must be
-					   set first in table; arg points 
-					   to callback, descrip points to 
-					   callback data to pass */
-#define POPT_ARG_INTL_DOMAIN    6       /*!< set the translation domain
-					   for this table and any
-					   included tables; arg points
-					   to the domain string */
-#define POPT_ARG_VAL		7	/*!< arg should take value val */
-#define	POPT_ARG_FLOAT		8	/*!< arg will be converted to float */
-#define	POPT_ARG_DOUBLE		9	/*!< arg will be converted to double */
-
-#define POPT_ARG_MASK		0x0000FFFF
-/*@}*/
-
-/** \ingroup popt
- * \name Arg modifiers
- */
-/*@{*/
-#define POPT_ARGFLAG_ONEDASH	0x80000000  /*!< allow -longoption */
-#define POPT_ARGFLAG_DOC_HIDDEN 0x40000000  /*!< don't show in help/usage */
-#define POPT_ARGFLAG_STRIP	0x20000000  /*!< strip this arg from argv(only applies to long args) */
-#define	POPT_ARGFLAG_OPTIONAL	0x10000000  /*!< arg may be missing */
-
-#define	POPT_ARGFLAG_OR		0x08000000  /*!< arg will be or'ed */
-#define	POPT_ARGFLAG_NOR	0x09000000  /*!< arg will be nor'ed */
-#define	POPT_ARGFLAG_AND	0x04000000  /*!< arg will be and'ed */
-#define	POPT_ARGFLAG_NAND	0x05000000  /*!< arg will be nand'ed */
-#define	POPT_ARGFLAG_XOR	0x02000000  /*!< arg will be xor'ed */
-#define	POPT_ARGFLAG_NOT	0x01000000  /*!< arg will be negated */
-#define POPT_ARGFLAG_LOGICALOPS \
-        (POPT_ARGFLAG_OR|POPT_ARGFLAG_AND|POPT_ARGFLAG_XOR)
-
-#define	POPT_BIT_SET	(POPT_ARG_VAL|POPT_ARGFLAG_OR)
-					/*!< set arg bit(s) */
-#define	POPT_BIT_CLR	(POPT_ARG_VAL|POPT_ARGFLAG_NAND)
-					/*!< clear arg bit(s) */
-
-#define	POPT_ARGFLAG_SHOW_DEFAULT 0x00800000 /*!< show default value in --help */
-
-/*@}*/
-
-/** \ingroup popt
- * \name Callback modifiers
- */
-/*@{*/
-#define POPT_CBFLAG_PRE		0x80000000  /*!< call the callback before parse */
-#define POPT_CBFLAG_POST	0x40000000  /*!< call the callback after parse */
-#define POPT_CBFLAG_INC_DATA	0x20000000  /*!< use data from the include line,
-					       not the subtable */
-#define POPT_CBFLAG_SKIPOPTION	0x10000000  /*!< don't callback with option */
-#define POPT_CBFLAG_CONTINUE	0x08000000  /*!< continue callbacks with option */
-/*@}*/
-
-/** \ingroup popt
- * \name Error return values
- */
-/*@{*/
-#define POPT_ERROR_NOARG	-10	/*!< missing argument */
-#define POPT_ERROR_BADOPT	-11	/*!< unknown option */
-#define POPT_ERROR_OPTSTOODEEP	-13	/*!< aliases nested too deeply */
-#define POPT_ERROR_BADQUOTE	-15	/*!< error in paramter quoting */
-#define POPT_ERROR_ERRNO	-16	/*!< errno set, use strerror(errno) */
-#define POPT_ERROR_BADNUMBER	-17	/*!< invalid numeric value */
-#define POPT_ERROR_OVERFLOW	-18	/*!< number too large or too small */
-#define	POPT_ERROR_BADOPERATION	-19	/*!< mutually exclusive logical operations requested */
-#define	POPT_ERROR_NULLARG	-20	/*!< opt->arg should not be NULL */
-#define	POPT_ERROR_MALLOC	-21	/*!< memory allocation failed */
-/*@}*/
-
-/** \ingroup popt
- * \name poptBadOption() flags
- */
-/*@{*/
-#define POPT_BADOPTION_NOALIAS  (1 << 0)  /*!< don't go into an alias */
-/*@}*/
-
-/** \ingroup popt
- * \name poptGetContext() flags
- */
-/*@{*/
-#define POPT_CONTEXT_NO_EXEC	(1 << 0)  /*!< ignore exec expansions */
-#define POPT_CONTEXT_KEEP_FIRST	(1 << 1)  /*!< pay attention to argv[0] */
-#define POPT_CONTEXT_POSIXMEHARDER (1 << 2) /*!< options can't follow args */
-#define POPT_CONTEXT_ARG_OPTS	(1 << 4) /*!< return args as options with value 0 */
-/*@}*/
-
-/** \ingroup popt
- */
-struct poptOption {
-/*@observer@*/ /*@null@*/
-    const char * longName;	/*!< may be NULL */
-    char shortName;		/*!< may be NUL */
-    int argInfo;
-/*@shared@*/ /*@null@*/
-    void * arg;			/*!< depends on argInfo */
-    int val;			/*!< 0 means don't return, just update flag */
-/*@observer@*/ /*@null@*/
-    const char * descrip;	/*!< description for autohelp -- may be NULL */
-/*@observer@*/ /*@null@*/
-    const char * argDescrip;	/*!< argument description for autohelp */
-};
-
-/** \ingroup popt
- * A popt alias argument for poptAddAlias().
- */
-struct poptAlias {
-/*@owned@*/ /*@null@*/
-    const char * longName;	/*!< may be NULL */
-    char shortName;		/*!< may be NUL */
-    int argc;
-/*@owned@*/
-    const char ** argv;		/*!< must be free()able */
-};
-
-/** \ingroup popt
- * A popt alias or exec argument for poptAddItem().
- */
-/*@-exporttype@*/
-typedef struct poptItem_s {
-    struct poptOption option;	/*!< alias/exec name(s) and description. */
-    int argc;			/*!< (alias) no. of args. */
-/*@owned@*/
-    const char ** argv;		/*!< (alias) args, must be free()able. */
-} * poptItem;
-/*@=exporttype@*/
-
-/** \ingroup popt
- * \name Auto-generated help/usage
- */
-/*@{*/
-
-/**
- * Empty table marker to enable displaying popt alias/exec options.
- */
-/*@-exportvar@*/
-/*@unchecked@*/ /*@observer@*/
-extern struct poptOption poptAliasOptions[];
-/*@=exportvar@*/
-#define POPT_AUTOALIAS { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptAliasOptions, \
-			0, "Options implemented via popt alias/exec:", NULL },
-
-/**
- * Auto help table options.
- */
-/*@-exportvar@*/
-/*@unchecked@*/ /*@observer@*/
-extern struct poptOption poptHelpOptions[];
-/*@=exportvar@*/
-
-/*@-exportvar@*/
-/*@unchecked@*/ /*@observer@*/
-extern struct poptOption * poptHelpOptionsI18N;
-/*@=exportvar@*/
-
-#define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptHelpOptions, \
-			0, "Help options:", NULL },
-
-#define POPT_TABLEEND { NULL, '\0', 0, 0, 0, NULL, NULL }
-/*@}*/
-
-/** \ingroup popt
- */
-/*@-exporttype@*/
-typedef /*@abstract@*/ struct poptContext_s * poptContext;
-/*@=exporttype@*/
-
-/** \ingroup popt
- */
-#ifndef __cplusplus
-/*@-exporttype -typeuse@*/
-typedef struct poptOption * poptOption;
-/*@=exporttype =typeuse@*/
-#endif
-
-/*@-exportconst@*/
-enum poptCallbackReason {
-    POPT_CALLBACK_REASON_PRE	= 0, 
-    POPT_CALLBACK_REASON_POST	= 1,
-    POPT_CALLBACK_REASON_OPTION = 2
-};
-/*@=exportconst@*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*@-type@*/
-
-/** \ingroup popt
- * Table callback prototype.
- * @param con		context
- * @param reason	reason for callback
- * @param opt		option that triggered callback
- * @param arg		@todo Document.
- * @param data		@todo Document.
- */
-typedef void (*poptCallbackType) (poptContext con, 
-		enum poptCallbackReason reason,
-		/*@null@*/ const struct poptOption * opt,
-		/*@null@*/ const char * arg,
-		/*@null@*/ const void * data)
-	/*@globals internalState @*/
-	/*@modifies internalState @*/;
-
-/** \ingroup popt
- * Initialize popt context.
- * @param name		context name (usually argv[0] program name)
- * @param argc		no. of arguments
- * @param argv		argument array
- * @param options	address of popt option table
- * @param flags		or'd POPT_CONTEXT_* bits
- * @return		initialized popt context
- */
-/*@only@*/ /*@null@*/
-poptContext poptGetContext(
-		/*@dependent@*/ /*@keep@*/ const char * name,
-		int argc, /*@dependent@*/ /*@keep@*/ const char ** argv,
-		/*@dependent@*/ /*@keep@*/ const struct poptOption * options,
-		int flags)
-	/*@*/;
-
-/** \ingroup popt
- * Reinitialize popt context.
- * @param con		context
- */
-/*@unused@*/
-void poptResetContext(/*@null@*/poptContext con)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Return value of next option found.
- * @param con		context
- * @return		next option val, -1 on last item, POPT_ERROR_* on error
- */
-int poptGetNextOpt(/*@null@*/poptContext con)
-	/*@globals fileSystem, internalState @*/
-	/*@modifies con, fileSystem, internalState @*/;
-
-/** \ingroup popt
- * Return next option argument (if any).
- * @param con		context
- * @return		option argument, NULL if no argument is available
- */
-/*@observer@*/ /*@null@*/ /*@unused@*/
-const char * poptGetOptArg(/*@null@*/poptContext con)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Return next argument.
- * @param con		context
- * @return		next argument, NULL if no argument is available
- */
-/*@observer@*/ /*@null@*/ /*@unused@*/
-const char * poptGetArg(/*@null@*/poptContext con)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Peek at current argument.
- * @param con		context
- * @return		current argument, NULL if no argument is available
- */
-/*@observer@*/ /*@null@*/ /*@unused@*/
-const char * poptPeekArg(/*@null@*/poptContext con)
-	/*@*/;
-
-/** \ingroup popt
- * Return remaining arguments.
- * @param con		context
- * @return		argument array, NULL terminated
- */
-/*@observer@*/ /*@null@*/
-const char ** poptGetArgs(/*@null@*/poptContext con)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Return the option which caused the most recent error.
- * @param con		context
- * @param flags
- * @return		offending option
- */
-/*@observer@*/
-const char * poptBadOption(/*@null@*/poptContext con, int flags)
-	/*@*/;
-
-/** \ingroup popt
- * Destroy context.
- * @param con		context
- * @return		NULL always
- */
-/*@null@*/
-poptContext poptFreeContext( /*@only@*/ /*@null@*/ poptContext con)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Add arguments to context.
- * @param con		context
- * @param argv		argument array, NULL terminated
- * @return		0 on success, POPT_ERROR_OPTSTOODEEP on failure
- */
-/*@unused@*/
-int poptStuffArgs(poptContext con, /*@keep@*/ const char ** argv)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Add alias to context.
- * @todo Pass alias by reference, not value.
- * @deprecated Use poptAddItem instead.
- * @param con		context
- * @param alias		alias to add
- * @param flags		(unused)
- * @return		0 on success
- */
-/*@unused@*/
-int poptAddAlias(poptContext con, struct poptAlias alias, int flags)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Add alias/exec item to context.
- * @param con		context
- * @param newItem	alias/exec item to add
- * @param flags		0 for alias, 1 for exec
- * @return		0 on success
- */
-int poptAddItem(poptContext con, poptItem newItem, int flags)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Read configuration file.
- * @param con		context
- * @param fn		file name to read
- * @return		0 on success, POPT_ERROR_ERRNO on failure
- */
-int poptReadConfigFile(poptContext con, const char * fn)
-	/*@globals errno, fileSystem, internalState @*/
-	/*@modifies con->execs, con->numExecs,
-		errno, fileSystem, internalState @*/;
-
-/** \ingroup popt
- * Read default configuration from /etc/popt and $HOME/.popt.
- * @param con		context
- * @param useEnv	(unused)
- * @return		0 on success, POPT_ERROR_ERRNO on failure
- */
-/*@unused@*/
-int poptReadDefaultConfig(poptContext con, /*@unused@*/ int useEnv)
-	/*@globals fileSystem, internalState @*/
-	/*@modifies con->execs, con->numExecs,
-		fileSystem, internalState @*/;
-
-/** \ingroup popt
- * Duplicate an argument array.
- * @note: The argument array is malloc'd as a single area, so only argv must
- * be free'd.
- *
- * @param argc		no. of arguments
- * @param argv		argument array
- * @retval argcPtr	address of returned no. of arguments
- * @retval argvPtr	address of returned argument array
- * @return		0 on success, POPT_ERROR_NOARG on failure
- */
-int poptDupArgv(int argc, /*@null@*/ const char **argv,
-		/*@null@*/ /*@out@*/ int * argcPtr,
-		/*@null@*/ /*@out@*/ const char *** argvPtr)
-	/*@modifies *argcPtr, *argvPtr @*/;
-
-/** \ingroup popt
- * Parse a string into an argument array.
- * The parse allows ', ", and \ quoting, but ' is treated the same as " and
- * both may include \ quotes.
- * @note: The argument array is malloc'd as a single area, so only argv must
- * be free'd.
- *
- * @param s		string to parse
- * @retval argcPtr	address of returned no. of arguments
- * @retval argvPtr	address of returned argument array
- */
-int poptParseArgvString(const char * s,
-		/*@out@*/ int * argcPtr, /*@out@*/ const char *** argvPtr)
-	/*@modifies *argcPtr, *argvPtr @*/;
-
-/** \ingroup popt
- * Parses an input configuration file and returns an string that is a 
- * command line.  For use with popt.  You must free the return value when done.
- *
- * Given the file:
-\verbatim
-# this line is ignored
-    #   this one too
-aaa
-  bbb
-    ccc   
-bla=bla
-
-this_is   =   fdsafdas
-     bad_line=        
-  reall bad line  
-  reall bad line  = again
-5555=   55555   
-  test = with lots of spaces
-\endverbatim
-*
-* The result is:
-\verbatim
---aaa --bbb --ccc --bla="bla" --this_is="fdsafdas" --5555="55555" --test="with lots of spaces"
-\endverbatim
-*
-* Passing this to poptParseArgvString() yields an argv of:
-\verbatim
-'--aaa'
-'--bbb' 
-'--ccc' 
-'--bla=bla' 
-'--this_is=fdsafdas' 
-'--5555=55555' 
-'--test=with lots of spaces' 
-\endverbatim
- *
- * @bug NULL is returned if file line is too long.
- * @bug Silently ignores invalid lines.
- *
- * @param fp		file handle to read
- * @param *argstrp	return string of options (malloc'd)
- * @param flags		unused
- * @return		0 on success
- * @see			poptParseArgvString
- */
-/*@-fcnuse@*/
-int poptConfigFileToString(FILE *fp, /*@out@*/ char ** argstrp, int flags)
-	/*@globals fileSystem @*/
-	/*@modifies *fp, *argstrp, fileSystem @*/;
-/*@=fcnuse@*/
-
-/** \ingroup popt
- * Return formatted error string for popt failure.
- * @param error		popt error
- * @return		error string
- */
-/*@observer@*/
-const char * poptStrerror(const int error)
-	/*@*/;
-
-/** \ingroup popt
- * Limit search for executables.
- * @param con		context
- * @param path		single path to search for executables
- * @param allowAbsolute	absolute paths only?
- */
-/*@unused@*/
-void poptSetExecPath(poptContext con, const char * path, int allowAbsolute)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Print detailed description of options.
- * @param con		context
- * @param fp		ouput file handle
- * @param flags		(unused)
- */
-void poptPrintHelp(poptContext con, FILE * fp, /*@unused@*/ int flags)
-	/*@globals fileSystem @*/
-	/*@modifies *fp, fileSystem @*/;
-
-/** \ingroup popt
- * Print terse description of options.
- * @param con		context
- * @param fp		ouput file handle
- * @param flags		(unused)
- */
-void poptPrintUsage(poptContext con, FILE * fp, /*@unused@*/ int flags)
-	/*@globals fileSystem @*/
-	/*@modifies *fp, fileSystem @*/;
-
-/** \ingroup popt
- * Provide text to replace default "[OPTION...]" in help/usage output.
- * @param con		context
- * @param text		replacement text
- */
-/*@-fcnuse@*/
-void poptSetOtherOptionHelp(poptContext con, const char * text)
-	/*@modifies con @*/;
-/*@=fcnuse@*/
-
-/** \ingroup popt
- * Return argv[0] from context.
- * @param con		context
- * @return		argv[0]
- */
-/*@-fcnuse@*/
-/*@observer@*/
-const char * poptGetInvocationName(poptContext con)
-	/*@*/;
-/*@=fcnuse@*/
-
-/** \ingroup popt
- * Shuffle argv pointers to remove stripped args, returns new argc.
- * @param con		context
- * @param argc		no. of args
- * @param argv		arg vector
- * @return		new argc
- */
-/*@-fcnuse@*/
-int poptStrippedArgv(poptContext con, int argc, char ** argv)
-	/*@modifies *argv @*/;
-/*@=fcnuse@*/
-
-/**
- * Save a long, performing logical operation with value.
- * @warning Alignment check may be too strict on certain platorms.
- * @param arg		integer pointer, aligned on int boundary.
- * @param argInfo	logical operation (see POPT_ARGFLAG_*)
- * @param aLong		value to use
- * @return		0 on success, POPT_ERROR_NULLARG/POPT_ERROR_BADOPERATION
- */
-/*@-incondefs@*/
-/*@unused@*/
-int poptSaveLong(/*@null@*/ long * arg, int argInfo, long aLong)
-	/*@modifies *arg @*/
-	/*@requires maxSet(arg) >= 0 /\ maxRead(arg) == 0 @*/;
-/*@=incondefs@*/
-
-/**
- * Save an integer, performing logical operation with value.
- * @warning Alignment check may be too strict on certain platorms.
- * @param arg		integer pointer, aligned on int boundary.
- * @param argInfo	logical operation (see POPT_ARGFLAG_*)
- * @param aLong		value to use
- * @return		0 on success, POPT_ERROR_NULLARG/POPT_ERROR_BADOPERATION
- */
-/*@-incondefs@*/
-/*@unused@*/
-int poptSaveInt(/*@null@*/ int * arg, int argInfo, long aLong)
-	/*@modifies *arg @*/
-	/*@requires maxSet(arg) >= 0 /\ maxRead(arg) == 0 @*/;
-/*@=incondefs@*/
-
-/*@=type@*/
-#ifdef  __cplusplus
-}
-#endif
-
-#endif
diff --git a/libpopt/poptconfig.c b/libpopt/poptconfig.c
deleted file mode 100644
index e5cba45..0000000
--- a/libpopt/poptconfig.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/** \ingroup popt
- * \file popt/poptconfig.c
- */
-
-/* (C) 1998-2002 Red Hat, Inc. -- Licensing details are in the COPYING
-   file accompanying popt source distributions, available from 
-   ftp://ftp.rpm.org/pub/rpm/dist. */
-
-#include "system.h"
-#include "poptint.h"
-/*@access poptContext @*/
-
-/*@-compmempass@*/	/* FIX: item->option.longName kept, not dependent. */
-static void configLine(poptContext con, char * line)
-	/*@modifies con @*/
-{
-    size_t nameLength;
-    const char * entryType;
-    const char * opt;
-    poptItem item = alloca(sizeof(*item));
-    int i, j;
-
-    if (con->appName == NULL)
-	return;
-    nameLength = strlen(con->appName);
-    
-/*@-boundswrite@*/
-    memset(item, 0, sizeof(*item));
-
-    if (strncmp(line, con->appName, nameLength)) return;
-
-    line += nameLength;
-    if (*line == '\0' || !isspace(*line)) return;
-
-    while (*line != '\0' && isspace(*line)) line++;
-    entryType = line;
-    while (*line == '\0' || !isspace(*line)) line++;
-    *line++ = '\0';
-
-    while (*line != '\0' && isspace(*line)) line++;
-    if (*line == '\0') return;
-    opt = line;
-    while (*line == '\0' || !isspace(*line)) line++;
-    *line++ = '\0';
-
-    while (*line != '\0' && isspace(*line)) line++;
-    if (*line == '\0') return;
-
-    /*@-temptrans@*/ /* FIX: line alias is saved */
-    if (opt[0] == '-' && opt[1] == '-')
-	item->option.longName = opt + 2;
-    else if (opt[0] == '-' && opt[2] == '\0')
-	item->option.shortName = opt[1];
-    /*@=temptrans@*/
-
-    if (poptParseArgvString(line, &item->argc, &item->argv)) return;
-
-    /*@-modobserver@*/
-    item->option.argInfo = POPT_ARGFLAG_DOC_HIDDEN;
-    for (i = 0, j = 0; i < item->argc; i++, j++) {
-	const char * f;
-	if (!strncmp(item->argv[i], "--POPTdesc=", sizeof("--POPTdesc=")-1)) {
-	    f = item->argv[i] + sizeof("--POPTdesc=");
-	    if (f[0] == '$' && f[1] == '"') f++;
-	    item->option.descrip = f;
-	    item->option.argInfo &= ~POPT_ARGFLAG_DOC_HIDDEN;
-	    j--;
-	} else
-	if (!strncmp(item->argv[i], "--POPTargs=", sizeof("--POPTargs=")-1)) {
-	    f = item->argv[i] + sizeof("--POPTargs=");
-	    if (f[0] == '$' && f[1] == '"') f++;
-	    item->option.argDescrip = f;
-	    item->option.argInfo &= ~POPT_ARGFLAG_DOC_HIDDEN;
-	    item->option.argInfo |= POPT_ARG_STRING;
-	    j--;
-	} else
-	if (j != i)
-	    item->argv[j] = item->argv[i];
-    }
-    if (j != i) {
-	item->argv[j] = NULL;
-	item->argc = j;
-    }
-    /*@=modobserver@*/
-/*@=boundswrite@*/
-	
-    /*@-nullstate@*/ /* FIX: item->argv[] may be NULL */
-    if (!strcmp(entryType, "alias"))
-	(void) poptAddItem(con, item, 0);
-    else if (!strcmp(entryType, "exec"))
-	(void) poptAddItem(con, item, 1);
-    /*@=nullstate@*/
-}
-/*@=compmempass@*/
-
-int poptReadConfigFile(poptContext con, const char * fn)
-{
-    const char * file, * chptr, * end;
-    char * buf;
-/*@dependent@*/ char * dst;
-    int fd, rc;
-    off_t fileLength;
-
-    fd = open(fn, O_RDONLY);
-    if (fd < 0)
-	return (errno == ENOENT ? 0 : POPT_ERROR_ERRNO);
-
-    fileLength = lseek(fd, 0, SEEK_END);
-    if (fileLength == -1 || lseek(fd, 0, 0) == -1) {
-	rc = errno;
-	(void) close(fd);
-	errno = rc;
-	return POPT_ERROR_ERRNO;
-    }
-
-    file = alloca(fileLength + 1);
-    if (read(fd, (char *)file, fileLength) != fileLength) {
-	rc = errno;
-	(void) close(fd);
-	errno = rc;
-	return POPT_ERROR_ERRNO;
-    }
-    if (close(fd) == -1)
-	return POPT_ERROR_ERRNO;
-
-/*@-boundswrite@*/
-    dst = buf = alloca(fileLength + 1);
-
-    chptr = file;
-    end = (file + fileLength);
-    /*@-infloops@*/	/* LCL: can't detect chptr++ */
-    while (chptr < end) {
-	switch (*chptr) {
-	  case '\n':
-	    *dst = '\0';
-	    dst = buf;
-	    while (*dst && isspace(*dst)) dst++;
-	    if (*dst && *dst != '#')
-		configLine(con, dst);
-	    chptr++;
-	    /*@switchbreak@*/ break;
-	  case '\\':
-	    *dst++ = *chptr++;
-	    if (chptr < end) {
-		if (*chptr == '\n') 
-		    dst--, chptr++;	
-		    /* \ at the end of a line does not insert a \n */
-		else
-		    *dst++ = *chptr++;
-	    }
-	    /*@switchbreak@*/ break;
-	  default:
-	    *dst++ = *chptr++;
-	    /*@switchbreak@*/ break;
-	}
-    }
-    /*@=infloops@*/
-/*@=boundswrite@*/
-
-    return 0;
-}
-
-int poptReadDefaultConfig(poptContext con, /*@unused@*/ int useEnv)
-{
-    char * fn, * home;
-    int rc;
-
-    if (con->appName == NULL) return 0;
-
-    rc = poptReadConfigFile(con, "/etc/popt");
-    if (rc) return rc;
-
-    if ((home = getenv("HOME"))) {
-	fn = alloca(strlen(home) + 20);
-	strcpy(fn, home);
-	strcat(fn, "/.popt");
-	rc = poptReadConfigFile(con, fn);
-	if (rc) return rc;
-    }
-
-    return 0;
-}
diff --git a/libpopt/popthelp.c b/libpopt/popthelp.c
deleted file mode 100644
index 9430a2d..0000000
--- a/libpopt/popthelp.c
+++ /dev/null
@@ -1,819 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-
-/** \ingroup popt
- * \file popt/popthelp.c
- */
-
-/* (C) 1998-2002 Red Hat, Inc. -- Licensing details are in the COPYING
-   file accompanying popt source distributions, available from 
-   ftp://ftp.rpm.org/pub/rpm/dist. */
-
-#include "system.h"
-
-//#define	POPT_WCHAR_HACK
-#ifdef 	POPT_WCHAR_HACK
-#include <wchar.h>			/* for mbsrtowcs */
-/*@access mbstate_t @*/
-#endif
-#include "poptint.h"
-
-/*@access poptContext@*/
-
-/**
- * Display arguments.
- * @param con		context
- * @param foo		(unused)
- * @param key		option(s)
- * @param arg		(unused)
- * @param data		(unused)
- */
-static void displayArgs(poptContext con,
-		/*@unused@*/ enum poptCallbackReason foo,
-		struct poptOption * key, 
-		/*@unused@*/ const char * arg, /*@unused@*/ void * data)
-	/*@globals fileSystem@*/
-	/*@modifies fileSystem@*/
-{
-    if (key->shortName == '?')
-	poptPrintHelp(con, stdout, 0);
-    else
-	poptPrintUsage(con, stdout, 0);
-    exit(0);
-}
-
-#ifdef	NOTYET
-/*@unchecked@*/
-static int show_option_defaults = 0;
-#endif
-
-/**
- * Empty table marker to enable displaying popt alias/exec options.
- */
-/*@observer@*/ /*@unchecked@*/
-struct poptOption poptAliasOptions[] = {
-    POPT_TABLEEND
-};
-
-/**
- * Auto help table options.
- */
-/*@-castfcnptr@*/
-/*@observer@*/ /*@unchecked@*/
-struct poptOption poptHelpOptions[] = {
-  { NULL, '\0', POPT_ARG_CALLBACK, (void *)&displayArgs, '\0', NULL, NULL },
-  { "help", '?', 0, NULL, '?', N_("Show this help message"), NULL },
-  { "usage", '\0', 0, NULL, 'u', N_("Display brief usage message"), NULL },
-    POPT_TABLEEND
-} ;
-
-/*@observer@*/ /*@unchecked@*/
-static struct poptOption poptHelpOptions2[] = {
-/*@-readonlytrans@*/
-  { NULL, '\0', POPT_ARG_INTL_DOMAIN, PACKAGE, 0, NULL, NULL},
-/*@=readonlytrans@*/
-  { NULL, '\0', POPT_ARG_CALLBACK, (void *)&displayArgs, '\0', NULL, NULL },
-  { "help", '?', 0, NULL, '?', N_("Show this help message"), NULL },
-  { "usage", '\0', 0, NULL, 'u', N_("Display brief usage message"), NULL },
-#ifdef	NOTYET
-  { "defaults", '\0', POPT_ARG_NONE, &show_option_defaults, 0,
-	N_("Display option defaults in message"), NULL },
-#endif
-    POPT_TABLEEND
-} ;
-
-/*@observer@*/ /*@unchecked@*/
-struct poptOption * poptHelpOptionsI18N = poptHelpOptions2;
-/*@=castfcnptr@*/
-
-/**
- * @param table		option(s)
- */
-/*@observer@*/ /*@null@*/ static const char *
-getTableTranslationDomain(/*@null@*/ const struct poptOption *table)
-	/*@*/
-{
-    const struct poptOption *opt;
-
-    if (table != NULL)
-    for (opt = table; opt->longName || opt->shortName || opt->arg; opt++) {
-	if (opt->argInfo == POPT_ARG_INTL_DOMAIN)
-	    return opt->arg;
-    }
-    return NULL;
-}
-
-/**
- * @param opt		option(s)
- * @param translation_domain	translation domain
- */
-/*@observer@*/ /*@null@*/ static const char *
-getArgDescrip(const struct poptOption * opt,
-		/*@-paramuse@*/ /* FIX: i18n macros disabled with lclint */
-		/*@null@*/ const char * translation_domain)
-		/*@=paramuse@*/
-	/*@*/
-{
-    if (!(opt->argInfo & POPT_ARG_MASK)) return NULL;
-
-    if (opt == (poptHelpOptions + 1) || opt == (poptHelpOptions + 2))
-	if (opt->argDescrip) return POPT_(opt->argDescrip);
-
-    if (opt->argDescrip) return D_(translation_domain, opt->argDescrip);
-
-    switch (opt->argInfo & POPT_ARG_MASK) {
-    case POPT_ARG_NONE:		return POPT_("NONE");
-#ifdef	DYING
-    case POPT_ARG_VAL:		return POPT_("VAL");
-#else
-    case POPT_ARG_VAL:		return NULL;
-#endif
-    case POPT_ARG_INT:		return POPT_("INT");
-    case POPT_ARG_LONG:		return POPT_("LONG");
-    case POPT_ARG_STRING:	return POPT_("STRING");
-    case POPT_ARG_FLOAT:	return POPT_("FLOAT");
-    case POPT_ARG_DOUBLE:	return POPT_("DOUBLE");
-    default:			return POPT_("ARG");
-    }
-}
-
-/**
- * Display default value for an option.
- * @param lineLength	display positions remaining
- * @param opt		option(s)
- * @param translation_domain	translation domain
- * @return
- */
-static /*@only@*/ /*@null@*/ char *
-singleOptionDefaultValue(size_t lineLength,
-		const struct poptOption * opt,
-		/*@-paramuse@*/ /* FIX: i18n macros disabled with lclint */
-		/*@null@*/ const char * translation_domain)
-		/*@=paramuse@*/
-	/*@*/
-{
-    const char * defstr = D_(translation_domain, "default");
-    char * le = malloc(4*lineLength + 1);
-    char * l = le;
-
-    if (le == NULL) return NULL;	/* XXX can't happen */
-/*@-boundswrite@*/
-    *le = '\0';
-    *le++ = '(';
-    strcpy(le, defstr);	le += strlen(le);
-    *le++ = ':';
-    *le++ = ' ';
-    if (opt->arg)	/* XXX programmer error */
-    switch (opt->argInfo & POPT_ARG_MASK) {
-    case POPT_ARG_VAL:
-    case POPT_ARG_INT:
-    {	long aLong = *((int *)opt->arg);
-	le += sprintf(le, "%ld", aLong);
-    }	break;
-    case POPT_ARG_LONG:
-    {	long aLong = *((long *)opt->arg);
-	le += sprintf(le, "%ld", aLong);
-    }	break;
-    case POPT_ARG_FLOAT:
-    {	double aDouble = *((float *)opt->arg);
-	le += sprintf(le, "%g", aDouble);
-    }	break;
-    case POPT_ARG_DOUBLE:
-    {	double aDouble = *((double *)opt->arg);
-	le += sprintf(le, "%g", aDouble);
-    }	break;
-    case POPT_ARG_STRING:
-    {	const char * s = *(const char **)opt->arg;
-	if (s == NULL) {
-	    strcpy(le, "null");	le += strlen(le);
-	} else {
-	    size_t slen = 4*lineLength - (le - l) - sizeof("\"...\")");
-	    *le++ = '"';
-	    strncpy(le, s, slen); le[slen] = '\0'; le += strlen(le);	
-	    if (slen < strlen(s)) {
-		strcpy(le, "...");	le += strlen(le);
-	    }
-	    *le++ = '"';
-	}
-    }	break;
-    case POPT_ARG_NONE:
-    default:
-	l = _free(l);
-	return NULL;
-	/*@notreached@*/ break;
-    }
-    *le++ = ')';
-    *le = '\0';
-/*@=boundswrite@*/
-
-    return l;
-}
-
-/**
- * Display help text for an option.
- * @param fp		output file handle
- * @param maxLeftCol	largest argument display width
- * @param opt		option(s)
- * @param translation_domain	translation domain
- */
-static void singleOptionHelp(FILE * fp, size_t maxLeftCol, 
-		const struct poptOption * opt,
-		/*@null@*/ const char * translation_domain)
-	/*@globals fileSystem @*/
-	/*@modifies *fp, fileSystem @*/
-{
-    size_t indentLength = maxLeftCol + 5;
-    size_t lineLength = 79 - indentLength;
-    const char * help = D_(translation_domain, opt->descrip);
-    const char * argDescrip = getArgDescrip(opt, translation_domain);
-    size_t helpLength;
-    char * defs = NULL;
-    char * left;
-    size_t nb = maxLeftCol + 1;
-    int displaypad = 0;
-
-    /* Make sure there's more than enough room in target buffer. */
-    if (opt->longName)	nb += strlen(opt->longName);
-    if (argDescrip)	nb += strlen(argDescrip);
-
-/*@-boundswrite@*/
-    left = malloc(nb);
-    if (left == NULL) return;	/* XXX can't happen */
-    left[0] = '\0';
-    left[maxLeftCol] = '\0';
-
-    if (opt->longName && opt->shortName)
-	sprintf(left, "-%c, %s%s", opt->shortName,
-		((opt->argInfo & POPT_ARGFLAG_ONEDASH) ? "-" : "--"),
-		opt->longName);
-    else if (opt->shortName != '\0') 
-	sprintf(left, "-%c", opt->shortName);
-    else if (opt->longName)
-	sprintf(left, "%s%s",
-		((opt->argInfo & POPT_ARGFLAG_ONEDASH) ? "-" : "--"),
-		opt->longName);
-    if (!*left) goto out;
-
-    if (argDescrip) {
-	char * le = left + strlen(left);
-
-	if (opt->argInfo & POPT_ARGFLAG_OPTIONAL)
-	    *le++ = '[';
-
-	/* Choose type of output */
-	/*@-branchstate@*/
-	if (opt->argInfo & POPT_ARGFLAG_SHOW_DEFAULT) {
-	    defs = singleOptionDefaultValue(lineLength, opt, translation_domain);
-	    if (defs) {
-		char * t = malloc((help ? strlen(help) : 0) +
-				strlen(defs) + sizeof(" "));
-		if (t) {
-		    char * te = t;
-		    *te = '\0';
-		    if (help) {
-			strcpy(te, help);	te += strlen(te);
-		    }
-		    *te++ = ' ';
-		    strcpy(te, defs);
-		    defs = _free(defs);
-		}
-		defs = t;
-	    }
-	}
-	/*@=branchstate@*/
-
-	if (opt->argDescrip == NULL) {
-	    switch (opt->argInfo & POPT_ARG_MASK) {
-	    case POPT_ARG_NONE:
-		break;
-	    case POPT_ARG_VAL:
-#ifdef	NOTNOW	/* XXX pug ugly nerdy output */
-	    {	long aLong = opt->val;
-		int ops = (opt->argInfo & POPT_ARGFLAG_LOGICALOPS);
-		int negate = (opt->argInfo & POPT_ARGFLAG_NOT);
-
-		/* Don't bother displaying typical values */
-		if (!ops && (aLong == 0L || aLong == 1L || aLong == -1L))
-		    break;
-		*le++ = '[';
-		switch (ops) {
-		case POPT_ARGFLAG_OR:
-		    *le++ = '|';
-		    /*@innerbreak@*/ break;
-		case POPT_ARGFLAG_AND:
-		    *le++ = '&';
-		    /*@innerbreak@*/ break;
-		case POPT_ARGFLAG_XOR:
-		    *le++ = '^';
-		    /*@innerbreak@*/ break;
-		default:
-		    /*@innerbreak@*/ break;
-		}
-		*le++ = (opt->longName != NULL ? '=' : ' ');
-		if (negate) *le++ = '~';
-		/*@-formatconst@*/
-		le += sprintf(le, (ops ? "0x%lx" : "%ld"), aLong);
-		/*@=formatconst@*/
-		*le++ = ']';
-	    }
-#endif
-		break;
-	    case POPT_ARG_INT:
-	    case POPT_ARG_LONG:
-	    case POPT_ARG_FLOAT:
-	    case POPT_ARG_DOUBLE:
-	    case POPT_ARG_STRING:
-		*le++ = (opt->longName != NULL ? '=' : ' ');
-		strcpy(le, argDescrip);		le += strlen(le);
-		break;
-	    default:
-		break;
-	    }
-	} else {
-	    size_t lelen;
-
-	    *le++ = '=';
-	    strcpy(le, argDescrip);
-	    lelen = strlen(le);
-	    le += lelen;
-
-#ifdef	POPT_WCHAR_HACK
-	    {	const char * scopy = argDescrip;
-		mbstate_t t;
-		size_t n;
-
-		memset ((void *)&t, '\0', sizeof (t));	/* In initial state.  */
-		/* Determine number of characters.  */
-		n = mbsrtowcs (NULL, &scopy, strlen(scopy), &t);
-
-		displaypad = (int) (lelen-n);
-	    }
-#endif
-	}
-	if (opt->argInfo & POPT_ARGFLAG_OPTIONAL)
-	    *le++ = ']';
-	*le = '\0';
-    }
-/*@=boundswrite@*/
-
-    if (help)
-	fprintf(fp,"  %-*s   ", maxLeftCol+displaypad, left);
-    else {
-	fprintf(fp,"  %s\n", left); 
-	goto out;
-    }
-
-    left = _free(left);
-/*@-branchstate@*/
-    if (defs) {
-	help = defs;
-	defs = NULL;
-    }
-/*@=branchstate@*/
-
-    helpLength = strlen(help);
-/*@-boundsread@*/
-    while (helpLength > lineLength) {
-	const char * ch;
-	char format[16];
-
-	ch = help + lineLength - 1;
-	while (ch > help && !isspace(*ch)) ch--;
-	if (ch == help) break;		/* give up */
-	while (ch > (help + 1) && isspace(*ch)) ch--;
-	ch++;
-
-	sprintf(format, "%%.%ds\n%%%ds", (int) (ch - help), (int) indentLength);
-	/*@-formatconst@*/
-	fprintf(fp, format, help, " ");
-	/*@=formatconst@*/
-	help = ch;
-	while (isspace(*help) && *help) help++;
-	helpLength = strlen(help);
-    }
-/*@=boundsread@*/
-
-    if (helpLength) fprintf(fp, "%s\n", help);
-
-out:
-    /*@-dependenttrans@*/
-    defs = _free(defs);
-    /*@=dependenttrans@*/
-    left = _free(left);
-}
-
-/**
- * Find display width for longest argument string.
- * @param opt		option(s)
- * @param translation_domain	translation domain
- * @return		display width
- */
-static size_t maxArgWidth(const struct poptOption * opt,
-		       /*@null@*/ const char * translation_domain)
-	/*@*/
-{
-    size_t max = 0;
-    size_t len = 0;
-    const char * s;
-    
-    if (opt != NULL)
-    while (opt->longName || opt->shortName || opt->arg) {
-	if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
-	    if (opt->arg)	/* XXX program error */
-	    len = maxArgWidth(opt->arg, translation_domain);
-	    if (len > max) max = len;
-	} else if (!(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) {
-	    len = sizeof("  ")-1;
-	    if (opt->shortName != '\0') len += sizeof("-X")-1;
-	    if (opt->shortName != '\0' && opt->longName) len += sizeof(", ")-1;
-	    if (opt->longName) {
-		len += ((opt->argInfo & POPT_ARGFLAG_ONEDASH)
-			? sizeof("-")-1 : sizeof("--")-1);
-		len += strlen(opt->longName);
-	    }
-
-	    s = getArgDescrip(opt, translation_domain);
-
-#ifdef POPT_WCHAR_HACK
-	    /* XXX Calculate no. of display characters. */
-	    if (s) {
-		const char * scopy = s;
-		mbstate_t t;
-		size_t n;
-
-/*@-boundswrite@*/
-		memset ((void *)&t, '\0', sizeof (t));	/* In initial state.  */
-/*@=boundswrite@*/
-		/* Determine number of characters.  */
-		n = mbsrtowcs (NULL, &scopy, strlen(scopy), &t);
-		len += sizeof("=")-1 + n;
-	    }
-#else
-	    if (s)
-		len += sizeof("=")-1 + strlen(s);
-#endif
-
-	    if (opt->argInfo & POPT_ARGFLAG_OPTIONAL) len += sizeof("[]")-1;
-	    if (len > max) max = len;
-	}
-
-	opt++;
-    }
-    
-    return max;
-}
-
-/**
- * Display popt alias and exec help.
- * @param fp		output file handle
- * @param items		alias/exec array
- * @param nitems	no. of alias/exec entries
- * @param left		largest argument display width
- * @param translation_domain	translation domain
- */
-static void itemHelp(FILE * fp,
-		/*@null@*/ poptItem items, int nitems, size_t left,
-		/*@null@*/ const char * translation_domain)
-	/*@globals fileSystem @*/
-	/*@modifies *fp, fileSystem @*/
-{
-    poptItem item;
-    int i;
-
-    if (items != NULL)
-    for (i = 0, item = items; i < nitems; i++, item++) {
-	const struct poptOption * opt;
-	opt = &item->option;
-	if ((opt->longName || opt->shortName) && 
-	    !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN))
-	    singleOptionHelp(fp, left, opt, translation_domain);
-    }
-}
-
-/**
- * Display help text for a table of options.
- * @param con		context
- * @param fp		output file handle
- * @param table		option(s)
- * @param left		largest argument display width
- * @param translation_domain	translation domain
- */
-static void singleTableHelp(poptContext con, FILE * fp,
-		/*@null@*/ const struct poptOption * table, size_t left,
-		/*@null@*/ const char * translation_domain)
-	/*@globals fileSystem @*/
-	/*@modifies *fp, fileSystem @*/
-{
-    const struct poptOption * opt;
-    const char *sub_transdom;
-
-    if (table == poptAliasOptions) {
-	itemHelp(fp, con->aliases, con->numAliases, left, NULL);
-	itemHelp(fp, con->execs, con->numExecs, left, NULL);
-	return;
-    }
-
-    if (table != NULL)
-    for (opt = table; (opt->longName || opt->shortName || opt->arg); opt++) {
-	if ((opt->longName || opt->shortName) && 
-	    !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN))
-	    singleOptionHelp(fp, left, opt, translation_domain);
-    }
-
-    if (table != NULL)
-    for (opt = table; (opt->longName || opt->shortName || opt->arg); opt++) {
-	if ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_INCLUDE_TABLE)
-	    continue;
-	sub_transdom = getTableTranslationDomain(opt->arg);
-	if (sub_transdom == NULL)
-	    sub_transdom = translation_domain;
-	    
-	if (opt->descrip)
-	    fprintf(fp, "\n%s\n", D_(sub_transdom, opt->descrip));
-
-	singleTableHelp(con, fp, opt->arg, left, sub_transdom);
-    }
-}
-
-/**
- * @param con		context
- * @param fp		output file handle
- */
-static int showHelpIntro(poptContext con, FILE * fp)
-	/*@globals fileSystem @*/
-	/*@modifies *fp, fileSystem @*/
-{
-    int len = 6;
-    const char * fn;
-
-    fprintf(fp, POPT_("Usage:"));
-    if (!(con->flags & POPT_CONTEXT_KEEP_FIRST)) {
-/*@-boundsread@*/
-	/*@-nullderef -type@*/	/* LCL: wazzup? */
-	fn = con->optionStack->argv[0];
-	/*@=nullderef =type@*/
-/*@=boundsread@*/
-	if (fn == NULL) return len;
-	if (strchr(fn, '/')) fn = strrchr(fn, '/') + 1;
-	fprintf(fp, " %s", fn);
-	len += strlen(fn) + 1;
-    }
-
-    return len;
-}
-
-void poptPrintHelp(poptContext con, FILE * fp, /*@unused@*/ int flags)
-{
-    size_t leftColWidth;
-
-    (void) showHelpIntro(con, fp);
-    if (con->otherHelp)
-	fprintf(fp, " %s\n", con->otherHelp);
-    else
-	fprintf(fp, " %s\n", POPT_("[OPTION...]"));
-
-    leftColWidth = maxArgWidth(con->options, NULL);
-    singleTableHelp(con, fp, con->options, leftColWidth, NULL);
-}
-
-/**
- * Display usage text for an option.
- * @param fp		output file handle
- * @param cursor	current display position
- * @param opt		option(s)
- * @param translation_domain	translation domain
- */
-static size_t singleOptionUsage(FILE * fp, size_t cursor, 
-		const struct poptOption * opt,
-		/*@null@*/ const char *translation_domain)
-	/*@globals fileSystem @*/
-	/*@modifies *fp, fileSystem @*/
-{
-    size_t len = 4;
-    char shortStr[2] = { '\0', '\0' };
-    const char * item = shortStr;
-    const char * argDescrip = getArgDescrip(opt, translation_domain);
-
-    if (opt->shortName != '\0' && opt->longName != NULL) {
-	len += 2;
-	if (!(opt->argInfo & POPT_ARGFLAG_ONEDASH)) len++;
-	len += strlen(opt->longName);
-    } else if (opt->shortName != '\0') {
-	len++;
-	shortStr[0] = opt->shortName;
-	shortStr[1] = '\0';
-    } else if (opt->longName) {
-	len += strlen(opt->longName);
-	if (!(opt->argInfo & POPT_ARGFLAG_ONEDASH)) len++;
-	item = opt->longName;
-    }
-
-    if (len == 4) return cursor;
-
-#ifdef POPT_WCHAR_HACK
-    /* XXX Calculate no. of display characters. */
-    if (argDescrip) {
-	const char * scopy = argDescrip;
-	mbstate_t t;
-	size_t n;
-
-/*@-boundswrite@*/
-	memset ((void *)&t, '\0', sizeof (t));	/* In initial state.  */
-/*@=boundswrite@*/
-	/* Determine number of characters.  */
-	n = mbsrtowcs (NULL, &scopy, strlen(scopy), &t);
-	len += sizeof("=")-1 + n;
-    }
-#else
-    if (argDescrip) 
-	len += sizeof("=")-1 + strlen(argDescrip);
-#endif
-
-    if ((cursor + len) > 79) {
-	fprintf(fp, "\n       ");
-	cursor = 7;
-    } 
-
-    if (opt->longName && opt->shortName) {
-	fprintf(fp, " [-%c|-%s%s%s%s]",
-	    opt->shortName, ((opt->argInfo & POPT_ARGFLAG_ONEDASH) ? "" : "-"),
-	    opt->longName,
-	    (argDescrip ? " " : ""),
-	    (argDescrip ? argDescrip : ""));
-    } else {
-	fprintf(fp, " [-%s%s%s%s]",
-	    ((opt->shortName || (opt->argInfo & POPT_ARGFLAG_ONEDASH)) ? "" : "-"),
-	    item,
-	    (argDescrip ? (opt->shortName != '\0' ? " " : "=") : ""),
-	    (argDescrip ? argDescrip : ""));
-    }
-
-    return cursor + len + 1;
-}
-
-/**
- * Display popt alias and exec usage.
- * @param fp		output file handle
- * @param cursor	current display position
- * @param item		alias/exec array
- * @param nitems	no. of ara/exec entries
- * @param translation_domain	translation domain
- */
-static size_t itemUsage(FILE * fp, size_t cursor,
-		/*@null@*/ poptItem item, int nitems,
-		/*@null@*/ const char * translation_domain)
-	/*@globals fileSystem @*/
-	/*@modifies *fp, fileSystem @*/
-{
-    int i;
-
-    /*@-branchstate@*/		/* FIX: W2DO? */
-    if (item != NULL)
-    for (i = 0; i < nitems; i++, item++) {
-	const struct poptOption * opt;
-	opt = &item->option;
-        if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INTL_DOMAIN) {
-	    translation_domain = (const char *)opt->arg;
-	} else if ((opt->longName || opt->shortName) &&
-		 !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) {
-	    cursor = singleOptionUsage(fp, cursor, opt, translation_domain);
-	}
-    }
-    /*@=branchstate@*/
-
-    return cursor;
-}
-
-/**
- * Keep track of option tables already processed.
- */
-typedef struct poptDone_s {
-    int nopts;
-    int maxopts;
-    const void ** opts;
-} * poptDone;
-
-/**
- * Display usage text for a table of options.
- * @param con		context
- * @param fp		output file handle
- * @param cursor	current display position
- * @param opt		option(s)
- * @param translation_domain	translation domain
- * @param done		tables already processed
- * @return
- */
-static size_t singleTableUsage(poptContext con, FILE * fp, size_t cursor,
-		/*@null@*/ const struct poptOption * opt,
-		/*@null@*/ const char * translation_domain,
-		/*@null@*/ poptDone done)
-	/*@globals fileSystem @*/
-	/*@modifies *fp, done, fileSystem @*/
-{
-    /*@-branchstate@*/		/* FIX: W2DO? */
-    if (opt != NULL)
-    for (; (opt->longName || opt->shortName || opt->arg) ; opt++) {
-        if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INTL_DOMAIN) {
-	    translation_domain = (const char *)opt->arg;
-	} else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
-	    if (done) {
-		int i = 0;
-		for (i = 0; i < done->nopts; i++) {
-/*@-boundsread@*/
-		    const void * that = done->opts[i];
-/*@=boundsread@*/
-		    if (that == NULL || that != opt->arg)
-			/*@innercontinue@*/ continue;
-		    /*@innerbreak@*/ break;
-		}
-		/* Skip if this table has already been processed. */
-		if (opt->arg == NULL || i < done->nopts)
-		    continue;
-/*@-boundswrite@*/
-		if (done->nopts < done->maxopts)
-		    done->opts[done->nopts++] = (const void *) opt->arg;
-/*@=boundswrite@*/
-	    }
-	    cursor = singleTableUsage(con, fp, cursor, opt->arg,
-			translation_domain, done);
-	} else if ((opt->longName || opt->shortName) &&
-		 !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) {
-	    cursor = singleOptionUsage(fp, cursor, opt, translation_domain);
-	}
-    }
-    /*@=branchstate@*/
-
-    return cursor;
-}
-
-/**
- * Return concatenated short options for display.
- * @todo Sub-tables should be recursed.
- * @param opt		option(s)
- * @param fp		output file handle
- * @retval str		concatenation of short options
- * @return		length of display string
- */
-static int showShortOptions(const struct poptOption * opt, FILE * fp,
-		/*@null@*/ char * str)
-	/*@globals fileSystem @*/
-	/*@modifies *str, *fp, fileSystem @*/
-	/*@requires maxRead(str) >= 0 @*/
-{
-    /* bufsize larger then the ascii set, lazy alloca on top level call. */
-    char * s = (str != NULL ? str : memset(alloca(300), 0, 300));
-    int len = 0;
-
-/*@-boundswrite@*/
-    if (opt != NULL)
-    for (; (opt->longName || opt->shortName || opt->arg); opt++) {
-	if (opt->shortName && !(opt->argInfo & POPT_ARG_MASK))
-	    s[strlen(s)] = opt->shortName;
-	else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE)
-	    if (opt->arg)	/* XXX program error */
-		len = showShortOptions(opt->arg, fp, s);
-    } 
-/*@=boundswrite@*/
-
-    /* On return to top level, print the short options, return print length. */
-    if (s == str && *s != '\0') {
-	fprintf(fp, " [-%s]", s);
-	len = strlen(s) + sizeof(" [-]")-1;
-    }
-    return len;
-}
-
-void poptPrintUsage(poptContext con, FILE * fp, /*@unused@*/ int flags)
-{
-    poptDone done = memset(alloca(sizeof(*done)), 0, sizeof(*done));
-    size_t cursor;
-
-    done->nopts = 0;
-    done->maxopts = 64;
-    cursor = done->maxopts * sizeof(*done->opts);
-/*@-boundswrite@*/
-    done->opts = memset(alloca(cursor), 0, cursor);
-    /*@-keeptrans@*/
-    done->opts[done->nopts++] = (const void *) con->options;
-    /*@=keeptrans@*/
-/*@=boundswrite@*/
-
-    cursor = showHelpIntro(con, fp);
-    cursor += showShortOptions(con->options, fp, NULL);
-    cursor = singleTableUsage(con, fp, cursor, con->options, NULL, done);
-    cursor = itemUsage(fp, cursor, con->aliases, con->numAliases, NULL);
-    cursor = itemUsage(fp, cursor, con->execs, con->numExecs, NULL);
-
-    if (con->otherHelp) {
-	cursor += strlen(con->otherHelp) + 1;
-	if (cursor > 79) fprintf(fp, "\n       ");
-	fprintf(fp, " %s", con->otherHelp);
-    }
-
-    fprintf(fp, "\n");
-}
-
-void poptSetOtherOptionHelp(poptContext con, const char * text)
-{
-    con->otherHelp = _free(con->otherHelp);
-    con->otherHelp = xstrdup(text);
-}
diff --git a/libpopt/poptint.h b/libpopt/poptint.h
deleted file mode 100644
index 5e75712..0000000
--- a/libpopt/poptint.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/** \ingroup popt
- * \file popt/poptint.h
- */
-
-/* (C) 1998-2000 Red Hat, Inc. -- Licensing details are in the COPYING
-   file accompanying popt source distributions, available from 
-   ftp://ftp.rpm.org/pub/rpm/dist. */
-
-#ifndef H_POPTINT
-#define H_POPTINT
-
-/**
- * Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
- * @param p		memory to free
- * @retval		NULL always
- */
-/*@unused@*/ static inline /*@null@*/ void *
-_free(/*@only@*/ /*@null@*/ const void * p)
-	/*@modifies p @*/
-{
-    if (p != NULL)	free((void *)p);
-    return NULL;
-}
-
-/* Bit mask macros. */
-/*@-exporttype -redef @*/
-typedef	unsigned int __pbm_bits;
-/*@=exporttype =redef @*/
-#define	__PBM_NBITS		(8 * sizeof (__pbm_bits))
-#define	__PBM_IX(d)		((d) / __PBM_NBITS)
-#define __PBM_MASK(d)		((__pbm_bits) 1 << (((unsigned)(d)) % __PBM_NBITS))
-/*@-exporttype -redef @*/
-typedef struct {
-    __pbm_bits bits[1];
-} pbm_set;
-/*@=exporttype =redef @*/
-#define	__PBM_BITS(set)	((set)->bits)
-
-#define	PBM_ALLOC(d)	calloc(__PBM_IX (d) + 1, sizeof(__pbm_bits))
-#define	PBM_FREE(s)	_free(s);
-#define PBM_SET(d, s)   (__PBM_BITS (s)[__PBM_IX (d)] |= __PBM_MASK (d))
-#define PBM_CLR(d, s)   (__PBM_BITS (s)[__PBM_IX (d)] &= ~__PBM_MASK (d))
-#define PBM_ISSET(d, s) ((__PBM_BITS (s)[__PBM_IX (d)] & __PBM_MASK (d)) != 0)
-
-struct optionStackEntry {
-    int argc;
-/*@only@*/ /*@null@*/
-    const char ** argv;
-/*@only@*/ /*@null@*/
-    pbm_set * argb;
-    int next;
-/*@only@*/ /*@null@*/
-    const char * nextArg;
-/*@observer@*/ /*@null@*/
-    const char * nextCharArg;
-/*@dependent@*/ /*@null@*/
-    poptItem currAlias;
-    int stuffed;
-};
-
-struct poptContext_s {
-    struct optionStackEntry optionStack[POPT_OPTION_DEPTH];
-/*@dependent@*/
-    struct optionStackEntry * os;
-/*@owned@*/ /*@null@*/
-    const char ** leftovers;
-    int numLeftovers;
-    int nextLeftover;
-/*@keep@*/
-    const struct poptOption * options;
-    int restLeftover;
-/*@only@*/ /*@null@*/
-    const char * appName;
-/*@only@*/ /*@null@*/
-    poptItem aliases;
-    int numAliases;
-    int flags;
-/*@owned@*/ /*@null@*/
-    poptItem execs;
-    int numExecs;
-/*@only@*/ /*@null@*/
-    const char ** finalArgv;
-    int finalArgvCount;
-    int finalArgvAlloced;
-/*@dependent@*/ /*@null@*/
-    poptItem doExec;
-/*@only@*/
-    const char * execPath;
-    int execAbsolute;
-/*@only@*/ /*@relnull@*/
-    const char * otherHelp;
-/*@null@*/
-    pbm_set * arg_strip;
-};
-
-#ifdef HAVE_LIBINTL_H
-#include <libintl.h>
-#endif
-
-#if defined(HAVE_GETTEXT) && !defined(__LCLINT__)
-#define _(foo) gettext(foo)
-#else
-#define _(foo) foo
-#endif
-
-#if defined(HAVE_DCGETTEXT) && !defined(__LCLINT__)
-#define D_(dom, str) dgettext(dom, str)
-#define POPT_(foo) D_("popt", foo)
-#else
-#define D_(dom, str) str
-#define POPT_(foo) foo
-#endif
-
-#define N_(foo) foo
-
-#endif
diff --git a/libpopt/poptparse.c b/libpopt/poptparse.c
deleted file mode 100644
index a0dea80..0000000
--- a/libpopt/poptparse.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/** \ingroup popt
- * \file popt/poptparse.c
- */
-
-/* (C) 1998-2002 Red Hat, Inc. -- Licensing details are in the COPYING
-   file accompanying popt source distributions, available from 
-   ftp://ftp.rpm.org/pub/rpm/dist. */
-
-#include "system.h"
-
-#define POPT_ARGV_ARRAY_GROW_DELTA 5
-
-/*@-boundswrite@*/
-int poptDupArgv(int argc, const char **argv,
-		int * argcPtr, const char *** argvPtr)
-{
-    size_t nb = (argc + 1) * sizeof(*argv);
-    const char ** argv2;
-    char * dst;
-    int i;
-
-    if (argc <= 0 || argv == NULL)	/* XXX can't happen */
-	return POPT_ERROR_NOARG;
-    for (i = 0; i < argc; i++) {
-	if (argv[i] == NULL)
-	    return POPT_ERROR_NOARG;
-	nb += strlen(argv[i]) + 1;
-    }
-	
-    dst = malloc(nb);
-    if (dst == NULL)			/* XXX can't happen */
-	return POPT_ERROR_MALLOC;
-    argv2 = (void *) dst;
-    dst += (argc + 1) * sizeof(*argv);
-
-    /*@-branchstate@*/
-    for (i = 0; i < argc; i++) {
-	argv2[i] = dst;
-	dst += strlen(strcpy(dst, argv[i])) + 1;
-    }
-    /*@=branchstate@*/
-    argv2[argc] = NULL;
-
-    if (argvPtr) {
-	*argvPtr = argv2;
-    } else {
-	free(argv2);
-	argv2 = NULL;
-    }
-    if (argcPtr)
-	*argcPtr = argc;
-    return 0;
-}
-/*@=boundswrite@*/
-
-/*@-bounds@*/
-int poptParseArgvString(const char * s, int * argcPtr, const char *** argvPtr)
-{
-    const char * src;
-    char quote = '\0';
-    int argvAlloced = POPT_ARGV_ARRAY_GROW_DELTA;
-    const char ** argv = malloc(sizeof(*argv) * argvAlloced);
-    int argc = 0;
-    int buflen = strlen(s) + 1;
-    char * buf = memset(alloca(buflen), 0, buflen);
-    int rc = POPT_ERROR_MALLOC;
-
-    if (argv == NULL) return rc;
-    argv[argc] = buf;
-
-    for (src = s; *src != '\0'; src++) {
-	if (quote == *src) {
-	    quote = '\0';
-	} else if (quote != '\0') {
-	    if (*src == '\\') {
-		src++;
-		if (!*src) {
-		    rc = POPT_ERROR_BADQUOTE;
-		    goto exit;
-		}
-		if (*src != quote) *buf++ = '\\';
-	    }
-	    *buf++ = *src;
-	} else if (isspace(*src)) {
-	    if (*argv[argc] != '\0') {
-		buf++, argc++;
-		if (argc == argvAlloced) {
-		    argvAlloced += POPT_ARGV_ARRAY_GROW_DELTA;
-		    argv = realloc(argv, sizeof(*argv) * argvAlloced);
-		    if (argv == NULL) goto exit;
-		}
-		argv[argc] = buf;
-	    }
-	} else switch (*src) {
-	  case '"':
-	  case '\'':
-	    quote = *src;
-	    /*@switchbreak@*/ break;
-	  case '\\':
-	    src++;
-	    if (!*src) {
-		rc = POPT_ERROR_BADQUOTE;
-		goto exit;
-	    }
-	    /*@fallthrough@*/
-	  default:
-	    *buf++ = *src;
-	    /*@switchbreak@*/ break;
-	}
-    }
-
-    if (strlen(argv[argc])) {
-	argc++, buf++;
-    }
-
-    rc = poptDupArgv(argc, argv, argcPtr, argvPtr);
-
-exit:
-    if (argv) free(argv);
-    return rc;
-}
-/*@=bounds@*/
-
-/* still in the dev stage.
- * return values, perhaps 1== file erro
- * 2== line to long
- * 3== umm.... more?
- */
-int poptConfigFileToString(FILE *fp, char ** argstrp, /*@unused@*/ int flags)
-{
-    char line[999];
-    char * argstr;
-    char * p;
-    char * q;
-    char * x;
-    int t;
-    int argvlen = 0;
-    size_t maxlinelen = sizeof(line);
-    size_t linelen;
-    int maxargvlen = 480;
-    int linenum = 0;
-
-    *argstrp = NULL;
-
-    /*   |   this_is   =   our_line
-     *	     p             q      x
-     */
-
-    if (fp == NULL)
-	return POPT_ERROR_NULLARG;
-
-    argstr = calloc(maxargvlen, sizeof(*argstr));
-    if (argstr == NULL) return POPT_ERROR_MALLOC;
-
-    while (fgets(line, (int)maxlinelen, fp) != NULL) {
-	linenum++;
-	p = line;
-
-	/* loop until first non-space char or EOL */
-	while( *p != '\0' && isspace(*p) )
-	    p++;
-
-	linelen = strlen(p);
-	if (linelen >= maxlinelen-1)
-	    return POPT_ERROR_OVERFLOW;	/* XXX line too long */
-
-	if (*p == '\0' || *p == '\n') continue;	/* line is empty */
-	if (*p == '#') continue;		/* comment line */
-
-	q = p;
-
-	while (*q != '\0' && (!isspace(*q)) && *q != '=')
-	    q++;
-
-	if (isspace(*q)) {
-	    /* a space after the name, find next non space */
-	    *q++='\0';
-	    while( *q != '\0' && isspace((int)*q) ) q++;
-	}
-	if (*q == '\0') {
-	    /* single command line option (ie, no name=val, just name) */
-	    q[-1] = '\0';		/* kill off newline from fgets() call */
-	    argvlen += (t = q - p) + (sizeof(" --")-1);
-	    if (argvlen >= maxargvlen) {
-		maxargvlen = (t > maxargvlen) ? t*2 : maxargvlen*2;
-		argstr = realloc(argstr, maxargvlen);
-		if (argstr == NULL) return POPT_ERROR_MALLOC;
-	    }
-	    strcat(argstr, " --");
-	    strcat(argstr, p);
-	    continue;
-	}
-	if (*q != '=')
-	    continue;	/* XXX for now, silently ignore bogus line */
-		
-	/* *q is an equal sign. */
-	*q++ = '\0';
-
-	/* find next non-space letter of value */
-	while (*q != '\0' && isspace(*q))
-	    q++;
-	if (*q == '\0')
-	    continue;	/* XXX silently ignore missing value */
-
-	/* now, loop and strip all ending whitespace */
-	x = p + linelen;
-	while (isspace(*--x))
-	    *x = 0;	/* null out last char if space (including fgets() NL) */
-
-	/* rest of line accept */
-	t = x - p;
-	argvlen += t + (sizeof("' --='")-1);
-	if (argvlen >= maxargvlen) {
-	    maxargvlen = (t > maxargvlen) ? t*2 : maxargvlen*2;
-	    argstr = realloc(argstr, maxargvlen);
-	    if (argstr == NULL) return POPT_ERROR_MALLOC;
-	}
-	strcat(argstr, " --");
-	strcat(argstr, p);
-	strcat(argstr, "=\"");
-	strcat(argstr, q);
-	strcat(argstr, "\"");
-    }
-
-    *argstrp = argstr;
-    return 0;
-}
diff --git a/libpopt/system.h b/libpopt/system.h
deleted file mode 100644
index c3d46cb..0000000
--- a/libpopt/system.h
+++ /dev/null
@@ -1,81 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#if defined (__GLIBC__) && defined(__LCLINT__)
-/*@-declundef@*/
-/*@unchecked@*/
-extern __const __int32_t *__ctype_tolower;
-/*@unchecked@*/
-extern __const __int32_t *__ctype_toupper;
-/*@=declundef@*/
-#endif
-
-#include <ctype.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-
-#if HAVE_MCHECK_H 
-#include <mcheck.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef __NeXT
-/* access macros are not declared in non posix mode in unistd.h -
- don't try to use posix on NeXTstep 3.3 ! */
-#include <libc.h>
-#endif
-
-#if defined(__LCLINT__)
-/*@-declundef -incondefs @*/ /* LCL: missing annotation */
-/*@only@*/ /*@out@*/
-void * alloca (size_t __size)
-	/*@ensures MaxSet(result) == (__size - 1) @*/
-	/*@*/;
-/*@=declundef =incondefs @*/
-#endif
-
-/* AIX requires this to be the first thing in the file.  */ 
-#ifndef __GNUC__
-# if HAVE_ALLOCA_H
-#  include <alloca.h>
-# else
-#  ifdef _AIX
-#pragma alloca
-#  else
-#   ifndef alloca /* predefined by HP cc +Olibcalls */
-char *alloca ();
-#   endif
-#  endif
-# endif
-#elif defined(__GNUC__) && defined(__STRICT_ANSI__)
-#define alloca __builtin_alloca
-#endif
-
-/*@-redecl -redef@*/
-/*@mayexit@*/ /*@only@*/ /*@unused@*/
-char * xstrdup (const char *str)
-	/*@*/;
-/*@=redecl =redef@*/
-
-#if HAVE_MCHECK_H && defined(__GNUC__)
-#define	vmefail()	(fprintf(stderr, "virtual memory exhausted.\n"), exit(EXIT_FAILURE), NULL)
-#define xstrdup(_str)   (strcpy((malloc(strlen(_str)+1) ? : vmefail()), (_str)))
-#else
-#define	xstrdup(_str)	strdup(_str)
-#endif  /* HAVE_MCHECK_H && defined(__GNUC__) */
-
-#if HAVE___SECURE_GETENV && !defined(__LCLINT__)
-#define	getenv(_s)	__secure_getenv(_s)
-#endif
-
-#include "popt.h"
diff --git a/libutil/Android.mk b/libutil/Android.mk
deleted file mode 100644
index 29f3bfb..0000000
--- a/libutil/Android.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
-	op_cpufreq.c \
-	op_deviceio.c \
-	op_file.c \
-	op_fileio.c \
-	op_get_time.c \
-	op_libiberty.c \
-	op_lockfile.c \
-	op_popt.c \
-	op_string.c \
-	op_version.c
-
-LOCAL_C_INCLUDES := \
-	$(LOCAL_PATH)/..
-
-LOCAL_MODULE := libutil
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/libutil/fscanf.c b/libutil/fscanf.c
deleted file mode 100644
index d567324..0000000
--- a/libutil/fscanf.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <stdio.h> 
-
-// ugly hack because we don't have fscanf
-
-int fscanf(FILE* stream, const char* format, int* value)
-{
-    int c;
-    int r = 0;
-    do {
-        c = fgetc(stream);
-        if (c>='0' && c<='9') {
-            r = r*10 + (c-'0');
-            continue;
-        }
-        break;
-    } while (1);
-
-    *value = r;
-
-    // gahhhh
-    return 1;
-}
diff --git a/libutil/op_cpufreq.c b/libutil/op_cpufreq.c
deleted file mode 100644
index 78a6333..0000000
--- a/libutil/op_cpufreq.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * @file op_cpufreq.c
- * get cpu frequency definition
- *
- * @remark Copyright 2003 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "op_fileio.h"
-
-double op_cpu_frequency(void)
-{
-	double fval = 0.0;
-	unsigned long uval;
-	char * line = NULL;
-
-	FILE * fp = op_try_open_file("/proc/cpuinfo", "r");
-	if (!fp)
-		return 0.0;
-
-	while (1) {
-		line = op_get_line(fp);
-
-		if (!line)
-			break;
-
-		if (line[0] == '\0') {
-			free(line);
-			continue;
-		}
-
-		/* x86/parisc/ia64/x86_64 */
-		if (sscanf(line, "cpu MHz : %lf", &fval) == 1)
-			break;
-		/* ppc/ppc64 */
-		if (sscanf(line, "clock : %lfMHz", &fval) == 1)
-			break;
-		/* alpha */
-		if (sscanf(line, "cycle frequency [Hz] : %lu", &uval) == 1) {
-			fval = uval / 1E6;
-			break;
-		}
-		/* sparc64 if CONFIG_SMP only */
-		if (sscanf(line, "Cpu0ClkTck : %lx", &uval) == 1) {
-			fval = uval / 1E6;
-			break;
-		}
-		/* s390 doesn't provide cpu freq, checked up to 2.6-test4 */
-
-		free(line);
-	}
-
-	if (line)
-		free(line);
-	op_close_file(fp);
-
-	return fval;
-}
diff --git a/libutil/op_cpufreq.h b/libutil/op_cpufreq.h
deleted file mode 100644
index 0a71172..0000000
--- a/libutil/op_cpufreq.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * @file op_cpufreq.h
- * get cpu frequency declaration
- *
- * @remark Copyright 2003 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_CPUFREQ_H
-#define OP_CPUFREQ_H
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-/*
- * return the estimated cpu frequency in Mhz through
- * parsing /proc/cpuinfo, return 0 if this information
- * is not avalaible e.g. sparc64 with a non SMP kernel
- */
-double op_cpu_frequency(void);
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif /* !OP_CPUFREQ_H */
diff --git a/libutil/op_deviceio.c b/libutil/op_deviceio.c
deleted file mode 100644
index 8210304..0000000
--- a/libutil/op_deviceio.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * @file op_deviceio.c
- * Reading from a special device
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include "op_deviceio.h"
-
-#include <sys/types.h>
-#include <fcntl.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-fd_t op_open_device(char const * name)
-{
-	return open(name, O_RDONLY);
-}
-
-
-ssize_t op_read_device(fd_t devfd, void * buf, size_t size)
-{
-	ssize_t count;
-
-	lseek(devfd, 0, SEEK_SET);
-
-	count = read(devfd, buf, size);
-
-	if (count < 0 && errno != EINTR && errno != EAGAIN) {
-		perror("oprofiled:op_read_device: ");
-		exit(EXIT_FAILURE);
-	}
-
-	return count;
-}
diff --git a/libutil/op_deviceio.h b/libutil/op_deviceio.h
deleted file mode 100644
index f3bd4c2..0000000
--- a/libutil/op_deviceio.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * @file op_deviceio.h
- * Reading from a special device
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_DEVICEIO_H
-#define OP_DEVICEIO_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "op_types.h"
-
-#include <unistd.h>
-
-/**
- * op_open_device - open a special char device for reading
- * @param name  file name of device file
- *
- * Open the special file name. Returns the file descriptor
- * for the file or -1 on error.
- */
-fd_t op_open_device(char const * name);
-
-/**
- * op_read_device - read from a special char device
- * @param devfd  file descriptor of device
- * @param buf  buffer
- * @param size  size of buffer
- *
- * Read size bytes from a device into buffer buf.
- * A seek to the start of the device file is done first
- * then a read is requested in one go of size bytes.
- *
- * It is the caller's responsibility to do further op_read_device()
- * calls if the number of bytes read is not what is requested
- * (where this is applicable).
- *
- * The number of bytes read is returned, or a negative number
- * on failure (in which case errno will be set). If the call is
- * interrupted, then errno will be EINTR, and the client should
- * arrange for re-starting the read if necessary.
- */
-ssize_t op_read_device(fd_t devfd, void * buf, size_t size);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OP_DEVICEIO_H */
diff --git a/libutil/op_file.c b/libutil/op_file.c
deleted file mode 100644
index e3e6cb6..0000000
--- a/libutil/op_file.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/**
- * @file op_file.c
- * Useful file management helpers
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include <sys/stat.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <fnmatch.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <limits.h>
-
-#include "op_file.h"
-#include "op_libiberty.h"
-
-int op_file_readable(char const * file)
-{
-	struct stat st;
-	return !stat(file, &st) && S_ISREG(st.st_mode) && !access(file, R_OK);
-}
-
-
-time_t op_get_mtime(char const * file)
-{
-	struct stat st;
-
-	if (stat(file, &st))
-		return 0;
-
-	return st.st_mtime;
-}
-
-
-int create_dir(char const * dir)
-{
-	if (mkdir(dir, 0755)) {
-		/* FIXME: Does not verify existing is a dir */
-		if (errno == EEXIST)
-			return 0;
-		return errno;
-	}
-
-	return 0;
-}
-
-
-int create_path(char const * path)
-{
-	int ret = 0;
-
-	char * str = xstrdup(path);
-
-	char * pos = str[0] == '/' ? str + 1 : str;
-
-	for ( ; (pos = strchr(pos, '/')) != NULL; ++pos) {
-		*pos = '\0';
-		ret = create_dir(str);
-		*pos = '/';
-		if (ret)
-			break;
-	}
-
-	free(str);
-	return ret;
-}
-
-
-inline static int is_dot_or_dotdot(char const * name)
-{
-	return name[0] == '.' &&
-		(name[1] == '\0' ||
-		 (name[1] == '.' && name[2] == '\0'));
-}
-
-
-/* If non-null is returned, the caller is responsible for freeing
- * the memory allocated for the return value. */
-static char * make_pathname_from_dirent(char const * basedir,
-				      struct dirent * ent,
-				      struct stat * st_buf)
-{
-	int name_len;
-	char * name;
-	name_len = strlen(basedir) + strlen("/") + strlen(ent->d_name) + 1;
-	name = xmalloc(name_len);
-	sprintf(name, "%s/%s", basedir,	ent->d_name);
-	if (stat(name, st_buf) != 0) {
-		free(name);
-		name = NULL;
-	}
-	return name;
-}
-
-
-int get_matching_pathnames(void * name_list, get_pathname_callback getpathname,
-			   char const * base_dir, char const * filter,
-			   enum recursion_type recursion)
-{
-/* The algorithm below depends on recursion type (of which there are 3)
- * and whether the current dirent matches the filter.  There are 6 possible
- * different behaviors, which is why we define 6 case below in the switch
- * statement of the algorithm.  Actually, when the recursion type is
- * MATCH_DIR_ONLY_RECURSION, the behavior is the same, whether or not the dir
- * entry matches the filter.  However, the behavior of the recursion types
- * NO_RECURSION and MATCH_ANY_ENTRY_RECURSION do depend on the dir entry
- * filter match, so for simplicity, we perform this match for all recursion
- * types and logically OR the match result with the  value of the passed
- * recursion_type.
- */
-#define NO_MATCH 0
-#define MATCH 1
-
-	DIR * dir;
-	struct dirent * ent;
-	struct stat stat_buffer;
-	int match;
-	char * name = NULL;
-
-	if (!(dir = opendir(base_dir)))
-		return -1;
-	while ((ent = readdir(dir)) != 0) {
-		if (is_dot_or_dotdot(ent->d_name))
-			continue;
-		if (fnmatch(filter, ent->d_name, 0) == 0)
-			match = 1;
-		else
-			match = 0;
-
-		switch (recursion | match) {
-		case NO_RECURSION + NO_MATCH:
-		case MATCH_ANY_ENTRY_RECURSION + NO_MATCH:
-			// nothing to do but continue the loop
-			break;
-		case NO_RECURSION + MATCH:
-			getpathname(ent->d_name, name_list);
-			break;
-		case MATCH_ANY_ENTRY_RECURSION + MATCH:
-			name = make_pathname_from_dirent(base_dir, ent,
-						       &stat_buffer);
-			if (name && S_ISDIR(stat_buffer.st_mode) &&
-			    !S_ISLNK(stat_buffer.st_mode)) {
-				get_matching_pathnames(
-					name_list, getpathname,
-					name, filter, recursion);
-			} else {
-				getpathname(name, name_list);
-			}
-			free(name);
-			break;
-		case MATCH_DIR_ONLY_RECURSION + NO_MATCH:
-		case MATCH_DIR_ONLY_RECURSION + MATCH:
-			name = make_pathname_from_dirent(base_dir, ent,
-						       &stat_buffer);
-			if (name && S_ISDIR(stat_buffer.st_mode) &&
-			    !S_ISLNK(stat_buffer.st_mode)) {
-				/* Check if full directory name contains
-				 * match to the filter; if so, add it to
-				 * name_list and quit; else, recurse.
-				 */
-				if (!fnmatch(filter, name, 0)) {
-					getpathname(name, name_list);
-				} else {
-					get_matching_pathnames(
-						name_list, getpathname,
-						name, filter, recursion);
-				}
-			}
-			free(name);
-			break;
-		}
-	}
-	closedir(dir);
-
-	return 0;
-}
diff --git a/libutil/op_file.h b/libutil/op_file.h
deleted file mode 100644
index d22862c..0000000
--- a/libutil/op_file.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * @file op_file.h
- * Useful file management helpers
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_FILE_H
-#define OP_FILE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <sys/types.h>
-
-/**
- * op_file_readable - is a file readable
- * @param file file name
- *
- * Return true if the given file is readable and regular.
- *
- * Beware of race conditions !
- */
-int op_file_readable(char const * file);
-
-/**
- * op_get_mtime - get mtime of file
- * @param file  file name
- *
- * Returns the mtime of the given file or 0 on failure
- */
-time_t op_get_mtime(char const * file);
-
-/**
- * create_dir - create a directory
- * @param dir  the directory name to create
- *
- * Returns 0 on success.
- */
-int create_dir(char const * dir);
-
-
-/**
- * create_path - create a path
- * @param path  the path to create
- *
- * create directory for each dir components in path
- * the last path component is not considered as a directory
- * but as a filename
- *
- * Returns 0 on success.
- */
-int create_path(char const * path);
-
-/**
- * Clients of get_matching_pathnames must provide their own implementation
- * of get_pathname_callback.
- */
-typedef void (*get_pathname_callback)(char const * pathname, void * name_list);
-
-/* This enum is intended solely for the use of get_matching_pathnames(),
- * bit 0 is reserved for internal use..*/
-enum recursion_type {
-	NO_RECURSION = 2,
-	MATCH_ANY_ENTRY_RECURSION = 4,
-	MATCH_DIR_ONLY_RECURSION = 8,
-};
-/**
- * @param name_list where to store result
- * @param get_pathname_callback client-provided callback function
- * @param base_dir directory from where lookup starts
- * @param filter a pathname filter
- * @param recursion recursion_type -- see above enum and following description:
- *	NO_RECURSION:  Find matching files from passed base_dir and call
- *          get_pathname_callback to add entry to name_list to be returned.
- *	MATCH_ANY_ENTRY_RECURSION: Starting at base_dir, for each entry in the
- *	   dir that matches the filter: if entry is of type 'dir', recurse;
- *         else call get_pathname_callback to add entry to name_list to be
- *         returned.
- *	MATCH_DIR_ONLY_RECURSION: Starting at base_dir, if an entry in the
- *         dir is of type 'dir' and its complete pathname contains a match to
- *         the filter, call get_pathname_callback to add entry to name_list to
- *         be returned; else recurse.
- *
- * Returns 0 on success.
- *
- * Return a list of pathnames under base_dir, filtered by filter and optionally
- * looking in sub-directory. See description above of the recursion_type 
- * parameter for more details.
- *    NOTE: For C clients: Your implementation of the get_pathname_callback
- *          function will probably dynamically allocate storage for elements
- *          added to name_list.  If so, remember to free that memory when it's
- *          no longer needed.
- */
-int get_matching_pathnames(void * name_list, get_pathname_callback,
-			   char const * base_dir, char const * filter,
-			   enum recursion_type recursion);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OP_FILE_H */
diff --git a/libutil/op_fileio.c b/libutil/op_fileio.c
deleted file mode 100644
index 9b3e21d..0000000
--- a/libutil/op_fileio.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/**
- * @file op_fileio.c
- * Reading from / writing to files
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include <unistd.h>
-
-#include "op_fileio.h"
-
-#include "op_libiberty.h"
-
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-
-static FILE * op_do_open_file(char const * name, char const * mode, int fatal)
-{
-	FILE * fp;
-
-	fp = fopen(name, mode);
-
-	if (!fp) {
-		if (fatal) {
-			fprintf(stderr,"oprofiled:op_do_open_file: %s: %s",
-				name, strerror(errno));
-			exit(EXIT_FAILURE);
-		}
-	}
-
-	return fp;
-}
-
-
-FILE * op_try_open_file(char const * name, char const * mode)
-{
-	return op_do_open_file(name, mode, 0);
-}
-
-
-FILE * op_open_file(char const * name, char const * mode)
-{
-	return op_do_open_file(name, mode, 1);
-}
-
-
-void op_close_file(FILE * fp)
-{
-	if (fclose(fp))
-		perror("oprofiled:op_close_file: ");
-}
-
-
-void op_write_file(FILE * fp, void const * buf, size_t size)
-{
-	size_t written;
-
-	if (size == 0)
-		return;
-
-	written = fwrite(buf, size, 1, fp);
-
-	if (written != 1) {
-		fprintf(stderr,
-			"oprofiled:op_write_file: wrote less than expected: %lu bytes.\n",
-			(unsigned long)size);
-		exit(EXIT_FAILURE);
-	}
-}
-
-
-void op_write_u8(FILE * fp, u8 val)
-{
-	op_write_file(fp, &val, sizeof(val));
-}
-
-
-void op_write_u32(FILE * fp, u32 val)
-{
-	op_write_file(fp, &val, sizeof(val));
-}
-
-
-void op_write_u64(FILE * fp, u64 val)
-{
-	op_write_file(fp, &val, sizeof(val));
-}
-
-
-u32 op_read_int_from_file(char const * filename, int fatal)
-{
-	FILE * fp;
-	u32 value;
-
-	fp = fopen(filename, "r");
-	if (fp == NULL) {
-		if (!fatal)
-			return (u32)-1;
-		fprintf(stderr,
-			"op_read_int_from_file: Failed to open %s, reason %s\n",
-			filename, strerror(errno));
-		exit(EXIT_FAILURE);
-	}
-
-	if (fscanf(fp, "%u", &value) != 1) {
-		fclose(fp);
-		if (!fatal)
-			return (u32)-1;
-		fprintf(stderr,
-			"op_read_int_from_file: Failed to convert contents of file %s to integer\n",
-			filename);
-		exit(EXIT_FAILURE);
-	}
-
-	fclose(fp);
-
-	return value;
-}
-
-
-char * op_get_line(FILE * fp)
-{
-	char * buf;
-	char * cp;
-	int c;
-	size_t max = 512;
-
-	buf = xmalloc(max);
-	cp = buf;
-
-	while (1) {
-		switch (c = getc(fp)) {
-			case EOF:
-				free(buf);
-				return NULL;
-				break;
-
-			case '\n':
-			case '\0':
-				*cp = '\0';
-				return buf;
-				break;
-
-			default:
-				*cp = (char)c;
-				cp++;
-				if (((size_t)(cp - buf)) == max) {
-					buf = xrealloc(buf, max + 128);
-					cp = buf + max;
-					max += 128;
-				}
-				break;
-		}
-	}
-}
-
-
-/* FIXME the debug info stuff should be handled by binutils */
-unsigned long
-calc_crc32(unsigned long crc, unsigned char * buf, size_t len)
-{
-	static const unsigned long crc32_table[256] =
-	{
-		0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
-		0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
-		0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
-		0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
-		0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
-		0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
-		0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
-		0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
-		0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
-		0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
-		0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
-		0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-		0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
- 		0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
-		0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
-		0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
-		0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
-		0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
-		0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
-		0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
-		0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
-		0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
-		0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
-		0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-		0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
-		0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
-		0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
-		0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
-		0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
-		0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
-		0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
-		0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
-		0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
-		0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
-		0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
-		0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-		0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
-		0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
-		0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
-		0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
-		0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
-		0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
-		0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
-		0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
-		0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
-		0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
-		0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
-		0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-		0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
-		0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
-		0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
-		0x2d02ef8d
-	};
-	unsigned char * end;
-
-	crc = ~crc & 0xffffffff;
-	for (end = buf + len; buf < end; ++buf)
-		crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
-	return ~crc & 0xffffffff;
-}
diff --git a/libutil/op_fileio.h b/libutil/op_fileio.h
deleted file mode 100644
index 49b126d..0000000
--- a/libutil/op_fileio.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * @file op_fileio.h
- * Reading from / writing to files
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_FILEIO_H
-#define OP_FILEIO_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "op_types.h"
-
-#include <stdio.h>
-
-/**
- * op_try_open_file - open a file
- * @param name  file name
- * @param mode  mode string
- *
- * Open a file name.
- * Returns file handle or %NULL on failure.
- */
-FILE * op_try_open_file(char const * name, char const * mode);
-
-/**
- * op_open_file - open a file
- * @param name  file name
- * @param mode  mode string
- *
- * Open a file name.
- * Failure to open is fatal.
- */
-FILE * op_open_file(char const * name, char const * mode);
-
-/**
- * op_read_int_from_file - parse an ASCII value from a file into an integer
- * @param filename  name of file to parse integer value from
- * @param fatal  non-zero if any error must be fatal
- *
- * Reads an ASCII integer from the given file. If an error occur and fatal is
- * zero (u32)-1 is returned else the value read in is returned.
- */
-u32 op_read_int_from_file(char const * filename, int fatal);
-
-/**
- * op_close_file - close a file
- * @param fp  file pointer
- *
- * Closes a file pointer. A non-fatal
- * error message is produced if the
- * close fails.
- */
-void op_close_file(FILE * fp);
-
-/**
- * op_write_file - write to a file
- * @param fp  file pointer
- * @param buf  buffer
- * @param size  nr. of bytes to write
- *
- * Write size bytes of buffer buf to a file.
- * Failure is fatal.
- */
-void op_write_file(FILE * fp, void const * buf, size_t size);
-
-/**
- * op_write_u32 - write four bytes to a file
- * @param fp  file pointer
- * @param val  value to write
- *
- * Write an unsigned four-byte value val to a file.
- * Failure is fatal.
- *
- * No byte-swapping is done.
- */
-void op_write_u32(FILE * fp, u32 val);
-
-/**
- * op_write_u64 - write eight bytes to a file
- * @param fp  file pointer
- * @param val  value to write
- *
- * Write an unsigned eight-byte value val to a file.
- * Failure is fatal.
- *
- * No byte-swapping is done.
- */
-void op_write_u64(FILE * fp, u64 val);
-
-/**
- * op_write_u8 - write a byte to a file
- * @param fp  file pointer
- * @param val  value to write
- *
- * Write an unsigned byte value val to a file.
- * Failure is fatal.
- */
-void op_write_u8(FILE * fp, u8 val);
-
-/**
- * op_get_line - read an ASCII line from a file
- * @param fp  file pointer
- *
- * Get a line of ASCII text from a file. The file is read
- * up to the first '\0' or '\n'. A trailing '\n' is deleted.
- *
- * Returns the dynamically-allocated string containing
- * that line. At the end of a file NULL will be returned.
- * be returned.
- *
- * The string returned must be free()d by the caller.
- *
- * getline() is not a proper solution to replace this function
- */
-char * op_get_line(FILE * fp);
-
-/**
- * calc_crc32
- * @param crc current value
- * @param buf pointer to buffer
- * @param len
- *
- * Returns current crc computed from the crc argument and the
- * characters in len characters in buf.
- */
-unsigned long calc_crc32(unsigned long crc, unsigned char * buf, size_t len);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OP_FILEIO_H */
diff --git a/libutil/op_get_time.c b/libutil/op_get_time.c
deleted file mode 100644
index c094c63..0000000
--- a/libutil/op_get_time.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * @file op_get_time.c
- * Get current time as a string
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include "op_get_time.h"
-
-#include <time.h>
-
-char * op_get_time(void)
-{
-	time_t t = time(NULL);
-
-	if (t == -1)
-		return "";
-
-	return ctime(&t);
-}
diff --git a/libutil/op_get_time.h b/libutil/op_get_time.h
deleted file mode 100644
index 8f96273..0000000
--- a/libutil/op_get_time.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * @file op_get_time.h
- * Get current time as a string
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_GET_TIME_H
-#define OP_GET_TIME_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * op_get_time - get current date and time
- *
- * Returns a string representing the current date
- * and time, or an empty string on error.
- *
- * The string is statically allocated and should not be freed.
- */
-char * op_get_time(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OP_GET_TIME_H */
diff --git a/libutil/op_growable_buffer.c b/libutil/op_growable_buffer.c
deleted file mode 100644
index d138f36..0000000
--- a/libutil/op_growable_buffer.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * @file op_growable_buffer.c
- * a growable buffer implementation
- *
- * @remark Copyright 2007 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Philippe Elie
- */
-
-#include "op_growable_buffer.h"
-#include "op_libiberty.h"
-
-#include <string.h>
-#include <stdlib.h>
-
-void init_buffer(struct growable_buffer * b)
-{
-	b->max_size = 0;
-	b->size = 0;
-	b->p = NULL;
-}
-
-
-void free_buffer(struct growable_buffer * b)
-{
-	free(b->p);
-}
-
-
-static void grow_buffer(struct growable_buffer * b)
-{
-	size_t new_size = (b->max_size + b->size) * 2;
-	b->p = xrealloc(b->p, new_size);
-	b->max_size = new_size;
-}
-
-
-void add_data(struct growable_buffer * b, void const * data, size_t len)
-{
-	size_t old_size = b->size;
-	b->size += len;
-	if (b->size > b->max_size)
-		grow_buffer(b);
-	memcpy(b->p + old_size, data, len);
-}
diff --git a/libutil/op_growable_buffer.h b/libutil/op_growable_buffer.h
deleted file mode 100644
index 491969a..0000000
--- a/libutil/op_growable_buffer.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * @file op_growable_buffer.h
- * a growable buffer interface
- *
- * @remark Copyright 2007 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Philippe Elie
- */
-
-#ifndef OP_GROWABLE_BUFFER_H
-#define OP_GROWABLE_BUFFER_H
-
-#include <stddef.h>
-
-struct growable_buffer {
-	void * p;
-	size_t size;
-	size_t max_size;
-};
-
-/**
- * init_buffer - initialize an empty buffer
- * @param buffer the buffer to initialize
- *
- * init_buffer do not do any allocation, the first allocation will occur
- * when add_data() with a non zero len param will be called.
- */
-void init_buffer(struct growable_buffer * buffer);
-
-/**
- * free_buffer - free the memory allocated for this buffer
- * @param buffer the buffer to free
- */
-void free_buffer(struct growable_buffer * buffer);
-
-/**
- * add_data - add data to this buffer
- * @param b the buffer where to add data
- * @param data a pointer to the data to add
- * @param len number of byte to add to the buffer
- */
-void add_data(struct growable_buffer * b, void const * data, size_t len);
-
-#endif /* !OP_GROWABLE_BUFFER_H */
diff --git a/libutil/op_libiberty.c b/libutil/op_libiberty.c
deleted file mode 100644
index 0cf45d3..0000000
--- a/libutil/op_libiberty.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * @file op_libiberty.c
- * Wrapper for libiberty - always use this instead of
- * libiberty.h
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include <string.h>
-
-#include "op_libiberty.h"
-
-#ifndef HAVE_XCALLOC
-/* some system have a valid libiberty without xcalloc */
-void * xcalloc(size_t n_elem, size_t sz)
-{
-	void * ptr = xmalloc(n_elem * sz);
-
-	memset(ptr, '\0', n_elem * sz);
-
-	return ptr;
-}
-#endif
-
-#ifndef HAVE_XMEMDUP
-void * xmemdup (void const * input, size_t copy_size, size_t alloc_size)
-{
-	void * output = xcalloc(1, alloc_size);
-
-	memcpy(output, input, copy_size);
-
-	return output;
-}
-#endif
diff --git a/libutil/op_libiberty.h b/libutil/op_libiberty.h
deleted file mode 100644
index ea02a50..0000000
--- a/libutil/op_libiberty.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * @file op_libiberty.h
- * Wrapper for libiberty - always use this instead of
- * libiberty.h
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_LIBIBERTY_H
-#define OP_LIBIBERTY_H
-
-#include <stddef.h>
-
-#include "config.h"
-
-#ifdef MALLOC_ATTRIBUTE_OK
-#define OP_ATTRIB_MALLOC	__attribute__((malloc))
-#else
-#define OP_ATTRIB_MALLOC
-#endif
-
-#ifdef HAVE_LIBIBERTY_H
-#include <libiberty.h>
-#else
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* some system have a libiberty.a but no libiberty.h so we must provide
- * ourself the missing proto */
-#ifndef HAVE_LIBIBERTY_H
-
-/* Set the program name used by xmalloc.  */
-void xmalloc_set_program_name(char const *);
-
-/* Allocate memory without fail.  If malloc fails, this will print a
-   message to stderr (using the name set by xmalloc_set_program_name,
-   if any) and then call xexit.  */
-void * xmalloc(size_t) OP_ATTRIB_MALLOC;
-
-/* Reallocate memory without fail.  This works like xmalloc.  Note,
-   realloc type functions are not suitable for attribute malloc since
-   they may return the same address across multiple calls. */
-void * xrealloc(void *, size_t);
-
-/* Allocate memory without fail and set it to zero.  This works like xmalloc */
-void * xcalloc(size_t, size_t) OP_ATTRIB_MALLOC;
-
-/* Copy a string into a memory buffer without fail.  */
-char * xstrdup(char const *) OP_ATTRIB_MALLOC;
-
-/**
- * Duplicates a region of memory without fail.  First, alloc_size bytes
- * are allocated, then copy_size bytes from input are copied into
- * it, and the new memory is returned.  If fewer bytes are copied than were
- * allocated, the remaining memory is zeroed.
- */
-void * xmemdup(void const *, size_t, size_t) OP_ATTRIB_MALLOC;
-
-#endif	/* !HAVE_LIBIBERTY_H */
-
-#ifdef ANDROID
-#define xmalloc(s)      malloc(s)
-#define xrealloc(p,s)   realloc(p,s)
-#define xstrdup(str)    strdup(str)
-#define xmalloc_set_program_name(n)
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !HAVE_LIBIBERTY_H */
-
-#endif /* OP_LIBIBERTY_H */
diff --git a/libutil/op_list.h b/libutil/op_list.h
deleted file mode 100644
index ed0cd8a..0000000
--- a/libutil/op_list.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
- * @file op_list.h
- * Kernel-style lists
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author Linux kernel authors
- */
-
-#ifndef OP_LIST_H
-#define OP_LIST_H
-
-/*
- * Simple doubly linked list implementation.
- *
- * Some of the internal functions ("__xxx") are useful when
- * manipulating whole lists rather than single entries, as
- * sometimes we already know the next/prev entries and we can
- * generate better code by using them directly rather than
- * using the generic single-entry routines.
- */
-
-struct list_head {
-	struct list_head * next, * prev;
-};
-
-/**
- * list_init - init a new entry
- * @param ptr  the list to init
- *
- * Init a list head to create an empty list from it
- */
-static __inline__ void list_init(struct list_head * ptr)
-{
-	ptr->next = ptr;
-	ptr->prev = ptr;
-}
-
-/*
- * Insert a new entry between two known consecutive entries.
- *
- * This is only for internal list manipulation where we know
- * the prev/next entries already!
- */
-static __inline__ void __list_add(struct list_head * new_entry,
-	struct list_head * prev,
-	struct list_head * next)
-{
-	next->prev = new_entry;
-	new_entry->next = next;
-	new_entry->prev = prev;
-	prev->next = new_entry;
-}
-
-/**
- * list_add - add a new entry
- * @param new  new entry to be added
- * @param head  list head to add it after
- *
- * Insert a new entry after the specified head.
- * This is good for implementing stacks.
- */
-static __inline__ void list_add(struct list_head * new_entry, struct list_head * head)
-{
-	__list_add(new_entry, head, head->next);
-}
-
-/**
- * list_add_tail - add a new entry
- * @param new  new entry to be added
- * @param head  list head to add it before
- *
- * Insert a new entry before the specified head.
- * This is useful for implementing queues.
- */
-static __inline__ void list_add_tail(struct list_head * new_entry, struct list_head * head)
-{
-	__list_add(new_entry, head->prev, head);
-}
-
-/*
- * Delete a list entry by making the prev/next entries
- * point to each other.
- *
- * This is only for internal list manipulation where we know
- * the prev/next entries already!
- */
-static __inline__ void __list_del(struct list_head * prev,
-				  struct list_head * next)
-{
-	next->prev = prev;
-	prev->next = next;
-}
-
-/**
- * list_del - deletes entry from list.
- * @param entry  the element to delete from the list.
- * Note: list_empty on entry does not return true after this, the entry is in an undefined state.
- */
-static __inline__ void list_del(struct list_head * entry)
-{
-	__list_del(entry->prev, entry->next);
-}
-
-/**
- * list_del_init - deletes entry from list and reinitialize it.
- * @param entry  the element to delete from the list.
- */
-static __inline__ void list_del_init(struct list_head * entry)
-{
-	__list_del(entry->prev, entry->next);
-	list_init(entry);
-}
-
-/**
- * list_empty - tests whether a list is empty
- * @param head  the list to test.
- */
-static __inline__ int list_empty(struct list_head const * head)
-{
-	return head->next == head;
-}
-
-/**
- * list_splice - join two lists
- * @param list  the new list to add.
- * @param head  the place to add it in the first list.
- */
-static __inline__ void list_splice(struct list_head * list, struct list_head * head)
-{
-	struct list_head * first = list->next;
-
-	if (first != list) {
-		struct list_head * last = list->prev;
-		struct list_head * at = head->next;
-
-		first->prev = head;
-		head->next = first;
-
-		last->next = at;
-		at->prev = last;
-	}
-}
-
-/**
- * list_entry - get the struct for this entry
- * @param ptr 	the &struct list_head pointer.
- * @param type 	the type of the struct this is embedded in.
- * @param member 	the name of the list_struct within the struct.
- */
-#define list_entry(ptr, type, member) \
-	((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
-
-/**
- * list_for_each - iterate over a list
- * @param pos 	the &struct list_head to use as a loop counter.
- * @param head 	the head for your list.
- */
-#define list_for_each(pos, head) \
-	for (pos = (head)->next; pos != (head); pos = pos->next)
-
-/**
- * list_for_each_safe - iterate over a list safe against removal of list entry
- * @param pos 	the &struct list_head to use as a loop counter.
- * @param n 		another &struct list_head to use as temporary storage
- * @param head 	the head for your list.
- */
-#define list_for_each_safe(pos, n, head) \
-	for (pos = (head)->next, n = pos->next; pos != (head); \
-		pos = n, n = pos->next)
-
-#define LIST_HEAD_INIT(name) { &(name), &(name) }
-
-#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)
-
-#endif /* OP_LIST_H */
diff --git a/libutil/op_lockfile.c b/libutil/op_lockfile.c
deleted file mode 100644
index 26e3249..0000000
--- a/libutil/op_lockfile.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * @file op_lockfile.c
- * PID-based lockfile management
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include "op_lockfile.h"
-#include "op_file.h"
-
-#include <errno.h>
-
-#include <sys/types.h>
-#include <stdio.h>
-#include <signal.h>
-#include <unistd.h>
-
-static pid_t op_read_lock_file(char const * file)
-{
-	FILE * fp;
-	pid_t value;
-
-	fp = fopen(file, "r");
-	if (fp == NULL)
-		return 0;
-
-	if (fscanf(fp, "%d", &value) != 1) {
-		fclose(fp);
-		return 0;
-	}
-
-	fclose(fp);
-
-	return value;
-}
-
-
-int op_write_lock_file(char const * file)
-{
-	FILE * fp;
-
-	if (op_file_readable(file)) {
-		pid_t pid = op_read_lock_file(file);
-
-		/* FIXME: ESRCH vs. EPERM */
-		if (kill(pid, 0)) {
-			int err = unlink(file);
-			fprintf(stderr, "Removing stale lock file %s\n",
-				file);
-			if (err)
-				return err;
-		} else {
-			return EEXIST;
-		}
-	}
-
-	fp = fopen(file, "w");
-	if (!fp)
-		return errno;
-
-	fprintf(fp, "%d", getpid());
-	fclose(fp);
-
-	return 0;
-}
diff --git a/libutil/op_lockfile.h b/libutil/op_lockfile.h
deleted file mode 100644
index fcc269c..0000000
--- a/libutil/op_lockfile.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * @file op_lockfile.h
- * PID-based lockfile management
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_LOCKFILE_H
-#define OP_LOCKFILE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <sys/types.h>
-
-/**
- * op_write_lock_file - write a lock file
- * \return errno on failure, or 0 on success
- *
- * Write the pid into the given lock file. Stale
- * lock files are detected and reset.
- */
-int op_write_lock_file(char const * file);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OP_LOCKFILE_H */
diff --git a/libutil/op_popt.c b/libutil/op_popt.c
deleted file mode 100644
index de96364..0000000
--- a/libutil/op_popt.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * @file op_popt.c
- * Wrapper for libpopt - always use this rather
- * than popt.h
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include <stdlib.h>
-#include "op_libiberty.h"
-#include "op_popt.h"
-
-poptContext op_poptGetContext(char const * name,
-		int argc, char const ** argv,
-		struct poptOption const * options, int flags)
-{
-	poptContext optcon;
-	int c;
-
-	xmalloc_set_program_name(argv[0]);
-
-#ifdef CONST_POPT
-	optcon = poptGetContext(name, argc, argv, options, flags);
-#else
-	optcon = poptGetContext((char *)name, argc, (char **)argv, options, flags);
-#endif
-
-	c = poptGetNextOpt(optcon);
-
-	if (c < -1) {
-		fprintf(stderr, "%s: %s: %s\n", argv[0],
-			poptBadOption(optcon, POPT_BADOPTION_NOALIAS),
-			poptStrerror(c));
-		poptPrintHelp(optcon, stderr, 0);
-		exit(EXIT_FAILURE);
-	}
-
-	return optcon;
-}
diff --git a/libutil/op_popt.h b/libutil/op_popt.h
deleted file mode 100644
index c3dfa6c..0000000
--- a/libutil/op_popt.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * @file op_popt.h
- * Wrapper for libpopt - always use this rather
- * than popt.h
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_POPT_H
-#define OP_POPT_H
-
-#include <popt.h>
-
-// not in some versions of popt.h
-#ifndef POPT_TABLEEND
-#define POPT_TABLEEND { NULL, '\0', 0, 0, 0, NULL, NULL }
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * op_poptGetContext - wrapper for popt
- *
- * Use this instead of poptGetContext to cope with
- * different popt versions. This also handle unrecognized
- * options. All error are fatal.
- */
-poptContext op_poptGetContext(char const * name,
-                int argc, char const ** argv,
-                struct poptOption const * options, int flags);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OP_POPT_H */
diff --git a/libutil/op_string.c b/libutil/op_string.c
deleted file mode 100644
index d440299..0000000
--- a/libutil/op_string.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * @file op_string.c
- * general purpose C string handling implementation.
- *
- * @remark Copyright 2003 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include <string.h>
-#include "op_libiberty.h"
-
-
-char * op_xstrndup(char const * s, size_t len)
-{
-	return xmemdup(s, len, len + 1);
-}
-
-
-size_t op_hash_string(char const * str)
-{
-	size_t hash = 0;
-	for (; *str; ++str)
-		hash ^= (hash << 16) ^ (hash >> 8) ^ *str;
-	return hash;
-}
-
-
-int strisprefix(char const * str, char const * prefix)
-{
-	return strstr(str, prefix) == str;
-}
-
-
-char const * skip_ws(char const * c)
-{
-	while (*c == ' ' || *c == '\t' || *c == '\n')
-		++c;
-	return c;
-}
-
-
-char const * skip_nonws(char const * c)
-{
-	while (*c && *c != ' ' && *c != '\t' && *c != '\n')
-		++c;
-	return c;
-}
-
-
-int empty_line(char const * c)
-{
-	return !*skip_ws(c);
-}
-
-
-int comment_line(char const * c)
-{
-	return *skip_ws(c) == '#';
-}
diff --git a/libutil/op_string.h b/libutil/op_string.h
deleted file mode 100644
index 993fa6f..0000000
--- a/libutil/op_string.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * @file op_string.h
- * general purpose C string handling declarations.
- *
- * @remark Copyright 2003 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_STRING_H
-#define OP_STRING_H
-
-#include <string.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @param  s: input string
- * @param len: len char to copy
- *
- * Allocate and copy len character from s to a newly allocated buffer then
- * append a '\0' terminator. Return the newly allocated string
- */
-char * op_xstrndup(char const * s, size_t len);
-
-/**
- * @param  s: string to hash
- *
- * Generate a hash code from a string
- */
-size_t op_hash_string(char const * s);
-
-/**
- * @param str: string to test
- * @param prefix: prefix string
- *
- * return non zero if prefix parameters is a prefix of str
- */
-int strisprefix(char const * str, char const * prefix);
-
-/**
- * @param c: input string
- *
- * return a pointer to the first location in c which is not a blank space
- * where blank space are in " \t\n"
- */
-char const * skip_ws(char const * c);
-
-/**
- * @param c: input string
- *
- * return a pointer to the first location in c which is a blank space
- * where blank space are in " \t\n"
- */
-char const * skip_nonws(char const * c);
-
-/**
- * @param c: input string
- *
- * return non zero if c string contains only blank space
- * where blank space are in " \t\n"
- */
-int empty_line(char const * c);
-
-/**
- * @param c: input string
- *
- * return non zero if c string is a comment. Comment are lines with optional
- * blank space at left then a '#' character. Blank space are in " \t\n"
- */
-int comment_line(char const * c);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !OP_STRING_H */
diff --git a/libutil/op_types.h b/libutil/op_types.h
deleted file mode 100644
index c025b23..0000000
--- a/libutil/op_types.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * @file op_types.h
- * General-utility types
- *
- * @remark Copyright 2002 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_TYPES_H
-#define OP_TYPES_H
-
-#ifndef __KERNEL__
-
-#include <sys/types.h>
-
-/*@{\name miscellaneous types */
-typedef unsigned char u8;
-typedef unsigned short u16;
-typedef unsigned int u32;
-typedef unsigned long long u64;
-typedef int fd_t;
-/*@}*/
-
-/** generic type for holding addresses */
-typedef unsigned long long vma_t;
-
-/** generic type to hold a sample count in pp tools */
-typedef u64 count_type;
-
-#else
-#include <linux/types.h>
-#endif
-
-#endif /* OP_TYPES_H */
diff --git a/libutil/op_version.c b/libutil/op_version.c
deleted file mode 100644
index 99a844e..0000000
--- a/libutil/op_version.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * @file op_version.c
- * output version string
- *
- * @remark Copyright 2003 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "op_version.h"
-#include "config.h"
-
-void show_version(char const * app_name)
-{
-	/* Do not change the version format: it is documented in html doc */
-	printf("%s: " PACKAGE " " VERSION " compiled on "
-	       __DATE__ " " __TIME__ "\n", app_name);
-	exit(EXIT_SUCCESS);
-}
diff --git a/libutil/op_version.h b/libutil/op_version.h
deleted file mode 100644
index 43a8365..0000000
--- a/libutil/op_version.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * @file op_version.h
- * output version string
- *
- * @remark Copyright 2003 OProfile authors
- * @remark Read the file COPYING
- *
- * @author John Levon
- * @author Philippe Elie
- */
-
-#ifndef OP_VERSION_H
-#define OP_VERSION_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** output the version string */
-void show_version(char const * app_name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !OP_VERSION_H */
diff --git a/opcontrol/Android.mk b/opcontrol/Android.mk
deleted file mode 100644
index 56211ad..0000000
--- a/opcontrol/Android.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
-	opcontrol.cpp
-
-LOCAL_STATIC_LIBRARIES := \
-	libpopt libutil libdb libabi libop
-
-LOCAL_C_INCLUDES := \
-	$(LOCAL_PATH)/.. \
-	$(LOCAL_PATH)/../libop
-
-LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
-LOCAL_MODULE_TAGS := debug
-LOCAL_MODULE:= opcontrol
-
-include $(BUILD_EXECUTABLE)
diff --git a/opcontrol/opcontrol.cpp b/opcontrol/opcontrol.cpp
deleted file mode 100644
index 2d9cb2f..0000000
--- a/opcontrol/opcontrol.cpp
+++ /dev/null
@@ -1,542 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Binary implementation of the original opcontrol script due to missing tools
- * like awk, test, etc.
- */
-
-#include <unistd.h>
-#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <sys/stat.h>
-
-#include "op_config.h"
-
-#if 0
-#define verbose(fmt...) printf(fmt)
-#else
-#define verbose(fmt...)
-#endif
-
-/* Experiments found that using a small interval may hang the device, and the
- * more events tracked simultaneously, the longer the interval has to be.
- */
-int min_count[3] = {150000, 200000, 250000};
-int list_events; 
-int show_usage;
-int setup;
-int quick;
-int num_events;
-int start;
-int stop;
-int reset;
-
-int selected_events[3];
-int selected_counts[3];
-
-char kernel_range[512];
-char vmlinux[512];
-
-struct option long_options[] = {
-    {"help", 0, &show_usage, 1},
-    {"list-events", 0, &list_events, 1},
-    {"reset", 0, &reset, 1},
-    {"setup", 0, &setup, 1},
-    {"quick", 0, &quick, 1},
-    {"event", 1, 0, 'e'},
-    {"vmlinux", 1, 0, 'v'},
-    {"kernel-range", 1, 0, 'r'},
-    {"start", 0, &start, 1},
-    {"stop", 0, &stop, 1},
-    {"shutdown", 0, 0, 'h'},
-    {"status", 0, 0, 't'},
-    {0, 0, 0, 0},
-};
-
-struct event_info {
-    int id;
-    const char *name;
-    const char *explanation;
-} event_info[] = {
-    {0x00, "IFU_IFETCH_MISS", 
-     "number of instruction fetch misses"},
-    {0x01, "CYCLES_IFU_MEM_STALL", 
-     "cycles instruction fetch pipe is stalled"},
-    {0x02, "CYCLES_DATA_STALL", 
-     "cycles stall occurs for due to data dependency"},
-    {0x03, "ITLB_MISS", 
-     "number of Instruction MicroTLB misses"},
-    {0x04, "DTLB_MISS", 
-     "number of Data MicroTLB misses"},
-    {0x05, "BR_INST_EXECUTED", 
-     "branch instruction executed w/ or w/o program flow change"},
-    {0x06, "BR_INST_MISS_PRED", 
-     "branch mispredicted"},
-    {0x07, "INSN_EXECUTED", 
-     "instructions executed"},
-    {0x09, "DCACHE_ACCESS", 
-     "data cache access, cacheable locations"},
-    {0x0a, "DCACHE_ACCESS_ALL", 
-     "data cache access, all locations"},
-    {0x0b, "DCACHE_MISS", 
-     "data cache miss"},
-    {0x0c, "DCACHE_WB", 
-     "data cache writeback, 1 event for every half cacheline"},
-    {0x0d, "PC_CHANGE", 
-     "number of times the program counter was changed without a mode switch"},
-    {0x0f, "TLB_MISS", 
-     "Main TLB miss"},
-    {0x10, "EXP_EXTERNAL", 
-     "Explicit external data access"},
-    {0x11, "LSU_STALL", 
-     "cycles stalled because Load Store request queue is full"},
-    {0x12, "WRITE_DRAIN", 
-     "Times write buffer was drained"},
-    {0xff, "CPU_CYCLES", 
-     "clock cycles counter"}, 
-};
-
-void usage() {
-    printf("\nopcontrol: usage:\n"
-           "   --list-events    list event types\n"
-           "   --help           this message\n"
-           "   --setup          setup directories\n"
-           "   --quick          setup and select CPU_CYCLES:150000\n"
-           "   --status         show configuration\n"
-           "   --start          start data collection\n"
-           "   --stop           stop data collection\n"
-           "   --reset          clears out data from current session\n"
-           "   --shutdown       kill the oprofile daeman\n"
-           "   --event=eventspec\n"
-           "      Choose an event. May be specified multiple times.\n"
-           "      eventspec is in the form of name[:count], where :\n"
-           "        name:  event name, see \"opcontrol --list-events\"\n"
-           "        count: reset counter value\n" 
-           "   --vmlinux=file   vmlinux kernel image\n"
-           "   --kernel-range=start,end\n"
-           "                    kernel range vma address in hexadecimal\n"
-          );
-}
-
-void setup_session_dir() {
-    int fd;
-
-    fd = open(OP_DATA_DIR, O_RDONLY);
-    if (fd != -1) {
-        system("rm -r "OP_DATA_DIR);
-        close(fd);
-    }
-
-    if (mkdir(OP_DATA_DIR, 755)) {
-        fprintf(stderr, "Cannot create directory \"%s\": %s\n",
-                OP_DATA_DIR, strerror(errno));
-    }
-    if (mkdir(OP_DATA_DIR"/samples", 644)) {
-        fprintf(stderr, "Cannot create directory \"%s\": %s\n",
-                OP_DATA_DIR"/samples", strerror(errno));
-    }
-}
-
-int do_setup() {
-    char dir[1024];
-
-    setup_session_dir();
-
-    if (mkdir(OP_DRIVER_BASE, 644)) {
-        fprintf(stderr, "Cannot create directory "OP_DRIVER_BASE": %s\n",
-                strerror(errno));
-        return -1;
-    }
-    if (system("mount -t oprofilefs nodev "OP_DRIVER_BASE)) {
-        return -1;
-    }
-    return 0;
-}
-
-void do_list_events()
-{
-    unsigned int i;
-
-    printf("%-20s: %s\n", "name", "meaning");
-    printf("----------------------------------------"
-           "--------------------------------------\n");
-    for (i = 0; i < sizeof(event_info)/sizeof(struct event_info); i++) {
-        printf("%-20s: %s\n", event_info[i].name, event_info[i].explanation);
-    }
-}
-
-int find_event_id_from_name(const char *name) {
-    unsigned int i;
-
-    for (i = 0; i < sizeof(event_info)/sizeof(struct event_info); i++) {
-        if (!strcmp(name, event_info[i].name)) {
-            return i;
-        }
-    }
-    return -1;
-}
-
-const char * find_event_name_from_id(int id) {
-    unsigned int i;
-
-    for (i = 0; i < sizeof(event_info)/sizeof(struct event_info); i++) {
-        if (event_info[i].id == id) {
-            return event_info[i].name;
-        }
-    }
-    return NULL;
-}
-
-int process_event(const char *event_spec) {
-    char event_name[512];
-    char count_name[512];
-    unsigned int i;
-    int event_id;
-    int count_val;
-
-    strncpy(event_name, event_spec, 512);
-    count_name[0] = 0;
-
-    /* First, check if the name is followed by ":" */
-    for (i = 0; i < strlen(event_name); i++) {
-        if (event_name[i] == 0) {
-            break;
-        }
-        if (event_name[i] == ':') {
-            strncpy(count_name, event_name+i+1, 512);
-            event_name[i] = 0;
-            break;
-        }
-    }
-    event_id = find_event_id_from_name(event_name);
-    if (event_id == -1) {
-        fprintf(stderr, "Unknown event name: %s\n", event_name);
-        return -1;
-    }
-
-    /* Use defualt count */
-    if (count_name[0] == 0) {
-        count_val = min_count[0];
-    } else {
-        count_val = atoi(count_name);
-    }
-
-    selected_events[num_events] = event_id;
-    selected_counts[num_events++] = count_val;
-    verbose("event_id is %d\n", event_id);
-    verbose("count_val is %d\n", count_val);
-    return 0;
-}
-
-int echo_dev(const char* str, int val, const char* file, int counter)
-{
-    char fullname[512];
-    char content[128];
-    int fd;
-    
-    if (counter >= 0) {
-        snprintf(fullname, 512, OP_DRIVER_BASE"/%d/%s", counter, file);
-    }
-    else {
-        snprintf(fullname, 512, OP_DRIVER_BASE"/%s", file);
-    }
-    fd = open(fullname, O_WRONLY);
-    if (fd<0) {
-        fprintf(stderr, "Cannot open %s: %s\n", fullname, strerror(errno));
-        return fd;
-    }
-    if (str == 0) {
-        sprintf(content, "%d", val);
-    }
-    else {
-        strncpy(content, str, 128);
-    }
-    verbose("Configure %s (%s)\n", fullname, content);
-    write(fd, content, strlen(content));
-    close(fd);
-    return 0;
-}
-
-int read_num(const char* file)
-{
-    char buffer[256];
-    int fd = open(file, O_RDONLY);
-    if (fd<0) return -1;
-    int rd = read(fd, buffer, sizeof(buffer)-1);
-    buffer[rd] = 0;
-    return atoi(buffer);
-}
-
-void do_status()
-{
-    int num;
-    char fullname[512];
-    int i;
-
-    printf("Driver directory: %s\n", OP_DRIVER_BASE);
-    printf("Session directory: %s\n", OP_DATA_DIR);
-    for (i = 0; i < 3; i++) {
-        sprintf(fullname, OP_DRIVER_BASE"/%d/enabled", i);
-        num = read_num(fullname);
-        if (num > 0) {
-            printf("Counter %d:\n", i);
-
-            /* event name */
-            sprintf(fullname, OP_DRIVER_BASE"/%d/event", i);
-            num = read_num(fullname);
-            printf("    name: %s\n", find_event_name_from_id(num));
-
-            /* profile interval */
-            sprintf(fullname, OP_DRIVER_BASE"/%d/count", i);
-            num = read_num(fullname);
-            printf("    count: %d\n", num);
-        }
-        else {
-            printf("Counter %d disabled\n", i);
-        }
-    }
-
-    num = read_num(OP_DATA_DIR"/lock");
-    if (num >= 0) {
-        int fd;
-        /* Still needs to check if this lock is left-over */
-        sprintf(fullname, "/proc/%d", num);
-        fd = open(fullname, O_RDONLY);
-        if (fd == -1) {
-            printf("Session directory is not clean - do \"opcontrol --setup\""
-                   " before you continue\n");
-            return;
-        }
-        else {
-            close(fd);
-            printf("oprofiled pid: %d\n", num);
-            num = read_num(OP_DRIVER_BASE"/enable");
-            printf("profiler is%s running\n", num == 0 ? " not" : "");
-            num = read_num(OP_DRIVER_BASE"/stats/cpu0/sample_received");
-            printf("  %9u samples received\n", num);
-            num = read_num(OP_DRIVER_BASE"/stats/cpu0/sample_lost_overflow");
-            printf("  %9u samples lost overflow\n", num);
-#if 0
-            /* FIXME - backtrace seems broken */
-            num = read_num(OP_DRIVER_BASE"/stats/cpu0/backtrace_aborted");
-            printf("  %9u backtrace aborted\n", num);
-            num = read_num(OP_DRIVER_BASE"/backtrace_depth");
-            printf("  %9u backtrace_depth\n", num);
-#endif
-        }
-    }
-    else {
-        printf("oprofiled is not running\n");
-    }
-}
-
-void do_reset() 
-{
-    int fd;
-
-    fd = open(OP_DATA_DIR"/samples/current", O_RDONLY);
-    if (fd == -1) {
-        return;
-    }
-    close(fd);
-    system("rm -r "OP_DATA_DIR"/samples/current");
-}
-
-int main(int argc, char * const argv[])
-{
-    int option_index;
-    char command[1024];
-
-    /* Initialize default strings */
-    strcpy(vmlinux, "--no-vmlinux");
-    strcpy(kernel_range, "");
-
-    while (1) {
-        int c = getopt_long(argc, argv, "", long_options, &option_index);
-        if (c == -1) {
-            break;
-        }
-        switch (c) {
-            case 0:
-                break;
-            /* --event */
-            case 'e':   
-                if (num_events == 3) {
-                    fprintf(stderr, "More than 3 events specified\n");
-                    exit(1);
-                }
-                if (process_event(optarg)) {
-                    exit(1);
-                }
-                break;
-            /* --vmlinux */
-            case 'v':
-                sprintf(vmlinux, "-k %s", optarg);
-                break;
-            /* --kernel-range */
-            case 'r':
-                sprintf(kernel_range, "-r %s", optarg);
-                break;
-            /* --shutdown */
-            case 'h': {
-                int pid = read_num(OP_DATA_DIR"/lock");
-                if (pid >= 0) {
-                    kill(pid, SIGKILL);
-                }   
-                setup_session_dir();
-                break;
-            }
-            /* --status */
-            case 't':
-                do_status();
-                break;
-            default:
-                usage();
-                exit(1);
-        }
-    }
-    verbose("list_events = %d\n", list_events);
-    verbose("setup = %d\n", setup);
-
-    if (list_events) {
-        do_list_events();
-    }
-
-    if (quick) {
-        process_event("CPU_CYCLES");
-        setup = 1;
-    }
-
-    if (reset) {
-        do_reset();
-    }
-
-    if (show_usage) {
-        usage();
-    }
-
-    if (setup) {
-        if (do_setup()) {
-            fprintf(stderr, "do_setup failed");
-            exit(1);
-        }
-    }
-
-    if (num_events != 0) {
-        int i;
-
-        strcpy(command, "oprofiled --session-dir="OP_DATA_DIR);
-
-        /* Since counter #3 can only handle CPU_CYCLES, check and shuffle the 
-         * order a bit so that the maximal number of events can be profiled
-         * simultaneously
-         */
-        if (num_events == 3) {
-            for (i = 0; i < num_events; i++) {
-                int event_idx = selected_events[i];
-
-                if (event_info[event_idx].id == 0xff) {
-                    break;
-                }
-            }
-
-            /* No CPU_CYCLES is found */
-            if (i == 3) {
-                fprintf(stderr, "You can only specify three events if one of "
-                                "them is CPU_CYCLES\n");
-                exit(1);
-            }
-            /* Swap CPU_CYCLES to counter #2 (starting from #0)*/
-            else if (i != 2) {
-                int temp;
-
-                temp = selected_events[2];
-                selected_events[2] = selected_events[i];
-                selected_events[i] = temp;
-
-                temp = selected_counts[2];
-                selected_counts[2] = selected_counts[i];
-                selected_counts[i] = temp;
-            }
-        }
-
-
-        /* Configure the counters and enable them */
-        for (i = 0; i < num_events; i++) {
-            int event_idx = selected_events[i];
-            int setup_result = 0;
-
-            if (i == 0) {
-                snprintf(command+strlen(command), 1024 - strlen(command), 
-                         " --events=");
-            }
-            else {
-                snprintf(command+strlen(command), 1024 - strlen(command), 
-                         ",");
-            }
-            /* Compose name:id:count:unit_mask:kernel:user, something like
-             * --events=CYCLES_DATA_STALL:2:0:200000:0:1:1,....
-             */
-            snprintf(command+strlen(command), 1024 - strlen(command), 
-                     "%s:%d:%d:%d:0:1:1",
-                     event_info[event_idx].name,
-                     event_info[event_idx].id,
-                     i,
-                     selected_counts[i]);
-
-            setup_result |= echo_dev("1", 0, "user", i);
-            setup_result |= echo_dev("1", 0, "kernel", i);
-            setup_result |= echo_dev("0", 0, "unit_mask", i);
-            setup_result |= echo_dev("1", 0, "enabled", i);
-            setup_result |= echo_dev(NULL, selected_counts[i], "count", i);
-            setup_result |= echo_dev(NULL, event_info[event_idx].id, 
-                                     "event", i);
-            if (setup_result) {
-                fprintf(stderr, "Counter configuration failed for %s\n",
-                        event_info[event_idx].name);
-                fprintf(stderr, "Did you do \"opcontrol --setup\" first?\n");
-                exit(1);
-            }
-        }
-
-        /* Disable the unused counters */
-        for (i = num_events; i < 3; i++) {
-            echo_dev("0", 0, "enabled", i);
-        }
-
-        snprintf(command+strlen(command), 1024 - strlen(command), " %s",
-                 vmlinux);
-        if (kernel_range[0]) {
-            snprintf(command+strlen(command), 1024 - strlen(command), " %s",
-                     kernel_range);
-        }
-        verbose("command: %s\n", command);
-        system(command);
-    }
-
-    if (start) {
-        echo_dev("1", 0, "enable", -1);
-    }
-
-    if (stop) {
-        echo_dev("0", 0, "enable", -1);
-    }
-}
diff --git a/opimport_pull b/opimport_pull
deleted file mode 100755
index 7dbac4a..0000000
--- a/opimport_pull
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/python2.4 -E
-
-import os
-import re
-import sys
-
-def PrintUsage():
-    print "Usage:" + sys.argv[0] + " dir"
-    print "    dir: directory on the host to store profile results"
-
-if (len(sys.argv) != 2):
-    PrintUsage()
-    sys.exit(1)
-
-try:
-    oprofile_event_dir = os.environ['OPROFILE_EVENTS_DIR']
-except:
-    print "OPROFILE_EVENTS_DIR not set. Run \". envsetup.sh\" first"
-    sys.exit(1)
-
-output_dir = sys.argv[1];
-
-try:
-    os.makedirs(output_dir)
-except:
-    if os.path.exists(output_dir):
-        print "Directory already exists:", output_dir
-    else:
-        print "Cannot create", output_dir
-    sys.exit(1)
-
-# get the samples off the phone
-result = os.system("adb pull /data/oprofile/samples " + output_dir + \
-                   "/raw_samples > /dev/null 2>&1")
-if result != 0:
-    print "adb pull failure, exiting"
-    sys.exit(1)
-
-# enter the destination directory
-os.chdir(output_dir)
-stream = os.popen("find raw_samples -type f -name \*all")
-
-# now all the sample files are on the host, we need to invoke opimport one at a
-# time to convert the content from the ARM abi to x86 ABI
-
-# break the full filename into:
-# 1: leading dir: "raw_samples"
-# 2: intermediate dirs: "/blah/blah/blah"
-# 3: filename: e.g. "CPU_CYCLES.150000.0.all.all.all"
-pattern = re.compile("(^raw_samples)(.*)/(.*)$")
-for line in stream:
-    match = pattern.search(line)
-    leading_dir = match.group(1)
-    middle_part = match.group(2)
-    file_name = match.group(3)
-
-    dir = "samples" + middle_part
-
-    # if multiple events are collected the directory could have been setup
-    if not os.path.exists(dir):
-        os.makedirs(dir)
-
-    cmd = oprofile_event_dir + "/bin/opimport -a " + oprofile_event_dir + \
-          "/abi/arm_abi -o samples" + middle_part + "/" + file_name + " " + line
-    os.system(cmd)
-
-stream.close()
-
-# short summary of profiling results
-os.system(oprofile_event_dir + "/bin/opreport --session-dir=.")
diff --git a/popt.h b/popt.h
deleted file mode 100644
index 4f85d9e..0000000
--- a/popt.h
+++ /dev/null
@@ -1,564 +0,0 @@
-/** \file popt/popt.h
- * \ingroup popt
- */
-
-/* (C) 1998-2000 Red Hat, Inc. -- Licensing details are in the COPYING
-   file accompanying popt source distributions, available from 
-   ftp://ftp.rpm.org/pub/rpm/dist. */
-
-#ifndef H_POPT
-#define H_POPT
-
-#include <stdio.h>			/* for FILE * */
-
-#define POPT_OPTION_DEPTH	10
-
-/** \ingroup popt
- * \name Arg type identifiers
- */
-/*@{*/
-#define POPT_ARG_NONE		0	/*!< no arg */
-#define POPT_ARG_STRING		1	/*!< arg will be saved as string */
-#define POPT_ARG_INT		2	/*!< arg will be converted to int */
-#define POPT_ARG_LONG		3	/*!< arg will be converted to long */
-#define POPT_ARG_INCLUDE_TABLE	4	/*!< arg points to table */
-#define POPT_ARG_CALLBACK	5	/*!< table-wide callback... must be
-					   set first in table; arg points 
-					   to callback, descrip points to 
-					   callback data to pass */
-#define POPT_ARG_INTL_DOMAIN    6       /*!< set the translation domain
-					   for this table and any
-					   included tables; arg points
-					   to the domain string */
-#define POPT_ARG_VAL		7	/*!< arg should take value val */
-#define	POPT_ARG_FLOAT		8	/*!< arg will be converted to float */
-#define	POPT_ARG_DOUBLE		9	/*!< arg will be converted to double */
-
-#define POPT_ARG_MASK		0x0000FFFF
-/*@}*/
-
-/** \ingroup popt
- * \name Arg modifiers
- */
-/*@{*/
-#define POPT_ARGFLAG_ONEDASH	0x80000000  /*!< allow -longoption */
-#define POPT_ARGFLAG_DOC_HIDDEN 0x40000000  /*!< don't show in help/usage */
-#define POPT_ARGFLAG_STRIP	0x20000000  /*!< strip this arg from argv(only applies to long args) */
-#define	POPT_ARGFLAG_OPTIONAL	0x10000000  /*!< arg may be missing */
-
-#define	POPT_ARGFLAG_OR		0x08000000  /*!< arg will be or'ed */
-#define	POPT_ARGFLAG_NOR	0x09000000  /*!< arg will be nor'ed */
-#define	POPT_ARGFLAG_AND	0x04000000  /*!< arg will be and'ed */
-#define	POPT_ARGFLAG_NAND	0x05000000  /*!< arg will be nand'ed */
-#define	POPT_ARGFLAG_XOR	0x02000000  /*!< arg will be xor'ed */
-#define	POPT_ARGFLAG_NOT	0x01000000  /*!< arg will be negated */
-#define POPT_ARGFLAG_LOGICALOPS \
-        (POPT_ARGFLAG_OR|POPT_ARGFLAG_AND|POPT_ARGFLAG_XOR)
-
-#define	POPT_BIT_SET	(POPT_ARG_VAL|POPT_ARGFLAG_OR)
-					/*!< set arg bit(s) */
-#define	POPT_BIT_CLR	(POPT_ARG_VAL|POPT_ARGFLAG_NAND)
-					/*!< clear arg bit(s) */
-
-#define	POPT_ARGFLAG_SHOW_DEFAULT 0x00800000 /*!< show default value in --help */
-
-/*@}*/
-
-/** \ingroup popt
- * \name Callback modifiers
- */
-/*@{*/
-#define POPT_CBFLAG_PRE		0x80000000  /*!< call the callback before parse */
-#define POPT_CBFLAG_POST	0x40000000  /*!< call the callback after parse */
-#define POPT_CBFLAG_INC_DATA	0x20000000  /*!< use data from the include line,
-					       not the subtable */
-#define POPT_CBFLAG_SKIPOPTION	0x10000000  /*!< don't callback with option */
-#define POPT_CBFLAG_CONTINUE	0x08000000  /*!< continue callbacks with option */
-/*@}*/
-
-/** \ingroup popt
- * \name Error return values
- */
-/*@{*/
-#define POPT_ERROR_NOARG	-10	/*!< missing argument */
-#define POPT_ERROR_BADOPT	-11	/*!< unknown option */
-#define POPT_ERROR_OPTSTOODEEP	-13	/*!< aliases nested too deeply */
-#define POPT_ERROR_BADQUOTE	-15	/*!< error in paramter quoting */
-#define POPT_ERROR_ERRNO	-16	/*!< errno set, use strerror(errno) */
-#define POPT_ERROR_BADNUMBER	-17	/*!< invalid numeric value */
-#define POPT_ERROR_OVERFLOW	-18	/*!< number too large or too small */
-#define	POPT_ERROR_BADOPERATION	-19	/*!< mutually exclusive logical operations requested */
-#define	POPT_ERROR_NULLARG	-20	/*!< opt->arg should not be NULL */
-#define	POPT_ERROR_MALLOC	-21	/*!< memory allocation failed */
-/*@}*/
-
-/** \ingroup popt
- * \name poptBadOption() flags
- */
-/*@{*/
-#define POPT_BADOPTION_NOALIAS  (1 << 0)  /*!< don't go into an alias */
-/*@}*/
-
-/** \ingroup popt
- * \name poptGetContext() flags
- */
-/*@{*/
-#define POPT_CONTEXT_NO_EXEC	(1 << 0)  /*!< ignore exec expansions */
-#define POPT_CONTEXT_KEEP_FIRST	(1 << 1)  /*!< pay attention to argv[0] */
-#define POPT_CONTEXT_POSIXMEHARDER (1 << 2) /*!< options can't follow args */
-#define POPT_CONTEXT_ARG_OPTS	(1 << 4) /*!< return args as options with value 0 */
-/*@}*/
-
-/** \ingroup popt
- */
-struct poptOption {
-/*@observer@*/ /*@null@*/
-    const char * longName;	/*!< may be NULL */
-    char shortName;		/*!< may be NUL */
-    int argInfo;
-/*@shared@*/ /*@null@*/
-    void * arg;			/*!< depends on argInfo */
-    int val;			/*!< 0 means don't return, just update flag */
-/*@observer@*/ /*@null@*/
-    const char * descrip;	/*!< description for autohelp -- may be NULL */
-/*@observer@*/ /*@null@*/
-    const char * argDescrip;	/*!< argument description for autohelp */
-};
-
-/** \ingroup popt
- * A popt alias argument for poptAddAlias().
- */
-struct poptAlias {
-/*@owned@*/ /*@null@*/
-    const char * longName;	/*!< may be NULL */
-    char shortName;		/*!< may be NUL */
-    int argc;
-/*@owned@*/
-    const char ** argv;		/*!< must be free()able */
-};
-
-/** \ingroup popt
- * A popt alias or exec argument for poptAddItem().
- */
-/*@-exporttype@*/
-typedef struct poptItem_s {
-    struct poptOption option;	/*!< alias/exec name(s) and description. */
-    int argc;			/*!< (alias) no. of args. */
-/*@owned@*/
-    const char ** argv;		/*!< (alias) args, must be free()able. */
-} * poptItem;
-/*@=exporttype@*/
-
-/** \ingroup popt
- * \name Auto-generated help/usage
- */
-/*@{*/
-
-/**
- * Empty table marker to enable displaying popt alias/exec options.
- */
-/*@-exportvar@*/
-/*@unchecked@*/ /*@observer@*/
-extern struct poptOption poptAliasOptions[];
-/*@=exportvar@*/
-#define POPT_AUTOALIAS { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptAliasOptions, \
-			0, "Options implemented via popt alias/exec:", NULL },
-
-/**
- * Auto help table options.
- */
-/*@-exportvar@*/
-/*@unchecked@*/ /*@observer@*/
-extern struct poptOption poptHelpOptions[];
-/*@=exportvar@*/
-
-/*@-exportvar@*/
-/*@unchecked@*/ /*@observer@*/
-extern struct poptOption * poptHelpOptionsI18N;
-/*@=exportvar@*/
-
-#define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptHelpOptions, \
-			0, "Help options:", NULL },
-
-#define POPT_TABLEEND { NULL, '\0', 0, 0, 0, NULL, NULL }
-/*@}*/
-
-/** \ingroup popt
- */
-/*@-exporttype@*/
-typedef /*@abstract@*/ struct poptContext_s * poptContext;
-/*@=exporttype@*/
-
-/** \ingroup popt
- */
-#ifndef __cplusplus
-/*@-exporttype -typeuse@*/
-typedef struct poptOption * poptOption;
-/*@=exporttype =typeuse@*/
-#endif
-
-/*@-exportconst@*/
-enum poptCallbackReason {
-    POPT_CALLBACK_REASON_PRE	= 0, 
-    POPT_CALLBACK_REASON_POST	= 1,
-    POPT_CALLBACK_REASON_OPTION = 2
-};
-/*@=exportconst@*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*@-type@*/
-
-/** \ingroup popt
- * Table callback prototype.
- * @param con		context
- * @param reason	reason for callback
- * @param opt		option that triggered callback
- * @param arg		@todo Document.
- * @param data		@todo Document.
- */
-typedef void (*poptCallbackType) (poptContext con, 
-		enum poptCallbackReason reason,
-		/*@null@*/ const struct poptOption * opt,
-		/*@null@*/ const char * arg,
-		/*@null@*/ const void * data)
-	/*@globals internalState @*/
-	/*@modifies internalState @*/;
-
-/** \ingroup popt
- * Initialize popt context.
- * @param name		context name (usually argv[0] program name)
- * @param argc		no. of arguments
- * @param argv		argument array
- * @param options	address of popt option table
- * @param flags		or'd POPT_CONTEXT_* bits
- * @return		initialized popt context
- */
-/*@only@*/ /*@null@*/
-poptContext poptGetContext(
-		/*@dependent@*/ /*@keep@*/ const char * name,
-		int argc, /*@dependent@*/ /*@keep@*/ const char ** argv,
-		/*@dependent@*/ /*@keep@*/ const struct poptOption * options,
-		int flags)
-	/*@*/;
-
-/** \ingroup popt
- * Reinitialize popt context.
- * @param con		context
- */
-/*@unused@*/
-void poptResetContext(/*@null@*/poptContext con)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Return value of next option found.
- * @param con		context
- * @return		next option val, -1 on last item, POPT_ERROR_* on error
- */
-int poptGetNextOpt(/*@null@*/poptContext con)
-	/*@globals fileSystem, internalState @*/
-	/*@modifies con, fileSystem, internalState @*/;
-
-/** \ingroup popt
- * Return next option argument (if any).
- * @param con		context
- * @return		option argument, NULL if no argument is available
- */
-/*@observer@*/ /*@null@*/ /*@unused@*/
-const char * poptGetOptArg(/*@null@*/poptContext con)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Return next argument.
- * @param con		context
- * @return		next argument, NULL if no argument is available
- */
-/*@observer@*/ /*@null@*/ /*@unused@*/
-const char * poptGetArg(/*@null@*/poptContext con)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Peek at current argument.
- * @param con		context
- * @return		current argument, NULL if no argument is available
- */
-/*@observer@*/ /*@null@*/ /*@unused@*/
-const char * poptPeekArg(/*@null@*/poptContext con)
-	/*@*/;
-
-/** \ingroup popt
- * Return remaining arguments.
- * @param con		context
- * @return		argument array, NULL terminated
- */
-/*@observer@*/ /*@null@*/
-const char ** poptGetArgs(/*@null@*/poptContext con)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Return the option which caused the most recent error.
- * @param con		context
- * @param flags
- * @return		offending option
- */
-/*@observer@*/
-const char * poptBadOption(/*@null@*/poptContext con, int flags)
-	/*@*/;
-
-/** \ingroup popt
- * Destroy context.
- * @param con		context
- * @return		NULL always
- */
-/*@null@*/
-poptContext poptFreeContext( /*@only@*/ /*@null@*/ poptContext con)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Add arguments to context.
- * @param con		context
- * @param argv		argument array, NULL terminated
- * @return		0 on success, POPT_ERROR_OPTSTOODEEP on failure
- */
-/*@unused@*/
-int poptStuffArgs(poptContext con, /*@keep@*/ const char ** argv)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Add alias to context.
- * @todo Pass alias by reference, not value.
- * @deprecated Use poptAddItem instead.
- * @param con		context
- * @param alias		alias to add
- * @param flags		(unused)
- * @return		0 on success
- */
-/*@unused@*/
-int poptAddAlias(poptContext con, struct poptAlias alias, int flags)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Add alias/exec item to context.
- * @param con		context
- * @param newItem	alias/exec item to add
- * @param flags		0 for alias, 1 for exec
- * @return		0 on success
- */
-int poptAddItem(poptContext con, poptItem newItem, int flags)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Read configuration file.
- * @param con		context
- * @param fn		file name to read
- * @return		0 on success, POPT_ERROR_ERRNO on failure
- */
-int poptReadConfigFile(poptContext con, const char * fn)
-	/*@globals errno, fileSystem, internalState @*/
-	/*@modifies con->execs, con->numExecs,
-		errno, fileSystem, internalState @*/;
-
-/** \ingroup popt
- * Read default configuration from /etc/popt and $HOME/.popt.
- * @param con		context
- * @param useEnv	(unused)
- * @return		0 on success, POPT_ERROR_ERRNO on failure
- */
-/*@unused@*/
-int poptReadDefaultConfig(poptContext con, /*@unused@*/ int useEnv)
-	/*@globals fileSystem, internalState @*/
-	/*@modifies con->execs, con->numExecs,
-		fileSystem, internalState @*/;
-
-/** \ingroup popt
- * Duplicate an argument array.
- * @note: The argument array is malloc'd as a single area, so only argv must
- * be free'd.
- *
- * @param argc		no. of arguments
- * @param argv		argument array
- * @retval argcPtr	address of returned no. of arguments
- * @retval argvPtr	address of returned argument array
- * @return		0 on success, POPT_ERROR_NOARG on failure
- */
-int poptDupArgv(int argc, /*@null@*/ const char **argv,
-		/*@null@*/ /*@out@*/ int * argcPtr,
-		/*@null@*/ /*@out@*/ const char *** argvPtr)
-	/*@modifies *argcPtr, *argvPtr @*/;
-
-/** \ingroup popt
- * Parse a string into an argument array.
- * The parse allows ', ", and \ quoting, but ' is treated the same as " and
- * both may include \ quotes.
- * @note: The argument array is malloc'd as a single area, so only argv must
- * be free'd.
- *
- * @param s		string to parse
- * @retval argcPtr	address of returned no. of arguments
- * @retval argvPtr	address of returned argument array
- */
-int poptParseArgvString(const char * s,
-		/*@out@*/ int * argcPtr, /*@out@*/ const char *** argvPtr)
-	/*@modifies *argcPtr, *argvPtr @*/;
-
-/** \ingroup popt
- * Parses an input configuration file and returns an string that is a 
- * command line.  For use with popt.  You must free the return value when done.
- *
- * Given the file:
-\verbatim
-# this line is ignored
-    #   this one too
-aaa
-  bbb
-    ccc   
-bla=bla
-
-this_is   =   fdsafdas
-     bad_line=        
-  reall bad line  
-  reall bad line  = again
-5555=   55555   
-  test = with lots of spaces
-\endverbatim
-*
-* The result is:
-\verbatim
---aaa --bbb --ccc --bla="bla" --this_is="fdsafdas" --5555="55555" --test="with lots of spaces"
-\endverbatim
-*
-* Passing this to poptParseArgvString() yields an argv of:
-\verbatim
-'--aaa'
-'--bbb' 
-'--ccc' 
-'--bla=bla' 
-'--this_is=fdsafdas' 
-'--5555=55555' 
-'--test=with lots of spaces' 
-\endverbatim
- *
- * @bug NULL is returned if file line is too long.
- * @bug Silently ignores invalid lines.
- *
- * @param fp		file handle to read
- * @param *argstrp	return string of options (malloc'd)
- * @param flags		unused
- * @return		0 on success
- * @see			poptParseArgvString
- */
-/*@-fcnuse@*/
-int poptConfigFileToString(FILE *fp, /*@out@*/ char ** argstrp, int flags)
-	/*@globals fileSystem @*/
-	/*@modifies *fp, *argstrp, fileSystem @*/;
-/*@=fcnuse@*/
-
-/** \ingroup popt
- * Return formatted error string for popt failure.
- * @param error		popt error
- * @return		error string
- */
-/*@observer@*/
-const char * poptStrerror(const int error)
-	/*@*/;
-
-/** \ingroup popt
- * Limit search for executables.
- * @param con		context
- * @param path		single path to search for executables
- * @param allowAbsolute	absolute paths only?
- */
-/*@unused@*/
-void poptSetExecPath(poptContext con, const char * path, int allowAbsolute)
-	/*@modifies con @*/;
-
-/** \ingroup popt
- * Print detailed description of options.
- * @param con		context
- * @param fp		ouput file handle
- * @param flags		(unused)
- */
-void poptPrintHelp(poptContext con, FILE * fp, /*@unused@*/ int flags)
-	/*@globals fileSystem @*/
-	/*@modifies *fp, fileSystem @*/;
-
-/** \ingroup popt
- * Print terse description of options.
- * @param con		context
- * @param fp		ouput file handle
- * @param flags		(unused)
- */
-void poptPrintUsage(poptContext con, FILE * fp, /*@unused@*/ int flags)
-	/*@globals fileSystem @*/
-	/*@modifies *fp, fileSystem @*/;
-
-/** \ingroup popt
- * Provide text to replace default "[OPTION...]" in help/usage output.
- * @param con		context
- * @param text		replacement text
- */
-/*@-fcnuse@*/
-void poptSetOtherOptionHelp(poptContext con, const char * text)
-	/*@modifies con @*/;
-/*@=fcnuse@*/
-
-/** \ingroup popt
- * Return argv[0] from context.
- * @param con		context
- * @return		argv[0]
- */
-/*@-fcnuse@*/
-/*@observer@*/
-const char * poptGetInvocationName(poptContext con)
-	/*@*/;
-/*@=fcnuse@*/
-
-/** \ingroup popt
- * Shuffle argv pointers to remove stripped args, returns new argc.
- * @param con		context
- * @param argc		no. of args
- * @param argv		arg vector
- * @return		new argc
- */
-/*@-fcnuse@*/
-int poptStrippedArgv(poptContext con, int argc, char ** argv)
-	/*@modifies *argv @*/;
-/*@=fcnuse@*/
-
-/**
- * Save a long, performing logical operation with value.
- * @warning Alignment check may be too strict on certain platorms.
- * @param arg		integer pointer, aligned on int boundary.
- * @param argInfo	logical operation (see POPT_ARGFLAG_*)
- * @param aLong		value to use
- * @return		0 on success, POPT_ERROR_NULLARG/POPT_ERROR_BADOPERATION
- */
-/*@-incondefs@*/
-/*@unused@*/
-int poptSaveLong(/*@null@*/ long * arg, int argInfo, long aLong)
-	/*@modifies *arg @*/
-	/*@requires maxSet(arg) >= 0 /\ maxRead(arg) == 0 @*/;
-/*@=incondefs@*/
-
-/**
- * Save an integer, performing logical operation with value.
- * @warning Alignment check may be too strict on certain platorms.
- * @param arg		integer pointer, aligned on int boundary.
- * @param argInfo	logical operation (see POPT_ARGFLAG_*)
- * @param aLong		value to use
- * @return		0 on success, POPT_ERROR_NULLARG/POPT_ERROR_BADOPERATION
- */
-/*@-incondefs@*/
-/*@unused@*/
-int poptSaveInt(/*@null@*/ int * arg, int argInfo, long aLong)
-	/*@modifies *arg @*/
-	/*@requires maxSet(arg) >= 0 /\ maxRead(arg) == 0 @*/;
-/*@=incondefs@*/
-
-/*@=type@*/
-#ifdef  __cplusplus
-}
-#endif
-
-#endif