Project import
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..490e7c9
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,134 @@
+#
+#    Copyright (c) 2012 Nest Labs, Inc.
+#    All rights reserved.
+#
+#    This document is the property of Nest. It is considered
+#    confidential and proprietary information.
+#
+#    This document may not be reproduced or transmitted in any form,
+#    in whole or in part, without the express written permission of
+#    Nest.
+#
+#    Description:
+#      This file is the make file for oprofile, a performance
+#      profiling tool for Linux systems, capable of profiling all
+#      running code at low overhead.
+#
+
+BuildConfigSpecialized	:= No
+BuildProductSpecialized	:= No
+
+include pre.mak
+
+PackageName		:= oprofile
+
+PackageExtension	:= tar.gz
+PackageSeparator	:= -
+
+PackagePatchArgs	:= -p1
+
+PackageArchive		:= $(PackageName).$(PackageExtension)
+PackageSourceDir	:= $(PackageName)$(PackageSeparator)$(PackageVersion)
+
+PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)
+
+LicenseSourceFile	:= $(PackageSourceDir)/COPYING
+
+CleanPaths		+= $(PackageLicenseFile)
+
+BinutilsDir		:= sw/tps/binutils
+BinutilsIncDir		:= $(call GenerateResultPaths,$(BinutilsDir),usr/include)
+BinutilsLibDir		:= $(call GenerateResultPaths,$(BinutilsDir),usr/lib)
+
+LinuxDir		:= sw/tps/linux
+LinuxIncDir		:= $(call GenerateResultPaths,$(LinuxDir),include)
+
+PoptDir			:= sw/tps/popt
+PoptIncDir		:= $(call GenerateResultPaths,$(PoptDir),usr/include)
+PoptLibDir		:= $(call GenerateResultPaths,$(PoptDir),usr/lib)
+
+ZlibDir			:= sw/tps/zlib
+ZlibIncDir      	:= $(call GenerateResultPaths,$(ZlibDir),usr/include)
+ZlibLibDir      	:= $(call GenerateResultPaths,$(ZlibDir),usr/lib)
+
+all: $(PackageDefaultGoal)
+
+# Generate the package license contents.
+
+$(LicenseSourceFile): source
+
+$(PackageLicenseFile): $(LicenseSourceFile)
+	$(copy-result)
+
+# Extract the source from the archive and apply patches, if any.
+
+$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths)
+	$(expand-and-patch-package)
+
+# Prepare the sources.
+
+.PHONY: source
+source: | $(PackageSourceDir)
+
+# Patch the sources, if necessary.
+
+.PHONY: patch
+patch: source
+
+# Generate the package build makefile.
+
+$(PackageBuildMakefile): | $(PackageSourceDir) $(BuildDirectory) $(ResultDirectory)
+	$(Verbose)cd $(BuildDirectory) && \
+	$(CURDIR)/$(PackageSourceDir)/configure \
+	CC="$(CC)" CXX="$(CXX)" AR=$(AR) NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \
+	CPPFLAGS="$(call ToolGenerateIncludeArgument,$(BinutilsIncDir)) \
+	$(call ToolGenerateIncludeArgument,$(LinuxIncDir)) \
+	$(call ToolGenerateIncludeArgument,$(PoptIncDir)) \
+	$(call ToolGenerateIncludeArgument,$(ZlibIncDir)) \
+	$(OprofileCFlags)" \
+	LDFLAGS="$(call ToolGenerateLibraryPathArgument,$(BinutilsLibDir)) \
+	$(call ToolGenerateLibraryPathArgument,$(PoptLibDir)) \
+	$(call ToolGenerateLibraryPathArgument,$(ZlibLibDir))" \
+	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
+	--build=$(HostTuple) \
+	--host=$(TargetTuple) \
+	--prefix=/usr \
+	--sysconfdir=/etc \
+	--localstatedir=/var \
+	--disable-gui \
+	--with-kernel-support \
+	--without-x \
+	--disable-static
+
+# Configure the source for building.
+
+.PHONY: configure
+configure: source $(PackageBuildMakefile)
+
+# Build the source.
+#
+# We have to unset MAKEFLAGS since they confuse the package build otherwise.
+
+.PHONY: build
+build: configure
+	$(Verbose)unset MAKEFLAGS && \
+	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
+	all
+
+# Stage the build to a temporary installation area.
+#
+# We have to unset MAKEFLAGS since they confuse the package build otherwise.
+
+.PHONY: stage
+stage: build | $(ResultDirectory)
+	$(Verbose)unset MAKEFLAGS && \
+	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
+	DESTDIR=$(ResultDirectory) \
+	install
+
+clean:
+	$(Verbose)$(RM) $(RMFLAGS) -r $(PackageSourceDir)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(BuildDirectory)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(ResultDirectory)
+
+include post.mak
diff --git a/oprofile-0.9.7/COPYING b/oprofile-0.9.7/COPYING
new file mode 100644
index 0000000..d60c31a
--- /dev/null
+++ b/oprofile-0.9.7/COPYING
@@ -0,0 +1,340 @@
+		    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/oprofile-0.9.7/ChangeLog-2001 b/oprofile-0.9.7/ChangeLog-2001
new file mode 100644
index 0000000..acc5be4
--- /dev/null
+++ b/oprofile-0.9.7/ChangeLog-2001
@@ -0,0 +1,2327 @@
+2001-12-31  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/op_init.c:
+	* module/oprofile.c: export cpu type preparing for user space
+	  cpu detection change
+	* module/oprofile.h: preparatory work to add support for
+	  preempt patch
+
+	* pp/oprofpp.cpp: cleanup #if 0 ... #else ... #endif
+	* pp/orofpp_util.cpp: allow to deduce image name from
+	  shared lib samples files name produced with
+	  --separate-samples
+
+	* gui/oprof_start.cpp: minor fix
+
+2001-12-31  John Levon  <moz@compsoc.man.ac.uk>
+
+	* various files: use op_cpu enum for cpu type
+ 
+	* all .cvsignore:
+	* Rules.make.in:
+	* all Makefile.in: hide .d files in .deps directories
+
+2001-12-31  John Levon  <moz@compsoc.man.ac.uk>
+
+	* Makefile.in: move config.h.in to maintainerclean - it is included
+	in a tarball so a distclean shouldn't remove it
+ 
+2001-12-31  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+	* gui/ui/oprof_start.base.ui:
+	* doc/oprofile.sgml:
+	* doc/oprofile.1.in: small updates
+ 
+	* oprofile.c: more detail on locking requirements for wake_up
+ 
+2001-12-31  Michel Dagenais  <michel.dagenais@polymtl.ca>
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start.h: show total samples so far
+ 
+2001-12-29  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/oprofiled.c:
+	* dae/op_start: --separate-samples is working
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h:
+	* gui/ui/oprof_start.base.ui: handle separating for
+	  shared libs, off by default.
+
+	* doc/oprofile.sgml:
+	* doc/oprofile.1.in: document --show-shared-libs
+
+	* pp/opf_filter.h:
+	* pp/opf_container.cpp: new class samples_files_t
+	  to easier access to subset of symbols/samples or
+	  source filename from multiple image
+
+	* pp/Makefile.in:
+	* pp/op_time.cpp:
+	* pp/opf_filter.cpp:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp: implement --show-shared-libs except
+	  for opf_filter
+
+	* util/file_manip.h:
+	* util/file_manip.cpp: new function to manipulate sample
+	  file name and list of sample file name.
+
+2001-12-27  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/op_stop: always do an op_dump before stopping
+	* gui/oprof_start.cpp: op_dump before op_stop
+	  no longer required
+
+2001-12-26  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_filter.cpp:
+	* pp/opf_filter.h:
+	* pp/oprofpp.h:
+	* pp/opf_filter.cpp:	
+	* pp/oprofpp_util.cpp:
+	* pp/oprofpp.cpp:
+	* pp/op_time.c: remove some use of global var
+	  samplefile and imagefile
+
+	* pp/oprofpp.cpp: do_dump_gprof() free memory
+	  too soon. (was bugged from 2001-12-05)
+
+	* doc/oprofile.sgml: remove mention about oprof-thread
+
+2001-12-23  Philippe Elie  <ph_e@club-internet.fr>
+
+	* util/string_manip.h:
+	* util/string_manip.cpp: separate_token() new function
+
+	* pp/opf_filter.cpp:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp:
+	* doc/oprofil.1.in:
+	* doc/oprofile.sgml: add support for --exclude-symbol
+
+	* TODO: update
+
+2001-12-22  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/op_start: add --separate-samples
+	* dae/oprofiled.c: ditto
+	* dae/opd_proc.c:
+	* dae/opd_util.h:
+	* dae/opd_util.c:
+	* dae/oprofiled.h: implementation of above
+	* pp/op_time.cpp: 
+	* doc/oprofile.1.in:
+	* doc/oprfile.sgml: handle and document above
+	* pp/oprofpp_util.cpp: minor change related
+
+	* dae/oprofiled.c: bug fix while blocking signal
+
+	* doc/Makefile.in: avoid unecessary build of html doc
+
+2001-12-22  Dave Jones <davej@suse.de>
+
+	* config.h.in: Readd to CVS.
+
+2001-12-18  Dave Jones <davej@suse.de>
+
+	* Makefile.in: Make documentation build again.
+
+2001-12-14  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/opd_proc.c: memory leak fix in opd_init_images()
+
+2001-12-12  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/oprofile.h: change slightly op_hash()
+
+	* util/file_manip.h:
+	* util/file_manip.cpp:
+	* util/string_manip.h:
+	* util/string_manip.cpp:
+	* util/child_reader.h:
+	* util/child_reader.cpp: cleanup John's FIXME
+
+	* dae/opd_util.h:
+	* dae/opd_util.c: move libiberty things to ...
+	* util/misc.h:
+	* util/misc.c: here
+	* util/Makefile.in: update
+	* dae/Makefile.in:
+	* pp/Makefile.in:
+
+	* doc/Makefile.in: install the html doc
+
+2001-12-10  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/oprofiled.c: fix sigprocmask() blooper
+ 
+2001-12-09  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update again
+ 
+	* util/child_reader.h:
+	* util/child_reader.cpp: 
+	* util/file_manip.cpp:
+	* util/string_manip.cpp: pedantic cleanup + FIXMEs
+
+2001-12-09  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: add FIXME comment
+
+	* util/file_manip.h: add FIXME comment, 
+	  avoid warning with //
+ 
+2001-12-09  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+2001-12-09  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/opd_proc.c: verbprintf() what cause the
+	  deletion of a sample file + minor cleanup
+	* doc/oprofile.sgml: document samples files backup
+
+2001-12-07  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/oprofiled.h:
+	* dae/opd_proc.c: handle an accessed field of
+	  deleted of deleted procs to defer deleting
+	  the procs. This greatly reduce the Nr of lost
+	  samples due to no proc information.
+
+2001-12-06  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/oprofiled.h:
+	* dae/opd_proc.c: separate stats for kernel
+	  and modules address space and minor cleanup
+
+2001-12-05  Philippe Elie  <ph_e@club-internet.fr>
+
+	* Rules.make.in:
+	* dae/Makefile.in:
+	* events/Makefile.in:
+	* pp/Makefile.in: 
+	* util/Makefile.in: tidy
+	* module/Makefile.in:
+	* gui/Makefile.in: use auto-deps
+
+	* util/child_reader.h: allow to compile with -ansi
+	* util/child_reader.cpp: fix memory leak fix
+	* pp/oprofpp.cpp: fix memory leak
+
+	* TODO: update
+
+2001-12-05  Philippe Elie  <ph_e@club-internet.fr>
+
+	* autogen.sh: use autoheader to create config.h
+	* configure.in: handle missing libiberty.h and
+	  missing xcalloc in libiberty.a
+	* dae/opd_util.cpp:
+	* dae/opd_proc.c: 
+	* dae/opd_util.h:
+	* dae/oprofiled.c:
+	* evets/Makefile.in
+	* pp/oprof_convert.c:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp_util.cpp: replace opd_malloc() and related
+	  by xmalloc.
+	* util/op_popt.c: add call to xmalloc_set_program_name()
+	* ./cvsignore: add config.h, config.h.in
+
+2001-12-04  Dave Jones <davej@suse.de>
+
+	* events/op_events_desc.c:
+	  Add recognition for alternative PIII string.
+	  Reported by Lev Iserovich <lev@ciprico.com>
+	
+2001-12-04  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/opd_util.c:
+	* dae/opd_util.c: move common fuctionnality to ...
+	* util/file_manip.h
+	* util/file_manip.c: here
+	* pp/oprof_convert.c: reflect above change
+	* pp/oprof_convert.c:
+	* pp/opf_filter.cpp: ditto + minor cleanup
+	* gui/Makefile.in:
+	* pp/Makefile.in: reflect above change
+
+2001-12-02  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprofpp.h:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp_util.cpp:
+	* pp/opf_filter.cpp: small tidies
+
+2001-12-01  Philippe Elie  <ph_e@club-internet.fr>
+
+	* Makefile.in: build util sub-dir first
+
+	* dae/opd_util.h:
+	* dae/opd_util.c: move opd_GetContext() ...
+	* util/opd_popt.h:
+	* util/opd_popt.c: in these new files
+
+	* pp/oprofpp.cpp:
+	* pp/opf_filter.cpp:
+	* pp/op_time.cpp:
+	* dae/oprofiled.c: free the poptContext + cleanup popt
+
+	* events/op_help.c:
+	* events/Makefile.in: use the popt library
+
+	* pp/oprofpp.cpp: allow to use --output-linenr-info with
+	  --list-symbols.
+	* doc/oprofile.1.in:
+	* doc/oprofile.sgml: reflect it
+
+2001-12-01  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/opd_proc.c:
+	* dae/opd_util.c:
+	* dae/opd_util.h:
+	* dae/oprofiled.c: backup if needed old samples files
+	  in a separate directory
+
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp: cleanup + minor buglet fix
+
+	* util/file_manip.h:
+	* util/file_manip.cpp: create_file_list() new to create
+	  a list of all the file in a directory
+
+	* pp/op_time.cpp: new utility
+	* pp/Makefile.in: handle op_time
+
+	* doc/oprofile.sgml: 
+	* doc/oprofile.1.in: Document op_time
+
+2001-11-30  Philippe Elie  <ph_e@club-internet.fr>
+
+	* configure.in: cvs add Rules.make.in.
+
+2001-11-30  Dave Jones <davej@suse.de>
+
+	* configure.in: suppress reference to an inexistant
+	  Rules.make.in
+
+2001-11-29  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprofpp_util.cpp: do not remove leading underscore to
+	  avoid C++ demangling failure
+
+2001-11-27  Philippe Elie  <ph_e@club-internet.fr>
+
+	* configure.in:
+	* pp/Makefile.in: work-around for gcc 3.0 and bfd pre-1998
+
+	* doc/oprofile.sgml: typo
+
+2001-11-26  Philippe Elie  <ph_e@club-internet.fr>
+
+	* Rules.make.in: new to add autodeps and share commons
+	  definitions
+	* all Makefile.in except module, gui: use autodeps
+
+	* doc/oprofile.1.in: typo
+
+	* util/filemanip.h: missing std::
+
+2001-11-25  Philippe Elie  <ph_e@club-internet.fr>
+
+	* oprofile-tests/understanding/persistent.cpp: new
+	* util/persistent.h: new. An attempt to provide a better
+	  configuration saving/restoring library. Not yet linked to
+	  oprof_start.
+
+2001-11-22  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprofpp_util.cpp: take care than get_linenr() get
+	  line nr and filename info from bfd for the right symbol
+	  and not for the nearest symbol with debug info (#484660)
+
+2001-11-15  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/oprofile.h: work around against a gcc
+	  2.91.66 code generation bug in oprof_exit()
+
+2001-11-14  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/op_start: do not pass bufsize, note_bufsize and
+	  kernel_only as option to the daemon but ...
+	* dae/oprofiled.c: read them from sysctl
+
+	* dae/opd_proc.c: in opd_handle_old_sample_file() do not
+	  delete sample file if mtime differ but backup it.
+
+	* doc/oprofile.sgml:
+	* pp/oprof_convert.c:
+	* pp/oprofpp_util.cpp: replace session number by
+	  backup number
+
+	* util/string_manip.cpp: fix stupid bug in rtrim()
+
+2001-11-13  Philippe Elie  <ph_e@club-internet.fr>
+
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp:
+	* dae/opd_util.h:
+	* dae/opd_util.cpp: small cleanup
+
+	* module/oprofile.c: simplify a little what the
+	  nmi handler
+
+	* doc/oprofile.sgml: clarify op_to_source options
+
+	* pp/child_reader.cpp:
+	* pp/child_reader.h: move these ...
+	* util/child_reader.cpp:
+	* util/child_reader.h: here
+	* util/file_manip.h:
+	* util/file_manip.cpp: new
+	* gui/Makefile.in:
+	* gui/oprof_start_util.h:
+	* gui/oprof_start_util.cpp:
+	* pp/Makefile.in:
+	* pp/opf_filter.cpp: use child_reader and file_manip
+
+	* pp/oprofpp_util.cpp: change ordering of opening in
+	  opp_bfd ctr to avoid cryptic error message
+
+	* TODO: update
+
+2001-11-12  Philippe Elie  <ph_e@club-internet.fr>
+
+	* events: new directory
+
+	* events/Makefile.in:
+	* events/op_events.c:
+	* events/op_events_desc.c:
+	* events/op_help.c: new, splitted from op_events.c
+
+	* pp/oprofpp_util.cpp: new, splitted from oprofpp.cpp
+
+	* pp/oprofpp.h:
+	* pp/oprofpp.c:
+	* op_user.h:
+	* all Makefile.in: update
+	* op_events.c: remove
+
+2001-11-12  Philippe Elie  <ph_e@club-internet.fr>
+
+	* op_events.c: last commit was bad
+	
+	* pp/oprofpp.c: use sstream
+
+2001-11-12  Philippe Elie  <ph_e@club-internet.fr>
+
+	* util: new directory
+	* util/string_manip.cpp:
+	* util/string_manip.h: new
+	* Makefile.in: handle util directory
+	* pp/Makefile.in:
+	* pp/opf_filter.h:
+	* pp/opf_filter.cpp:
+	* gui/Makefile.in:
+	* gui/oprof_start_util.cpp:
+	* gui/oprof_start_util.h: update to use string_manip.cpp
+
+	* op_events.c:
+	* op_user.h:
+	* pp/opf_filter.h:
+	* pp/opf_filter.cpp:
+	* pp/opf_container.cpp: remove dead code
+
+2001-11-11  Dave Jones <davej@suse.de>
+
+	* module/oprofile.[c|h]: Change MSR defines from
+	  MSR_IA32_xxx from MSR_P6_xxx, based on info on
+	  Linux kernel from Mikael Pettersson that these MSRs
+	  don't exist on Pentium 4.
+
+2001-11-11  Philippe Elie  <ph_e@club-internet.fr>
+
+	* gui/oprof_start.cpp: fix record_config()
+
+	* op_user.h: fix one comment
+
+2001-11-10  Bob Montgomery  <bob_montgomery@hp.com>
+
+	* module/oprofile.c: fix pid/pgrp filter to reset counter 
+
+2001-11-08  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* configure.in: bump to 0.0.8cvs
+ 
+2001-11-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* acinclude.m4:
+	* configure.in: fixes for configuration when Qt2 not found
+
+	* child_reader.h:
+	* child_reader.cpp: compile with gcc 3.0
+ 
+2001-11-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: bump to 0.0.7
+ 
+2001-11-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in:
+	* module/oprofile.h:
+	* module/oprofile.c: fail if hard_get_current() exists
+	  - this won't work
+ 
+2001-11-06  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.1.in: reformat options
+	* doc/oprofile.sgml: clarify options that require argument.
+	  Document short option
+
+	* gui/oprof_start_util.cpp: fix basename()
+
+	* pp/oprofpp.cpp:
+	* pp/oprofpp.h:
+	* pp/opf_filter.cpp: better options handling
+
+	* module/oprofile.c: update one comment
+
+	* TODO: update
+
+2001-11-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in:
+	* module/oprofile.h:
+	* module/oprofile.c: support for hard_get_current()
+ 
+2001-11-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/oprofile.h:
+	* module/oprofile.c: make allow_unload exist for UP
+	  too (default to 1)
+ 
+2001-11-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* module/oprofile.c: fix nr_interrupts sysctl
+
+2001-11-04  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/op_start:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h:
+	* gui/ui/oprof_start.base.ui: handle note table size sysctl
+
+	* module/op_syscalls.c: handle dname hash coding collision with
+	  a linear search.
+
+	* module/oprofile.c:
+	* module/oprofile.h:
+	* module/op_syscalls.c: Use a struct to hold the whole
+	  sysctl settable things rather global var.
+
+2001-11-03  Philippe Elie  <ph_e@club-internet.fr>
+
+	* modules/oprofile.h: add a sysctl struct to hold
+	  all sysctl set-able variable
+	
+	* modules/oprofile.c: two bugs fixes.
+
+2001-11-02  Philippe Elie  <ph_e@club-internet.fr>
+
+	* modules/oprofile.h: minor cleanup
+	* modules/oprofile.c: better handling of irq statistics
+
+2001-10-31  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/oprofile.c: add comment about unfixable
+	  races.
+ 
+2001-10-30  John Levon  <moz@compsoc.man.ac.uk>
+
+	* Move module code into module/ subdir. Bye
+	  bye CVS history :/
+ 
+2001-10-30  John Levon  <moz@compsoc.man.ac.uk>
+
+	* op_x86.c: complain properly about lAPIC-less
+	  machines
+ 
+2001-10-26  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+2001-10-26  H. J. Lu <hjl@users.sf.net>
+
+	* Makefile.in: use $(LD) not ld
+ 
+2001-10-25  Philippe Elie  <ph_e@club-internet.fr>
+
+	* configure.in: fix version.h checking for gcc 2.91.66
+
+2001-10-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* Makefile.in:
+	* doc/Makefile.in:
+	* dae/Makefile.in:
+	* pp/Makefile.in:
+	* gui/Makefile.in: add $DESTDIR to prefix (part from
+	  H.J. Lu)
+
+2001-10-25  H. J. Lu  <hjl@users.sf.net>
+
+	* configure.in: better version.h workaround
+
+	* doc/*.1:
+	* doc/Makefile.in: better .so manpage install
+
+2001-10-25  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.sgml: minor change.
+	* pp/opf_filter.cpp: repair short option -a and -s
+
+2001-10-24  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/op_to_source: remove from cvs
+	* pp/Makefile.in: opf_filter application renamed to op_to_source
+	* pp/child_reader.h: new
+	* pp/child_reader.cpp: new, allow to fork a child and read
+	  its stdout/stderr
+	* pp/opf_filter.h:
+	* pp/opf_filter.cpp: use child_reader to launch objdump.
+	  op_to_source -a and -s must be specified with long
+	  form --assembly and --source-with-assembly. This also
+	  speed-up assembly output. Doc not updated.
+
+2001-10-18  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: workaround #2, hopefully fixing
+	  Mandrake (bug #471448)
+ 
+2001-10-17  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: don't mask when restoring MSR values
+ 
+	* doc/Makefile.in: don't use man symlinks
+ 
+2001-10-17  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: save original counter setup
+	  and restore on unload (bug #464094)
+
+2001-10-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in:
+	* oprofile.h: workaround for Mandrake randomly
+	  back-porting things.
+ 
+2001-10-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h:
+	* gui/oprof_start_util.cpp:
+	* pp/opf_container.cpp:
+	* pp/opf_filter.h:
+	* pp/opf_filter.cpp:
+	* pp/oprof_convert.cpp: add note device to gui,
+	  general cleanup
+	 
+2001-10-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.h: fix likely() macro
+ 
+2001-10-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+	* op_syscalls.c:
+	* op_user.h:
+	* oprofile.h:
+	* oprofile.c:
+	* dae/op_start:
+	* dae/opd_proc.c:
+	* dae/oprofiled.h:
+	* dae/oprofiled.c: use a separate map buffer.
+ 
+2001-10-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* acinclude.m4: don't give up if we can't find moc
+ 
+2001-10-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: merge no-thread code
+ 
+2001-10-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c:
+	* dae/oprofiled.c:
+	* op_user.h:
+	* oprofile.h:
+	* op_syscalls.c: use string pool. Prime hash table
+	  with common entries. Consider parent in name_hash.
+ 
+2001-10-13  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.sgml: minor change
+	* pp/opf_filter.cpp: better warning
+
+2001-10-13  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: 0.0.6 has been released -> 0.0.7cvs
+ 
+2001-10-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* doc/oprofile.sgml: new docs for annotation filter
+ 
+2001-10-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/opf_filter.cpp: make output filters more like diff (needs doc),
+	  briefer info message
+ 
+2001-10-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/Makefile.in: add FIXME
+
+	* gui/oprof_start.cpp: fix std::
+
+	* acinclude.m4: more fixes
+ 
+2001-10-12  Philippe Elie  <ph_e@club-internet.fr>
+
+	* gui/oprof_start_util.cpp: use select() rather non-blocking
+	  mode to read output from the child process
+
+2001-10-11  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.sgml:
+	* doc/oprofile.1.in:
+	* pp/opf_filter: make --output and --no-output more intuitive
+
+2001-10-09  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.sgml:
+	* doc/oprofile.1.in: clarify doc
+	* pp/opf_filter.cpp: corner case fix in --output-dir and
+	  --source-dir handling.
+
+2001-10-08  John Levon  <moz@compsoc.man.ac.uk>
+
+	* acinclude.m4:
+	* configure.in:
+	* gui/Makefile.in: fix idiot config bug of mine
+ 
+2001-10-06  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_filter.cpp:
+	* pp/op_to_source: small cleanup
+
+2001-10-05  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.sgml:
+	* pp/op_to_source:
+	* pp/opf_filter.cpp: implement --output and --no-output to
+ 	  allow output file generation filtering
+
+2001-10-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+2001-10-03  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.sgml:
+	* pp/op_to_source:
+	* pp/opf_filter.cpp: implement --source-dir and --output-dir
+	  to generated separated annoted source file.
+
+2001-10-03  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprofpp.cpp
+	* pp/oprofpp.h
+	* pp/opf_filter.cpp: minor cleanup
+
+2001-10-03  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* Makefile.in: remove generated files on make distclean
+
+	* acinclude.m4: update from source
+ 
+2001-10-02  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprofpp.cpp: fix a silly bug in do_list_symbols (oprofpp -l)
+
+2001-10-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: fix
+
+	* Makefile.in: dist fix
+ 
+2001-10-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* configure.in: -> 0.0.5 for release
+ 
+2001-10-01  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_container.cpp:
+	* pp/opf_filter.h: comment
+	* pp/opf_filter.cpp: speed-up
+
+2001-09-30  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_container.cpp:
+	* pp/opf_filter.cpp:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp.h: cleanup
+
+2001-09-30  Philippe Elie  <ph_e@club-internet.fr>
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start.h:
+	* gui/ui/oprof_start.base.ui: cleanup
+
+2001-09-29  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_filter.cpp: check if we need debug info to work.
+
+	* gui/oprof_start.cpp: use one config file by counter. Store
+	  selected counter in oprof_start_config
+
+	* gui/oprof_start.cpp:
+	* gui/persistent_config.h: remove dirty flag in 
+	  persistent_config_t template class
+
+2001-09-29  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+	* gui/oprof_start.cpp:
+	* gui/ui/oprof_start_base.ui:
+	* gui/oprof_start_config.h:
+	* gui/oprof_start_config.cpp: add verbose option
+ 
+	* pp/opf_container.cpp:
+	* pp/opf_filter.cpp: some FIXMEs and little cleanups
+ 
+2001-09-29  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprofpp.cpp: bug fix when calling the bfd lib.
+
+2001-09-29  Philippe Elie  <ph_e@club-internet.fr>
+
+	* gui/oprof_start.cpp: two minor fixes.
+
+2001-09-28  John Levon  <moz@compsoc.man.ac.uk>
+
+	* various files: the footer is now a header !
+
+	* dae/opd_start.c: fix msync !!
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_util.h:
+	* gui/oprof_start_util.cpp: better default event count
+	  value. Save CPU type to oprofile file.
+
+2001-09-28  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_filter.c: fix op_to_source [-a] [-s]
+
+2001-09-28  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.sgml: oops, correct bad merging with
+ 	  John's last update.
+
+2001-09-27  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.1.in: minor change
+	* op_events.c: remove --gui-description stuff
+	* pp/opf_filter.cpp: remove use of temporary array to
+	  pass argument to the popt library
+
+2001-09-27  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: updates
+
+	* gui/oprof_start_util.cpp: fix compile, revert
+	  g++ extension (different on g++ 3.0) 
+
+2001-09-27  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprof_start_util.cpp: use g++ extension to
+	  avoid using temporary files
+ 
+2001-09-27  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprof_start_util.cpp: fix crasher bug
+ 
+2001-09-27  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp: get per-counter config working
+ 
+2001-09-27  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/Makefile.in:
+	* pp/oprofpp.c:
+	* pp/oprofpp.cpp: rename file
+ 
+2001-09-27  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/opf_container.cpp:
+	* pp/oprofpp.h:
+	* pp/oprofpp.c: speed improvements
+ 
+2001-09-26  Philippe Elie  <ph_e@club-internet.fr>
+
+	* configure.in: typo
+
+	* pp/oprofpp.c: fix oprofpp -s.
+	  Use std::string (work not yet finish)
+	* pp/oprofpp.h:	ditto
+	* pp/opf_filter.cpp: ditto
+
+2001-09-26  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: add nr_interrupts
+ 
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_util.h:
+	* gui/oprof_start_util.cpp:
+	* gui/oprof_start_config.h:
+	* gui/oprof_start_config.cpp:
+	* gui/ui/oprof_start_base.ui: add daemon status
+	  display, fix basename()
+	 
+2001-09-26  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: remove broken bit
+
+	* pp/Makefile.in: fix options
+ 
+	* doc/oprofile.sgml: minor changes
+ 
+2001-09-26  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/Makefile.in: increase level of warning
+	* pp/oprof_convert.c: minor fix to avoid warning
+	* dae/opd_util.c: ditto
+	* pp/oprofpp.c: get_linenr() never return null in
+	  filename  (fix bug #464482). symcomp() ensure
+	  correct vma comparison (fix #464093)
+	* dae/opd_util.c: minor fixe in op_poptGetContext()
+	* gui/oprof_start.cpp: minor cleanup
+
+2001-09-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_stop:
+	* gui/oprof_start_config.cpp: use pidof instead
+
+2001-09-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprof_start_config.cpp: fix is_profiler_started() too 
+ 
+2001-09-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_stop: fix terribly stupid error
+ 
+2001-09-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* op_event.c: whooops
+ 
+2001-09-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprof_start.cpp: std:: fix
+ 
+	* dae/op_start:
+	* op_events.c: robustness fix
+
+2001-09-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprof_start.cpp: fix silly bug
+ 
+2001-09-24  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/opf_filter.cpp: "fix" compile error
+ 
+2001-09-24  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprofile:
+	* gui/Makefile.in: remove old gui
+ 
+2001-09-24  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_start: make a little more robust
+ 
+2001-09-24  John Levon  <moz@compsoc.man.ac.uk>
+
+	* include/sstream:
+	* Makefile.in:
+	* configure.in:
+	* pp/Makefile.in:
+	* gui/Makefile.in: configure/make fixes
+
+	* op_events.c: re-order for Athlon 
+	 
+2001-09-23  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprofpp.c: small cleanup
+ 
+2001-09-23  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.h:
+	* op_x86.c: support for 2.4.10
+ 
+2001-09-23  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp: rework validator stuff a bit
+ 
+2001-09-23  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprof_start.cpp: use std::find_if
+ 
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_util.cpp: minor tidies
+ 
+2001-09-23  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_dump:
+	* dae/op_start: echo errors to stderr
+ 
+	* gui/oprof_start_util.h:
+	* gui/oprof_start_util.cpp:
+	* gui/oprof_start.cpp: use fork/exec to spawn children
+
+2001-09-23  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* gui/Makefile.in:
+	* gui/oprof_start_config.h: 
+	* gui/oprof_start_config.cpp: 
+	* gui/oprof_start_util.h: 
+	* gui/oprof_start_util.cpp: 
+	* gui/oprof_start.h: 
+	* gui/oprof_start.cpp: new file for util functions
+ 
+2001-09-23  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_util.c:
+	* dae/opd_util.h:
+	* dae/oprofiled.c: 
+	* pp/oprofpp.c: 
+	* pp/opf_filter.cpp: 
+	* configure.in: enable __builtin_expect, fix popt problem
+
+	* pp/oprof_convert.c: small fixes
+ 
+	* op_events.c: shorten event descriptions for GUI 
+
+	* gui/*: many more updates
+ 
+	* pp/Makefile.in: fix
+ 
+2001-09-21  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c: removed over-verbose line
+
+	* configure.in:
+	* oprofile.h:
+	* oprofile.c: add likely/unlikely, take note lock on dump
+ 
+2001-09-21  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_filter.h: move declaration of counter_array_t to
+	* pp/oprofpp.h: here
+	* pp/oprofpp.c: define and use counter_array_t + minor cleanup
+	* pp/opf_filter.cpp: remove definition of counter_array_t
+
+2001-09-21  Philippe Elie  <ph_e@club-internet.fr>
+
+	* Makefile.in: remove aclocal.m4 in distclean
+	* pp/Makefile.in: use $(CXX) and $(CXXFLAGS)
+
+	* pp/opf_container.cpp:
+	* pp/opf_filter.cpp:
+	* pp/opf_filter.h:
+	* pp/oprofpp.c:
+	* pp/oprofpp.h: cleanup
+
+2001-09-20  Philippe Elie  <ph_e@club-internet.fr>
+
+	* Makefile.in: minor change in module building
+	* pp/Makefile.in: link oprofpp with opf_filter
+	* pp/op_to_source: avoid pipe from oprofpp to opf_filter
+	* pp/opf_filter.h: remove a few member function
+	* pp/opf_container.cpp: ditto + minor cleanup
+	* pp/opf_filter.cpp: oprofpp is no longer piped to opf_filter
+	  but linked with it. Many change, needs additional cleanup
+	* pp/oprofpp.c: group all stuff in two class. Rather a
+	  a C with class than a full C++ file for now. Fix a bug
+	  in filename handling.
+	* pp/oprofpp.h: add opp_bfd and opp_samples_files class.
+	
+	* dae/opd_util.c: add a few explicit cast for C++ compile
+	* dae/opd_util.h: wrap function declaratio with extern "C"
+
+2001-09-19  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: fix silly read valid bug
+ 
+2001-09-19  John Levon  <moz@compsoc.man.ac.uk>
+
+	* Makefile.in: whoops, missed op_util.o from build
+ 
+2001-09-19  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/oprofiled.c: fix little bug, tidy a bit
+
+	* TODO: update
+ 
+2001-09-18  John Levon  <moz@compsoc.man.ac.uk>
+
+	* Makefile.in:
+	* op_syscalls.c:
+	* op_util.c:
+	* oprofile.h: move some code around
+
+	* oprofile.c: fix a tiny bug
+
+2001-09-18  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c:
+	* dae/oprofiled.h: implement hashing of images
+
+	* doc/oprofile.sgml: fix -- issue and use <screen>
+ 
+2001-09-18  John Levon  <moz@compsoc.man.ac.uk>
+
+	* .cvsignore:
+	* README: update
+ 
+	* configure.in: small cleanup
+ 
+	* op_init.c: add comment
+
+	* oprofile.h: 
+	* op_syscalls.c:
+	* op_x86.c: move fixmap stuff, remove disable APIC
+
+	* oprofile.c: init failure fix 
+ 
+	* doc/oprofile.sgml:
+	* dae/opd_proc.c: fix handle_old_sample_files() bug,
+	  check mtime hasn't changed on a new map
+ 
+2001-09-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* acinclude.m4:
+	* autogen.sh:
+	* configure.in:
+	* gui/Makefile.in:
+	* gui/ui/Makefile.in:
+	* gui/ui/oprof_start.base.ui:
+	* gui/oprof_start.h: autoconfiscation for Qt2
+
+	* gui/oprof_start_config.cpp: add comments
+ 
+2001-09-16  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_filter.cpp: fix unrecognized input
+	* pp/opf_container.cpp: better error messages. put
+	  op_nr_counters in the global namespace (gcc 2.91
+	  work around)
+
+2001-09-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprofpp.cpp: small tidy
+ 
+2001-09-16  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_filter.cpp: minor tidy
+
+	* gui/oprof_start.base.ui: new oprof_start gui
+	* gui/oprof_start.cpp: new, derived class of oprof_start_base
+	* gui/oprof_start.h: ditto
+	* gui/oprof_start_impl.cpp: implementation of oprof_start class
+	* gui/oprof_start_config.cpp: utilities function for oprof_start
+	* gui/oprof_start_config.h: ditto
+	* gui/persistent_config.h: utility template
+	* gui/oprof_start_main.cpp: main() for oprof_start
+	* gui/Makefile.in: handle this stuff
+
+2001-09-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprofpp.c: some cleanup
+
+2001-09-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprofpp.c: allow non-matching mtimes in order
+	  to allow pp on different machines. Make conflicting
+	  counter specifications a fatal error
+
+2001-09-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* all Makefile.in: install should depend on all
+
+	* pp/oprofpp.c: fixes for Athlon 4 counters. Enable debug info
+	  for list-symbol. Some stricter checking
+
+2001-09-15  Philippe Elie  <ph_e@club-internet.fr>
+
+	* op_events.c: some static variable to global
+	* op_user.h: export these
+
+	* oprofile.c: typo in comment
+
+	* dae/opd_proc.c: fix size of samples files
+
+2001-09-13  Dave Jones  <davej@suse.de>
+
+	* doc/oprofile.1.in:
+	  Update so it doesn't say 'Intel only'
+	* dae/op_start:
+	  Fix output so that it prints [0-3] instead of [0-4[
+
+2001-09-12  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprofpp.c: fix cpu type output for opf_filter
+
+	* dae/op_stop: return error code properly
+
+2001-09-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprofpp.c: print name of cpu type
+ 
+	* dae/op_stop:
+	* dae/op_start: re-organise, tidy
+ 
+2001-09-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: fix small but triggerable
+	  SMP dump race
+ 
+2001-09-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.h:
+	* oprofile.c:
+	* op_x86.c: move some code about
+ 
+	* op_syscalls.c: add comment
+ 
+2001-09-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: remove warning
+ 
+	* op_user.h: 
+	* op_events.c: fix and clean up cpu type detection
+ 
+	* op_init.c: fix email
+ 
+	* oprofile.c: add IRQ stats. Not sure whether to keep...
+ 
+2001-09-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.h:
+	* oprofile.c: use cpu_number_map (pedantry thing)
+ 
+2001-09-07  Philippe Elie  <ph_e@club-internet.fr>
+
+	* oprofile.c: remove /proc/.../cpu_type. Check if user
+	  mode cpu type detection is identical to module cpu type
+	* op_events.h:
+	* op_events.c: add op_get_cpu_type(). script can get cpu_type
+	  by op_help --get-cpu-type
+	* gui/oprofile: use it	
+	* dae/oprofiled.c: ditto
+	* dae/op_start: ditto, pass expected_cpu_type to module
+	* doc/oprofile.sgml: update
+	* doc/oprofile.1.in: update
+	* pp/oprofpp.c: get cpu_type from samples file
+	* pp/opf_filter.cpp: get cpu type from stdin
+
+2001-09-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c: use j not i in msync !
+ 
+2001-09-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_start: more sanity checking of options
+ 
+2001-09-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: update a bit
+ 
+2001-09-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* <most files>: make op_nr_counters a var (no pp support for > 2 yet)
+	 
+	* dae/oprofiled.c: don't print help when counter event etc. are wrong
+ 
+2001-09-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.h:
+	* oprofile.c: use MODULE_LICENSE
+ 
+2001-09-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* op_user.h: add missing prototype
+
+	* dae/op_start: fix counter extraction
+ 
+2001-09-05  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprofpp.c: fix a few corner case, cleanup.
+	* dae/opd_proc: ditto.	
+
+	* dae/op_start: better handling of counter number
+
+	* dae/opd_proc: minor change.
+
+	* op_user.h: enable support for four counters
+	* oprofile.c: ditto. Split functions
+
+	* op_events.c: expose op_get_cpu_type_str(int) to world.
+
+2001-09-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.h:
+	* oprofile.c: don't restore delivery mode to LVTPC (causes
+	APIC error on SMP). Fix for silly sem hang with do_dump
+ 
+2001-09-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_start: fix typo bug
+ 
+2001-09-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: some small tidies
+ 
+2001-09-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: change lvtpc_apic_restore to be more careful !
+ 
+2001-09-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: don't allow unload on SMP unless allow_unload
+	  is set. Still needs docs (no point till SMP works).
+ 
+2001-09-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_dump: complain if not root more clearly.
+ 
+2001-09-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: remove bogus setting for NMI oopser.
+	  smp_apic_restore() -> lvtpc_apic_restore()
+
+2001-09-01  Philippe Elie  <ph_e@club-internet.fr>
+
+	* oprofile.c: fix pmc_setup()
+
+	* pp/Makefile.in:
+	* dae/Makefile.in: fix uninstall problem
+
+2001-08-31  Philippe Elie  <ph_e@club-internet.fr>
+
+	* oprofile.h:
+	* dae/oprofiled.h:
+	* op_user.h:
+	* oprofpp.h:
+	* dae/opd_util.h: share commmon declarations, put it in
+	  op_user.h, include op_user.h in other .h when necessary.
+	* op_events.c:
+	* all Makefile.in: update dependancies.
+ 
+2001-08-30  Philippe Elie  <ph_e@club-internet.fr>
+
+	* oprofile.c: use loop instead of fixed counter number
+ 
+2001-08-26  Philippe Elie  <ph_e@club-internet.fr>
+
+	* op_events.c: add option to op_help for the gui
+	* gui/oprofile: use op_help to build description
+	  of events, accept Athlon (only 2 counters)
+ 
+2001-08-25  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprofpp.c:
+	* dae/op_start: use loop instead of fixed number of counter.
+ 
+2001-08-24  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprof_convert.c: add v4 --> v5 conversion
+ 
+2001-08-23  Philippe Elie  <ph_e@club-internet.fr>
+
+	* oprofile.c: correct some comment.
+ 
+2001-08-22  Philippe Elie  <ph_e@club-internet.fr>
+
+	* op_user.h:
+	* dae/opd_proc.c:
+	* dae/opd_util.c:
+	* dae/opd_util.h:
+	* dae/oprofiled.h:
+	* dae/oprofiled.c:
+	* dae/oprofiled.c: row to column file format, lot of changes.
+ 
+2001-08-21  Philippe Elie  <ph_e@club-internet.fr>
+
+	* op_events.c: Add Athlon string/unit maks description
+ 
+2001-08-20  Philippe Elie  <ph_e@club-internet.fr>
+
+	* op_events.c: change in handling of search/check events
+	* dae/oprofiled.c:
+	* dae/oprofiled.h:
+	* oprofile.c:
+	* oprofile.h:
+	* pp/oprofpp.c:
+	* pp/oprofpp.h:	reflects caller/prototype, lot of changes.
+
+2001-08-31  John Levon  <moz@compsoc.man.ac.uk>
+  
+	* Makefile.in:
+	* op_x86.c:
+	* oprofile.h:
+	* oprofile.c: a prototype detector for SMP hardware,
+	  some small cleanup
+ 
+2001-08-20  Dave Jones  <davej@suse.de>
+
+	* doc/oprofile.sgml:
+	  Updated to reflect new Athlon/Duron capabilities.
+	* pp/oprof_convert.c:
+	* pp/oprofpp.c: use EXIT_FAILURE | EXIT_SUCCESS
+	  in exit() calls.
+	* oprofile.c: Make non-exported functions static
+	  and remove duplicate definitions.
+
+2001-08-19  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_start: handle celeries in cpu type
+
+2001-08-19  John Levon  <moz@compsoc.man.ac.uk>
+
+	* op_init.c:
+	* oprofile.h:
+	* oprofile.c: small tidies of the Athlon support
+
+2001-08-19  Dave Jones  <davej@suse.de>
+
+	* op_events.c:
+	* op_init.c: 
+	* oprofile.h:
+	* oprofile.c:
+	* dae/op_start:
+	* dae/oprofiled.h:
+	* dae/oprofiled.c: initial Athlon support
+
+2001-08-19  Philippe Elie  <ph_e@club-internet.fr>
+
+	* oprofile.c: use symbolic constant for all apic setup, no generated
+	  code change
+
+2001-08-18  Philippe Elie  <ph_e@club-internet.fr>
+ 
+	* Makefile.in:
+	* dae/Makefile.in:
+	* pp/Makefile.in:
+	* doc/Makefile.in:
+	* gui/Makefile.in: add uninstall target
+ 
+2001-08-18  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c: tiny cleanup
+ 
+2001-08-17  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/opd_proc.c:
+	* TODO: minor cleanup.
+
+2001-08-16  Philippe Elie  <ph_e@club-internet.fr>
+
+	* gui/oprofile:
+	* dae/op_start:
+	* doc/oprofile.1.in: document and use op_dump
+
+2001-08-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: bump version to 0.0.5cvs
+ 
+2001-08-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* all Makefile.in: mkdir install files
+
+2001-08-15  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/opd_proc.c: fix a FILE* leak in opd_get_ascii_maps()
+
+2001-08-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* op_syscalls.c: don't return negative hashes !
+	  revert dname len "fix"
+	  use a much better hash function
+
+	* dae/opd_proc.c: protect against negative hashes
+ 
+2001-08-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* op_syscalls.c: some small fixes
+
+	* oprofile.c: add back unmasking code during set_gate, but only
+	  LVTPC
+ 
+2001-08-11  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.h: 2.4.8 doesn't either. *sigh*. looks like we need
+	  some autoconfery :(
+ 
+2001-08-11  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.h: 2.4.7-linus doesn't include the Andrew Morton
+	  complete_and_exit(). Hopefully this will make it into 2.4.8,
+	  I'm banking on this.
+
+2001-08-11  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_dump:
+	* doc/oprofile.sgml:
+	* dae/Makefile.in: a little utility for dumping
+
+2001-08-11  Dave Jones  <davej@suse.de>
+
+	* oprofile.h:
+	* oprofile.c: back-compat code and use of new struct completion
+	  for the thread
+
+2001-08-11  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: corner case where an a miss against a full count,
+	  we were attributing wrong (reported by Bob Montgomery)
+
+2001-08-11  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: use a simple cli/sti when installing the NMI
+	  handler. It should work and avoids the unmasking problem.
+
+2001-08-10  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/oprofiled.h: fix header include (from Dave Jones)
+
+	* op_syscalls.c:
+	* oprofile.c: fix undefined symbol (from Dave Jones)
+
+2001-08-10  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: small tidy in apic setup
+ 
+2001-08-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: fix mod unload race, small fixes
+ 
+	* dae/op_start: make sysctl error actually appear
+ 
+	* doc/oprofile.sgml: document need for modutils 2.4.6
+
+	* op_syscalls.c: fix stupid mod use count problem
+ 
+2001-07-28  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c: d'oh, fat-fingered a slow memleak in the
+	  a-ksymoops modules fix
+ 
+2001-07-27  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprof_convert.c: fix bug when conversion skip more than one
+	  version.
+
+2001-07-27  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/Makefile.in: ln -s -> ln -sf
+
+	* dae/opd_util.c: actually include the right header
+ 
+	* dae/opd_util.h: compile freestanding from oprofiled.h
+
+2001-07-26  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: fix comment
+ 
+	* doc/oprofile.sgml: document symbolless modules not working
+
+	* dae/Makefile.in:
+	* dae/opd_proc.c:
+	* dae/oprofiled.h: catch modules with no symbols via query_module()
+	  and ignore samples for them quickly
+ 
+2001-07-25  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/op_start: beautify the output of op_start --help
+	* pp/op_to_source: ditto. better argument checking.
+
+	* pp/oprof_convert.c:
+	* pp/oprofpp.h:
+	* dae/oprofiled.h: fix problem with opd_footer, don't bump 
+	  opd_footer version number !
+
+2001-07-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/Makefile.in:
+	* pp/oprof_convert.c: convert to v4
+ 
+	* pp/oprofpp.c: use opd_strdup
+	 
+2001-07-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_util.c: small tidy
+ 
+2001-07-24  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/opd_util.c:
+	* dae/opd_util.h: add relative path name to absolute path name stuff
+	* pp/oprofpp.c: use it.
+	* pp/op_to_source: simplify code to reflect above change.
+
+2001-07-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c: fix uninitialised pointer access (reported by
+	<bobm@fc.hp.com>) that could segfault oprofile in case of
+	module load/unload activity
+
+	* Makefile.in:
+	* dae/opd_proc.c:
+	* dae/opd_util.c:
+	* dae/opd_util.h:
+	* dae/oprofiled.c:
+	* dae/oprofiled.h:
+	* pp/Makefile.in:
+	* pp/oprofpp.c:
+	* pp/oprofpp.h: use mtime() instead of md5sum(). Still doesn't handle
+	  "./a; gcc -o a a.c; ./a"
+ 
+2001-07-22  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.sgml:
+	* pp/opf_filter.h:
+	* pp/opf_filter.cpp:
+	* pp/opf_container.cpp: implement and document filtering for assembly
+	  output.
+
+2001-07-21  Philippe Elie  <ph_e@club-internet.fr>
+ 
+	* doc/oprofile.sgml:
+	* gui/oprofile:
+	* oprofile.c: remove edge_detect support.
+ 
+	* pp/oprofpp.c: check counter range for each event type.
+	* oprofile.c: ditto.
+	* gui/oprofile: ditto and save setup for each event type.
+	* oprofile.h: op_check_range() : display the allowed range.
+
+2001-07-18  Philippe Elie  <ph_e@club-internet.fr>
+ 
+	* dae/op_start: disable all counters before starting the setup.
+
+2001-07-18  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: add in bit I forgot about not profiling ring 0 
+ 
+2001-07-18  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: added a warning about very low counter values
+	  (from Philippe, modified)
+ 
+2001-07-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c:
+	* oprofile.h:
+	* dae/op_start:
+	* dae/oprofiled.c:
+	* doc/oprofile.sgml: remove ability to set different values on
+	  different CPUs
+ 
+2001-07-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: remove done thing
+ 
+2001-07-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c: backup old sample files if the profiling
+	  details (count, unit mask etc.) disagree. Fixes #435245
+ 
+2001-07-15  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/oprofiled.c: fix oprofiled --version to work even if the
+	  profiler is not already started.
+
+	* gui/oprofile: many cleanup. Fix bug track #435248. Make the gui more
+	  independant on the number of counter.
+
+	* pp/op_to_source: fix bug in command line arguments handling.
+	
+	* pp/opf_filter.h:
+	* pp/opf_filter.cpp:
+	* pp/opf_container.cpp: Apply some cleanup suggested by John, principally
+	  change few inheritance to composition.
+
+	* pp/oprof_convert.c: fix --version.
+
+2001-07-14  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.sgml:
+	* doc/oprofile.1.in: minor doc fix.
+
+2001-07-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: small tidies
+ 
+2001-07-01  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.sgml: document op_to_source, oprof_convert and the
+	  oprofile gui
+
+	* gui/oprofile: onStartProfiling() check that count is in the allowed
+	  range. onStopProfiling() flush the samples
+ 
+2001-07-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* Makefile.in: dist fix
+
+2001-07-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: make it clear we want vmlinux not vmlinuz
+
+	* doc/html/: remove generated files from CVS
+
+	* Makefile.in: changes to create HTML files on dist 
+ 
+2001-06-30  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/Makefile.in: fix the fix
+
+	* pp/opf_filter.h: very minor changes
+ 
+2001-06-29  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/Makefile.in: fix up for opf_filter
+
+	* configure.in: add AC_PROG_CXX
+
+2001-06-29  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_filter.cpp:
+	* pp/opf_container.cpp:
+	* pp/opf_filter.h:
+	* pp/op_to_source: new file which provide a source annotation utility.
+	* pp/Makefile.in: build and install opf_filter / op_to_source
+
+2001-06-29  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in:
+	* dae/opd_util.h: hide __attribute__((malloc)) warnings
+	  when necessary. Document --with-cc bug.
+ 
+2001-06-29  Philippe Elie  <ph_e@club-internet.fr>
+
+	* gui/oprofile: more saving of the user setup.
+
+2001-06-27  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_util.c: document get_line() restriction
+ 
+2001-06-27  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/oprofiled.c: fix cpu_speed_str/cpu_speed variable setup logic.
+
+	* gui/oprofile: save advanced setup form to persistent storage.
+	  Add many validation.
+
+2001-06-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* op_events.c:
+	* pp/oprof_convert.c: add missing headers, remove CVS blip
+ 
+	* dae/opd_util.h: specify malloc attribute. gives warnings on
+	  older compilers, who cares. I doubt this will help but it can't
+	  harm
+ 
+2001-06-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprof_convert.c: continue if an error with one file occurs
+ 
+	* dae/op_stop: remove rmmod again - it is user's choice on when/whether
+	  to unload
+ 
+2001-06-23  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/op_start: add missing support for specifying the log filename.
+	  Get correct cpu speed information for smp as suggested by John.
+
+	* dae/oprofiled.c: Correct a warning with some older version of the
+	  popt library.
+	* pp/oprofpp: as above.
+
+	* gui/oprofile: advanced setup form added.
+
+	* pp/oprof_convert.c: version and help option support.
+
+2001-06-23  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/.cvsignore: add oprof_convert
+ 
+2001-06-23  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprof_convert.c: new utility to convert samples files when the opd_footer
+	  struct is changed.
+	* pp/Makefile.in: reflect the above change. Tidy some unnecessary blank.
+	* Makefile.in: Tidy some unnecessary blank/tabulation.
+
+2001-06-23  John Levon  <moz@compsoc.man.ac.uk>
+
+	* README: update
+ 
+2001-06-22  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: always have smp_apic_restore()
+ 
+2001-06-22  John Levon  <moz@compsoc.man.ac.uk>
+
+	* various: made spacing more consistent in C source,
+	  removed unused utility functions.
+ 
+2001-06-22  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: actually call smp_apic_restore() on UP
+
+	* dae/op_start: don't remove the module immediately after
+	  inserting it !
+ 
+2001-06-22  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/oprofiled.h, pp/oprofpp.h: change the opd_footer struct.
+	  Bump OPD_VERSION to reflect the file format change.
+	* pp/oprofpp.c: reflect the above change
+	* dae/oprofiled.c: reflect the above change, many options supressed
+	  because setup is read from the /proc/sys/dev/oprofile files.
+	* dae/opd_proc: suppress some "extern variable" which no longer exist.
+	* dae/op_start: reflect the above change
+
+2001-06-22  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/op_start: add --ctr[0|1]-edge-detect
+	* gui/oprofile: add edge detect stuff
+	* oprofile.c: add edge-detect stuff, the edge-detect is an
+	  experimental feature which do not work actually (no effect for now).
+	  Because this is experimental no documentation are provided on this
+	  option.
+
+2001-06-22  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in:
+	* dae/op_stop:
+	* doc/oprofile.sgml:
+	* op_init.c:
+	* op_syscalls.c:
+	* oprofile.h:
+	* oprofile.c: add and document the ability 
+	  to make the module unloadable. Not well tested
+	  (but seems to work).
+ 
+	* doc/oprofile.sgml: document compile-time options
+	  better, thank Philippe
+ 
+2001-06-21  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: remove stale comments. fix theoretical
+	  memory leaks when setting up the sysctls fails, small tidy
+ 
+2001-06-19  John Levon  <moz@compsoc.man.ac.uk>
+
+	* README: 
+	* doc/oprofile.sgml:
+	* doc/html/: s/sourceforge/sf/
+ 
+2001-06-16  Philippe Elie  <ph_e@club-internet.fr>
+
+	* op_events.c: op_check_events() fix two bad use of 
+	  op_check_unit_mask(). op_get_um_desc() fix a typo.
+
+2001-06-14  Philippe Elie  <ph_e@club-internet.fr>
+
+	* op_events.c: struct op_unit_mask, struct op_unit_desc allow up to
+	  seven unit masks. Reflect this change in data, op_check_unit_mask()
+	  and callers of op_check_unit_mask().
+
+2001-06-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* results/intro: tidy up
+
+	* results/kernel-compile/time-aves.pl: fix regexps
+ 
+	* results/latex/: results from the LaTeX runs
+ 
+2001-06-09  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/op_start: avoid chmod to a non existing directory and setup access
+	  mode from 700 to 755. Replace use of the sysctl utility by a
+	  do_sysctl() function.
+
+	* gui/oprofile: some cleanup and bugfix.
+
+	* pp/oprofpp.c: add new output options --list-all-symbols-details,
+	  --output-linenr-info
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.sgml: update documentation about the new oprofpp
+	  option
+
+2001-06-09  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: fix build with CONFIG_MODVERSIONS
+	  enabled.
+ 
+2001-06-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/oprofiled.c: move logfile message to
+	  before close(1) to not need to use stderr
+ 
+2001-06-03  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/: new directory
+
+	* Makefile.in:
+	* configure.in:
+	* gui/.cvsignore:
+	* gui/Makefile.in:
+	* gui/oprofile: Philippe's prototype tcl/tk startup
+	  script. Requires more work.
+ 
+2001-06-03  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprofpp.h: remove libiberty header that was
+	  apparently breaking install on slackware
+ 
+2001-06-03  John Levon  <moz@compsoc.man.ac.uk>
+
+	* README: update
+ 
+2001-06-03  Philippe Elie  <ph_e@club-internet.fr>
+
+	* op_events.c: allow unit mask option to be bit mask
+
+2001-06-01  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c: actually use opd_get_count -
+	  fix bug with counter 1 reported results
+
+	* dae/op_start: fix broken shell scripting
+
+	* dae/oprofpp.c: fix list-symbols output
+
+2001-04-30  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_start: better error reporting
+
+	* dae/opd_proc.c: fix indentation
+ 
+2001-04-08  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: 0.0.3 has been released. Bump cvs version
+	  to 0.0.4
+
+2001-04-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c: remove forced dumping. It was
+	causing overhead spikes
+
+	* doc/html/results.html:
+	* doc/oprofile.sgml:
+	* dae/op_start: Hopefully document dump clearly enough
+
+2001-04-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.h:
+	* op_syscalls.c: 2.4.3 and above have a rw mmap_sem
+
+2001-04-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/html/: added missing files
+
+2001-04-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml:
+	* doc/html/resources.html: add URLs
+
+2001-04-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprofpp.c: fix gprof output bug. It works OK now,
+	  but MULTIPLIER == 1 will break for some reason
+
+2001-04-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml:
+	* doc/html/: finish SGML documentation (for now)
+
+2001-04-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/Makefile.in:
+	* doc/oprofile.sgml:
+	* doc/oprofile: start SGML documentation
+
+2001-04-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in:
+	* Makefile.in:
+	* doc/Makefile.in:
+	* doc/oprofile.1.in: add a manpage
+ 
+2001-04-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprofpp.c: get some sort of half-working output
+	in gprof format. Currently the numbers are screwed up,
+	need a major trawl through gprof source to see what's
+	going on. 
+
+2001-04-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/Makefile.in:
+	* dae/md5.c:
+	* dae/md5.h:
+	* dae/opd_proc.c:
+	* dae/oprofiled.h:
+	* pp/Makefile.in:
+	* pp/oprofpp.c:
+	* pp/oprofpp.h: use md5sums to verify sample file
+	  integrity. Stored in each sample file footer are
+	  md5sums of the binary. These are checked by the daemon
+	  when re-using an old file, and by the post-processor.
+	  Bump OPD_VERSION to reflect the file format change.
+
+	* dae/oprofiled.c: make start up more friendly 
+	
+	* dae/op_start: make script more friendly
+
+2001-03-10  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c: fixed some error messages
+
+	* results/kernel-compile/raw/ccu.gnuplot: add
+ 
+2001-02-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* results/intro: update
+
+	* results/kernel-compile/: update, add FIG files
+
+	* results/lmbench: lmbench results
+
+	* results/output/kernel-ac12-output: add readprofile output
+
+2001-02-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* op_syscalls.c: small re-org, some micro-optimisations
+	  to do_hash()
+
+	* pp/oprofpp.c: clean up --list-symbol output a little
+
+	* results/kernel-compile/overhead: update with results
+
+	* results/kernel-compile/time-aves.pl: add gnuplot output
+
+	* results/kernel-compile/raw/ : raw output files
+
+	* results/output/ : new dir for example output
+
+	* results/output/libc-2.1.92.so: output from libc profile
+
+	* results/output/kernel-ac12-output: output from kernel profile
+
+	* results/output/do_anonymous_page: detailed symbol profile
+
+	* results/output/oprofile.module: output for oprofile module
+
+2001-02-03  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* oprofile.h:
+	* op_syscalls.c: make do_hash() non-recursive
+
+	* oprofile.c: make thread wake up half as often
+
+	* dae/opd_proc.c: quiesce dump sysctl
+	  make resilient against broken sample (don't exceed mmap)
+
+	* pp/oprofpp.c: --gcc-demangle -> --demangle, just too
+	  annoying to live
+ 
+2001-02-01  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.h: add op_save_syscalls()
+
+	* oprofile.c: let interrupt_sleep_on() die
+	  add kernel_only option
+	  sysctl dumps everything it can now
+ 
+	* op_syscalls.c: add op_save_syscalls() 
+
+	* dae/opd_proc.c:
+	* dae/oprofiled.c:
+	* dae/op_start: add --kernel-only
+ 
+	* doc/guide.lyx: mention --kernel-only
+ 
+	* TODO: update
+ 
+2001-02-01  John Levon  <moz@compsoc.man.ac.uk>
+
+	* Makefile.in: split out op_init.c
+
+	* autogen.sh: new file
+
+	* configure.in: fix --with-cc. Split out op_init.c
+	
+	* op_init.c: new file, to allow rest -march=i686
+
+	* oprofile.c: cut out init stuff to op_init.c 
+
+	* opd_proc.c: more verbose
+
+	* results/kernel-compile/time-aves.pl: work with other
+	  time format too 
+	 
+2001-01-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: add --with-cc option
+
+	* pp/oprofpp.c: fix const discard warnings
+
+2001-01-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: must check for liberty *after*
+	  libdl
+
+2001-01-24  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: we're not using op_check_ctr()
+		return value, so don't have one
+
+2001-01-23  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in:
+	* op_syscalls.c:
+	* oprofile.c:
+	* oprofile.h: stripped the NMI error handling stuff
+
+	* op_events.c: fixed silly bug in the other place too :P
+	
+	* dae/oprofiled.c: improved error messages
+
+2001-01-22  John Levon  <moz@compsoc.man.ac.uk>
+
+	* op_events.c: fix silly bug so you can set both
+		counters at once
+
+	* oprofile.c: don't disable/enable counters in
+		the interrupt handler. It's expensive and
+		doesn't really buy anything.
+		Fix a silly EBUSY bug when open fails once.
+
+	* dae/op_start: don't remove old sample files
+		pass correct event to daemon for ctr1
+
+2001-01-22  John Levon  <moz@compsoc.man.ac.uk>
+
+	* op_syscalls.c:do_hash(): use strcpy not strncpy. 
+		It's probably faster, and if d_name.len is corrupted
+		the kernel has bigger things to worry about.
+
+2001-01-22  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/guide.lyx:
+	* dae/guide.html: update docs a little
+
+2001-01-22  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_start:
+	* op_user.h: bump up hash table size
+
+	* results/kernel-compile/overhead: intro to kernel
+		compile tests
+
+	* results/kernel-compile/time-aves.pl: script
+		to generate averages + overheads
+
+	* op_syscalls.c: three fixes to do_hash(). It's
+		going to be a pain to make iterative :(
+
+2001-01-21  John Levon  <moz@compsoc.man.ac.uk>
+
+	* results/: Started a collection of results
+
+2001-01-20  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* configure.in: add comment
+
+	* Makefile.in: moved oprofile_k.c to op_syscalls.c, op_user.h added
+
+	* op_syscalls.c: rename of oprofile_k.c
+		map buffer is dead now
+		use vmalloc() and friends for hash map
+		Reworking of hash_map stuff into abb's linked
+		hash map structure
+
+	* op_user.h: new file representing shared structs etc.
+		between daemon and kernel module
+		Reworked OP_ flags in count.
+		Reworked hash map structure
+
+	* oprofile.c: get along with the new UP APIC stuff in 2.4.0ac9
+		remove extraneous lock_kernel()
+		default buffer size added
+		map buffer died
+		Use up_and_exit() in kernel thread to fix zombies :P
+		Set diethreaddie = 0 in start_thread()
+		oprof_put_mapping() added
+		we weren't turning OFF kernel/user counting when asked to
+
+	* oprofile.h: move shared stuff to op_user.h
+		increase the watermark to a much safer 768
+
+	* dae/Makefile.in: dependencies on op_user.h and version.h 
+
+	* dae/op_start: hide confusing output of op_stop
+		--verbose option
+		map buffer died
+
+	* dae/opd_proc.c: --verbose option
+		don't insist on new sample files
+		Rework mapping code
+		Be a little more forgiving with unstattable images 
+
+	* dae/opd_util.h:
+	* dae/opd_util.c: add fatal flag to opd_get_fsize().
+
+	* dae/oprofiled.h: --verbose option
+		move common code to op_user.h
+
+	* dae/oprofiled.c: add --verbose option (very verbose !)
+		map buffer died
+		Add code for unpacking mapping notifications, rework
+		mapping recognition
+
+	* doc/guide.html:
+	* doc/guide.lyx: some small updates
+
+	* pp/oprofpp.c: fix segfault on failure to open binary.
+		add --verbose option
+
+	* pp/oprofpp.h: add --verbose option
+
+2000-01-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: use standard kernel names for MSRs.
+		Don't re-do fixmap if UP oopser patch is installed.
+		Allow UP oopser to work if patches enabled, disable
+		otherwise
+
+	* oprofile.h: use standard kernel names for MSRs.
+
+	* oprofile_k.c: only include fixmap code if necessary
+
+	* configure.in: bump minor version
+
+2000-12-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: default to /lib/modules/`uname -r`/build
+		as kernel source directory
+
+	* doc/guide.lyx:
+	* doc/guide.html: update documentation
+
+2000-12-13  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: bump minor version
+
+	* oprofile.c: added KERN_<whatever> where needed,
+		exclude the Pentium IV	
+
+	* pp/oprofpp.c: allow "oprofpp -l /bin/mv" and friends,
+		some minor fixes
+
+2000-12-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* Makefile.in:
+	* configure.in: approximate working modversions
+		a little more
+
+	* op_events.c: op_help INST_RETIRED will print out
+		the value now
+
+	* op_ioctl.h:
+	* oprofile.c:
+	* oprofile.h:
+	* oprofile_k.c:
+	* dae/Makefile.in:
+	* dae/op_start:
+	* dae/op_stop:
+	* dae/opd_proc.c:
+	* dae/oprofctl.c:
+	* dae/oprofctl.h:
+	* dae/oprofiled.h: ioctl() didn't last long. Replaced with
+		sysctls. This has had a knock-on effect of moving the
+		start/stop mechanism into the driver open/close routines
+	 
+	* dae/oprofiled.c: must open devices in "reverse" order now
+	 
+	* oprofile_k.c: fix X86_FEATURE_PGE testing
+	 
+	* oprofile.c: use daemonize()
+	
+	* pp/oprofpp.c: fix working on constant argv
+
+2000-11-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.c: what if signal happens later ?
+	* dae/opd_util.c: clarify opd_read_device() API
+
+2000-11-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* ChangeLog: started ChangeLog (cue gc koan)
+	* op_ioctl.h: added FIXME comment
+	* oprofile.c: slight cleanup 
+	* oprofile.h: cleanups, use u16 for data->ctrs,
+		data->next
+	
+	* pp/oprofpp.c: added comments
+	* pp/oprofpp.h: fixed #defines
diff --git a/oprofile-0.9.7/ChangeLog-2002 b/oprofile-0.9.7/ChangeLog-2002
new file mode 100644
index 0000000..edb20ea
--- /dev/null
+++ b/oprofile-0.9.7/ChangeLog-2002
@@ -0,0 +1,4416 @@
+2002-12-21  John Levon  <levon@movementarian.org>
+
+	* Makefile.am: list module files explicitly, needed
+	  for make dist from separate objdir
+
+	* configure.in: make both x86/ and ia64/ changelogs
+
+2002-12-21  John Levon  <levon@movementarian.org>
+
+	* module/Makefile.am:
+	* configure.in: remove the ln -s arch in favour of
+	  using -I and AC_SUBST
+
+	* module/ia64/arch.h:
+	* module/x86/arch.h: rename to op_arch.h
+
+	* utils/Makefile.am: fix make uninstall
+
+2002-12-21  John Levon  <levon@movementarian.org>
+
+	* utils/Makefile.am: fix back-compat scripts install
+	  for 2.5 kernel
+
+2002-12-19  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol: Revise kernel range computation.
+	
+2002-12-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/op_time.cpp: minor formating fix
+	* pp/oprofpp.cpp: fix #656123 corner case with --separate-sample
+
+2002-12-17  John Levon  <levon@movementarian.org>
+
+	* configure.in: remove oprof_report - breaks make dist
+
+2002-12-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/*.c *.h:
+	* libutil/op_fileio.c:
+	* dae/opd_proc.c: doxygen comment fix
+
+2002-12-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/ia64/op_syscalls.c:
+	* module/x86/hammer_op_syscalls.c:
+	* module/x86/op_syscalls.c: u16 pid to u32, tested/compiled only with
+	  32 bits x86
+
+2002-12-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/string_manip.cpp: minor fix
+	* pp/derive_files.cpp: comment
+
+2002-12-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/format_output.cpp:
+	* pp/format_output.h:
+	* pp/outsymbflag.h:
+	* pp/opp_symbol.h: add an app_name field in file_location and
+	  formater options for this field.
+
+	* pp/profile_container.cpp:
+	* pp/profile_container.h: add_samples() add app_name parameter
+
+	* pp/oprofpp.cpp:
+	* pp/op_to_source.cpp:
+	* pp/op_time.cpp:
+	* pp/op_time_options.cpp:
+	* pp/op_time_options.h: honor app_name parameter. No user visible
+	  change except for op_time -l when profiling with --separate-samples
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: update doc
+
+2002-12-13  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: lots of fixes. Remove sysctl documentation
+	  as its really an internal feature and was cluttering up
+	  the user manual.
+ 
+2002-12-13  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: some clarifications on timer interrupt 
+ 
+2002-12-12  John Levon  <levon@movementarian.org>
+
+	* opcontrol: set one_enabled if timer interrupt. No
+	  behaviour change, but "safer"
+ 
+2002-12-11  John Levon  <levon@movementarian.org>
+
+	* pp/derive_files.h:
+	* pp/op_time.cpp:
+	* pp/op_time_options.cpp:
+	* pp/op_to_source.cpp:
+	* pp/opp_symbol.h:
+	* pp/profile.h:
+	* pp/profile_container.h:
+	* utils/Makefile.am: small pedantries
+ 
+2002-12-10  Will Cohen  <wcohen@redhat.com>
+
+	* utils/op_dump_25: 
+	* utils/opcontrol (do_dump): Correct TMPFILE.
+
+2002-12-10  Will Cohen  <wcohen@redhat.com>
+
+	* daemon/opd_image.c (complete_dump): New.
+	* libop/op_config.h (OP_DUMP_STATUS): New.
+	* utils/op_dump_25: New file.
+	* utils/Makefile.am: Add op_dump_25.
+	* utils/opcontrol (do_dump): Revise how dump performed.
+
+2002-12-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/profile.cpp : oprofpp reported incorrectly counter setting when
+	  using multiple counter. Fix #651183
+
+2002-12-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/op_time.cpp: honor --excude-symbols. Fix #651165
+
+2002-12-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: stupid segfault when filtering included symbols
+
+2002-12-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: replace a 0(N²) by a 0(N) behavior
+
+	* pp/output_format.cpp: actualize comment
+
+2002-12-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/profile.cpp: use scoped_ptr<counter_profile_t>
+
+	* libopt++/popt_options.h:
+	* pp/counter_profile.cpp: minor cleanup
+
+2002-12-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/counter_profile.cpp:
+	* pp/counter_profile.h: use scoped_ptr
+
+2002-12-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/counter_profile.h:
+	* pp/counter_profile.cpp: relax samples_db_t sooner
+
+2002-12-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opp_samples_files.cpp:
+	* pp/opp_samples_files.h:
+	* pp/samples_container.cpp:
+	* pp/samples_container.h:
+	* pp/samples_file.cpp:
+	* pp/samples_file.h: rename class samples_file_t to counter_profile_t
+	  rename class opp_samples_files to profile_t
+	  rename class samples_container_t to profile_container_t
+	  rename file using the new class name as filename w/o _t suffix
+
+	* pp/format_output.cpp:
+	* pp/format_output.h:
+	* pp/op_merge.cpp:
+	* pp/op_time.cpp:
+	* pp/op_to_source.cpp:
+	* pp/oprofpp.cpp:
+	* pp/symbol_container_imp.cpp:
+	* pp/symbol_container_imp.h:
+	* pp/Makefile.am: reflect above class/file name change
+
+2002-12-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db_manage.c:
+	* libdb/db_hash.h: db_init() new to properly initialize a samples_db_t
+
+	* dae/opd_image.c:
+	* daemon/opd_imge.c: earlier init a samples_db_t object using
+	  db_init() rather a memset. This fix a potential bogosity cause we
+	  closed a lot of time file descriptor 0
+
+2002-12-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_image.c:
+	* dae/opd_image.h:
+	* dae/opd_kernel.c: use hash table entry 0 for kernel and module image
+
+2002-12-04  John Levon  <levon@movementarian.org>
+
+	* pp/opp_symbol.h:
+	* pp/opp_symbol.cpp:
+	* pp/format_output.h:
+	* pp/format_output.cpp:
+	* others from above: create format_output namespace, some
+	  clean up
+ 
+2002-12-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_image.c: revert last change, it break daemon...
+	
+2002-12-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_image.c: re-enable opd_check_image_mtime() it's not
+	  perfect but better than nothing
+
+	* libutil++/cverb.cpp: comment fix
+
+2002-12-04  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol: Revised checking to determine kernel
+	  interface.
+
+
+2002-12-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db_test.c: measure system + user time
+
+	* dae/oprofiled.c: better error message
+	* daemon/oprofiled.c: write_abi() is static
+
+2002-12-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db_stat.c:
+	* libdb/db_debug.c: Alex whisp me than a few code was not 64 bits
+	  size_t safe.
+
+2002-12-03  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml:
+	* doc/oprofile.1.in:
+	* doc/Makefile.am: remove references to deprecated stuff
+ 
+2002-12-03  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: add --version
+ 
+2002-12-03  John Levon  <levon@movementarian.org>
+
+	* utils/op_start:
+	* utils/op_start_25:
+	* utils/op_stop_25:
+	* utils/op_stop: print deprecation notice
+ 
+2002-12-03  John Levon  <levon@movementarian.org>
+
+	* utils/op_session.c:
+	* utils/op_dump: print deprecation notice
+ 
+2002-12-03  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: do not shutdown on --reset. Send
+	  signal on --reset/--save like op_session. Try to dump
+	  like op_session to hack race "fix"
+ 
+2002-12-03  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: complain on opcontrol --save 
+ 
+2002-12-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_kernel.c:
+	* daemon/opd_kernel.h: minor cleanup
+
+	* libabi/abi.cpp:
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp: fix bad include filename.
+
+2002-12-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/.cvsignore:
+	* libdb/Makefile.am:
+	* libdb/*.c --> db-hash-name.c to db_name.c
+
+	* dae/opd_image.h:
+	* daemon/opd_image.h:
+	* pp/samples_file.h: include db_hash.h
+
+2002-12-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start_config.cpp: allow default value change w/o
+	  breaking actual user.
+
+2002-12-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* dae/opd_image.h:
+	* dae/opd_kernel.c:
+	* dae/opd_kernel.h:
+	* dae/opd_parse_proc.c:
+	* dae/opd_proc.c:
+	* dae/opd_proc.h:
+	* dae/opd_sample_files.c:
+	* dae/oprofiled.c:
+	* daemon/opd_image.h:
+	* pp/op_merge.cpp:
+	* pp/samples_file.h:
+	* pp/samples_file.cpp:
+	* pp/Makefile.am:
+	* libabi/Makefile.am:
+	* libabi/abi.cpp:
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp: use hash table implementation of libdb
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h:
+	* gui/ui/oprof_start.base.ui:
+	* utils/op_start:
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: remove module hash table size
+
+	* libdb/.cvsignore: update
+	* libdb/Makefile.am: build libdb-hash.a
+	* libdb/db-hash.h:
+	* libdb/db-hash-debug.c:
+	* libdb/db-hash-manage.c:
+	* libdb/db-hash-test.c:
+	* libdb/db-hash-insert.c:
+	* libdb/db-hash-stat.c:
+	* libdb/db-hash-travel.c: new files implementing a growable hash table
+	* libdb/Makefile.am: update
+
+	* libop/op_config_24.h: remove module hash table. Increase
+	  OP_PRE_WATERMARK, OP_DEFAULT_BUF_SIZE.
+	* libop/op_interface.h: struct op_sample update.
+
+	* module/oprofile.h:
+	* module/oprofile.c: remove hash table
+
+2002-12-02  John Levon  <levon@movementarian.org>
+
+	* configure.in: remove annoying AC_REVISION()
+ 
+2002-12-02  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: couple of minor cleanups
+ 
+2002-12-02  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: fix --deinit, complain on missing
+	  argument
+ 
+2002-12-02  Will Cohen  <wcohen@redhat.com>
+
+	* doc/Makefile.am: Generate opcontrol.
+	* doc/oprofile.1.in: Add opcontrol information.
+	* doc/oprofile.xml: Add opcontrol information.
+
+2002-12-01  Will Cohen  <wcohen@redhat.com>
+
+	* utils/Makefile.am: Add opcontrol.
+	* utils/opcontrol: New.
+
+2002-12-01  John Levon  <levon@movementarian.org>
+
+	* various files: don't use db_tree name outside of libdb,
+	  it's implementation detail for most case
+ 
+2002-11-29  Graydon Hoare  <graydon@redhat.com>
+
+	* module/x86/op_model_p4.c: fix dropped overflows.
+
+2002-11-26  Graydon Hoare  <graydon@redhat.com>
+
+	* module/x86/op_model_p4.c: fix CCCR-clearing logic.
+	* module/x86/cpu_type.c: re-enable Pentium IV.
+
+2002-11-25  John Levon  <levon@movementarian.org>
+
+	* module/x86/cpu_type.c: disable Pentium IV till it works
+ 
+2002-11-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.xml: start a FAQ. Clarify debug information vs
+	  symbol information. Explain why we don't use dynamic symbol
+
+2002-11-20  John Levon  <levon@movementarian.org>
+
+	* daemon/oprofiled.c:
+	* utils/op_start_25: kernel_only is a no-op on 2.5, no point
+	  in it existing
+ 
+2002-11-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/oprofiled.c: /dev/oprofile/kernel_only doesn't exists
+	  in timer int mode (second pass to fix #637804 ...)
+
+2002-11-17  Graydon Hoare  <graydon@redhat.com>
+
+	* module/x86/op_apic.h:
+	* module/x86/op_apic.c: revert, use copy of kernel code.
+
+2002-11-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_kernel.c:
+	* dae/opd_mapping.c:
+	* dae/opd_proc.c:
+	* daemon/opd_image.c:
+	* daemon/opd_kernel.c:
+	* libop++/op_mangling.h:
+	* libutil++/cverb.h:
+	* pp/opp_samples_files.cpp:
+	* pp/samples_file.cpp: doxygen fix
+	* doc/srcdoc/Doxyfile: bump to 0.5 cvs
+
+2002-11-14  Will Cohen  <wcohen@redhat.com>
+
+	* gui/Makefile.am: Use $(bindir).
+	* oprof_report/Makefile.am: Use $(bindir).
+
+2002-11-15  Dave Jones <davej@suse.de>
+
+	* module/x86/cputype.c: Make the AMD case a bit simpler.
+
+2002-11-14  John Levon  <levon@movementarian.org>
+
+	* dae/Makefile.am:
+	* daemon/Makefile.am: proper fix for c++ link
+	  as suggested by Alexandre Duret-Lutz
+ 
+2002-11-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* Makefile.am: we installed module in the wrong directory.
+
+2002-11-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil/op_file.c: op_simplify_path_name(): strip leading '/'
+	* daemon/oprofiled.c:
+	* dae/oprofiled.c: fix incorrect specification of vmlinux file
+	  through --vmlinux=/foo//bar fixing #637805
+
+2002-11-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/op_start_25: /dev/oprofile/kernel_only doesn't exists
+	  in timer int mode. fix #637804
+
+2002-11-14  John Levon  <levon@movementarian.org>
+
+	* dae/*:
+	* daemon/*:
+	* libutil++/op_bfd.h:
+	* pp/samples_container.cpp:
+	* pp/samples_container.h: doxygen anality
+ 
+2002-11-14  John Levon  <levon@movementarian.org>
+
+	* libopt++/popt_options.h:
+	* libopt++/popt_options.cpp: place in popt
+	namespace to avoid clash with getopt.h
+
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp:
+	* pp/op_merge.cpp:
+	* pp/op_time_options.cpp:
+	* pp/op_to_source_options.cpp:
+	* pp/oprofpp_options.cpp:
+	* pp/session.cpp: fix for above
+ 
+	* libabi/abi.cpp:
+	* libabi/abi.h: g++ 3.2 fixes
+
+	* libabi/op_import.cpp: uninline extract
+
+	* dae/Makefile.am:
+	* daemon/Makefile.am: fix c++ link hack for -Werror
+ 
+2002-11-13  Graydon Hoare  <graydon@redhat.com>
+
+	( this changeset is mostly Dave Jones' work )
+
+	* README:
+	* TODO:
+	* configure.in:
+	* doc/oprofile.xml:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/op_help.c:
+	* module/compat.h:
+	* module/compat24.h:
+	* module/op_util.c:
+	* module/x86/Makefile.in:
+	* module/x86/apic_compat.h:
+	* module/x86/arch.h:
+	* module/x86/cpu_type.c:
+	* module/x86/op_fixmap.c:
+	* module/x86/op_nmi.c: minor additions for hammer support.
+
+	* module/x86/op_apic.c:
+	* module/x86/op_apic.h: major cleanup; add hammer support.
+	
+	* module/x86/hammer_entry.S:
+	* module/x86/hammer_ia32entry.S:
+	* module/x86/hammer_op_syscalls.c:
+	* module/x86/hammer_oprofile_nmi.S: new hammer support files.
+
+2002-11-14  John Levon  <levon@movementarian.org>
+
+	* configure.in: hack around case where clean checkout
+	  then ./configure --with-kernel-support
+ 
+2002-11-12  Graydon Hoare  <graydon@redhat.com>
+
+	* autogen.sh: support overriding autotool binary names.
+
+2002-11-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: honor --with-extra-libs
+
+2002-11-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: add -W -Wall and optionnaly -Werror to user space
+	  compilation
+
+2002-11-11  John Levon  <levon@movementarian.org>
+
+	* dae/Makefile.am:
+	* daemon/Makefile.am: don't dist dummy.cpp
+ 
+2002-11-11  John Levon  <levon@movementarian.org>
+
+	* dae/Makefile.am:
+	* daemon/Makefile.am: hack to fix --enable-abi
+ 
+2002-11-10  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* gui/Makefile.am:
+	* oprof_report/Makefile.am: only use X libs where
+	  they're actually wanted
+ 
+2002-11-10  John Levon  <levon@movementarian.org>
+
+	* configure.in: make included sstream work again
+ 
+2002-11-08  Will Cohen  <wcohen@redhat.com>
+
+	* doc/oprofile.xml: Update with IA64 information.
+
+2002-11-10  John Levon  <levon@movementarian.org>
+
+	* Makefile.am: remove oprof_report from SUBDIRS to
+	  avoid separate objdir problem
+ 
+2002-11-10  John Levon  <levon@movementarian.org>
+
+	* most Makefile.am: do the dist_sources trick
+	  properly
+ 
+2002-11-10  John Levon  <levon@movementarian.org>
+
+	* Makefile.am:
+	* configure.in:
+	* dae/Makefile.am:
+	* daemon/Makefile.am:
+	* utils/Makefile.am: s/WITH_KERNEL_SUPPORT/kernel_support
+
+	* configure.in:
+	* dae/Makefile.am:
+	* dae/oprofiled.c:
+	* daemon/Makefile.am:
+	* daemon/oprofiled.c:
+	* libabi/Makefile.am: approximate working --enable-abi more
+
+2002-11-10  John Levon  <levon@movementarian.org>
+
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c: abi tidy
+ 
+2002-11-10  John Levon  <levon@movementarian.org>
+
+	* autogen.sh: be verbose
+ 
+	* gui/Makefile.am:
+	* gui/ui/Makefile.am:
+	* oprof_report/Makefile.am:
+	* oprof_report/ui/Makefile.am: remove duplicate
+	  set MOC/UIC
+ 
+2002-11-10  John Levon  <levon@movementarian.org>
+
+	* Makefile.am: add comment
+
+	* configure.in: no need to subst OPROFILE_25
+ 
+2002-11-09  John Levon  <levon@movementarian.org>
+
+	* TODO: update
+ 
+	* configure.in:
+	* most Makefile.am: make separate objdir work,
+	  except for module (impossible I suppose)
+
+2002-11-09  John Levon  <levon@movementarian.org>
+
+	* autogen.sh: use --foreign
+ 
+2002-11-09  John Levon  <levon@movementarian.org>
+
+	* configure.in: fix --with-kernel-support
+ 
+	* doc/.cvsignore: add *.1
+
+	* libabi/Makefile.am: don't install abi_test
+ 
+2002-11-09  John Levon  <levon@movementarian.org>
+
+	* all cvsignore: add Makefile.in
+ 
+	* gui/Makefile.am: move EXTRA_DIST out of qt check
+
+	* gui/ui/Makefile.am:
+	* oprof_report/ui/Makefile.am: fix AM_CPPFLAGS typo
+ 
+2002-11-09  John Levon  <levon@movementarian.org>
+
+	* all build files: use automake, written by Phil
+ 
+2002-11-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/samples_file.cpp: check than samples files version
+	  match expected version fixing #635759
+
+2002-11-07  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* module/compat.h: 
+	* module/compat24.h:
+	* module/op_dname.c: 
+	* module/oprofile.c: 
+	* module/x86/op_fixmap.c: 
+	* module/x86/op_nmi.c: remove 2.5 support from old
+	  module code
+ 
+2002-11-06  Will Cohen  <wcohen@redhat.com>
+
+	* configure.in: Tests for ia64 architecture.
+	* dae/opd_mapping.c: Added includes.
+	* oprofile/dae/oprofiled.c (opd_do_samples): Typecast.
+	* libop/op_cpu_type.c (cpu_names, cpu_nr_counters): Add IA64 info.
+	* libop/op_cpu_type.h (op_cpu): Add IA64 enums.
+	* libop/op_events.c: Add defines for IA64 and IA64 events.
+	* libop++/op_print_event.cpp: Change include order to work on IA64.
+	* module/oprofile.c: Include "arch.h" file.
+	(evict_op_entry): Use IRQ_ENABLED macro.
+	(op_do_profile): Use INST_PTR and STATUS macros.
+	(oprof_init_data): Factor out computation.
+	* module/op_util.c (rvmalloc, rvfree): Typecasts.
+	* module/x86/arch.h: New.
+	* README: Update.
+	* utils/op_help.c (main): Add IA64 information.
+
+	* module/ia64/arch.h:
+	* module/ia64/cpu_type.c:
+	* module/ia64/IA64entry.h:
+	* module/ia64/IA64minstate.h:
+	* module/ia64/IA64syscallstub.h:
+	* module/ia64/Makefile.in:
+	* module/ia64/op_ia64_model.h: 
+	* module/ia64/op_pmu.c:
+	* module/ia64/oprofile_stubs.S:
+	* module/ia64/op_syscalls.c: New.
+
+2002-11-06  John Levon  <levon@movementarian.org>
+ 
+	* configure.in: 0.5cvs
+
+	* Makefile.in: mention doxyfile in release steps
+ 
+2002-11-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/op_to_source.cpp: op_to_source --source-with-assembly: avoid
+	  to be confused by source line which look like an asm line and
+	  stop incorrectly the output. This change go in 0.4 release
+
+2002-11-06  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.4 in prep for release
+
+2002-11-06  John Levon  <levon@movementarian.org>
+
+	* module/x86/cpu_type.c: detect if we actually are
+	  using HT (from Alex T)
+ 
+2002-11-05  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: manual fixes from Will Cohen
+ 
+2002-11-01  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.c: fix lookup_dcookie usage
+ 
+	* libabi/.cvsignore: add
+ 
+2002-11-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/x86/op_apic.c: restore correctly the lvtpc register
+
+2002-11-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_hw_config.h: define DCOOKIE_SHIFT
+	* daemon/opd_image.c: use it
+
+2002-11-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/Makefile.in: cleanup, build and use libpp.a
+
+2002-10-31  John Levon  <levon@movementarian.org>
+
+	* pp/counter_array.cpp: using namespace std
+ 
+2002-10-31  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/.cvsignore:
+	* dae/opd_image.c:
+	* dae/opd_kernel.c:
+	* dae/opd_sample_files.c:
+	* dae/opd_stats.c:
+	* dae/oprofiled.c:
+	* daemon/opd_image.c:
+	* daemon/opd_sample_files.c:
+	* libop/op_config_24.h: cleanup, including some little merging
+	  from daemon to dae
+
+	* daemon/opd_image.c: change dcookie hashing function
+	
+	* doc/oprofile.xml: typo
+
+2002-10-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/file_manip.cpp:
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: cleanup
+
+	* pp/counter_array.h:
+	* pp/counter_array.cpp: add a bool empty() member to counter_array_t
+	* pp/sample_container_imp.cpp: use it
+
+2002-10-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: minor cleanup. Use config.h rather than gcc -D option
+
+	* libutil/op_libiberty.h:
+	* libutil++/op_bfd.h:
+	* pp/opp_symbol.h: #include <config.h>
+
+	* libutil/Makefile.in:
+	* pp/Makefile.in: remove BFD_CXXFLAGS
+
+2002-10-24  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp:
+	* libutil++/op_bfd.h: allow to specify explicetly on which symbol we
+	  want to work.
+
+	* pp/op_to_source_options.h:
+	* pp/op_to_source_options.cpp:
+	* pp/op_to_source.cpp: handle --include-symbol, for asm output only
+	  output for symbols with samplels or selected symbols.
+
+	* pp/oprofp.cpp:
+	* pp/samplesc_ontainer.cpp: minor change to reflect op_bfd api change
+
+2002-10-24  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_image.c: revert 64 bit dcookie patch commited
+	  accidentally with 2002-10-18 abi patch.
+
+2002-10-21  Graydon Hoare  <graydon@redhat.com>
+
+	* doc/oprofile.xml: Describe op_import and --enable-abi.
+
+2002-10-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/Makefile.in:
+	* pp/session.cpp:
+	* pp/session.h:
+	* pp/op_time_options.cpp:
+	* pp/op_to_source.cpp:
+	* pp/oprofpp.cpp:
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: handle --session options
+
+2002-10-19  John Levon  <levon@movementarian.org>
+
+	* configure.in: AC_HELP_STRING is too new for my autoconf
+ 
+2002-10-18  Graydon Hoare  <graydon@redhat.com>
+
+	* libabi/*: Add support for abi descriptions, for portability.
+	* daemon/oprofiled.c:
+	* dae/oprofiled.c: Emit abi description on startup.
+	* configure.in: Add --enable-abi option.
+	* make.common.in:
+	* Makefile.in: Support building libabi/
+ 
+2002-10-19  John Levon  <levon@movementarian.org>
+ 
+	* utils/op_start_25: grep -o does not exist on any of
+	  my systems - fix
+ 
+2002-10-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: calculate symbol size after removing duplicate
+	  symbol. Fix #625678
+
+2002-10-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/op_to_source.cpp:
+	* pp/op_to_source_options.cpp:
+	* pp/op_to_source_options.h:
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml:  allow to pass multiple options to objdump
+
+	* pp/opp_symbol.h:
+	* pp/samples_container.cpp: store symbol size in symbol_entry object.
+
+2002-10-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/child_reader.cpp: In some pathological case getline()
+	  finished too early when child process write on stderr.
+
+2002-10-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutill++/child_reader.cpp: read_block() : cumulate stderr
+	  output rather to overwrite always the same buffer space ...
+
+2002-10-16  John Levon  <levon@movementarian.org>
+
+	* utils/op_start_25: check if mounted, from Will Cohen
+	Also mkdir the mountpoint 
+ 
+2002-10-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: get linux include path earlier
+
+2002-10-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/oprofiled.c:
+	* daemon/oprofiled: strerrno --> strerror
+
+2002-10-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_events.c: typo in L2_DBUS_BUSY_RD PPro event name
+
+2002-10-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* README: update contrib
+	* TODO: update
+
+	* gui/oprof_start.cpp: better error message, fixme removal
+
+	* libdb/db-insert.c: fix samples count overflow.
+
+	* libdb/db.h:
+	* libdb/db-manage.c:
+	* libdb/db-debug.c: don't use page zero, use this value as nil page
+	  number, avoid to touch mmaped memory when growing the samples file.
+	* libop/op_config.h: bump OPD_VERSION
+
+2002-10-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/samples_file.h:
+	* pp/samples_file.cpp: move class opp_samples_files ...
+	* pp/opp_samples_files.h:
+	* pp/opp_samples_files.cpp: to these new files
+
+	* pp/Makefile.in:
+	* pp/op_to_source.cpp:
+	* pp/oprofpp.cpp: reflect above change
+
+2002-10-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_sample_files.c: fixme remove
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c: minor error message improvement
+
+	* pp/op_time.cpp:
+	* pp/symbol_container.cpp: fixme remove
+	
+	* pp/samples_file.cpp:
+	* pp/sample_file.h: privatize more data members
+
+2002-10-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/utility.h: op_ratio() new
+	* pp/op_time.cpp:
+	* pp/op_to_source.cpp:
+	* pp/opp_symbol.cpp:
+	* pp/samples_container.cpp: use op_ratio()
+
+2002-10-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/file_manip.cpp:
+	* libutil++/filename_match.cpp:
+	* libutil++/string_manip.cpp:
+	* libutil++/string_manip.h: fix dirname(), basename(), remove rtrim()
+
+2002-10-07  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.h:
+	* daemon/opd_image.c:
+	* daemon/oprofiled.c:
+	* libop/op_interface_25.h: update to latest interface
+
+2002-10-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_image.c: allow to free(image->app_name)
+
+2002-10-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_image.c:
+	* dae/opd_image.c: spacing
+
+	* dae/opd_mapping.c:
+	* dae/opd_mapping.h: kill op_grow_maps() simplify adding map path
+	* dae/opd_parse_proc.c: use opd_add_mapping()
+
+2002-10-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* doc/oprofile.xml: more doc in interpreting results
+
+2002-10-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opp_symbols.cpp:
+	* pp/opp_symbols.h:
+	* pp/outsymbflag.h: implement 'q' 'Q' format flags. Fix #618165
+	* pp/op_time_options.cpp: reject these formats for op_time
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: document them
+
+2002-10-02  John Levon  <levon@movementarian.org>
+
+	* Makefile.in: use -P to strip dead dirs on dist
+ 
+	* dae/opd_parse_proc.c: spacing
+
+2002-10-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db-*.c/*.h: typedef tweaking for 64 bits arch (signaled
+	  by Dave Jones)
+
+	* remove libdb/ChangeLog, old entries are:
+
+	2002-04-20  Philippe Elie  <phil.el@wanadoo.fr>
+	* db-insert.c: check for count overflow
+
+	2002-04-20  Philippe Elie  <phil.el@wanadoo.fr>
+	* db-manage.c: properly handle already existing db file
+	* db.h: extern "C" wrapper
+
+	2002-04-19  Philippe Elie  <phil.el@wanadoo.fr>
+	* *.c;*.h: make plugin db in oprofile more easy.
+
+	2002-04-18  Philippe Elie  <phil.el@wanadoo.fr>
+	* *.c;*.h: prefix all public identifier with db_.
+	  Use typedef as much I can rather than plain unsigned int.
+
+	2002-04-17  Philippe Elie  <phil.el@wanadoo.fr>
+	* db-debug.c:
+	* db-insert.c:
+	* db-manage.c:
+	* dbtest.c:
+	* db-travel.c:
+	* db.h: add file locking and necessary stuff to allow
+	  plugging db in an imbedded file format like oprofile
+	  samples files.
+
+	2002-04-16  Philippe Elie  <phil.el@wanadoo.fr>
+	* db-manage.c: silly bug fix, db works now with
+	  malloc/realloc or mmap/mremap memory allocation
+	  selected at compile time.
+
+	2002-04-14  Philippe Elie  <phil.el@wanadoo.fr>
+	* first import standalone code to test btree samples files
+
+2002-10-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/x86/op_msr.h: Hyper threading #define
+	* module/x86/cpu_type.c: include op_msr.h
+
+2002-10-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* */*.cpp: using std::xxx; --> using namespace std;
+
+2002-10-01  Will Cohen  <wcohen@redhat.com>
+ 
+	* module/x86/cpu_type.c (p4_threads): New.
+	  (get_cpu_type): Use p4_threads().
+	* doc/oprofile.xml: Add comment about P4 HT support.
+
+2002-10-01  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.c: fix non --separate-samples. Still broke.
+ 
+2002-10-01  John Levon  <levon@movementarian.org>
+
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c: make this work on 2.5/normal both.
+	  Does not respect different mounted oprofilefs (yet)
+ 
+2002-10-01  John Levon  <levon@movementarian.org>
+
+	* daemon/.cvsignore: add
+ 
+	* libop/op_interface_25.h: 
+	* daemon/opd_image.h:
+	* daemon/opd_image.c:
+	* daemon/oprofiled.c: fixups for new encoded interface. Fix
+	  --separate-samples
+
+	* utils/op_start_25: startup fixes
+ 
+2002-09-26  Will Cohen  <wcohen@redhat.com>
+
+	* module/x86/op_model_p4.c: Correct TC_DELIVER_MODE cccr select.
+ 
+2002-09-23  Graydon Hoare  <graydon@redhat.com>
+
+	* dae/oprofiled.c:
+	* daemon/op_sample_files.c:
+	* daemon/oprofiled.c:
+	* pp/op_to_source.c:
+	* utils/op_help.c: u8 unit mask -> u16 unit-mask. I'm not sure this
+	  catches *all* the instances, but it does appear to be an improvement
+
+2002-09-30  William Cohen  <wcohen@redhat.com>
+
+	* libutil++/string_manip.cpp (sample_filename): Correct declaration.
+	* pp/samples_container.h: Correct add_samples() declaration. 
+
+2002-09-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/string_manip.cpp:
+	* libutil++/string_manip.h: sample_filename() new
+	
+	* pp/samples_container.cpp:
+	* pp/samples_container.h: add_samples() new
+	
+	* pp/op_merge.cpp:
+	* pp/op_time.cpp:
+	* pp/oprofpp.cpp:
+	* pp/samples_file.cpp: use them + minor cleanup
+
+2002-09-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libopt++/popt_options.cpp: fix #615760, in rare case
+	  oprofpp called with lot of invalid arguments segfault
+	  during the help printing. All post-profile tools are
+	  concerned by this fix.
+
+	* doc/oprofile.xml: small improvements
+
+	* libutil++/op_bfd.cpp: improve error message when bfd_openr() fails.
+	
+	* TODO: update
+
+2002-09-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_image.c:
+	* dae/opd_kernel.c:
+	* dae/opd_parse_proc.c:
+	* dae/opd_parse_parse.h:
+	* dae/opd_proc.c:
+	* dae/opd_sample_files.c:
+	* daemon/opd_image.c:
+	* daemon/opd_kernel.c:
+	* daemon/opd_sample_files.c:
+	* libop/op_cpu_type.c:
+	* libop/op_events.c:
+	* libop/op_events_desc.c:
+	* libopt++/popt_options.cpp:
+	* libutil/op_deviceio.c:
+	* libutil/op_file.c:
+	* libutil++/file_manip.cpp:
+	* libutil++/file_manip.h:
+	* libutil++/string_manip.h:
+	* pp/op_to_source.cpp: doxygen fix
+
+2002-09-27  John Levon  <levon@movementarian.org>
+
+	* configure.in: add --with-kernel-support for 2.5
+ 
+	* daemon/oprofiled.c: fix comment, give exit message on sig
+
+	* utils/Makefile.in:
+	* utils/op_stop_25: add 2.5 op_stop, no 2.5 op_dump
+
+	* utils/op_start_25: use enable
+ 
+2002-09-25  Bob Montgomery  <bobm@fc.hp.com>
+
+	* module/oprofile.c: avoid to dump zero samples count, fix #615087
+
+2002-09-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_image.c: fix #615166, ensure we recognize an
+	  existing image struct so we don't try to create db_tree_t
+	  object for the same samples files.
+	* db/db-debug.c: display page index when something goes wrong
+	* db/db-insert.c: be more strict on assertion
+
+2002-09-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/Makefile.in: remove dependencies for doc/html.xsl
+
+2002-09-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/xsl/.cvsignore: new
+	* doc/oprofile.xml: document watchdog problem
+
+2002-09-25  John Levon  <levon@movementarian.org>
+
+	* module/x86/op_nmi.c: OP_MAX_CPUS is not necessarily
+	  static so use NR_CPUS for array instead. Fix a prototype.
+ 
+2002-09-23  Graydon Hoare  <graydon@redhat.com>
+ 
+	* doc/oprofile.xml: Add some P4 documentation.
+	* configure.in: Add detection of different stylesheet paths.
+	* doc/xsl/xhtml.xsl.in: Parameterize by configure's result.
+	* doc/xsl/xhtml.xsl: Remove.
+	* dae/opd_sample_files.c: Change unit mask from 8 to 16 bits.
+	* gui/oprof_start.cpp: Change number of unit masks from 7 to 16.
+	* gui/ui/oprof_start.base.ui: Likewise.
+	* libop/op_cpu_type.c: Add P4 CPU type.
+	* libop/op_events.h: Change unit mask bit width, number.
+	* libop/op_events.c: Add P4 events, unit masks.
+	* libop_op_hw_config.h: Set OP_MAX_COUNTERS to 8.
+	* libop++/op_print_event.cpp: Change unit mask bit width.
+	* libop++/op_print_event.h: Likewise.
+	* module/oprofile.c: Add extra sysctls for counters 5-8.
+	* module/x86/Makefile.in: Add op_model_p4.o to obj list.
+	* module/x86/cpu_type.c: Change CPU identification to handle P4.
+	* module/x86/op_apic.c: (enable_apic): APIC_MAXLVT < 4, not != 4.
+	(check_cpu_ok): Accept CPU_P4.
+	* module/x86/op_model_p4.c: New file.
+	* module/x86/op_nmi.c: (get_model): Handle CPU_P4.
+	Add sysctl names for counters 5-8.
+	* module/x86/op_x86_model.h: Declare extern op_p4_spec.
+
+2002-09-24  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_image.c:
+	* dae/opd_image.h:
+	* dae/opd_kernel.c:
+	* dae/oprofiled.c:
+	* dae/p_module.h:
+	* dae/opd_image.c:
+	* dae/opd_kernel.c:
+	* dae/oprofiled.c:
+	* dae/p_module.h: small blank/comment change to minimize
+	  diff between daemon and dae dir.
+
+2002-09-23  John Levon  <levon@movementarian.org>
+
+	* configure.in: fix for 2.5 patch to build
+ 
+2002-09-23  John Levon  <levon@movementarian.org>
+
+	* utils/Makefile.in:
+	* utils/op_start_25: 2.5 patch start script
+ 
+2002-09-23  John Levon  <levon@movementarian.org>
+  
+  	* dae/opd_image.c:
+
+	* libop/op_cpu_type.c: fix arrays
+ 
+2002-09-23  John Levon  <levon@movementarian.org>
+
+	* utils/op_start: use right value for RTC CPU
+ 
+2002-09-23  John Levon  <levon@movementarian.org>
+
+	* libop/op_config.h:
+	* libop/op_config_24.h:
+	* libop/op_config_25.h: split config file up
+ 
+	* daemon/opd_kernel.c:
+	* daemon/oprofiled.c: include op_config_25.h
+
+	* dae/oprofiled.c:
+	* dae/opd_image.c:
+	* dae/opd_kernel.c:
+	* dae/opd_mapping.c: include op_config_24.h
+
+	* module/oprofile.h: include op_config_24.h
+ 
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.cpp: fix from above
+	  (old support only right now)
+
+	* libop/op_cpu_type.h: introduce 2.5-patch CPU_TIMER_INT
+
+2002-09-23  John Levon  <levon@movementarian.org>
+
+	* libop/op_interface_25.h: 2.5 interface
+
+	* daemon/opd_image.c:
+	* daemon/opd_sample_files.c:
+	* daemon/oprofiled.c:
+
+	* libop++/op_print_event.h: fix header
+
+	* pp/op_to_source.cpp: change from above
+
+2002-09-23  John Levon  <levon@movementarian.org>
+
+	* daemon/: new 2.5 patch daemon code. WIP
+
+	* configure.in:
+	* Makefile.in: detect 2.5 patch and build appropriately
+ 
+2002-09-23  John Levon  <levon@movementarian.org>
+
+	* module/x86/op_msr.h: match kernel naming
+
+	* module/x86/op_model_athlon.c: from above
+ 
+2002-09-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db-insert.c: bad cut&paste. Shame on me, I broke the build...
+
+2002-09-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db-insert.c: handle samples count overflow.
+	
+	* libdb/Makefile.in: db-test new target not built by default.
+	* libdb/db-debug.c: more strict checking
+	* libdb/db-test.c: allow db-test to be used as "db-test samples_dir/*"
+
+2002-09-22  John Levon  <levon@movementarian.org>
+
+	* dae/opd_stats.c: nicify
+ 
+	* module/x86/op_model_pproc.c:
+	* module/x86/op_model_athlon.c: drop macro prefixes, ws fixes
+
+	* module/x86/op_nmi.c: fix save/restore possible crash, init
+	  possible leak
+ 
+2002-09-22  Philippe Elie <phil.el@wanadoo.fr>
+
+	* module/x86/op_model_pproc.c: fix p6_start()
+	* module/x86/op_model_athlon.c: fix athlon_start()
+	* module/x86/op_nmi.c: pmc_save_registers() typo when checking
+	  null for kmalloc return value
+ 
+2002-09-20  Graydon Hoare  <graydon@redhat.com>
+
+	* module/x86/op_x86_model.h: New interface for MSRs.
+	* module/x86/op_nmi.c: Use interface.
+	* module/x86/op_model_ppro.c: New, code from op_nmi.c.
+	* module/x86/op_model_athlon.c: New, code from op_nmi.c.
+	* module/x86/Makefile.in: Reflect new files.
+
+2002-09-20  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.cpp: fix a bug where we broke
+	  with multiple executable sections due to sorting
+	  the symbols wrongly. Fix #617288 and the duplicated
+	  #617264
+
+	* libutil++/op_bfd.h: fix an outdated comment
+
+	* dae/opd_image.c: fix comment
+ 
+2002-09-19  Graydon Hoare  <graydon@redhat.com>
+
+	* libop/op_events.h:
+	* libop/op_events_desc.c: Move descriptions from here.
+	* libop/op_events_desc.h:
+	* libop/op_events.c: To here.
+	(um_*): Add new static unit masks.
+	(op_events): Use pointers to static unit masks.	
+	* libop++/op_print_event.h:
+	* libop++/op_print_event.cpp:
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp: 
+	* utils/op_help.c: Make compatible with struct changes.
+
+2002-09-18  John Levon  <levon@movementarian.org>
+
+	* utils/op_start: give an example for unit mask.
+ 
+2002-09-18  Will Cohen  <wcohen@redhat.com>
+
+	* libop/op_mangle.c: (op_mangle_filename): Correct logic for
+	  generating mangled name. Fix #611107
+	
+2002-09-15  John Levon  <levon@movementarian.org>
+
+	* libop/op_event.c: fix comment
+ 
+2002-09-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/x86/cpu_type.c: allow to force RTC mode.
+	* dae/oprofiled.c: checking when we need to backup samples
+	  dir in RTC mode was broken.
+
+2002-09-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_config.h: remove OP_MIN/MAX_PID, OP_MIN/MAX_PGRP
+	* gui/oprof_start.cpp: pid_filter/pgrp_filter accept all integer
+
+2002-09-13  John Levon  <levon@movementarian.org>
+
+	* acinclude.m4: another tweak
+ 
+2002-09-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* Makefile.in: never remove doc/oprofile.html.
+	* acinclude.m4: small work-around for sed-related problem
+
+2002-09-12  Will Cohen  <wcohen@redhat.com>
+
+	* Makefile.in: Separate kernel and user code build rules.
+
+2002-09-12  Will Cohen  <wcohen@redhat.com>
+ 
+	* libutil++/child_reader.h (child_reader): Add missing "std::".
+	* libutil++/child_reader.cpp (error_str): Ditto.
+ 
+2002-09-12  John Levon  <levon@movementarian.org>
+
+	* acinclude.m4: update from upstream
+ 
+2002-09-12  John Levon  <levon@movementarian.org>
+
+	* acinclude.m4: fix moc2/moc conflict, cache val
+ 
+2002-09-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/child_reader.cpp:
+	* libutil++/child_reader.h: fix for child terminated by a signal
+	* gui/oprof_start_util.cpp:
+	* pp/op_to_source.cpp: use the the new child_reader interface
+
+2002-09-11  John Levon  <levon@movementarian.org>
+
+	* acinclude.m4:
+	* configure.in:
+	* gui/Makefile.in: replace with new Qt configure script
+ 
+2002-09-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* acinclude.m4: fix qt3 detection in some corner case.
+
+2002-09-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/samples_container.cpp:
+	* pp/samples_container.h: Check at run time we don't try to use an
+	  unitialized samples_container_t.
+
+2002-09-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/op_time.cpp: exit sooner when no samples files are available.
+
+2002-09-09  Will Cohen  <wcohen@redhat.com>
+
+	* dae/opd_kernel.c (struct opd_module): 
+	  (kernel_start, kernel_end):
+	  (opd_parse_kernel_range):
+	  (opd_drop_module_sample):
+	  (opd_find_module_by_eip):
+	  (opd_handle_module_sample):
+	  (opd_handle_kernel_sample):
+	  (opd_eip_is_kernel):
+	* dae/opd_kernel.h (opd_handle_kernel_sample):
+	  (opd_eip_is_kernel):
+	* dae/opd_mapping.c (opd_put_mapping):
+	* dae/opd_mapping.h (struct opd_map):
+	  (opd_is_in_map):
+	  (opd_map_offset):
+	* dae/opd_parse_proc.c (opd_add_ascii_map):
+	* dae/opd_proc.c(verb_show_sample):
+	  (opd_put_image_sample):
+	* dae/opd_proc.h (opd_put_image_sample): Change things referring
+	  to addresses to unsigned long for operation on 64-bit machines.
+ 
+2002-09-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* all source file : remove email address from @author
+
+2002-09-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_interface.h: (op_sample, op_note): Make compatible with
+	  64-bit targets.
+	* dae/opd_proc.c: (opd_put_sample): Adjust verbprintf arguments.
+	  (opd_handle_fork): Ditto.
+	* dae/oprofiled.c: (opd_do_samples): Ditto.
+
+2002-09-04    Will Cohen  <wcohen@redhat.com>
+
+	* module/op_rtc.c: move to ...
+	* module/x86/op_rtc.c: here
+	* module/Makefile.in:
+	* module/x86/Makefile.in: reflect file move
+
+2002-09-03  Will Cohen  <wcohen@redhat.com>
+
+	* module/oprofile.h: (regparm3): remove, use FASTCALL instead.
+	* module/oprofile.c: (op_do_profile): Eliminate regparm3.
+
+2002-09-03  Will Cohen  <wcohen@redhat.com>
+
+	* module/oprofile.c: (oprof_read, oprof_note_read): Return ssize_t.
+
+2002-08-30  Will Cohen <wcohen@nc.rr.com>
+
+	* Makefile.in:
+	* make.common.in: more DESTDIR change
+
+2002-09-02  Dave Jones <davej@suse.de>
+
+	* module/x86/cpu_type.c: support hammer in ia32 mode
+
+2002-09-02  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: mention Qt 3
+ 
+2002-08-30  Will Cohen <wcohen@nc.rr.com>
+
+	* doc/Makefile.in: Set MANDIR and CATDIR based on DESTDIR.
+
+2002-08-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_kernel.c:
+	* dae/opd_kernel.h:
+	* dae/opd_proc.c:
+	* dae/opd_proc.h:
+	* dae/oprofiled.c:
+	* libop/op_hw_config.h:
+	* libop/op_interface.h:
+	* module/oprofile.c:
+	* module/oprofile.h: change the layout of data used between
+	  daemon/module (32 bits pid fix for 2.5.31)
+
+	* gui/oprof_start_config.h: use pid_t
+
+	* libutil/op_fileio.c: op_read_file(), op_write_file(), use %lu
+	  and cast, uglier solution but more portable than last fix
+
+	* utils/op_start: typo
+
+2002-08-14  William Cohen  <wcohen@nc.rr.com>
+ 
+	* libutil/op_fileio.c (op_read_file): Change fprintf specifier.
+	(op_write_file): Ditto.
+
+2002-08-08  Will Cohen  <wcohen@nc.rr.com>
+
+	* utils/op_start: Do not compute quantity of counters from
+	  CPUTYPE. Get counter names directly from /proc/sys/dev/oprofile.
+
+2002-08-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* Makefile.in:
+	* doc/Makefile.in: delete generated doc only on a make maintainerclean
+
+	* pp/opp_symbol.cpp: small cleanup
+
+2002-08-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_parse.c:
+	* dae/opd_proc.c:
+	* dae/opd_proc.h: fix #591275 which is a re-hash of #584723 we can
+	  now safely assume than proc->maps[0] is the primary image.
+	  Problem reported by William cohen
+
+2002-08-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/string_manip.h:
+	* libutil++/string_manip.cpp: separate_token() treat escape sequence
+
+2002-07-30  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp: apply misssing part from this patch
+	  2002-07-27  Will Cohen  <wcohen@nc.rr.com>
+
+	* dae/oprofiled.c:
+	* doc/oprofile.1.in:
+	* util/oprof_start:
+	* doc/oprofile.xml: clarify than pgrp filter is the tty program
+	  group id
+
+2002-07-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.h:
+	* pp/samples_file.cpp: op_get_cpu_nr_counters() / op_get_nr_counters()
+	  merge
+
+	* module/compat22.h:
+	* module/x68/op_apic.c: __cli()/__sti() removal, this fix build up
+	  to 2.5.29
+
+	* module/op_fixmap.c: fix test_bit() warning
+
+2002-07-27  Will Cohen  <wcohen@nc.rr.com>
+ 
+	* gui/oprof_start_config.cpp: config_setting::config_setting()
+	  uses uname to guess path to vmlinux. 
+
+2002-07-27  John Levon  <levon@movementarian.org>
+
+	* dae/opd_stats.h:
+	* dae/opd_stats.c: 
+	* dae/opd_proc.c: log unique samples vs. sample entries
+ 
+2002-07-27  Will Cohen  <wcohen@nc.rr.com>
+ 
+	* dae/oprofiled.c:
+	* gui/oprof_start.cpp:
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c: op_get_nr_counter() new, localize
+	  op_nr_counter computations.
+
+2002-07-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* utils/op_start: fix #587093, some option of op_start
+	  was incorrectly checked
+
+2002-07-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/op_time_options.cpp:
+	* pp/oprofpp_options.cpp: output format header or details are illegal
+	  if not combined with other output format flag
+
+	* pp/opp_symbol.cpp:
+	* pp/opp_symbol.h:
+	* pp/oprofpp.cpp:
+	* pp/outsymbflag.h: minor cleanup
+
+2002-07-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: bump to 0.4cvs
+ 
+2002-07-24  Kevin Puetz  <puetzk@iastate.edu>
+
+	* gui/ui/oprof_start.base.ui: fix resize
+ 
+2002-07-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil/op_fileio.c:
+	* libutil/op_fileio.h: opd_get_link() new, read a symlink filename
+	* libutil++/file_manip.cpp:
+	* libutil++/file_manip.h: opd_read_link() use the above function
+
+	* dae/opd_image.c:
+	* dae/opd_parse_proc.c: fix #584723 we can not assume than the first
+	  map in /proc/pid/maps is the the map for the binary image
+
+2002-07-21  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: bump to 0.3
+ 
+2002-07-17  William Cohen  <wcohen@nc.rr.com>
+ 
+	* gui/oprof_start_util.cpp: get HZ from sysconf
+
+2002-07-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.base.ui: revert patch 2002-07-13, reapply
+	  the same modification with QT2 designer rather QT3 designer
+
+2002-07-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* Makefile.in: set KVERS properly
+ 
+	* dae/oprofiled.c: remove eip == 0 checking
+ 
+	* module/oprofile.c: do check in evict_op_entry() instead,
+	  as suggested by Philippe
+ 
+2002-07-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* make.deps:
+	* gui/Makefile.in: fix include search path for dependencies generation
+
+2002-07-13  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/oprofiled.c: don't throw away last samples on shutdown
+	  notification
+ 
+2002-07-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h:
+	* gui/oprof_start.base.ui: remove kernel-range specification UI
+
+2002-07-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+	* dae/oprofiled.c:
+	* libop/op_interface.h: 
+	* module/oprofile.c: 
+	* module/oprofile.h:
+	* module/x86/op_nmi.c: 
+	* module/x86/op_syscalls.c: replace partial_stop,quitting,prof_on
+	  with single state variable, and clean up how shutdown is triggered.
+ 
+	* module/oprofile.c: always init data->entries etc. for every CPU
+ 
+2002-07-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* Makefile.in: typo in clean target
+
+	* module/compat.h:
+	* module/compat24.h:
+	* module/oprofile.c:
+	* module/x86/op_nmi.c: support for online/offline cpu for 2.5.23+
+
+2002-07-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* Makefile.in:
+	* module/Makefile.in:
+	* module/x86/Makefile.in: move all goal to the topdir Makefile
+
+2002-07-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* pp/op_time.cpp:  errno for file permission problem is
+	  EACCES not EPERM ...
+
+	* module/x86/op_apic.c:
+	* module/x86/op_fixmap.c:
+	* module/x86/op_nmi.c: revert partially the 2002-06-26 patch, preempt
+	  need rather to be fixed before/after calling the
+	  op_int_operation functions pointer.
+
+2002-07-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp: use <ctime> not <time.h>
+	* libutil/op_libiberty.c: don't assume than string.h is included
+	   by libiberty.h as in old gcc release
+
+2002-07-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: pass vector by const reference rather
+	  than by value
+
+	* pp/op_to_source.cpp: always output file even if the corresponding
+	  source file does not exist
+
+2002-07-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libopt++/popt_options.cpp: provide a dtor in derived class
+
+	* doc/oprofile.1.in:
+	* pp/op_to_source.cpp: --output --no-output are meaningfull
+	  in all case.
+
+2002-07-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp:
+	* pp/sample_container_imp.cpp:
+	* pp/symbol_container_imp.cpp:
+	* pp/op_to_source.cpp: fix an ISO corner case (3.4.2 #2)
+
+2002-07-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/filename_match.h:
+	* libutil++/filename_match.cpp: constify
+
+	* module/Makefile.in: small typo
+	* Makefile.in: do not make uninstall in module/arch
+
+	* pp/op_to_source_options.h:
+	* pp/op_to_source_options.cpp:
+	* pp/op_to_source.cpp: general cleanup, remove the output class and
+	  use free function instead, doxygen'ize them.
+
+2002-07-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_events.cpp:
+	* libop/op_events.h:
+	* module/x86/op_nmi.c:
+	* dae/oprofiled.c: op_check_events() no longer accept 0 as valid events
+
+	* pp/opp_symbol.cpp: small dead code removal
+	* pp/opp_symbol.h: doxygen comment fix
+
+	* configure.in: do not use AC_CHECK_FILE: this macro generate
+	  spurious warning with autoconf 2.2.13
+
+	* pp/op_to_source_options.h:
+	* pp/op_to_source_options.cpp:
+	* pp/op_to_source.cpp:
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: implement --objdump-params='params_strings'
+	  allowing to pass additional parameters to objdump.
+
+2002-07-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil/op_fileio.c: remove a FIXME, it's not worthwhile to try to
+	  use GNU getline() instead of op_get_line()
+
+	* pp/op_time.cpp:
+	* pp/op_time_options.cpp:
+	* pp/op_time_options.h:
+	* pp/oprofpp.cpp: remove minor FIXME
+
+	* pp/opp_symbol.h: class outut_symbol: clarify why, with the current
+	  design, some function are public member rather private.
+
+2002-07-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in:
+	* module/compat.h: fix compile error with kernel <= 2.2.17
+
+2002-07-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: minor upadte
+
+	* configure.in: support 2.5.20
+
+	* dae/opd_image.c:
+	* dae/opd_proc.c:
+	* libop++/op_print_event.h:
+	* libutil/op_popt.c:
+	* pp/op_merge.cpp:
+	* pp/samples_container.cpp:
+	* pp/symbol_container_imp.cpp:
+	* pp/symbol_functors.h: minor #include tweak
+
+2002-06-30  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db.h:
+	* libdb/db-manage.c: constify db_sync() parameter.
+
+	* dae/opd_image.c: fix #574459 "vmlinux samples file not backed up
+	  by op_session". Small cleanup by adding opd_for_each_image()
+
+2002-06-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* libutil++/filename_match.cpp:
+	* libutil++/filename_match.h: add a convenience ctor.
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml:
+	* op_time.cpp: better error message for EPERM problem
+	* op_time_options.h:
+	* op_time_options.cpp: allow the user to specify explicitely on which
+	  filename he want to work
+
+2002-06-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* acinclude.m4:
+	* configure.in:
+	* make.common.in:
+	* gui/Makefile.in:
+	* gui/ui/Makefile.in: better qt3 handling
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: fix oprof_start --option=blah
+
+2002-06-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* .cvsignore: minor fix
+
+	* configure.in:
+	* acinclude.m4: ugly temporary hack to compile with kde3/qt3
+	* oprof_start.cpp:
+	* oprof_start_config.cpp: gcc-3.1 and qt3 fix (qt3 have an
+	  hex() somewhere ...)
+
+	* module/x86/op_fixmap.c: minor comment fix
+
+2002-06-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* module/compat.h:
+	* module/x86/op_apic.c:
+	* module/x86/op_fixmap.c:
+	* module/x86/op_nmi.c: preemptible kernel support. This fix point
+	  #2 of kernel_src/Documentation/preempt-locking.txt
+
+2002-06-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: document op_start --kernel-range option
+	* gui/oprf_start.cpp:
+	* gui/oprof_start.h:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h: 
+	* gui/ui/oprof_start_base.ui:
+	* utils/op_start: implement --kernel-range
+
+	* gui/Makefile.in: force ui sub-dir build
+	
+2002-06-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* configure.in: new AX_KERNEL_VERSION()  to allow kernel version check,
+	  use it to check minimal kernel version and fix 2.5.19 breakage
+	* module/.cvsignore:
+	* module/x86/.cvsignore: add .*.cmd
+	* module/Makefile.in:
+	* module/x86/Makefile.in: fix 2.5.19 make through EXTRA_CFLAGS_MODULE
+	* module/compat22.h: fix missing BUG() definition in 2.2 kernel
+	* module/x86/oprofile_nmi.S: fix minor 2.2 compile problem
+
+	* pp/op_to_source.cpp: minor comment fix
+
+2002-06-18  John Levon  <moz@compsoc.man.ac.uk>
+
+	* utils/op_start:
+	* pp/samples_file.h:
+	* libop/op_config.h:
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml:
+	* dae/oprofiled.c:
+	* dae/opd_kernel.h:
+	* dae/opd_kernel.c: don't parse System.map any more,
+	  now we work based off vmlinux alone
+	 
+	* dae/opd_proc.c: move eip_is_kernel() into opd_kernel.c
+ 
+2002-06-18  John Levon  <moz@compsoc.man.ac.uk>
+
+	* README:
+	* doc/oprofile.xml: update credits
+ 
+2002-06-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/op_time_options.h:
+	* pp/op_time_options.cpp: move private stuff out of
+	  options namespace
+ 
+2002-06-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/counter_util.cpp: stop when we reach the first
+	  available counter for sorting
+
+	* pp/op_to_source.cpp: use absolute sample file name 
+
+	* pp/samples_file.cpp: better error message
+
+2002-06-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* various: remove spurious == false, == true
+ 
+2002-06-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/oprofiled.c:
+	* libop/op_interface.h:
+	* libop++/op_print_event.h:
+	* module/oprofile.c: define a buffer head for the module
+	  buffer interface, and use it
+ 
+	* module/Makefile.in: oops, install the module properly
+ 
+2002-06-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* libop/Makefile.in:
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c: new files split out, defines
+	  changed
+
+	* dae/opd_proc.c:
+	* dae/opd_sample_files.c:
+	* dae/oprofiled.c:
+	* gui/oprof_start.cpp:
+	* libop/op_events.h: 
+	* libop/op_events.c: 
+	* libop/op_events_desc.h:
+	* libop/op_events_desc.c: 
+	* libop/op_interface.h:
+	* libop++/op_print_event.h: 
+	* module/oprofile.h:
+	* module/x86/op_nmi.c: changes from above
+ 
+2002-06-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* Makefile.in: compile module early as it's most
+	  likely to fail
+ 
+	* TODO: update
+ 
+	* doc/oprofile.xml:
+	* configure.in: remove unneeded --with-cc
+ 
+	* module/x86/Makefile.in: use USE_STANDARD_AS_RULE
+ 
+	* module/x86/op_nmi.c: add preemption exclusion
+
+2002-06-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_parse_proc.c: remove FIXME. We are fine to
+	  assume first entry in maps is the executable, because
+	  this is exactly what the kernel does (see /proc/pid/exe)
+ 
+2002-06-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprofpp.cpp: call check_mtime() correctly
+	  for shared libraries
+ 
+2002-06-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* libop/op_events.c: add warning
+ 
+	* module/Makefile.in: link against libop.a like I meant to
+ 
+	* module/oprofile.h:
+	* module/oprofile.c: readability cleanup
+ 
+2002-06-11  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/compat.h:
+	* module/x86/arch_compat.h: remove arch_compat.h,
+	  add BUG_ON()
+
+	* module/op_util.c: return -EINVAL not 1 from check_range() 
+
+	* module/oprofile.c: use BUG_ON() in release functions,
+	  fix use of check_range, remove spurious check for malloc
+	  failure (already checked)
+
+	* module/oprofile.h: clarify API 
+
+	* module/x86/op_msr.h: new file, MSR back-compat
+
+	* module/x86/op_nmi.c:
+	* module/x86/op_apic.c: use it
+ 
+2002-06-10  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+	* configure.in: remove old checks we don't need.
+	  Add to EXTRA_CFLAGS not KCFLAGS 
+
+	* module/Makefile.in: update to use Rules.make and
+	  kernel rules.
+ 
+	* module/op_init.c: make this one include kernel modversion
+	  stuff for 2.2
+ 
+	* module/oprofile.h: remove __cacheline_aligned in wrong place
+
+	* module/x86/Makefile.in: use Rules.make (hacky)
+
+	* module/x86/arch.mak: remove
+ 
+	* module/x86/op_fixmap.c: add missing header
+ 
+	* module/x86/op_syscalls.c: my_sys_exit is not static
+ 
+2002-06-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/cverb.h:
+	* libutil++/cverb.cpp: cverb ostream initializations
+	* pp/op_merge.cpp:
+	* pp/op_time_options.cpp:
+	* pp/op_to_source_options.cpp:
+	* pp/oprofpp_options.cpp: use it
+
+	* utils/Makefile.in: fix a typo in lib dependencies
+
+2002-06-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* pp/samples_container.cpp:
+	* pp/samples_container.h: add an hint parameter to add()
+	  used to avoid recording all samples.
+	* pp/oprofpp.cpp: use it for the -s option. This change
+	  slightly behavior of oprofpp -s, now percent are relative
+	  to the selected symbol, not to the whole samples file.
+	  Performance of oprofpp -s are improved a lot (40 times on vmlinux)
+
+	* utils/Makefile.in: missing libs dependencies
+
+2002-06-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/Makefile.in:
+	* dae/Makefile.in:
+	* gui/Makefile.in: update dependencies for library
+
+2002-06-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libopt++/popt_options.cpp:
+	* libopt++/popt_options.h: memory leak fix
+
+2002-06-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/Makefile.in: fix bfd compilation problem
+	  with gcc >= 3.0 and old bfd.h
+	* module/Makefile.in:
+	* module/x86/Makefile.in: fix -Werror typo
+	* pp/op_merge.cpp:
+	* pp/op_time_options.cpp:
+	* pp/op_to_source_options.cpp:
+	* pp/oprofpp_options.cpp: work around for cverb
+	  initialisations and gcc 2.91.
+	* pp/op_to_source.cpp: use the right comand line argument.
+
+2002-06-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* libutil++/utility.h: fix stupid bug, add scoped_array
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: use it
+
+2002-06-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* libutil++/utility.h: add a scoped_ptr
+
+	* pp/op_to_source.cpp:
+	* pp/samples_container.h:
+	* pp/samples_container.cpp: use it
+
+2002-06-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_kernel.c: remove some duplicate code
+ 
+2002-06-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/opp_symbol.cpp: kill last of the accursed char
+	  arrays
+
+2002-06-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* libutil++/op_bfd.cpp:
+	* libutil++/op_bfd.h:
+	* libutil++/verbose_ostream.h:
+	* pp/op_merge.cpp:
+	* pp/op_time_options.cpp:
+	* pp/oprofpp_options.cpp:
+	* pp/op_to_source_options.cpp: remove verbose_ostream
+	  in favour of a much simpler solution
+ 
+	* module/oprofile.h: remove dead prototype
+ 
+2002-06-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/x86/Makefile.in:
+	* module/Makefile.in: remove 2.91 check, add 2.5 check
+ 
+	* module/compat22.h:
+	* module/compat24.h:
+	* module/apic_up_compat.h: move to ...
+
+	* module/x86/op_apic.h:
+	* module/x86/apic_compat.h: ... here
+ 
+	* module/compat.h: move arch stuff to ...
+
+	* module/x86/arch_compat.h: ... here
+ 
+2002-06-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: remove gcc 2.91 check
+	* make.common.in: use -Werror even for gcc 2.91
+	* gui/oprof_start.cpp:
+	* libutil++/op_bfd.cpp:
+	* pp/derive_files.cpp:
+	* pp/op_to_source.cpp: small tweak for gcc 2.91 and -Werror
+
+2002-06-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/op_rtc.c: use check_range
+ 
+2002-06-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: fix typo so non-2.91 is detected
+ 
+	* module/Makefile.in:
+	* module/x86/Makefile.in: enable -Werror
+
+	* module/op_dname.c:
+	* module/oprofile.h:
+	* module/oprofile.c:
+	* module/op_util.h:
+	* module/op_util.c:
+	* module/x86/op_nmi.c: add op_util.h, make
+	  op_check_range a function check_range
+ 
+2002-06-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/Makefile.in: use @CC@, add clean for x86
+
+	* module/compat24.h: add path_hash prototype 
+ 
+	* module/x86/Makefile.in: use @CC@, make sure
+	  options get picked up
+ 
+2002-06-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* libutil/op_get_time.c: return "" not NULL
+	  on failure, so we don't try to printf NULL
+ 
+	* module/op_dname.c: do_path_hash_2_4 should not be static now 
+
+	* module/oprofile.c: add const
+ 
+2002-06-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/x86: new directory, for now some small portion
+	  of x86 dependant code remains in module/* mainly in
+	  oprofile.[ch]. This patch also don't take care about
+	  libop/* which are architecture dependant
+
+	* module/op_apic.c:
+	* module/op_nmi.c:
+	* module/op_syscalls.c:
+	* module/oprofile_nmi.S:
+	* module/op_fixmap.c: move this file to ...
+	* module/x86/op_apic.c:
+	* module/x86/op_nmi.c:
+	* module/x86/op_syscalls.c:
+	* module/x86/oprofile_nmi.S:
+	* module/x86/op_fixmap.c: these new files
+	* module/x86/op_apic.c: x86 stuff
+	* module/x86/arch.mak: specific arch makefile fragment
+	* module/op_init.c: move cpu detection code ...
+	* module/x86/cpu_type.c: here
+	* module/Makefile: handle arch sub-dir
+	* module/x86/.cvsignore: new
+	* module/oprofile.h: declare the interface to the
+	  architecture dependant code
+
+	* Makefile.in:
+	* configure.in: handle module/arch
+	* make.common.in: avoid -Werror with gcc 2.91
+	* make.deps: small tweak allowing to use it in module
+
+2002-06-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: use CXXINCLUDES not CXXFLAGS
+	for including sstream
+ 
+	* make.common.in: remove duplicate -g -O2
+ 
+	* include/sstream: fix compiler warning to
+	  allow -Werror
+ 
+	* libutil/op_file.c:
+	* libutil/op_fileio.h:
+	* libutil/op_fileio.c: more API fixage
+
+	* libutil++/file_manip.cpp: add missing header
+ 
+2002-06-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* make.common.in: enable -Werror for CVS builds
+	(not in module/)
+ 
+	* dae/opd_image.c:
+	* dae/oprofiled.c:
+	* libutil/op_deviceio.h:
+	* libutil/op_deviceio.c: API fixes
+
+	* libutil++/file_manip.h:
+	* libutil++/file_manip.cpp: 
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp:
+	* pp/op_time.cpp:
+	* pp/oprofpp.cpp: 
+	* libutil/op_lockfile.c: 
+	* libutil/op_file.h:
+	* libutil/op_file.c: add op_file_readable(),
+	  API fixes 
+ 
+2002-06-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* utils/op_stop: fail early if ! root
+ 
+2002-06-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/*: s/OutputSymbol/output_symbol/,
+	  s/OutSymbFlag/outsymbflag/
+ 
+2002-06-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/op_time_options.cpp:
+	* pp/op_time_options.h:
+	* pp/op_to_source_options.h:
+	* pp/oprofpp_options.h: document
+
+2002-06-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/Makefile.in:
+	* pp/counter_util.h:
+	* pp/counter_util.cpp: move from ...
+
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp: ... here (removed)
+
+	* pp/op_time.cpp:
+	* pp/op_time_options.cpp: 
+	* pp/op_to_source.cpp: 
+	* pp/opp_symbol.h: 
+	* pp/oprofpp.cpp:
+	* pp/oprofpp_options.h: 
+	* pp/oprofpp_options.cpp: 
+	* pp/samples_container.h: 
+	* pp/samples_container.cpp: 
+	* pp/samples_file.h:
+	* pp/samples_file.cpp: changes from above
+
+2002-06-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* libutil++/file_manip.h:
+	* libutil++/file_manip.cpp: move oprofile specific stuff
+	  to ...
+ 
+	* libop++/op_mangling.h:
+	* libop++/op_mangling.cpp: ... here
+
+	* pp/Makefile.in:
+	* pp/op_bfd.h:
+	* pp/op_bfd.cpp: move to ...
+ 
+	* libutil++/Makefile.in:
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: ... here 
+ 
+	* libutil++/verbose_ostream.h: add
+ 
+	* pp/op_merge.cpp:
+	* pp/op_time.cpp: 
+	* pp/op_time_options.h:
+	* pp/op_time_options.cpp:
+	* pp/op_to_source.cpp: 
+	* pp/op_to_source_options.h:
+	* pp/op_to_source_options.cpp:
+	* pp/oprofpp.h: 
+	* pp/oprofpp.cpp: 
+	* pp/oprofpp_options.h:
+	* pp/oprofpp_options.cpp:
+	* pp/oprofpp_util.cpp:
+	* pp/samples_file.h: various changes and
+	  cleanups from above
+ 
+	* pp/derive_files.cpp: remove now duplicate code
+ 
+2002-06-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* libutil++/file_manip.h:
+	* libutil++/file_manip.cpp: simplify but don't
+	  break already absolute paths, remove dead code
+ 
+	* pp/op_time_options.h:
+	* pp/op_time_options.cpp:
+	* pp/op_time.cpp: remove dead code
+ 
+	* pp/op_to_source_options.h: 
+	* pp/op_to_source_options.cpp:
+	* pp/oprofpp_options.h:
+	* pp/oprofpp_options.cpp: variable name tweaks
+
+	* pp/Makefile.in:
+	* pp/op_to_source.cpp: 
+	* pp/oprofpp.cpp:
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp:
+	* pp/derive_files.h:
+	* pp/derive_files.cpp: factor command-line file
+	  derivation guessing out
+ 
+2002-06-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* libop++/op_print_event.cpp:
+	* pp/op_bfd.h: 
+	* pp/op_time_options.cpp: 
+	* pp/op_to_source_options.cpp: 
+	* pp/oprofpp_options.cpp: fixes for std
+ 
+	* pp/Makefile.in:
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp:
+	* pp/samples_file.cpp:
+	* pp/opp_symbol.h:
+	* pp/counter_array.h:
+	* pp/counter_array.cpp: factor out counter_array
+ 
+2002-06-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprofpp.h:
+	* pp/samples_file.cpp:
+	* pp/oprofpp_util.cpp: remove a sanity check
+	  that wasn't particularly useful
+ 
+2002-06-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* libop++/Makefile.in:
+	* libop++/op_mangling.h:
+	* libop++/op_mangling.cpp:
+	* pp/op_merge.cpp:
+	* pp/op_time.cpp:
+	* pp/oprofpp.cpp: 
+	* pp/oprofpp.h: 
+	* pp/oprofpp_util.cpp: move mangle/unmangle to libop++
+ 
+2002-06-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/Makefile.in:
+	* pp/op_to_source.cpp:
+	* pp/opp_symbol.cpp:
+	* pp/demangle_symbol.h:
+	* pp/demangle_symbol.cpp: move this ...
+ 
+	* libutil++/Makefile.in:
+	* libutil++/demangle_symbol.h:
+	* libutil++/demangle_symbol.cpp: ... to here
+
+2002-06-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* make.common.in: 
+	* make.deps: split out CXXINCLUDES
+ 
+	* Makefile.in:
+	* configure.in:	
+	* libop++/Makefile.in:
+	* libop++/op_print_event.h:
+	* libop++/op_print_event.cpp:
+	* pp/Makefile.in:
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp:
+	* pp/samples_file.cpp: start libop++ library,
+	  move op_print_event there
+
+	* pp/op_bfd.h:
+	* pp/op_bfd.cpp: 
+	* pp/op_time.cpp: 
+	* pp/op_to_source.cpp: 
+	* pp/oprofpp.cpp: 
+	* pp/samples_file.h:
+	* pp/samples_file.cpp: remove all knowledge of
+	  is_kernel from op_bfd, some minor cleanups
+ 
+2002-06-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/op_bfd.h:
+	* pp/op_bfd.cpp:
+	* pp/samples_container.cpp: kill another char*
+ 
+	* pp/outsymbflag.h: reduce fake dependencies with
+	  new file, little cleanup
+
+	* pp/Makefile.in:
+	* pp/demangle_symbol.cpp:
+	* pp/op_merge.cpp:
+	* pp/op_time.cpp:
+	* pp/op_time_options.h:
+	* pp/op_time_options.cpp:
+	* pp/op_to_source.cpp:
+	* pp/op_to_source_options.h:
+	* pp/op_to_source_options.cpp:
+	* pp/opp_symbol.h:
+	* pp/oprofpp.h:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp_options.h:
+	* pp/oprofpp_options.cpp:
+	* pp/oprofpp_util.cpp: Some more refactoring. More work
+	  needed...
+ 
+2002-06-01  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/Makefile.in: fix DOCDIR (from Al Stone)
+ 
+2002-06-01  John Levon  <moz@compsoc.man.ac.uk>
+
+	* libutil++/file_manip.h:
+	* libutil++/file_manip.cpp: clarify API
+ 
+	* pp/oprofpp.cpp: fix bug 563324 resulting from above
+
+2002-06-01  John Levon  <moz@compsoc.man.ac.uk>
+
+	* make.common.in: make --with-extra-lib work again
+
+	* dae/opd_image.h:
+	* dae/opd_image.c: comment typos
+
+	* doc/srcdoc/Doxyfile: generate PNG not GIF 
+ 
+2002-05-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/srcdoc/Doxyfile:
+	* libopt++/popt_options.cpp:
+	* libopt++/popt_options.h:
+	* pp/symbol_container_impl.h: small doxygen tweak.
+
+2002-05-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/oprofiled.c: minor bug when backing up samples dir
+
+	* libopt++/popt_options.h:
+	* libopt++/popt_options.cpp: avoid to force client code to
+	  explicitly select the option template specializations.
+
+	* pp/op_merge.cpp:
+	* pp/op_time.cpp:
+	* pp/op_to_source.pp:
+	* pp/oprofpp.cpp: we no longer need explicit template
+	  instantiations for options
+
+2002-05-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/oprofpp.cpp: fix a missing SAMPLES_DIR prepend
+
+2002-05-22  John Levon  <moz@compsoc.man.ac.uk>
+
+	* lib/util/op_file.c:
+	* utils/op_session.c: restore accidentally lost
+	  commits :
+
+	2002-05-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+		* dae/op_session.c: tweak error message when session already
+		  exist. Avoid to op_dump when profiler is not started.
+
+	2002-05-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+		* dae/op_session.c: do not create empty session directory
+		  and backup oprofileg.log too
+		* dae/opd_util.c:
+		* op_user.h: minor related change
+
+2002-05-22  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/*: complete re-organisation of files
+ 
+	* libop/op_config.h: add VMA_OFFSET and MAX_MODULES
+	  tunables
+ 
+2002-05-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui:
+	* libdb:
+	* libopt++:
+	* libutil:
+	* libutil++:
+	* oprof_report:
+	* pp: all C/c++ source/header file, fix a few doxygen warning,
+	  many const type to  type const + other minor comestic change.
+
+2002-05-22  John Levon  <moz@compsoc.man.ac.uk>
+
+	* libopt++/popt_options.cpp: my usual boring shit
+ 
+	* libopt++/popt_options.h: document
+
+	* libutil/op_popt.h: POPT_TABLEEND missing in some popt.h
+ 
+	* TODO: update
+ 
+	* doc/oprofile.xml: add some to ack.html
+ 
+	* libop/op_events_desc.c: fix long-standing typo
+ 
+2002-05-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in:
+	* Makefile.in:
+	* libopt++/*: new directory, command line options handling
+	
+	* make.common.in:
+	* pp/Makefile.in:
+	* pp/op_merge.cpp:
+	* pp/op_time.cpp:
+	* pp/op_to_source.cpp:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp: use libpopt++
+
+2002-05-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+2002-05-19  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/op_bfd.cpp: fix bug coming from mis-placed
+	strlen() brackets
+ 
+	* pp/op_bfd.h:
+	* pp/op_bfd.cpp: kill some more char[]s to avoid silly
+	  bugs like the above
+ 
+	* README: some minor change
+ 
+2002-05-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/compat.h:
+	* module/op_fixmap.c:
+	* module/op_syscalls.c:
+	* module/oprofile.c:
+	* module/oprofile.h:
+	* module/oprofile_nmi.S: fix module up to kernel 2.5.15
+
+	* module/compat22.h: small fix for 2.2
+
+2002-05-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/op_fixmap.c: revert my last change :/. Something is
+	  wrong with oprofiel and 2.5.15 but elsewhere
+
+2002-05-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/op_fixmap.c: fix a long time outstanding bug,
+	  we tested bit in the address of x86_capability
+	  rather the capability itself.
+
+2002-05-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_proc.c: from a typo in opd_put_image_samples first
+	  incoming samples for each image was always ignored. As
+	  a side effect if opd_open_sample_file() fail the daemon
+	  will die with a seg fault. This behavior is in 0.2 release.
+	  fix #556918
+
+2002-05-17  John Levon  <moz@compsoc.man.ac.uk>
+
+	* utils/op_start: typo in detect stale lock file
+
+2002-05-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/*: gcc 3.1 compilation.
+
+2002-05-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_proc.c: close samples files at cleanup
+
+	* libdb/db-insert.cpp: if we don't lock the file when creating
+	  the root we must ensure than initialization is atomic
+
+	* pp/op_bfd.cpp:
+	* pp/op_bfd.h:
+	* pp/op_time.cpp:
+	* pp/op_to_source.cpp:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp:
+	* pp/samples_file.cpp:
+	* pp/samples_file.h: move all coherency check between a op_bfd and
+	  it's related opp_samples_files outside these class
+
+	* pp/samples_container.cpp: small modification allowing to privatize
+	  op_bfd::ibfd pointer.
+
+2002-05-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* libutil/op_lockfile.c: detect and remove stale
+	  lock files
+
+	* utils/op_start: detect stale lock file
+ 
+2002-05-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/Makefile.in:
+	* pp/op_time.cpp:
+	* pp/op_to_source.cpp:
+	* pp/oprofpp.cpp:
+	* pp/samples_container.h:
+	* pp/samples_container.cpp:
+	* pp/sample_container_imp.h:
+	* pp/sample_container_imp.cpp:
+	* pp/symbol_container_imp.h:
+	* pp/symbol_container_imp.cpp:
+	* pp/symbol_functors.h: some more file-refactoring, and some
+	  minor changes
+ 
+2002-05-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprofpp.cpp: only allow -r with -l
+	* doc/oprofile.1.in: document -r for oprofpp
+ 
+2002-05-15  William Cohen  <wcohen@nc.rr.com>
+ 
+	* pp/oprofpp.cpp: Added "-r" reverse sort option.
+
+2002-05-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/utility.h: fix a copyright problem, work-around
+	  a (probable) gcc 2.91 bug.
+
+	* pp/op_bfd.cpp: valgrind exposed a delete problem.
+
+	* pp/op_time.cpp:
+	* pp/op_to_source.cpp:
+	* pp/oprofpp.cpp:
+	* pp/samples_container.cpp:
+	* pp/samples_container.h:
+	* pp/samples_container.cpp:
+	* pp/samples_container.h: change the handling of shared lib,
+	  we no longer allow samples_container_t to auto load related
+	  samples files belonging to a shared lib but we create at a higher
+	  level an explicit list of samples files : fix #555276
+
+	* pp/op_to_source.cpp:
+	* pp/sample_container.cpp:
+	* pp/opp_symbol.cpp: demangle symbol only when we output
+	  symbol name, not when we store symbol name in internal
+	  representation of symbol.
+
+2002-05-14  Cliff Woolley  <jwoolley@apache.org>
+
+	* gui/oprof_start.cpp: allow Qt3 compilation
+
+2002-05-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.xml: clarify RTC use, fix #555302
+
+	* gui/oprof_start_util.cpp: missing closedir(). Fix #555268
+	  Thanks to William Cohen for his precise report.
+
+	* module/Makefile.in: fix #555304, a non-native compiler can
+	  fail to compile oprofile
+
+	* libutil++/utility.h: class noncopyable
+	* pp/samples_file.h: use it
+
+2002-05-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_events_desc.c:
+	* libop/op_events_desc.h:
+
+	* pp/op_bfd.h:
+	* pp/op_bfd.cpp:
+	* pp/op_to_source.cpp:
+	* pp/oprofpp.h:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp_util.cpp:
+	* pp/samples_file.cpp:
+	* pp/samples_file.h:
+	* pp/samplesfile.h: fix some FIXME
+
+2002-05-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/oprofiled.c: delete lockfile on SIGTERM
+ 
+	* pp/samples_file.h:
+	* pp/samples_file.cpp: minor changes
+
+2002-05-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/op_bfd.cpp:
+	* pp/op_bfd.h: ehance op_bfd_symbol ...
+	* pp/oprofpp.cpp:
+	* pp/samples_container.cpp: move handling of image w/o symbol
+	  in op_bfd
+
+	* pp/samples_file.h: ehance comment (John's work)
+
+2002-05-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/op_bfd.cpp:
+	* pp/op_bfd.h:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp.h:
+	* pp/samples_files.cpp: minor cleanup
+
+2002-05-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/op_bfd.h:
+	* pp/op_bfd.cpp:
+	* pp/opp_symbol.h:
+	* pp/opp_symbol.cpp:
+	* pp/oprofpp.cpp:
+	* pp/samples_container.h:
+	* pp/samples_container.cpp: more typedef for indexed things
+
+2002-05-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/*: split oprofpp_util.cpp, oprofpp.h to these ..
+	* pp/samples_file.cpp: new file
+	* pp/samples_file.h: new file
+	* pp/op_bfd.cpp: new file
+	* pp/opbfd.h: new file
+
+	* pp/*: add a symbol_index_t typedef
+
+2002-05-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/srcdoc/Makefile: always clean before building
+	* doc/srcdoc/Doxyfile: ehance file filtering
+
+	* pp/oprofpp.h: small typo fix
+
+2002-05-10  Philippe Elie  <phil.el@wanadoo.fr>	
+
+	* pp/oprofpp.h:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp_util.cpp:
+	* pp/samples_container.cpp: generalize infrastucture for symbol
+	  vma/size
+
+	* pp/op_time.cpp: allow to exclude symbol with op_time -l
+
+2002-05-09  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/xhtml-chunk.xsl:
+	* doc/xhtml-common.xsl:
+	* doc/xhtml.xsl:
+	* doc/Makefile.in: some small improvements
+ 
+	* doc/src/doc/Doyxfile: add FIXME
+
+	* gui/oprof_start.cpp:
+	* libop/op_events_desc.h:
+	* libop/op_events_desc.c:
+	* libutil/filename_match.h: 
+	* oprof_report/oprofpp_view.h: 
+	* pp/op_time.cpp: 
+	* pp/opp_symbol.h:
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp:
+	* pp/samples_container.cpp: 
+	* pp/samples_container.h: more doxygen etc. fixes
+ 
+2002-05-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* pp/op_symbol.cpp: better column handling with oprofpp -L
+
+2002-05-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/Makefile.in:
+	* gui/Makefile.in:
+	* pp/Makefile.in:
+	* utils/Makefile.in: fix make uninstall
+
+2002-05-08  Philippe Elie  <phil.el@wanadoo.fr>
+	
+	* pp/opf_filter.cpp: move to ...
+	* pp/op_to_source.cpp:
+	* pp/opf_container.cpp: move to ..
+	* pp/samples_container.cpp:
+	* pp/opf_filter.h: move to ...
+	* pp/samples_container.h:
+	* pp/Makefile.in:
+	* pp/.cvsignore: update
+
+	* oprof_report/hotspotview.cpp:
+	* oprof_report/hotspotview.h:
+	* oprof_report/op_view.h:
+	* oprof_report/oprof_report.cpp:
+	* oprof_report/oprof_report.h:
+	* oprof_report/oprof_view.cpp:
+	* oprof_report/oprof_view.h:
+	* pp/op_time.cpp:
+	* pp/opf_container.cpp:
+	* pp/opf_filter.cpp:
+	* pp/opf_filter.h:
+	* pp/opp_symbol.cpp:
+	* pp/opp_symbol.h:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp.h: samples_files_t -> samples_container_t
+
+	* ui/.cvsignore: update
+
+	* pp/opf_filter.cpp: move filename_match ...
+	* libutil++/filename_match.cpp: here
+	* libutil++/filename_match.cpp:
+	* libutil++/Makefile.in:
+
+	* pp/Makefile.in: fix typo that prevent op_to_source
+	  to be recompiled
+
+2002-05-08  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* doc/Makefile.in: make clean delete *.html
+ 
+	* libdb/db-debug.c: pedantry
+ 
+	* libutil/op_fileio.h:
+	* libutil/op_fileio.c:
+	* pp/oprofpp.cpp: remove unused code and change
+	  function names
+ 
+2002-05-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil/op_libiberty.h: fix compile error (missing
+	  size_t definition)
+
+2002-05-08  John Levon  <moz@compsoc.man.ac.uk>
+
+	* Makefile.in: missing backslash
+ 
+2002-05-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* <various>: OK I lied. Fix some doxygen warnings,
+	  and some char const *a -> const char * a
+ 
+	* doc/srcdoc/Makefile: add
+ 
+2002-05-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* <all>: ok, fix the headers properly. Last tedious
+	  patch, I promise.
+ 
+	* dae/opd_util.h: finally remove !
+ 
+2002-05-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* <various>: move to new header style, doxygen
+	  should use @param blah not @blah: or \param blah 
+
+	* doc/srcdoc/Doxyfile: new file for api docs
+
+	* scripts/Doxyfile:
+	* scripts/dodoc: remove
+ 
+2002-05-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: don't add KINC to BKCFLAGS directly
+ 
+	* module/Makefile.in: re-write
+ 
+	* TODO: update
+ 
+2002-05-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	Massive re-organisation of code + build. Most
+	files have been changed. Some small cosmetic
+	changes.
+ 
+	* libutil/:
+	* libutil++/: general-purpose utility libs
+
+	* libop/: oprofile-specific utility lib
+
+	* utils/: moved op_start et al to this dir
+
+	* events/:
+	* util/: removed
+
+	* libutil++/child_reader.cpp: make sure to set
+	  member "pid", not local variable
+
+2002-05-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/op_session.c: tweak error message when session already
+	  exist. Avoid to op_dump when profiler is not started.
+
+2002-05-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update:
+
+	* dae/op_session.c: do not create empty session directory
+	  and backup oprofileg.log too
+	* dae/opd_util.c:
+	* op_user.h: minor related change
+
+2002-05-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.xml: update copyright for 2002
+
+	* doc/xsl/xhtml-chunk.xsl: indent=yes
+ 
+2002-05-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+	
+	* Makefile.in: update my release steps
+ 
+2002-05-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: ->0.3cvs
+
+	* results/: hmm, remove /all/ the files 
+ 
+2002-05-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: bump to 0.2
+ 
+2002-05-04  William Cohen  <wcohen@nc.rr.com>
+
+	* doc/oprofile.xml: add note on power management
+ 
+2002-05-03  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/Makefile.in:
+	* doc/xsl/xhtml-common.xsl:
+	* doc/xsl/xhtml.xsl:
+	* doc/xsl/xhtml-chunk.xsl: use some xsl to fix
+	  some of the problems (not all :()
+ 
+2002-05-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+2002-05-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_session.c: couple of improvements
+ 
+	* dae/opd_util.c: fix warning
+
+	* doc/oprofile.xml: some docs on op_session
+
+	* pp/op_time.cpp: introduce -s parameter (should be
+	  in all utils)
+ 
+2002-05-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprof_report/Makefile.in: disable for release
+ 
+2002-05-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* results/: nuke this in favour of oprofile-tests
+	  module
+ 
+2002-05-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+	* op_user.h:
+	* dae/op_start: 
+	* dae/op_stop: 
+	* dae/opd_util.h:
+	* dae/opd_util.c: 
+	* dae/oprofiled.c: 
+	* dae/oprofiled.h: 
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: 
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.h:
+	* gui/oprof_start_config.cpp:
+	* gui/ui/oprof_start_base.ui: 
+	* oprof_report/oprof_report.cpp: 
+	* pp/op_merge.cpp: 
+	* pp/op_time.cpp: 
+	* pp/opf_filter.cpp: 
+	* pp/oprofpp.cpp: 
+	* pp/oprofpp.h: 
+	* pp/oprofpp_util.cpp: remove useless command line
+	  options in anticipation of the new spec
+	 
+	* libdb/db-manage.c: reset base_memory and fd
+	  on close
+ 
+	* dae/.cvsignore: 
+	* dae/Makefile.in:
+	* dae/op_session.c:
+	* dae/opd_proc.c: 
+	* dae/opd_proc.h:
+	* dae/oprofiled.h:
+	* dae/oprofiled.c: use lock file for daemon.
+	  Implement named sessions
+ 
+2002-05-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/oprofpp.cpp:
+	* pp/op_time.cpp:
+	* pp/opf_container.cpp:
+	* pp/opf_filter.cpp:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp: fix sect_offset problem. now all
+	  class work on vma except samples_file_t which offset vma
+	  to samples files offset
+
+2002-05-01  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c:
+	* libdb/db-manage.c:
+	* libdb/db-test.c:
+	* libdb/db.h:
+	* pp/op_merge.cpp:
+	* pp/op_time.cpp:
+	* pp/oprofpp_util.cpp: allow read-only sample
+	  file reading
+	
+	* oprof_report/hotspot_view.cpp: fix warning
+ 
+2002-05-01  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_start:
+	* dae/oprofiled.c:
+	* doc/oprofile.1.in: 
+	* doc/oprofile.xml: 
+	* gui/oprof_start.cpp: 
+	* module/op_nmi.c:
+	* module/op_rtc.c:
+	* module/op_syscalls.c: 
+	* module/oprofile.h:
+	* module/oprofile.c: move pid/pgrp filter into
+	  userspace only. Remove --ignore-myself
+ 
+2002-04-30  John Levon  <moz@compsoc.man.ac.uk>
+
+	* op_user.h:
+	* dae/opd_proc.c:
+	* pp/oprofpp_util.cpp: first part of removing
+	  OPD_KERNEL_OFFSET
+
+2002-04-30  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/op_nmi.c: also allow user to see 0/ 1/ contents
+ 
+2002-04-30  William Cohen  <wcohen@nc.rr.com>
+
+	* module/oprofile.c: Allow non-root examination of
+	  /proc/sys/dev/oprofile and initiation of dump. 
+
+	* dae/op_dump: modify message for above
+
+2002-04-30  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+	* libdb/Makefile: remove from CVS
+ 
+	* dae/oprofiled.c:
+	* module/oprofile.c: 
+	* module/oprofile.h: use better hash function.
+	  Fold unused/full entry case into eviction case
+	  for faster common path
+ 
+2002-04-27  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: fix little blooper that shows up
+	  when CONFIG_M386 is chosen
+ 
+2002-04-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/oprofpp.cpp:
+	* pp/oprofpp_util.cpp: yet another bug fix for --sort=
+	  and counter nr command line specification ...
+
+2002-04-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_proc.c: opd_alarm() flush properly samples files
+
+	* oprof_report/oprof_report.cpp: use the right filename
+	  when selecting a shared lib profiled with --separate-samples
+
+2002-04-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/op_merge.c: implement merging of the new file format files.
+
+2002-04-21  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* oprof_report/Makefile.in:
+	* oprof_report/oprof_report.cpp: use db
+
+2002-04-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_proc.c: OPD_KERNEL_OFFSET thing
+	* pp/oprofpp_util.cpp:
+
+2002-04-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_proc.c: minor warning suppression
+
+	* pp/Makefile.in:
+	* pp/oprofpp.cpp:
+	* pp/op_time.cpp:
+	* pp/opf_container.cpp:
+	* pp/opf_filter.cpp:
+	* pp/oprofpp.h: handle the new db file format, this stuff is
+	  not yet extensively tested
+
+	* pp/op_merge.c: not already updated, exit at run time
+	  with an error message
+
+2002-04-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_proc.h:
+	* dae/oprofiled.h: enable db samples file format
+
+2002-04-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/*: initial import from oprofile-tests module
+	  note than this direcroty have it's own ChangeLog file
+	* dae/Makefile.in: use libdb.a
+	* dae/opd_util.h: use db.h. These change do not yet enable
+	  the db samples files format.
+
+2002-04-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO:
+	* doc/oprofile.xml:
+	* pp/oprof_convert.c:
+	* util/misc.h:
+	* util/misc.c:
+	* util/file_manip.h:
+	* pp/Makefile.in: kill oprof_convert
+	 
+2002-04-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/opf_container.cpp:
+	* pp/oprofpp.h:
+	* pp/demangle_symbol.h:
+	* pp/demangle_symbol.cpp:
+	* pp/Makefile.in: move demangle_symbol into own
+	  file
+ 
+	* TODO: update some...
+ 
+2002-04-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opf_filter.cpp: fix a memory leak uncovered
+	  by valgrind <http://developer.kde.org/~sewardj>
+
+2002-04-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/oprofiled.h: move definition of linked list to ...
+	* dae/opd_list.h: this new file
+	
+	* dae/opd_proc.c: iterate on opened sample file
+	  rather on image list to sync mmap'ed file
+
+2002-04-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/oprofpp.h:
+	* oprof_report/oprof_report.cpp:
+	* pp/op_time.cpp:
+	* pp/opf_container.cpp:
+	* pp/opf_filter.cpp:
+	* pp/oprofpp_util.cpp:
+	* pp/oprofpp.cpp: use samples_file_t as internal implementation
+	  of opp_samples_files. Now all samples files read are made
+	  through samples_file_t object.
+
+2002-04-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/op_start: fix bash1 detection
+
+	* doc/Makefile.in: fix install target
+
+2002-03-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: some preliminary stuff for NGPT
+
+	* TODO: update
+
+	* doc/Makefile.in:
+	* doc/oprofile.sgml:
+	* doc/oprofile.xml: move to DocBook/XML
+
+	* doc/oprofile.xml: document Bash 2 dependency
+ 
+	* dae/op_start: fix for /bin/bash being bash v1 - untested
+ 
+2002-04-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/oprofpp.cpp:
+	* pp/oprofp_util.cpp: debug and use opp_bfd::symbol_size()
+
+2002-03-30  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* ChangeLog: change my email address
+
+2002-03-22  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/op_start: default buffer size to zero and let module
+	  override the default.
+
+	* module/op_rtc.c:
+	* module/oprofile.h:
+	* op_user.h:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h: an another coherency fix, unhopefully
+	  this bug fix does not fix the configuration file (see # )
+
+	* pp/oprofpp.cpp: for gprof dump do not print events settings
+
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp: prepare using symbol size
+
+2002-03-21  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_filter.cpp:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp_util.cpp: factorize event settings output
+	* pp/oprofpp.h: ditto + do_list_xxx/do_dump_gprof : static
+	  free function rather than member function.
+
+2002-03-21  Philippe Elie  <ph_e@club-internet.fr>
+
+	* op_user.h:
+	* pp/oprofpp.h: more doxygen comments
+
+	* dae/opd_kernel.c:
+	* dae/opd_proc.c:
+	* dae/opd_util.c:
+	* dae/oprofiled.c:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_util.cpp: exit(): use {EXIT_FAILURE|EXIT_SUCCESS}
+
+2002-03-20  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_filter.h: simplify slightly interface of samples_files_t
+	* oprof_report/oprof_report.cpp:
+	* pp/op_time.cpp:
+	* pp/opf_container.cpp:
+	* pp/opf_filter.cpp:
+	* pp/oprofp.cpp: reflect the new interface.
+
+	* pp/opp_symbol.cpp: ParseOutputOption --> static member of
+	  OutputSymbol ...
+
+	* pp/opp_symbol.h:
+	* util/file_manip.h:
+	* util/string_manip.h: doxygen comments
+
+2002-03-19  Philippe Elie  <ph_e@club-internet.fr>
+
+	* scripts/Doxyfile: small tweak
+	* op_user.h:
+	* pp/opp_symbol.h:
+	* pp/oprofpp.h:
+	* util/child_reader.h: doxygen comments.
+
+2002-03-19  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_filter.h:
+	* pp/opf_container.cpp: remove delegation
+	  {symbol|samples}_container_t -> xxx_impl, no functionnal change
+
+	* pp/*: start a more serious doxygenization. first step
+	  include fixing prototype and a client documentation for
+ 	  opp_bfd
+	* script/Doxyfile: doxygen script for pp/*.h, util/*.h
+	
+2002-03-19  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/op_fixmap.c: include pagemap.h, so
+	we pick up highmem.h, which is needed with
+	some kernels (missing kmap_pagetable define
+	via pte_offset)
+
+2002-03-18  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/op_time.cpp:
+	* doc/oprofile1.1.in:
+	* doc/oprofile.sgml: allow reverse sort in all case
+
+	* pp/opp_symbol.h:
+	* pp/opp_symbol.cpp: remove unnecessary cast
+
+	* oprof_report/oprof_report.cpp:
+	* oprof_report/oprof_report.h:
+	* oprof_report/*_view.*: revert partially 2002-03-17 patch,
+	  making again data change notification in two step.
+
+2002-03-17  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprofpp_util.cpp: clarify binutils bug workaround
+ 
+2002-03-17  Philippe Elie  <ph_e@club-internet.fr>
+
+	* oprof_report/op_view.h:
+	* oprof_report/hostpost_view.cpp:
+	* oprof_report/hostpost_view.h:
+	* oprof_report/oprof_report.cpp:
+	* oprof_report/oprof_report.h:
+	* oprof_report/oprof_view.cpp:
+	* oprof_report/oprof_view.h: simplify virtual interface +
+	  minor graphic bug fix
+
+2002-03-16  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: update
+
+	* oprof_report/hotspot_view.cpp: new
+	* oprof_report/hotspot_view.h: new HotspotView class
+	* oprof_report/oprof_report.cpp:
+	* oprof_report/oprof_report.h:  use HotspotView
+	* oprof_report/Makefile.in: reflect above
+
+	* pp/op_time.cpp: small tidy
+
+2002-03-15  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: update
+
+	* dae/oprofiled.c: fix --version when module is not loaded
+
+	* pp/opp_symbol.cpp:
+	* pp/opp_symbol.h: avoid to padd the last field, use a positive
+	  form for osf_header
+
+	* pp/oprofpp.h:
+	* pp/oprofpp.cpp:
+	* pp/opf_filter.cpp:
+	* pp/opprofpp_util.cpp:
+	* pp/op_time.cpp: fix --sort option
+
+2002-03-14  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: update
+
+	* pp/op_time.cpp:
+	* pp/opf_filter.cpp:
+	* pp/opp_symbol.cpp:
+	* pp/oprofpp_.cpp:
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp: handle -c0,1 and --sort #nr_ctr
+	  for all post-profile tools allowing a more precise way
+	  to specify on which counters tools must work
+
+2002-03-13  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprofpp_util.cpp: get_linenr() better handling
+	  of bfd_find_nearest_line. Fix #529622
+
+	* pp/opf_container.cpp: simplify symbol_container_impl
+
+	* pp/opp_symbol.cpp: use ostringstream only when necessary
+
+2002-03-09  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: some laptops have a usable local APIC
+ 
+2002-03-09  Philippe Elie  <ph_e@club-internet.fr>
+
+	* oprof_report: new directory, oprofpp/op_time like GUI
+	* oprof_report/op_view.h: base class for view
+	* oprof_report/oprof_report_main.cpp:
+	* oprof_report/oprof_report.h:
+	* oprof_report/oprof_report.cpp: main class
+	* oprof_report/oprofpp_view.h:
+	* oprof_report/oprofpp_view.cpp: oproffp like view
+	* oprof_report/Makefile.in:
+	* oprof_report/ui/oprof_report.base.ui: oprof_report UI
+	* oprof_report/ui/Makefile.in:
+
+	* Makefile.in:
+	* configure.in: handle oprof_report
+
+	* ui/Makefile.in: clarify how dependencies work
+
+2002-03-08  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: bump to 0.2cvs
+
+	* TODO: update
+ 
+2002-03-07  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_container.cpp: handle osf_short_linr_info
+	* pp/opp_symbol.cpp: tweak output output when
+	  linenr/filename is not available
+
+2002-03-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* util/Makefile.in: remove -pedantic (Phil don't you
+	  read comments ? ;)
+ 
+2002-03-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* pp/: use "invalid" not "illegal"
+ 
+2002-03-06  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+2002-03-06  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opfropp_util.cpp: more specific error messages
+
+	* doc/oprofile.sgml: clarify problem about sparse
+	  samples files and filesystem.
+
+	* util/file_manip.h:
+	* util/file_manip.cpp: create_file_list() allow recursive
+	  file list creation.
+	* pp/op_time.cpp: add option -p/-P to allow specifying
+	  alternate path name where to search for image name
+	* doc/oprofile.1.in:
+	* doc/oprofile.sgml: update option for op_time
+
+2002-03-05  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprofpp_util.cpp: remove multiple symbols belonging
+	  to the same vma (Fix #526098)
+	  Accept also all symbol types, we filter them by name.
+
+2002-03-04  Philippe Elie  <ph_e@club-internet.fr>
+
+	* util/misc.h: minor comment fix
+
+	* pp/oprofpp_util.cpp: tweak the last commit
+
+2002-03-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/oprofpp_util.cpp: welcome in the local symbols ...
+ 
+2002-03-03  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_filter.h:
+	* pp/opf_container.cpp: samples_files_t::add() add an hint
+	  parameter on what information will needed.
+	* pp/op_time.cpp:
+	* pp/oprofpp.cpp:
+	* pp/opf_filter.cpp: use it
+	
+	* pp/op_time.cpp: when a samples files for one counter
+	  does not exist avoid to load it (op_time -l) fix #525237
+
+2002-03-02  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/Makefile.in: add -pedantic to CXXFLAGS
+	* pp/oprofpp.h: replace macro verpbrintf with a function
+	* pp/oprofpp_util.cpp: implement it
+	* pp/opp_symbol.h:
+	* pp/op_time.cpp: fix pedantic warning
+
+	* pp/opevents.cpp:
+	* op_user.h: op_get_cpu_nr_counters() new
+
+	* pp/op_time.cpp:
+	* pp/opf_container.cpp:
+	* pp/opf_filter.cpp:
+	* pp/opf_filter.h:
+	* pp/opp_symbol.cpp:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp_util.cpp: remove global var op_nr_counters
+
+2002-03-02  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/op_syscalls.c: do not pre-allocate some dname
+	  hash map entry for common pathname but pre alloc entry
+	  zero to reserve it
+
+	* pp/op_time.cpp: add image name to the default output format
+
+	* module/compat22.h: move cacheline_aligned macro to ...
+	* module/op_cache.h: this new file
+	* module/compat.h: use it
+	* module/compat22.h:
+	* module/oprofile.c: replace some __cacheline_aligned by
+	  __cacheline_aligned_in_smp
+
+2002-03-01  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/opd_kernel.c:
+	* dae/opd_proc.c: simplify handling of kernel samples
+
+	* pp/opt_time.cpp:
+	* pp/opp_symbol.cpp:
+	* pp/opp_symbol.h:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp.h: tidy, gives a negative form to header output
+	  format
+
+	* version.h.in: new macro show_version() to output version
+	* doc/oprofile.sgml: document it
+	* dae/oprofiled.c:
+	* events/op_help.c:
+	* pp/op_merge.cpp:
+	* pp/op_time.cpp:
+	* pp/opf_filter.cpp:
+	* pp/oprofpp.cpp: use it
+
+2002-03-01  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* module/oprofile.c:
+	* module/op_syscalls.c: merge note/map lock 
+ 
+2002-02-27  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: upadte
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.sgml:
+	* pp/opp_symbol.h:
+	* pp/opp_symbol.cpp:
+	* pp/oprofpp.cpp: use columned output for oprofpp -L, -s
+
+	* pp/oprofpp.cpp: command-line counter specification
+	  was broken by my last patch
+	* pp/opf_filter.cpp: ditto but bug comes from the far past
+
+2002-02-26  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/op_merge.cpp: small tidy
+
+	* pp/op_time.cpp:
+	* pp/opf_container.cpp:
+	* pp/opf_filter.h:
+	* pp/opf_filter.cpp:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp: remove the nasty global var int ctr;
+	  pass it as parameter to each relevant function using it.
+
+	* module/compat.h: support for 2.5.5. 2.4.18 also tested
+
+	* pp/opp_symbol.h:
+	* pp/opp_symbol.cpp: new, mainly for implementing --output-format
+	* pp/op_time.cpp:
+	* pp/oprofpp.cpp: use output format stuff
+	* pp/Makefile.in: reflect above change
+	* doc/oprofile.1.in:
+	* doc/oprofile.sgml: document --output-format
+
+2002-02-13  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: update
+
+	* module/compat22.h:
+	* module/compat24.h:
+	* module/oprofile_nmi.S: small tidy
+
+	* module/op_apic.c:
+	* module/op_fixmap.c:
+	* module/op_nmi.c:
+	* module/oprofile.h: avoid memory leak of apic mapping
+
+2002-02-12  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: update
+
+	* pp/oprofpp_util.cpp: use stable sort and correct the comparison
+	  function on symbol vma
+	* pp/opf_filter.cpp: remove a boring new line in output
+
+	* module/makefile.in: optimize for 686 but do not use any specific
+	  686 insn.
+
+	* configure.in: check against CONFIG_PREEMPT
+
+2002-02-10  John Levon  <moz@compsoc.man.ac.uk>
+
+	* events/op_events_desc.c: remove dead code
+ 
+	* module/compat.h: RedHat backported MODULE_LICENSE()
+ 
+	* module/op_syscalls.c:
+	* module/op_util.c: remove FIXMEs
+ 
+2002-02-09  Bob Montgomery  <bobm@fc.hp.com>
+
+	* module/op_rtc.c: right actual RTC value back
+
+	* doc/oprofile.sgml: document that
+
+2002-02-09  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/op_init.c: set rtc cpu type directly
+ 
+2002-02-08  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: update
+
+	* module/oprofile_nmi.S: cut and copy from oprofile_nmi24.s
+	* module/oprofile_nmi22.S: remove
+	* module/oprofile_nmi22.S: remove
+	* module/Makefile.in: reflect them
+
+	* pp/opf_filter.cpp: do not print unit mask for RTC cpu type
+
+	* doc/oprofile.sgml: document post-profile tools commons options
+
+2002-02-05  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: update mainly by moving things to 0.1
+
+	* pp/opf_filter.h:
+	* pp/opf_container.cpp: small cleanup + minor tweak to get
+	  more reliable sort order on filename.
+
+2002-02-05  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_filter.h: declare create_artificial_symbol()
+	* pp/oprofpp_util.cpp: show how elf symbols size could
+	  be handled.
+
+	* pp/oprofpp_util.cpp: add BSF_GLOBAL symbols to
+	  symbols of interest.
+
+2002-02-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/oprofile.c: add [un]lock_sysctl
+ 
+2002-02-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/oprofiled.h:
+	* dae/oprofiled.c:
+	* dae/opd_proc.c: free stuff on shutdown (to
+	  clean dmalloc reports)
+ 
+2002-02-03  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: bump to 0.1
+
+	* TODO: update
+ 
+2002-02-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: bump to 0.0.9
+ 
+2002-02-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/op_nmi.c: fix stupid bug spotted by Bob
+	  Montgomery
+ 
+2002-02-01  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/compat.h: define REMAP_PAGE_RANGE
+	* module/op_syscalls.c: use it (2.5.3 support)
+
+2002-01-30  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/compat.h:
+	* module/op_nmi.c: re-add explicit constant for all MSR_
+	  constants.
+
+2002-01-30  Philippe Elie  <ph_e@club-internet.fr>
+
+	* configure.in:
+	* doc/oprofile.sgml:
+	* module/compat22.h: remove support for kernel version
+	  prior to 2.2.11
+
+	* module/op_fixmap.c:
+	* module/compat.h: small cleanup
+
+	* module/oprofile.c: avoid multi-line literal string
+
+	* pp/oprofpp_util.cpp: better to get_symbols() ;)
+
+2002-01-29  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/op_fixmap.c: remap fake mapping on 2.2 as well
+	  when necessary
+ 
+2002-01-27  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/Makefile.in: sorry, -Werror is only usefull
+	  for test.
+
+	* doc/oprofile.1.in: a few words about op_stop
+
+	* module/compat.h:
+	* module/compat22.h:
+	* module/compat24.h: change pte_page_address definition
+	  for 2.2.20
+
+	* pp/opf_container.cpp: no warning when creating artificial symbols
+	* pp/oprofpp_tuil.cpp: no warning for image without symbols
+
+2002-01-27  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprof_start.cpp:
+	* pp/op_merge.cpp:
+	* pp/op_time.cpp:
+	* pp/opf_container.cpp: std namespace fixes.
+ 
+2002-01-27  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/op_time.cpp: small hacky output cleanup
+ 
+2002-01-27  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: update
+
+	* dae/opd_proc.c: small cleanup
+
+	* doc/opf_container.cpp: handle image without symbols
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.sgml:
+	* doc/op_time.cpp: implement and document --demangle
+	  and --show-image-name
+
+	* pp/oprofpp_util.cpp: add using elf symbols size but
+	  disable it
+
+2002-01-26  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* dae/opd_proc.c: tiny clean
+
+	* doc/oprofile.sgml: spell fix
+ 
+2002-01-26  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: update
+
+	* pp/op_merge.c: remove FIXME
+	* pp/op_time.cpp: minor fix
+	
+	* pp/opf_filter.h:
+	* pp/opf_filter.cpp:
+	* pp/oprofpp.cpp:
+	* pp/opf_container.cpp: Show more clearly than
+	  samples_files_t support adding any number of samples
+	  files to the underlined container.
+
+2002-01-26  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/oprofpp_util.cpp: allow to load image without symbols
+
+	* pp/Makefile.in:
+	* pp/op_time: implement -l option that show symbols details.
+	  Currently with separate-samples files symbols are showed
+	  more than one time. This is a bug rather a feature.
+	* doc/oprofile.1.in:
+	* doc/oprofile.sgml: document op_time -l
+
+	* dae/opd_proc.c: bug fix from last change
+
+2002-01-25  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO:
+	* dae/opd_proc.c: search maps in reverse order so we prefer
+	  newer mappings.
+ 
+2002-01-25  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/op_merge.cpp: minor fix + comment
+	* pp/op_time.cpp: comment, use samples_file_t
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp: minor change
+
+2002-01-24  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c: remove stale comment
+
+	* TODO: update
+
+	* module/compat.h:
+	* module/compat22.h:
+	* module/compat24.h: fix for pte_page on 2.2.20+
+ 
+2002-01-24  Philippe Elie  <ph_e@club-internet.fr>
+
+	* op_merge.cpp:
+	* oprofpp.h:
+	* oprofpp_util.cpp: code move + cleanup
+
+2002-01-23  Philippe Elie  <ph_e@club-internet.fr>
+
+	* util/shared_ptr.h: a templatized shared pointer.
+
+	* pp/op_merge.c: new to merge samples files
+	* pp/Makefile.in:
+	* pp/opf_filter.cpp:
+	* pp/opf_filter.h:
+	* pp/oprofpp.h:
+	* pp/oprofpp_util.cpp: minor change to add op_merge support
+
+	* doc/Makefile.in:
+	* doc/oprofile.1.in:
+	* doc/oprofle.smgl: document op_merge
+
+2002-01-22  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/Makefile.in: can only depmod if we run that kernel
+ 
+	* module/op_fixmap.c: deal with no APIC config for
+	  2.4.10+
+ 
+2002-01-22  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/Makefile.in:
+	* module/oprofile.h:
+	* module/oprofile.c:
+	* module/op_x86.c:
+	* module/op_apic.c:
+	* module/op_fixmap.c: split op_x86.c. Various changes to
+	  only enable the APIC if it's not, and to remap / map the APIC
+	  as is necessary.
+
+	* module/apic_up_compat.h: 
+	* module/compat.h:
+	* module/compat22.h: clean up V_*() macros
+
+	* module/op_init.c: remove FORCE_RTC
+ 
+2002-01-22  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: update
+
+	* dae/opd_proc.c: use remove not unlink
+	* gui/oprof_start.cpp: use remove not system("rm xxx")
+
+	* doc/Makefile.in: slightly improvment
+	* doc/oprofile.1.in: move --help --version to a common section
+
+2002-01-21  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/compat22.h: fix missing cli()
+ 
+2002-01-21  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/oprofile.c: 
+	* module/compat22.h:
+	* module/compat24.h: fix NMI wake-up for 2.2 SMP
+ 
+	* module/op_dcache.h: add KERN_ERR
+ 
+	* module/op_x86.c: cleanup a little
+ 
+2002-01-21  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: update
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.sgml: minor change
+
+	* module/Makefile.in: auto-dependencies for compat.c
+
+	* module/compat.c:
+	* module/compat22.h: FIXME remove for vmalloc_32
+
+2002-01-20  Philippe Elie  <ph_e@club-internet.fr>
+
+	* gui/oprof_start.cpp: fix configuration saving when
+	  switching of cpu_type.
+
+	* module/Makefile.in:
+	* module/compat.c: minor change
+
+	* compat.h: add minor macro
+	* oprofile.c: use minor instead MINOR (2.5.2 support)
+
+	* op_x86.c: check SPIV (missing from a previous patch)
+
+2002-01-20  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: punt some things to next release
+
+	* dae/opd_proc.c: fix printf of null
+ 
+2002-01-20  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+	* module/oprofile.c: add comment
+ 
+	* module/compat22.h:
+	* module/compat24.h:
+	* module/op_syscalls.c: fix locking for out_mmap
+ 
+2002-01-20  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/op_x86.c: check MSR + SPIV for enabling APIC
+ 
+	* module/compat.c: don't attempt to get root
+
+	* module/compat.h: NEED_FIXMAP fixes
+ 
+2002-01-18  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: update
+
+	* module/compat.h:
+	* module/compat24.h: move things needed for 2.2/2.4 in compat.h
+
+2002-01-18  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/compat22.h: never wake up from NMI
+	  on 2.2 SMP for now :(
+ 
+2002-01-18  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/compat.h:
+	* module/compat22.h: 
+	* module/compat24.h: s/VATLEAST/V_AT_LEAST/
+ 
+	* module/oprofile.c: remove dead code
+ 
+2002-01-17  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/compat.c: don't need to re-take BKL for
+	  d_path on 2.2
+ 
+2002-01-17  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/compat22.h:
+	* module/compat24.h:
+	* module/op_syscalls.c: we mustn't take the mmap sem
+	  under 2.2
+ 
+2002-01-17  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/compat22.h:
+	* module/compat24.h:
+	* module/op_syscalls.c: whoops, handy to lock the
+	  BKL when it is necessary.
+ 
+	* dae/oprofiled.c: fix warning
+
+2002-01-17  John Levon  <moz@compsoc.man.ac.uk>
+
+	* op_user.h:
+	* dae/op_start:
+	* gui/oprof_start_config.h:
+	* module/oprofile.h: bump note size and watermark,
+	  I was getting problems on my dual SMP box in kernel compiles
+ 
+2002-01-17  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/Makefile.in:
+	* module/oprofile_nmi.S:
+	* module/oprofile_nmi22.S:
+	* module/oprofile_nmi24.S: split assembly for 2.2/4 
+
+	* module/compat.h:
+	* module/compat22.h:
+	* module/compat24.h: s/AFTER/ATLEAST/
+ 
+2002-01-17  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/compat24.h: define to have ->owner
+ 
+2002-01-17  Philippe Elie  <ph_e@club-internet.fr>
+
+	* gui/oprof_start.h:
+	* gui/oprof_start_config.h:
+	* gui/oprof_start.cpp: validate the RTC max count
+
+2002-01-17  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* oprofile.c:
+	* module/compat24.h: 
+	* module/compat22.h: fix compile, nmi wake up check
+	 
+	* module/op_rtc.c: user/kernel profiling feature
+ 
+2002-01-17  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: clarification
+ 
+	* module/compat22.h:
+	* module/compat24.h:
+	* module/oprofile.c: ->owner fixes
+ 
+2002-01-17  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/oprofile.h: clean up
+ 
+	* module/compat.h:
+	* module/compat22.h:
+	* module/compat24.h: split header files up
+	  for readability
+ 
+2002-01-17  Philippe Elie  <ph_e@club-internet.fr>
+
+	* TODO: update
+
+	* doc/oprofile.sgml: speach about assembler
+
+	* module/compat.h: small tweak for 2.2, no impact on 2.4
+
+2002-01-16  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: look for rtc_lock
+ 
+	* module/compat.h: use rtc_lock if there
+
+2002-01-16  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/compat.h:
+	* module/apic_up_compat.h: cleanup + allow compile
+	  !CONFIG_X86_LOCAL_APIC on 2.4/2.5. (only compile
+	  tested)
+
+2002-01-15  Philippe Elie  <ph_e@club-internet.fr>
+
+	* events/op_events.c: avoid gui crash: event name must
+	  contain only one word. If you test RTC patch destroy
+	  ~/.oprofile/oprof_start_event#0
+
+2002-01-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/compat.h:
+	* module/compat.c:
+	* module/op_rtc.c: 2.2 modversions fix
+ 
+2002-01-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* module/compat.h:
+	* module/compat.c:
+	* module/op_rtc.c: fix 2.2 compile
+
+2002-01-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/Makefile.in: whoops, forgot to commit this
+ 
+2002-01-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprof_start.cpp: some improvements for RTC
+ 
+2002-01-15  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_stop: fix "op_start && op_stop" bug using multiple
+	  dump_stop writes.
+
+2002-01-14  Dave Jones <davej@suse.de>
+
+	* pp/op_time.cpp: fix for printing (NaN%) in the zero sample case.
+
+2002-01-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/op_rtc.c: remove unneeded check
+
+2002-01-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_start: fix for PMC case
+ 
+2002-01-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* dae/op_start: take --rtc-value
+
+	* dae/oprofiled.c: set headers sensibly for RTC
+
+	* doc/oprofile.1.in: update
+
+	* doc/oprofile.sgml: RTC update
+
+	* events/op_events_descr.c: 
+	* events/op_events.c: good name for RTC event 
+
+	* gui/oprof_start.cpp: basic support for RTC
+
+	* module/op_rtc.c: implement and use rtc_value
+
+2002-01-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* dae/op_start: load module at start. Handle CPU_RTC.
+	  Avoid sysctl for now on RTC case.
+
+	* dae/oprofiled.c: only read sysctls if PMC. Needs clean.
+
+	* events/op_events.c: add RTC event.
+
+	* events/op_events_desc.c: get CPU type from module. 
+
+	* module/op_init.c: detect CPU_RTC.
+
+	* module/op_nmi.c: setup code moved from op_init.c
+
+	* module/op_rtc.c: enable interrupt, fixed at 128 for now.
+
+	* module/op_x86.c: add Athlon to needs_apic_setup checks
+
+	* module/oprofile.c: use correct interrupt handler based on
+	  CPU type
+
+2002-01-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* op_user.h: add CPU_RTC
+
+	* op_init.c: add FIXMEs
+
+	* op_nmi.c:
+	* op_rtc.c:
+	* oprofile.h:
+	* oprofile.c: implement abstract interrupt handler code
+
+2002-01-14  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprof_start_config.cpp: fix vmlinux/system.map defaults
+ 
+2002-01-13  Philippe Elie  <ph_e@club-internet.fr>
+
+	* configure.in: reject unsupported kernel version
+	* module/apic_up_compat.h:
+	* module/compat.h: small cleanup
+	* module/op_x86.c: ditto, always put apic memory page as
+	  non cachable
+
+2002-01-12  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprof_start_util.h:
+	* gui/oprof_start_util.cpp: implement whitelist for arguments
+	  to op_start
+ 
+	* TODO: update
+
+2002-01-13  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/compat.h:
+	* module/apic_up_compat.h:
+	* module/op_x86.c: allow to run oprofile when
+	  !CONFIG_X86_LOCAL_APIC on 2.2.x kernel
+
+2002-01-12  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/compat.h: fix some FIXME
+	* module/op_x86.c: do not hang SMP kernel UP box with 2.2.x
+
+2002-01-11  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/compat.h: support for UP from 2.2.0, for SMP
+	  from 2.2.8. It is worthwhile to try more support.
+	  !CONFIG_X86_LOCAL_APIC not yet supported.
+
+2002-01-11  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* dae/opd_proc.c:
+	* doc/oprofile.sgml:
+	* pp/op_time.cpp: add FIXMEs
+ 
+2002-01-11  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/oprofile.c: never return 0 unless we're
+	  really closing down
+ 
+2002-01-11  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+	* gui/Makefile.in:
+	* gui/oprof_start.cpp: use absolute paths
+ 
+2002-01-11  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: add note about --with-linux
+ 
+2002-01-11  John Levon  <moz@compsoc.man.ac.uk>
+
+	* Rules.make.in:
+	* gui/Makefile.in:
+	* gui/oprof_start_config.h:
+	* gui/oprof_start_config.cpp: remove kernel headers
+	  from userland !
+
+2002-01-11  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: remove dead checks. comment out APIC check,
+	  hide grep output
+
+	* module/Makefile.in: add compat.c
+
+	* apic_up_compat.h: UP 2.2 missing defines. Need to investigate
+	  fixmap situation. 
+
+	* compat.c: move 2.2 dcache code here
+
+	* compat.h: dcache compat support. check for whether we
+	  should check for mptable. Don't do fixmap hack on 2.2 
+
+	* op_dcache.h: shared dcache inline functions
+
+	* op_syscalls.c: clean up dcache code for 2.2/2.4 
+
+	* op_x86.c: update apic_need_setup for 2.2 and the possibility
+	  of not enabling APIC support on 2.4 too. Needs checking ! Also
+	  don't do mptable check on 2.2
+
+	* oprofile.h: add missing include guard ;)
+ 
+2002-01-11  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/compat.h: minor fixes
+ 
+2002-01-11  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/compat.h: many change, can be used down to 2.2.8
+	* module/oprofile.h: move #ifdef on kernel version to compat.h
+	* module/op_util.c:
+	* module/op_syscalls.c: minor change
+	* configure.in: comment unnecessary stuf.
+
+	* module/Makefile.in: missing include path for oprofile.s
+
+2002-01-10  John Levon  <moz@compsoc.man.ac.uk>
+
+	* Makefile.in: update checklist for dist
+
+	* module/oprofile.h: add apparently needed version.h
+ 
+2002-01-10  John Levon  <moz@compsoc.man.ac.uk>
+
+	* configure.in: fix accidental trashing of BKCFLAGS
+
+	* module/op_util.c: include right header
+
+	* module/compat.h: use correct smp_call_function
+ 
+2002-01-10  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/compat.h: new file include backward compatibility
+	  stuff
+
+2002-01-09  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: update infodragon's email
+	  address
+ 
+	* configure.in: bump to 0.0.9cvs
+
+2002-01-08  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* configure.in: fix case when X isn't installed. Bump to 0.0.8
+ 
+2002-01-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* util/Makefile.in: "fix" last g++ 3.0 problem
+	  with libiberty.h and string.h clashing prototypes
+	  by disabling -pedantic for this directory
+ 
+2002-01-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* pp/opf_container.cpp:
+	* pp/opf_filter.h:
+	* pp/oprofpp.cpp: 
+	* pp/oprofpp.h: 
+	* pp/oprofpp_util.cpp: 
+	* util/file_manip.h:
+	* util/file_manip.cpp: 
+	* util/string_manip.h: fix most g++ 3.0 problems
+
+2002-01-07  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+ 
+2002-01-05  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.sgml: Avoid to use -- inside
+	  sgml comment
+
+2002-01-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_start:
+	* dae/op_stop: (very) hacky loop to wait for
+	daemon start and stop
+ 
+2002-01-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/oprofile.c: revert my broken stop fix,
+	  and fix the old (new) one
+ 
+2002-01-05  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_kernel.c:
+	* dae/opd_proc.c:
+	* dae/opd_proc.h:
+	* dae/opd_util.c:
+	* dae/oprofiled.c: 
+	* dae/oprofiled.h: further minor cleanups
+
+2002-01-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/oprofile.c: change last change to have an
+	  explicit check in the sysctl dump, rather than generalised
+	  code.
+
+2002-01-04  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/oprofile.c: do not re-enable counter during
+	  shutdown
+
+	* dae/Makefile.in: fix opd_kernel.c dependancy
+
+2002-01-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/Makefile.in:
+	* dae/opd_proc.c:
+	* dae/opd_kernel.c: move kernel/module stuff into
+	  new file. Some minor changes.
+ 
+2002-01-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/oprofiled.c: remove extra dump
+ 
+2002-01-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_proc.c: minor crap
+ 
+2002-01-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* TODO: update
+
+	* dae/oprofiled.c:
+	* dae/oprofiled.h:
+	* dae/opd_proc.c: print stats on shutdown too
+
+	* module/oprofile.c: additional check against daemon hanging on shutdown :(
+ 
+2002-01-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_stop:
+	* dae/oprofiled.c:
+	* doc/oprofile.sgml:
+	* module/oprofile.h:
+	* module/oprofile.c: implement new clean shutdown via
+	  sysctl dump_stop
+
+2002-01-04  Philippe Elie  <ph_e@club-internet.fr>
+
+	* module/oprofile.c: add a warning when note buff overflow.
+
+2002-01-04  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/oprofile.c: pin note at the end on overflow
+ 
+2002-01-03  Philippe Elie  <ph_e@club-internet.fr>
+
+	* dae/opd_proc.c: Apologies: stupid bug. Never forget
+	  than LRU list of samples files must not contain already
+  	  unmaped files
+
+	* module/oprofile.c: another silly bug, detected cpu was
+	  overwritten...
+
+2002-01-03  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: some fixes, comments
+
+2002-01-03  Philippe Elie  <ph_e@club-internet.fr>
+
+	* doc/oprofile.sgml: improve documentation, corrected
+	  by John Levon
+
+2002-01-03  John Levon  <moz@compsoc.man.ac.uk>
+
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp:
+	* gui/ui/oprof_start.base.ui: remove the config buttons
+	  and save on a hide from the WM
+ 
+2002-01-03  John Levon  <moz@compsoc.man.ac.uk>
+
+	* module/oprofile.c: make sure note_pos never goes
+	  past the buffer :P
+ 
+2002-01-03  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/opd_util.c: allow EAGAINs through as well
+ 
+2002-01-02  Philippe Elie  <ph_e@club-internet.fr>
+
+	* pp/opf_container.cpp:
+	* pp/opf_filter.cpp: minor change
+
+2002-01-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* doc/oprofile.sgml: various docs improvements
+ 
+2002-01-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/oprofiled.c: better enable the actual
+	  profiling again :P
+ 
+2002-01-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* config.h.in: remove this again from CVS.
+ 
+2002-01-02  John Levon  <moz@compsoc.man.ac.uk>
+
+	* dae/op_stop: send SIGUSR1 to stop profiler
+ 
+	* dae/opd_proc.c: reformat a little
+ 
+	* dae/opd_util.h:
+	* dae/opd_util.c: change opd_read_device semantics
+ 
+	* dae/oprofiled.c: clean shutdown from SIGUSR1
+ 
+	* module/oprofile.c: handle non-blocking reads
+ 
+	* pp/opf_filter.h:
+	* pp/opf_filter.cpp: slight cleanups
+ 
+	* TODO: update
+ 
+2002-01-01  John Levon  <moz@compsoc.man.ac.uk>
+
+	* oprofile.sgml: clarify that -g is not necessary for
+	  basic profiling (reported by Jeff Epler <jepler@inetnebr.com>)
+
+See ChangeLog-2001 for earlier changelogs.
diff --git a/oprofile-0.9.7/ChangeLog-2003 b/oprofile-0.9.7/ChangeLog-2003
new file mode 100644
index 0000000..6356abe
--- /dev/null
+++ b/oprofile-0.9.7/ChangeLog-2003
@@ -0,0 +1,6251 @@
+2003-12-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: my_op_prefix is not necessarily suffixed by a '/'
+
+2003-12-29  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* doc/*.1.in: add HTML docs to SEE ALSO
+
+2003-12-29  John Levon  <levon@movementarian.org>
+
+	* doc/opcontrol.1.in:
+	* doc/oprofile.xml: minor language cleanups
+
+	* utils/opcontrol: only allow --verbose when it makes sense
+
+2003-12-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/tests/file_manip_tests.cpp: ensure filename passed to
+	  op_realpath() exists
+
+2003-12-28  John Levon  <levon@movementarian.org>
+
+	* doc/internals.xml:
+	* libutil++/file_manip.h: fix typos
+
+2003-12-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: error message rewording
+
+2003-12-16  Carlo Wood  <carlo@alinoe.com>
+
+	* libregex/tests/Makefile.am: avoid to install mangled-name test file
+
+2003-11-20  John Levon  <levon@movementarian.org>
+
+	* libregex/op_regex.cpp: move global ctor out of namespace
+	anon (bug #845616)
+
+2003-11-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/arrange_profiles.cpp: merge all unit mask before generating
+	  event description string
+
+2003-11-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/arrange_profiles.cpp: put unitmask in the same axis as
+	  event:count, meaning than unitmask is now a part of the event
+	  specification.
+
+2003-12-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_sfile.c: we reversed to/from pc in call graph sample
+
+2003-11-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile.h:
+	* pp/opgprof.cpp: oops a simplify a bit too cg handling in my last
+	  patch, it was segfaulting each time no cg file was found...
+
+2003-11-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opgprof.cpp: simplify a bit cg handling, we don't need to know
+	  if we retrieved some cg files since the profile_t will be empty
+	  in this case
+
+2003-11-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile.h: iterator::vma() must return the full key not only
+	  an unsigned int.
+	* pp/opgprof.cpp: implement merging of cg files.
+
+2003-11-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_spec.cpp:
+	* libpp/profile_spec.h:
+	* pp/opannotate_options.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opreport_options.cpp: filter call graph samples files
+
+2003-11-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_mangling.c: oops, it's better to really open the cg file
+
+	* daemon/opd_sfile.c:
+	* daemon/opd_stats.c:
+	* daemon/opd_stats.h:
+	* daemon/liblegacy/opd_24_stats.c:
+	* daemon/liblegacy/opd_24_stats.h:
+	* daemon/liblegacy/opd_proc.c: log sample lost due to sample file open
+	  failure
+
+2003-11-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/liblegacy/opd_parse_proc.c: always provide an image name
+	  for parsed process in /proc
+
+2003-11-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.xml:
+	* libop/op_cpu_type.c: s/hammer/AMD64 processors/ for user visible
+	  name.
+
+2003-11-13  John Levon  <levon@movementarian.org>
+
+	* libutil/op_file.h:
+	* libutil/op_file.c: remove op_c_dirname(),
+	op_relative_to_absolute_path(), op_is_directory(),
+	op_follow_link(), in favour of using realpath(3)
+
+	* libutil/tests/file_tests.c: fixes for above changes
+
+	* libutil++/file_manip.h:
+	* libutil++/file_manip.cpp: changes from above. Add
+	op_realpath().
+
+	* libutil++/tests/file_manip_tests.cpp: changes from 
+	above.
+
+	* daemon/oprofiled.c:
+	* daemon/liblegacy/opd_parse_proc.c:
+	* gui/oprof_start_util.cpp:
+	* libpp/locate_images.cpp:
+	* libpp/profile_spec.cpp:
+	* pp/opannotate.cpp: changes from above
+
+2003-11-12  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.8cvs
+
+2003-11-11  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.7.1
+
+2003-11-11  Joseph VanAndel  <unknown@unknown.org>
+
+	* daemon/liblegacy/init.c: fix #840046 (segfault when starting profiler
+	 with --no-vmlinux setup), this bug was present in 0.7.0.
+
+2003-11-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_spec.cpp: more precise error message
+	* libutil++/tests/file_manip_tests.cpp: corner case test added
+	  for dirname
+
+2003-11-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/arrange_profiles.cpp: report_error() shows only distinct
+	  conflicting name.
+
+2003-11-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/opcontrol.1.in: reverse kernel:user in event setting description.
+	  Fix #838968
+
+2003-11-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/init.c:
+	* daemon/liblegacy/init.c: move opd_read_fs_int ...
+	* daemon/oprofiled.h:
+	* daemon/oprofiled.c: here
+	* daemon/liblegacy/opd_24_stats.c: dump kernel note buffer overflow and
+	  buffer overlow
+
+2003-11-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/op_help.c: do not use OP_MAX_COUNTERS but get counter number
+	  at runtime
+
+2003-11-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/tests/string_manip_tests.cpp: rtrim/ltrim/trim tests
+
+2003-11-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/tests/Makefile.am:
+	* libop/tests/mangle_tests.c: new tests: sample filename mangling
+
+2003-11-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/x86/op_syscalls.c: fix build with 2.2 kernel
+
+2003-11-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* Makefile.am: use .PHONY for module goal to not statisfy this goal
+	  with the subdir named module
+	* m4/findkernel.m4: minor fix.
+
+2003-11-06  John Levon  <levon@movementarian.org>
+
+	* Makefile.am: minor cleanup
+
+2003-11-06  John Levon  <levon@movementarian.org>
+
+	* gui/Makefile.am: remove unused -DKVERSION
+
+2003-11-06  John Levon  <levon@movementarian.org>
+
+	* configure.in: add --disable-werror and --disable-optimization
+
+	* doc/oprofile.xml: document above. Remove docs for
+	* --enable-gcov (only useful to developers)
+
+2003-11-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_kernel.c:
+	* daemon/liblegacy/opd_kernel.c: be less paranoid about kernel range,
+	  this is slightly different than the patch Thomas Spatzier tested but
+	  it can't hurt (famous last words ...). This fixes s390x where kernel
+	  start can be zero and was rejected.
+
+2003-11-06  Thomas Spatzier  <tspat@de.ibm.com>
+
+	* daemon/opd_cookie.c: changed an #if defined for selecting right
+	  system call for IBM s390 or s390x, respectively
+	  
+2003-11-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/path_filter.cpp: remove 2 identical FIXME
+	* libutil++/tests/file_manip_tests.cpp:
+	* libutil++/tests/path_filter_tests.cpp: reflect the behavior by
+	  new tests
+
+2003-11-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db_manage.c:
+	* libop/op_events.h: -pedantic fix
+
+2003-11-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_sfile.c:
+	* daemon/liblegacy/opd_kernel.c:
+	* libutil/op_cpufreq.c:
+	* libutil/op_file.c: a few s/goto/break/
+	* libpp/format_output.cpp: padding never used after initialization
+
+2003-11-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/comma_list.h: don't accept cumulative behavior
+	* libutil++/string_manip.cpp: separate_token() return by value
+	* gui/oprof_start.cpp:
+	* libopt++/popt_options.cpp:
+	* libpp/parse_filename.cpp:
+	* libpp/profile_spec.cpp:
+	* libutil++/comma_list.h:
+	* libutil++/string_filter.cpp:
+	* libutil++/string_manip.cpp:
+	* libutil++/string_manip.h:
+	* libutil++/tests/comma_list_tests.cpp:
+	* libutil++/tests/string_manip_tests.cpp: update according
+	* libpp/profile_spec.cpp: remove all trace of defunct op_alias
+
+2003-11-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/liblegacy/opd_image.c:
+	* daemon/liblegacy/opd_image.h:
+	* daemon/liblegacy/opd_mapping.c:
+	* daemon/liblegacy/opd_mapping.h:
+	* daemon/liblegacy/opd_proc.c:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start.h:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_util.cpp:
+	* libop/op_config_24.h:
+	* libpp/format_output.cpp:
+	* libpp/op_header.cpp:
+	* libpp/profile.h:
+	* libpp/profile_container.cpp:
+	* libpp/profile_spec.cpp:
+	* libpp/profile_spec.h:
+	* libpp/symbol.h:
+	* libpp/symbol_sort.cpp:
+	* libutil++/stream_util.cpp:
+	* libutil++/stream_util.h:
+	* libutil++/utility.h:
+	* pp/common_option.cpp:
+	* pp/common_option.h:
+	* pp/opannotate_options.h:
+	* pp/opgprof.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opgprof_options.h:
+	* pp/opreport_options.cpp:
+	* pp/opreport_options.h:
+	* pp/populate.cpp: remove some .h dependencies
+
+2003-11-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/tests/Makefile.am:
+	* libutil++/tests/utility_tests.cpp: new test files convering most of
+	  utility.h and op_exception.h
+
+2003-11-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/parse_filename.cpp: avoid repetitive vector::erase(v.begin())
+	* libregex/stl.pat.in:
+	* libregex/tests/mangled-name.in: add (i|o)stream operator(>>|<<)
+
+2003-11-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/liblegacy/opd_image.h:
+	* daemon/liblegacy/opd_image.c:
+	* daemon/liblegacy/opd_proc.c:
+	* daemon/liblegacy/opd_sample_files.c: sparse sample file array
+	  allocated by line.
+
+2003-11-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/glob_filter.h:
+	* libutil++/path_filter.h:
+	* libutil++/string_filter.h: comment fix to match implementation
+	* libutil++/tests/path_filter_tests.cpp: new file test
+	* libutil++/tests/Makefile.am: upate build
+	* libutil++/tests/string_filter_tests.cpp: test white space at start
+	  of pattern
+
+2003-11-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/string_manip.cpp: format_double can only format percent
+	* libutil++/string_manip.h:
+	* libpp/format_output.cpp:
+	* libutil++/tests/string_manip_tests.cpp:
+	* pp/opannotate.cpp:
+	* pp/opreport.cpp: s/format_double/format_percent/
+
+2003-11-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/glob_filter.h:
+	* libutil++/string_filter.h:
+	* libutil++/tests/string_filter_tests.cpp: minor tidy
+
+	* libutil++/tests/glob_filter_tests.cpp: new file
+	* libutil++/tests/Makefile.am: update build
+
+2003-11-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/arrange_profiles.cpp: typo
+	* libutil++/generic_spec.cpp: removed file
+	* libutil++/Makefile.am: update according
+	* libutil++/generic_spec.h: ensure generic_spec<string> will not link
+	* libutil++/path_filter.cpp: minor tidy
+
+2003-11-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/tests/string_manip_tests.cpp: ehance output on failure
+	* module/oprofile.h:
+	* module/oprofile.c: two new read-only sysctl: nr_buffer_overflow and
+	  nr_note_buffer_overflow
+
+2003-11-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/tests/Makefile.am:
+	* libutil++/tests/file_manip_tests.cpp: don't use getcwd nor __FILE__
+	  but ${topdir} and hard coded filename
+
+2003-11-01  John Levon  <levon@movementarian.org>
+
+	* daemon/liblegacy/opd_parse_proc.c: use op_follow_link
+
+	* libutil/op_file.c:
+	* libutil/op_file.h: make op_get_link() static, rename
+	op_basename to op_c_basename
+
+	* libutil++/file_manip.cpp:
+	* libutil++/file_manip.h: rename to op_basename()/op_dirname().
+	Use op_follow_link() for follow_link().
+
+	* libutil++/tests/file_manip_tests.cpp:
+	* gui/oprof_start_util.cpp:
+	* libpp/locate_images.cpp:
+	* libpp/name_storage.cpp:
+	* libutil++/path_filter.cpp:
+	* pp/opannotate.cpp:
+	* pp/opreport.cpp: fixup from above changes
+
+2003-11-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.h: has_debug_info() new member
+	* pp/populate.h:
+	* pp/populate.cpp: 
+	* pp/opannotate.cpp: use it to error out when --assembly is not
+	  requested and no debug information exists
+
+2003-10-31  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/common_option.cpp: don't exit() if merge_by.lib is set through
+	  !allow_lib
+
+2003-10-31  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport_options.cpp: move handle_merge_option() ...
+	* pp/common_option.h: 
+	* pp/common_option.cpp: here
+	* pp/opannotate_options.cpp: use it but disallow --merge=lib
+
+2003-10-31  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil/op_file.c:
+	* libutil/op_file.h: implement dirname(), is_directory() and
+	  op_follow_link()
+	* daemon/oprofiled.c: follow symlink for image filter
+	* libutil++/file_manip.cpp:
+	* libutil++/file_manip.h:
+	* gui/oprof_start_util.cpp:
+	* libpp/profile_spec.cpp:  rename op_follow_link() to follow_link()
+
+2003-10-31  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil/tests/file_tests.c: "//usr" --> "//usr"
+	* libutil++/tests/.cvsignore:
+	* libutil++/tests/Makefile.am:
+	* libutil++/tests/file_manip_tests.cpp: new tests file.
+
+2003-10-31  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_perfmon.c: fix compilation
+
+2003-10-30  John Levon  <levon@movementarian.org>
+
+	* libpp/profile_spec.cpp: introduce a helper function
+	to make the comma_list matching clear
+
+2003-10-30  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/comma_list.h: is_set() new member
+	* libpp/profile_spec.cpp: fix matching logic for cpu/tid/tgid
+
+2003-10-30  John Levon  <levon@movementarian.org>
+
+	* libutil++/generic_spec.h: add value() and
+	is_set(), remove bool parameter from T value
+	match() (it was never set to true)
+
+	* libutil++/comma_list.h: do not accept
+	generic_spec, the behaviour was to implicitly
+	not match an "all" generic_spec. Instead:
+
+	* libpp/profile_spec.cpp: encode the matching
+	behaviour explicitly, and add a comment.
+
+	* libutil++/tests/comma_list_tests.cpp: fix to
+	match the above
+
+2003-10-30  John Levon  <levon@movementarian.org>
+
+	* Makefile.am: re-order build subdirs
+
+	* libabi/Makefile.am: only build abitest on
+	make check
+
+	* pp/Makefile.am: pp_common not pp_commons
+
+2003-10-30  John Levon  <levon@movementarian.org>
+
+	* libutil++/tests/Makefile.am:
+	* libutil++/tests/comma_list_tests.cpp: Add.
+
+2003-10-30  John Levon  <levon@movementarian.org>
+
+	* doc/Makefile.am: improve chunk rules
+
+2003-10-30  John Levon  <levon@movementarian.org>
+
+	* libutil++/tests/Makefile.am:
+	* libutil++/tests/string_filter_tests.cpp: Add.
+
+	* libutil++/tests/string_manip_tests.cpp: fix header include
+
+2003-10-30  John Levon  <levon@movementarian.org>
+
+	* libutil++/tests/string_manip_tests.cpp: fix tobool test
+	("33" is not castable to bool)
+
+2003-10-30  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/string_manip.cpp:
+	* libutil++/string_manip.h: remove tostr()/tobool/touint(), rename
+	  lexical_cast_no_ws<> to op_lexical_cast<>
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.cpp:
+	* libpp/arrange_profiles.cpp:
+	* libpp/filename_spec.cpp:
+	* libpp/op_header.cpp:
+	* libutil++/comma_list.h:
+	* libutil++/generic_spec.h:
+	* libutil++/tests/string_manip_tests.cpp: use op_lexical_cast<>
+
+2003-10-29  John Levon  <levon@movementarian.org>
+
+	* pp/common_option.h: use std namespace
+
+2003-10-28  Jason Lunz  <lunz@falooley.org>
+
+	* doc/oprofile.1.in: document cpu,tid,tgid in profile
+	spec
+
+2003-10-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_spec.cpp: error out for all tag:value specified
+	  more than once.
+
+2003-10-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/opannotate.1.in:
+	* doc/opreport.1.in:
+	* doc/oprofile.xml:
+	* libregex/demangle_symbol.cpp:
+	* libregex/demangle_symbol.h:
+	* pp/common_option.cpp:
+	* pp/common_option.h:
+	* pp/opannotate_options.cpp:
+	* pp/opannotate_options.h:
+	* pp/opreport_options.cpp:
+	* pp/opreport_options.h: remove --no-demangle, --smart-demangle and
+	  --demangle, replace them with --demangle=none|smart|normal
+
+2003-10-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/tests: new directory
+	* libutil++/tests/string_manip_tests.cpp: new tests file
+	* configure.in:
+	* libutil++/Makefile.am:
+	* libutil++/tests/.cvsignore:
+	* libutil++/tests/Makefile.am: handle new test
+
+	* libutil++/string_manip.h:
+	* libutil++/string_manip.cpp: correct implementation of separate_token
+	  to match the documentation
+	* daemon/liblegacy/opd_image.c: fix comment
+
+2003-10-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/count_array.cpp:
+	* libpp/count_array.h:
+	* libpp/locate_images.h:
+	* libpp/parse_filename.cpp:
+	* libpp/profile.cpp:
+	* libpp/profile.h:
+	* libpp/profile_spec.cpp:
+	* libpp/symbol_sort.cpp: minor tidy
+
+2003-10-28  Jason Lunz  <lunz@falooley.org>
+
+	* doc/opcontrol.1.in: better wording for --separate=
+	* doc/oprofile.1.in: typo
+
+2003-10-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/liblegacy/init.c:
+	* daemon/liblegacy/opd_24_stats.c:
+	* daemon/liblegacy/opd_24_stats.h:
+	* daemon/liblegacy/opd_image.c:
+	* daemon/liblegacy/opd_image.h:
+	* daemon/liblegacy/opd_kernel.c:
+	* daemon/liblegacy/opd_kernel.h:
+	* daemon/liblegacy/opd_mapping.c:
+	* daemon/liblegacy/opd_mapping.h:
+	* daemon/liblegacy/opd_parse_proc.c:
+	* daemon/liblegacy/opd_parse_proc.h:
+	* daemon/liblegacy/opd_proc.c:
+	* daemon/liblegacy/opd_proc.h:
+	* daemon/liblegacy/opd_sample_files.c:
+	* daemon/liblegacy/opd_sample_files.h: move doygen comment from *.c to
+	  *.h. Add some doxygen comment.
+
+2003-10-27  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/liblegacy/opd_24_stats.c:
+	* daemon/liblegacy/opd_image.h:
+	* daemon/liblegacy/opd_image.h: nr_images static
+
+2003-10-27  John Levon  <levon@movementarian.org>
+
+	* doc/opcontrol.1.in: document --image=
+
+	* doc/oprofile.xml:
+	* utils/opcontrol: make user specify "--image=all"
+	to reset. Clean up help message. Ensure note table
+	size is given a value. Add '-t' for '--stop', and
+	'-i' for '--image'.
+
+2003-10-27  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: document opcontrol --image=
+
+2003-10-27  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_events.h:
+	* daemon/opd_events.c: move code for handling
+	event descriptions here, and share find_counter_event(),
+	plus fill_header()
+
+	* daemon/opd_mangling.c:
+	* daemon/opd_perfmon.c:
+	* daemon/oprofiled.c:
+	* daemon/oprofiled.h:
+	* daemon/liblegacy/opd_proc.c:
+	* daemon/liblegacy/opd_sample_files.c: changes from
+	above
+
+2003-10-27  John Levon  <levon@movementarian.org>
+
+	* daemon/oprofiled.c: fix help text
+
+	* daemon/liblegacy/init.c:
+	* daemon/liblegacy/opd_proc.h:
+	* daemon/liblegacy/opd_proc.c: clean up headers
+	a bit
+
+2003-10-27  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp: check we can get kernel interface
+
+2003-10-27  John Levon  <levon@movementarian.org>
+
+	* daemon/liblegacy/Makefile.am: remove unneeded
+	-I for abi
+
+2003-10-27  John Levon  <levon@movementarian.org>
+
+	* daemon/init.c:
+	* daemon/opd_perfmon.c: move timer interrupt checks
+	into perfmon
+
+2003-10-27  John Levon  <levon@movementarian.org>
+
+	* daemon/oprofiled.c: use op_get_interface()
+
+	* libop/op_get_interface.c: simplify
+
+2003-10-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/ui/oprof_start.base.ui:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start.h: check separate_lib checkbox when
+	  separate_kernel_cb is checked
+
+2003-10-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: allow to reset --image through empty --image=
+	  or --image
+
+2003-10-26  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_cookie.c: reduce the hash table size somewhat
+
+	* various: fixes for doxygen
+
+2003-10-26  John Levon  <levon@movementarian.org>
+
+	* HACKING:
+	* configure.in:
+	* Makefile.am:
+	* dae/: move all of 2.4 daemon code to ...
+
+	* daemon/liblegacy/: here
+
+	* daemon/Makefile.am:
+	* daemon/opd_util.h:
+	* daemon/opd_util.c: move to ...
+
+	* daemon/oprofiled.h:
+	* daemon/oprofiled.c: here, and call the right operations
+	depending upon oprofile kernel version.
+
+	* daemon/init.c:
+	* daemon/liblegacy/init.c: init and running for each version
+
+2003-10-26  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_cookie.c: make sure to create the
+	cookie for the ignore value if it's not found
+
+	* daemon/opd_sfile.c: simplify ignored logic
+
+2003-10-26  John Levon  <levon@movementarian.org>
+
+	* doc/internals.xml:
+	* doc/buffers.png: add a diagram
+
+2003-10-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	implement image filtering:
+
+	* dae/opd_image.h: add a field filtered
+	* dae/opd_image.c: set it at image creation
+	* dae/opd_proc.c: don't record sample when !image->filtered
+
+	* daemon/opd_cookie.h: add a field filtered
+	* daemon/opd_cookie.c: set it a cookie_entry creation.
+	* daemon/opd_sfile.h: add a field filtered
+	* daemon/opd_file.c: set it a opd_sfile struct creation
+	* daemon/opd_trans.c: record sample if filtered
+
+	* daemon/opd_util.h: export opd_hash_name(), is_image_filtered()
+	* daemon/opd_util.c: implement --image=xxx
+
+	* oprofiled.c: #include "config.h" not <>
+
+	* utils/opcontrol: handle --image
+
+2003-10-26  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: remove some outdated stuff
+
+2003-10-25  John Levon  <levon@movementarian.org>
+
+	* doc/internals.xml: more docs
+
+2003-10-25  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_perfmon.c: cleanups
+
+2003-10-24  John Levon  <levon@movementarian.org>
+
+	* doc/internals.xml: write some more
+
+2003-10-23  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.7.1cvs
+
+2003-10-22  John Levon  <levon@movementarian.org>
+
+	* libop/tests/Makefile.am:
+	* libop/tests/load_events_files_tests.c:
+	* libop/tests/alloc_counter_tests.c: fix
+	make distcheck
+
+	* configure.in: bump to 0.7
+ 
+2003-10-22  John Levon  <levon@movementarian.org>
+
+	* daemon/Makefile.am:
+	* daemon/opd_perfmon.h:
+	* daemon/opd_perfmon.c: re-enable. Wait for children.
+	More safety checking.
+
+	* daemon/oprofiled.c: only use perfmon if !timer
+
+2003-10-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.xml:
+	* doc/oprofile.1.in: s/physical CPU/CPU/
+
+2003-10-20  John Levon  <levon@movementarian.org>
+
+	* daemon/Makefile.am:
+	* daemon/opd_perfmon.h: disable perfmon nicely
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.h:
+	* gui/oprof_start_config.cpp:
+	* gui/ui/oprof_start.base.ui: Fix reading of separate
+	parameters. Add CPU and thread separation
+
+2003-10-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_spec.cpp: relative path are relative to current dir
+	  not filename.
+
+2003-10-20  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml:
+	* doc/opreport.1.in: fix --merge docs and profile specs
+
+2003-10-20  John Levon  <levon@movementarian.org>
+
+	* dae/opd_sample_files.c:
+	* daemon/opd_mangling.c:
+	* libabi/abi.cpp:
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp:
+	* libop/op_config.h:
+	* libop/op_sample_file.h:
+	* libpp/op_header.cpp: remove ctr and separate_* from
+	header. Re-arrange it a little, and make it 64 bytes
+	on ILP32. Bump the version.
+
+2003-10-20  John Levon  <levon@movementarian.org>
+
+	* libpp/arrange_profiles.cpp: rework the clashing-axes
+	error message to be nicer to the user
+
+2003-10-20  John Levon  <levon@movementarian.org>
+
+	* libpp/arrange_profiles.cpp: if tid == tgid for
+	every profile class, allow axes of both TID and TGID
+	- there is no actual difference, only theoretical
+
+2003-10-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/oprofiled.c: correct an error message
+	* libop/op_alloc_counter.h: remove bogus FIXME
+	* libutil++/child_reader.cpp: avoid quadratic behaviour if child does a
+	  lot of output in stderr
+	* libpp/opgprof.cpp: fix comment
+
+2003-10-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp: redundant return
+
+2003-10-19  John Levon  <levon@movementarian.org>
+
+	* libop/op_events.c: move to a fixed value for the default
+	event count value
+
+2003-10-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	remove some FIXME:
+	* libpp/format_output.h: remove first_output bool member
+	* libpp/format_output.cpp: call output_header from the right place
+	* libpp/op_header.h: remove bogus FIXME
+
+	* libregex/tests/Makefile.am: fix dependencies on mangled-name file,
+	  fix make dist
+	* libregex/tests/mangled-name.in: simplify a bit and remove a bogus
+	  FIXME
+	* libregex/tests/regex_test.cpp: fix comment
+
+	* module/ia64/op_syscalls.c:
+	* module/x86/hammer_op_syscalls.c:
+	* module/x86/op_syscalls.c: remove some FIXME
+
+2003-10-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/arrange_profiles.cpp: clarify suggestion.
+	* pp/opreport_options.cpp: update options help string for --merge.
+
+	* libpp/profile_container.cpp:
+	* libpp/profile_spec.cpp:
+	* pp/common_option.cpp:
+	* pp/populate.cpp: ';' are not necessary to end namespace
+
+2003-10-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/arrange_profiles.cpp: use a set<profile_classes> instead
+	  of a vector<...> to replace a O(N*M) by a O(N*log(M)) behavior.
+	  (N number of samples files, M number of class).
+
+2003-10-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: show filename when warning about no debug
+	  information available. get_linenr(): s/filename/source_filename/
+
+2003-10-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/ia64/itanium/events: counter 0,1 not 2,3 for IA64_INST_RETIRED
+
+	* daemon/opd_util.c: opd_parse_events() fix use after free.
+
+2003-10-16  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_perfmon.c: disable the code
+
+2003-10-15  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_perfmon.c: fflushes to improve
+	order of debug log
+
+2003-10-15  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_perfmon.c: fix dumb allocation typo;
+	handle signals correctly; wait for children to
+	come up before returning
+
+2003-10-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_sample_files.c:
+	* daemon/opd_mangling.c:
+	* daemon/opd_perfmon.c:
+	* daemon/opd_util.c: check we not overflow op_nr_counters
+
+2003-10-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/ia64/itanium/events: correct counter available according
+	  to intel doc.
+
+2003-10-15  John Levon  <levon@movementarian.org>
+
+	* dae/opd_image.c:
+	* dae/opd_kernel.c:
+	* dae/opd_proc.c:
+	* dae/opd_sample_files.c:
+	* dae/oprofiled.c:
+	* daemon/opd_kernel.c:
+	* daemon/opd_mangling.c:
+	* daemon/opd_sfile.c:
+	* daemon/opd_trans.c:
+	* daemon/opd_util.c:
+	* daemon/opd_util.h:
+	* daemon/oprofiled.c: merge the options handling
+	for dae and daemon
+
+2003-10-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_perfmon.c:
+	* module/ia64/op_pmu.c: bit mask for event select field is 8 bits not 7
+
+2003-10-14  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* m4/findkernel.m4:
+	* utils/opcontrol: 2.5 refs -> 2.6
+
+2003-10-14  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: merge some 2.4/6 code
+
+2003-10-14  John Levon  <levon@movementarian.org>
+
+	* dae/opd_image.c:
+	* dae/opd_sample_files.c:
+	* dae/oprofiled.c:
+	* utils/opcontrol: use --events for 2.4 daemon
+	too
+
+	* daemon/opd_perfmon.c:
+	* daemon/opd_mangling.c: fix counter numbering
+	on !perfmon
+
+2003-10-14  John Levon  <levon@movementarian.org>
+
+	* configure.in: xmemdup not xmemdump
+
+2003-10-14  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_perfmon.c: propagate a SIGTERM
+	up to the parent.
+
+2003-10-14  John Levon  <levon@movementarian.org>
+
+	* m4/perfmon.m4:
+	* configure.in: remove pfmlib checks
+
+	* daemon/opd_util.h:
+	* daemon/opd_util.c:
+	* daemon/opd_mangling.c:
+	* daemon/oprofiled.c: parse more detailed events
+	passed on command line
+
+	* daemon/opd_perfmon.h:
+	* daemon/opd_perfmon.c: don't use libpfm at all,
+	do it ourselves.
+
+	* utils/opcontrol: pass more of the events info to
+	the daemon
+
+2003-10-14  John Levon  <levon@movementarian.org>
+
+	* m4/perfmon.m4:
+	* configure.in: look for pfmlib 3
+
+	* daemon/Makefile.am:
+	* daemon/opd_perfmon.h:
+	* daemon/opd_perfmon.c: interface to perfmon on 2.6 IA64
+
+	* daemon/opd_mangling.c:
+	* daemon/oprofiled.c: read event descriptions from command
+	line not oprofilefs
+
+	* daemon/opd_util.h:
+	* daemon/opd_util.c: receive SIGUSR1/2 for perfmon
+
+	* utils/opcontrol: handle multiple oprofileds. Send SIGUSR1/2
+	on start/stop. Pass in events list to oprofiled on 2.6. Don't
+	attempt to fill in oprofilefs with event info if using perfmon.
+
+2003-10-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_mangling.c:
+	* daemon/opd_sfile.c:
+	* daemon/opd_sfile.h: protect the sfile we are acting on to be freed
+	  by sfile_lru_clear()
+
+	* libdb/db_manage.c:
+	* libdb/odb_hash.h: Do not put hash->descr in an inconsistent state
+	  when a failure occur.
+
+2003-10-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/oprofile.c: don't restore syscall and stop counter twice
+
+2003-10-13  Will Cohen  <wcohen@redhat.com>
+
+	* libop/op_parse_event.c(parse_events): Correct fprintf.
+
+2003-10-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/x86/hammer_op_syscalls.c: pass tgid to daemon. Not tested!
+
+2003-10-12  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: share --separate-cpu/thread code now
+
+2003-10-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: add libregex/tests/mangled-name.in
+	* libregex/tests/mangled-name.txt: move ...
+	* libregex/tests/mangled-name.in: here, tune to support different arch
+	* libregex/tests/Makefile.am: s/mangled-name.txt/mangled-name.in
+	* libregex/stl.pat.in: fix iterator<... ptrdiff_t>
+	* libregex/tests/Makefile.am: update according to filename change
+
+	* libregex/tests/regex_test.cpp: really fails on exception.
+
+2003-10-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/oprofiled.c: don't set cpu_number when !--separate=cpu
+	
+	* libop/tests/alloc_counter_tests.c: printf format for 64 bits arch
+	* libop/tests/cpu_type_tests.c: #include <string.h>
+	* libop/tests/parse_event_tests.c: #include <string.h>
+
+2003-10-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_interface.h: struct op_sample: remove packed attribute
+
+2003-10-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_image.c:
+	* dae/opd_image.h: reference count opd_image. Remove modification time
+	  checking. Remove hash field. Tidy
+	* dae/opd_kernel.c: pass tid, tgid to op_get_kernel_image()
+	* dae/opd_mapping.c:
+	* dae/opd_mapping.h: use module hash code for image name to index
+	  a cache of name, this hash code is no longer used elsewhere. When
+	  killing map delete associated image, reference count of image
+	  will check for a real delete.
+	* dae/opd_parse_proc.c: get tgid from /proc/pid/status
+	* dae/opd_proc.c: create an opd_proc by process when
+	  separate_thread == true. Tidy by adding an opd_for_each_proc()
+	* dae/opd_proc.h: add tid/tgid to opd_proc struct
+	* dae/opd_sample_files.c:
+	* dae/opd_sample_files.h: lru all samples files, allowing to cleanup
+	  a part of the lru if we go out of resource. Remove
+	  opd_handle_old_sample_files() since we no longer check for image
+	  modification time.
+	* dae/opd_stats.c:
+	* dae/opd_stats.h: statistics for opd_image struct depth search
+	* dae/oprofiled.c: add --separate-cpu and --separate-thread
+	* libop/op_interface.h: add tgid to samples struct passed from module
+	  to daemon.
+	* module/compat22.h:
+	* module/compat24.h: op_get_tgid() return tgid, fall back to return
+	  tid on 2.2 kernel.
+	* module/oprofile.c:
+	* module/ia64/op_syscalls.c: pass tgid to daemon. NOT TESTED but I
+	  think it's ok. Note than even if it's broken ia64 should work w/o
+	  --separate=thread
+	* module/x86/op_syscalls.c: pass tgid to daemon.
+	* utils/opcontrol: enable 2.4 thread/cpu separation
+
+	* libdb/tests/db_test.c: verbose on when we provide filename of db file
+	  to test on command line.
+
+2003-10-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c: constification
+	* utils/op_help.c: check only if CPU_NO_GOOD not range
+
+	* libutil/tests/Makefile.am:
+	* libregex/tests/Makefile.am:
+	* libdb/tests/Makefile.am: s/TEST = (.*)/TESTS = ${check_PROGRAMS}/
+
+	* libop/tests/alloc_counter_tests.c: comment fix
+
+	* libop/tests/Makefile.am:
+	* libop/tests/cpu_type_tests.c: new file, test libop/op_cpu_type.c
+
+2003-10-10  Will Cohen  <wcohen@redhat.com>
+
+	* libop/op_cpu_type.h (op_get_cpu_number): Clarify comment.
+	* libop/op_cpu_type.c (op_get_cpu_number): Check number.
+	* utils/op_help.c (main): Make check with CPU_NO_GOOD.
+
+2003-10-10  Will Cohen  <wcohen@redhat.com>
+
+	* libop/op_cpu_type.h (op_get_cpu_number): Declare.
+	* libop/op_cpu_type.c (op_get_cpu_number): New.
+	  (op_get_cpu_type): Use op_get_cpu_number.
+	* utils/op_help.c (main): Use op_get_cpu_number.
+
+2003-10-10  John Levon  <levon@movementarian.org>
+
+	* libop/op_parse_event.c: fix compile for IA64
+
+2003-10-09  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: document "no results" and
+	how to fix it
+
+2003-10-08  John Levon  <levon@movementarian.org>
+
+	* utils/op_help.c: standardise name
+
+	* gui/oprof_start.cpp: Qt 2.3.1 compile fix
+	(bug 819943)
+
+2003-10-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_kernel.c: memory leak
+
+	* dae/opd_mapping.c:
+	* dae/opd_mapping.h:
+	* dae/opd_parse_proc.c:
+	* dae/opd_proc.c: 
+	* dae/opd_proc.h: use a list of struct opd_map instead of an array,
+	  remove last_map optimization.
+
+	* dae/oprofiled.c: memory leak
+	
+	* libutil/op_cpufreq.c: memory leak, FILE* leak
+	* libutil/op_list.h: fix @author
+
+2003-10-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/oprofiled.c:
+	* dae/opd_proc.h:
+	* dae/opd_proc.c: use struct list_head to chain opd_proc struct in hash
+	  table
+
+	* utils/op_help.c: comment fix
+
+2003-10-06  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: work around 2.6 daemon's signal
+	handling race that could cause it to hang during
+	a --shutdown
+
+2003-10-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/i386/p4/events:
+	* events/i386/p4-ht/events: put GLOBAL_POWER_EVENTS on top
+
+	* events/i386/pii/unit_masks:
+	* events/i386/piii/unit_masks: typo in help string
+
+	* utils/op_help.c: show "counter: all" instead an enumeration of all
+	  counter
+
+2003-10-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/*.events *.unit_masks: move these files to subdir named
+	  arch/processor_name/events and arch/processor_name/unit_masks
+	* events/Makefile.am: update according
+	
+	* libop/op_events.c: now it's safe to allow loading events file from a
+	  directory provided through environment var OPROFILE_EVENTS_FILE_DIR
+	* libop/tests/alloc_counter_tests.c: use it
+	* libop/tests/load_events_files_tests.c: use it
+
+2003-10-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_events.c: revert last commit (allowed to find events files
+	  description directory in alternate directory)
+
+	* libop/tests/Makefile.am:
+	* libop/tests/load_events_files_tests.c: new files. Validate events
+	  description file by loading them.
+
+	* libutil/op_cpufreq.c: comment why we don't have any code handling
+	  s390
+
+2003-10-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in:
+	* libop/Makefile.am: new subdir
+	* libop/op_events.c: allow to retrieve events file dir through
+	  environment variable
+	* utils/op_help.c: move parse_events() and parsed_event struct to ...
+	* libop/op_parse_event.h:
+	* libop/op_parse_event.c: these new files
+
+	* libop/tests/Makefile.am: new tests subdir
+	* libop/tests/alloc_counter_tests.c: events mapping to counter nr tests
+	* libop/tests/parse_event_tests.c: event parsing tests
+
+2003-10-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_alloc_counter.c: add forward declaration
+	* libop/op_alloc_counter.c: alloc counter in increasing number order,
+	  it's less surprising.
+
+2003-10-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/tests/db_test.c: if previous tests fails a corrupted samples
+	  file can exist in test dir and will be re-used, remove() it.
+
+2003-10-01  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_sfile.c:
+	* libabi/op_import.cpp:
+	* libop/op_interface.h:
+	* libpp/locate_images.h: small cleanups
+
+	* pp/opreport_options.cpp: don't complain about
+	"-x -m all"
+
+2003-09-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil/op_file.c:
+	* libutil/tests/file_tests.c: honor posix "//" filename namespace
+
+2003-09-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_alloc_counter.h:
+	* libop/op_alloc_counter.c: change allocator by a backtracking
+	  algorithm walking only through possible solution.
+
+2003-09-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/tests/db_test.c: success must be silent
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c:
+	* libutil/op_deviceio.c:
+	* libutil/op_deviceio.h: op_open_device(): remove unused parameter
+	  fatal
+
+2003-09-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil/tests/file_tests.c: Fix some test: in some case the pathname
+	  component must be valid since we lstat() them. Fix a segfault due
+	  to missing ',' 
+
+2003-09-26  John Levon  <levon@movementarian.org>
+
+	* libdb/tests/Makefile.am:
+	* libregex/tests/Makefile.am:
+	* libutil/tests/Makefile.am: don't build tests
+	unless "make check"
+
+2003-09-26  John Levon  <levon@movementarian.org>
+
+	* libutil/op_file.c: don't test for NULL path
+	passed in, we want to crash here instead of
+	in xstrdup
+
+	* configure.in:
+	* libutil/Makefile.am:
+	* libutil/tests/Makefile.am:
+	* libutil/tests/file_tests.c:
+	* libutil/tests/string_tests.c: add some unit tests
+	for libutil string and path handling
+
+2003-09-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db_debug.c: remove useless display interface
+	* libdb/db_db_travel.c: remove callback interface
+	* libdb/odb_hash.h: remove display/callback interface
+	* libdb/db_test.cpp: move to tests subdir
+	* libdb/Makefile.am: update according
+	* libdb/tests: new dir
+	* libdb/tests/.cvsignore:
+	* libdb/tests/Makefile.am: new files
+	* libdb/tests/db_test.cpp: shorter tests
+
+	* libregex/mangled-name.txt:
+	* libregex/regex_testc.cpp: move to ...
+	* libregex/tests: new directory
+	* libdb/Makefile.am: update according
+	* libregex/tests/.cvsignore:
+	* libregex/tests/Makefile.am: new files
+
+2003-09-26  John Levon  <levon@movementarian.org>
+
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp: small cleanups
+
+2003-09-25  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_cookie.c:
+	* daemon/opd_kernel.c:
+	* daemon/opd_sfile.c:
+	* daemon/opd_trans.c:
+	* daemon/oprofiled.c: trivial cleanups
+
+2003-09-25  Marc Herbert  <marc.herbert@ens-lyon.fr>
+
+	* configure.in: fix prefix stuff to allow stow
+	to work
+
+2003-09-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pch-c++.h: remove
+	* Makefile.am: update according
+	* configure.in: no longer need for conditional enable_pch
+	* m4/precompiledheader.m4: don't use -Winvalid-pch
+
+2003-09-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_sfile.c: sfile_lru_clear() return 0 if lru is empty
+	* daemon/opd_mangling.c: abort() if lru was empty (not tested)
+	* daemon/oprofiled.c: likewise; opd_alarm(): don't sfile_lru_clear()
+
+	* utils/op_help.c:
+	* daemon/opd_sfile.h:
+	* daemon/opd_cookie.h: s/()/(void)/ in some function prototype and
+	  definition
+
+	* daemon/opd_cookie.c: s/"not looked up"/"not hashed"/
+
+2003-09-25  John Levon  <levon@movementarian.org>
+
+	* daemon/oprofiled.c: push rlimit down back to 2048.
+	This gives a running RSS of about 10Mb when thread
+	profiling on my box, which seems reasonable (at 8192
+	it was hitting 40Mb)
+
+2003-09-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.xml: clarify what means a configured kernel.
+
+2003-09-25  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_sfile.c: bump LRU_AMOUNT to 1000
+
+2003-09-24  John Levon  <levon@movementarian.org>
+
+	* doc/opcontrol.1.in:
+	* doc/oprofile.xml: document thread and cpu
+	profiling a bit
+
+	* daemon/opd_mangling.c:
+	* daemon/opd_sfile.c:
+	* daemon/oprofiled.c:
+	* utils/opcontrol: implement per-CPU profiling,
+	not tested yet
+
+2003-09-24  John Levon  <levon@movementarian.org>
+
+	* dae/opd_proc.c:
+	* dae/opd_sample_files.c:
+	* daemon/opd_mangling.c:
+	* daemon/opd_sfile.c:
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp:
+	* libdb/db_insert.c:
+	* libdb/db_manage.c:
+	* libdb/db_test.c:
+	* libdb/odb_hash.h:
+	* libpp/op_header.cpp:
+	* libpp/profile.cpp: remove samples_odb_t.err_msg
+	entirely - prefer UNIX-style errno returns. Modify
+	error messages to match
+
+2003-09-24  John Levon  <levon@movementarian.org>
+
+	* dae/opd_sample_files.c:
+	* daemon/opd_sample_files.c:
+	* libpp/op_header.cpp:
+	* libpp/profile.cpp:
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp:
+	* libdb/db_test.c:
+	* libdb/odb_hash.h:
+	* libdb/odb_manage.c: make odb_open return errno
+	instead of EXIT_FAILURE/SUCCESS to allow EMFILE
+	handling. Also do not leak fd's on failure.
+
+	* libutil/op_types.h: cookie_t moved into daemon/
+
+	* daemon/: major rewrite: move to a hash on all
+	parameters of struct transient. Lots of readability
+	cleanups, plus resistance to cookie lookup failures,
+	and hitting open file limits. Additionally thread
+	profiling for kernel threads is enabled now.
+
+2003-09-24  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.c: remove support for missing
+	CTX_TGID
+
+2003-09-24  John Levon  <levon@movementarian.org>
+
+	* daemon/oprofiled.c: remove /proc/kcore support
+
+2003-09-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_parse_proc.c: both op_file.h and op_fileio.h are needed
+
+2003-09-22  John Levon  <levon@movementarian.org>
+
+	* doc/CodingStyle: document doxygen placing rule
+
+	* libop/op_alloc_counter.h:
+	* libop/op_get_interface.c:
+	* libutil++/file_manip.cpp:
+	* libutil++/file_manip.h:
+	* libutil++/op_bfd.cpp:
+	* libutil++/op_bfd.h:
+	* libutil/op_deviceio.c:
+	* libutil/op_deviceio.h:
+	* libutil/op_get_time.c:
+	* libutil/op_get_time.h:
+	* libutil/op_libiberty.c:
+	* libutil/op_libiberty.h:
+	* libutil/op_lockfile.c:
+	* libutil/op_lockfile.h:
+	* libutil/op_popt.c:
+	* libutil/op_popt.h: follow the above
+
+	* libutil/op_file.c:
+	* libutil/op_file.h:
+	* libutil/op_fileio.c:
+	* libutil/op_fileio.h:
+	* dae/opd_parse_proc.c:
+	* libutil++/string_manip.cpp: move op_get_link to
+	op_file
+
+2003-09-22  John Levon  <levon@movementarian.org>
+
+	* libutil/op_fileio.h:
+	* libutil/op_fileio.c: warn about op_get_link()
+	restrictions
+
+	* libutil++/file_manip.h:
+	* libutil++/file_manip.cpp: s/op_read_link/op_follow_link,
+	and behaviour change to match
+
+	* libpp/profile_spec.cpp:
+	* gui/oprof_start_util.cpp: use op_follow_link
+
+2003-09-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/makefile.am: missing AM_CFLAGS setting
+
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c: handle signal in read loop
+	* daemon/opd_util.h:
+	* daemon/opd_util.c: move opd_setup_signal() from dae/ daemon/
+
+2003-09-22  John Levon  <levon@movementarian.org>
+
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c: mask SIGTERM too to prevent
+	the possibility of empty sample files
+
+2003-09-21  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_output.h:
+	* libpp/format_output.cpp:
+	* pp/opreport.cpp: format_output::show_header no hide_header
+
+2003-09-21  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/opreport.1.in:
+	* doc/oprofile.xml:
+	* libpp/format_output.h:
+	* libpp/format_output.cpp:
+	* pp/opreport.cpp: --global_percent must be effective for detailed
+	  output too
+
+2003-09-21  John Levon  <levon@movementarian.org>
+
+	* pp/opreport_options.cpp: prevent --global-percent
+	when appropriate
+
+2003-09-21  John Levon  <levon@movementarian.org>
+
+	* Makefile.am: back out broken make clean change
+
+2003-09-21  John Levon  <levon@movementarian.org>
+
+	* Makefile.am: make clean now removes *.html
+
+	* internals.xml: add some outline sections
+
+2003-09-21  John Levon  <levon@movementarian.org>
+
+	* doc/internals.xml: provide a short overview
+	and start a glossary
+
+	* libpp/count_array.h:
+	* libpp/format_output.cpp:
+	* libpp/format_output.h:
+	* libpp/profile.cpp:
+	* libpp/profile.h:
+	* libpp/profile_container.cpp:
+	* libpp/profile_container.h:
+	* pp/opreport.cpp: replace residual references to
+	count groups with profile class concept
+
+2003-09-21  John Levon  <levon@movementarian.org>
+
+	* doc/Makefile.am:
+	* doc/internals.xml: start an internals manual ...
+
+2003-09-19  John Levon  <levon@movementarian.org>
+
+	* pp/image_errors.cpp: missing include
+
+2003-09-19  John Levon  <levon@movementarian.org>
+
+	* libopt++/popt_options.h:
+	* libopt++/popt_options.cpp: remove additional_help
+	stuff, unused for some time
+
+2003-09-18  John Levon  <levon@movementarian.org>
+
+	* libutil++/Makefile.am:
+	* libutil++/image_flags.h: move to ...
+
+	* libpp/Makefile.am:
+	* libpp/image_error.h: ... here, and rename
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: take an in-out bool
+	instead of image_flags
+
+	* libpp/arrange_profiles.cpp:
+	* libpp/arrange_profiles.h:
+	* libpp/locate_images.cpp:
+	* libpp/locate_images.h:
+	* libpp/profile_spec.cpp:
+	* pp/image_errors.cpp:
+	* pp/opgprof.cpp:
+	* pp/populate.cpp: changes from above
+
+2003-09-18  John Levon  <levon@movementarian.org>
+
+	* libutil++/Makefile.am:
+	* libutil++/image_flags.h: flags for image read failure
+
+	* libpp/profile_spec.cpp:
+	* libpp/locate_images.h:
+	* libpp/locate_images.cpp:
+	* libpp/arrange_profiles.h:
+	* libpp/arrange_profiles.cpp: use image_flags
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: use image_flags, no longer error
+	out on format failure
+
+	* pp/Makefile.am:
+	* pp/image_errors.cpp:
+	* pp/image_errors.h: errors previously reported in locate_images
+	are now reported here by the client
+
+	* pp/opannotate.cpp:
+	* pp/opgprof.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opreport.cpp:
+	* pp/populate.h:
+	* pp/populate.cpp: use the above
+
+2003-09-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_output.cpp: use 9 not 12 for % field width
+	* libutil++/string_manip.cpp: shrink 100.0000 to 100.000
+	* pp/opreport.cpp: s/" "/' '
+
+2003-09-18  John Levon  <levon@movementarian.org>
+
+	* pp/opannotate_options.cpp:
+	* pp/opreport_options.cpp: clean up error messages
+
+	* pp/opgprof_options.h:
+	* pp/opgprof_options.cpp:
+	* pp/opgprof.cpp: use inverted_profile API
+
+2003-09-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: overwrite all current settings with --separate,
+	  this change behavior of --separate=kernel,library now we really setup
+	  both in this case.
+
+2003-09-18  John Levon  <levon@movementarian.org>
+
+	* libpp/locate_images.cpp: rewrite a little
+
+	* libutil++/op_bfd.cpp: set fsize to default to -1,
+	for fake artificial symbol
+
+2003-09-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/locate_images.h:
+	* libpp/locate_images.cpp: find_module_path() extra bool parameter
+	  to know if we fail to retrieve the image.
+	* libpp/arrange_profiles.h:
+	* libpp/arrange_profiles.cpp: use it and save this bool in
+	  inverted_profile struct
+	* libpp/profile_spec.cpp: update caller according
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: use the above change to create fake op_bfd
+
+	* pp/opgprof_options.cpp:
+	* pp/opgprof.cpp: update caller but never allow fake op_bfd
+
+	* pp/populate.cpp: allow to create fake op_bfd
+	
+
+2003-09-18  John Levon  <levon@movementarian.org>
+
+	* dae/opd_image.c:
+	* dae/opd_proc.c:
+	* dae/opd_sample_files.c:
+	* dae/oprofiled.c:
+	* daemon/opd_image.c:
+	* daemon/opd_image.h:
+	* daemon/opd_kernel.c:
+	* daemon/opd_sample_files.c:
+	* daemon/oprofiled.c:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h:
+	* gui/ui/oprof_start.base.ui:
+	* libabi/abi.cpp:
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp:
+	* libop/op_sample_file.h:
+	* libpp/op_header.cpp:
+	* utils/opcontrol: renamings of separate stuff
+
+2003-09-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_kernel.c: thinko in opd_get_module_info(): we must take
+	  care to re-use a previously created module not to create a new
+
+2003-09-17  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_kernel.c: logging improvements
+
+2003-09-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_kernel.c:
+	* daemon/opd_kernel.c: fix use after free of module
+
+2003-09-17  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.c: fix thread profiling when
+	--separate-library=0
+
+2003-09-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_kernel.c: add module to list of module ...
+	* daemon/opd_kernel.c: s/print/verbprintf
+
+2003-09-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_config.h: remove OPD_MAX_MODULEs
+	* dae/opd_kernel.c:
+	* daemon/opd_kernel.c: remove fixed array of modules replaced by
+	  a list. Unify the way we create opd_module
+	* utils/opcontrol: don't use --thread-profiling for 2.4
+
+2003-09-17 Ka Fai Lu  <kafai0928@yahoo.com>
+
+	I adapted slightly this patch Phil.
+	* daemon/opd_image.c:
+	* daemon/opd_image.h:
+	* daemon/opd_kernel.c:
+	* daemon/opd_sample_files.c:
+	* daemon/oprofiled.c:
+	* utils/opcontrol: implement per thread profiling
+
+2003-09-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libopt++/popt_options.h:
+	* libpp/locate_images.cpp: minor tidy
+
+2003-09-16  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: don't pass pid/pgrp filter
+	to 2.6 daemon
+
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c: setrlimit to 8192 (lame
+	workaround for now), minor cleanups
+
+2003-09-15  John Levon  <levon@movementarian.org>
+
+	* common_option.cpp: rename the array to
+	avoid a link error in GCC 3.4
+
+2003-09-15  John Levon  <levon@movementarian.org>
+
+	* libop/Makefile.am:
+	* libop/op_interface_25.h: move to ...
+
+	* daemon/Makefile.am:
+	* daemon/opd_interface.h: ... here
+
+	* daemon/opd_image.c:
+	* daemon/oprofiled.c: use above. Remove pointless
+	command line options.
+
+	* libop/op_config_25.h: remove.
+
+	* libop/op_hw_config.h: move DCOOKIE_SHIFT to
+	opd_interface.h
+
+2003-09-15  John Levon  <levon@movementarian.org>
+
+	* configure.in: use -Wdeclaration-after-statement
+	if available
+
+	* README:
+	* daemon/opd_util.c:
+	* daemon/opd_util.h:
+	* doc/opannotate.1.in:
+	* doc/opgprof.1.in:
+	* doc/opreport.1.in:
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_util.cpp:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_get_interface.c:
+	* libpp/locate_images.cpp: remove references to
+	2.5, replaced with 2.6
+
+2003-09-15  John Levon  <levon@movementarian.org>
+
+	* doc/opreport.1.in: document --show-address
+
+2003-09-15  John Levon  <levon@movementarian.org>
+
+	* libpp/arrange_profiles.cpp:
+	* libpp/arrange_profiles.h:
+	* pp/populate.cpp: more commentary
+
+2003-09-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport.cpp: handle 2.95 right io manipulator and the lack
+	  of a proper setw(w) << std::string
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* pp/opreport.cpp: re-add header for image summary
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* libpp/arrange_profiles.cpp: throw an exception
+	if there are two many unmerged profiles, with details
+	of how to fix it
+
+	* pp/opgprof_options.cpp:
+	* pp/common_option.cpp: clean up error messages
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* libpp/arrange_profiles.h:
+	* libpp/arrange_profiles.cpp: add location of 
+	images when inverting profiles
+
+	* libpp/locate_images.cpp: return empty string
+	if file isn't readable
+
+	* pp/opannotate.cpp: use the above
+
+	* pp/opreport.cpp: use the above; place warnings
+	before any other output
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* pp/opgprof_options.cpp: use locate_image_path
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* Makefile.am:
+	* populate.h:
+	* populate.cpp: shared code for populating from
+	inverted profiles
+
+	* opreport.cpp:
+	* opannotate.cpp: use above
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* libpp/arrange_profiles.h:
+	* libpp/arrange_profiles.cpp: add invert_profiles
+
+	* pp/opreport.cpp: use it
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml:
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp:
+	* pp/opreport_options.h: Turn off VMA report by
+	default, add --show-address
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* pp/opreport.cpp: nice formatting of image report
+	column headers, respect --no-header
+
+2003-09-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/arrange_profiles.cpp: use string::erase() not string::clear()
+	  for 2.95
+
+	* libutil++/generic_spec.h: allow to ignore "all" match
+	* libutil++/comma_list.h: use it
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* pp/opreport.cpp: output column headers for
+	image report
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* libpp/op_header.h:
+	* libpp/op_header.cpp: output header info to
+	a string not a stream
+
+	* libpp/arrange_profiles.h:
+	* libpp/arrange_profiles.cpp: give classes a long
+	name, and fill in global event/cpu info
+
+	* pp/opannotate.cpp:
+	* pp/opannotate_options.cpp:
+	* pp/opannotate_options.h:
+	* pp/opgprof_options.cpp:
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp:
+	* pp/opreport_options.h: use the class long names
+	and info
+
+2003-09-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_spec.cpp: handle symlink
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* arrange_profiles.h:
+	* arrange_profiles.cpp: Add code to give short names
+	to each class, unused yet
+
+2003-09-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/arrange_profiles.cpp: missing include<> with gcc 2.95
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* libpp/Makefile.am:
+	* libpp/split_sample_filename.cpp:
+	* libpp/split_sample_filename.h: rename as ...
+
+	* libpp/parse_filename.cpp:
+	* libpp/parse_filename.h: ... this
+
+	* libpp/filename_spec.cpp:
+	* libpp/arrange_profiles.cpp:
+	* libpp/arrange_profiles.h: sort classes for niceness,
+	changes from above
+
+	* pp/opreport.cpp: remove needless double check of
+	exclude_dependent
+
+	* libutil++/string_manip.cpp: touint should init to 0
+	in case of parse failure
+
+2003-09-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: fix maximum template depth to 50
+	* libutil/op_fileio.c: op_get_link() don't truncate silently results
+	* m4/sstream.m4: use OP_CXXFLAGS not CXXFLAGS
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* pp/partition_files.h:
+	* pp/partition_files.cpp: remove, now unused
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* pp/opannotate.cpp:
+	* pp/opannotate_options.cpp:
+	* pp/opannotate_options.h: use arrange_profiles API
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* pp/opgprof_options.h:
+	* pp/opgprof_options.cpp:
+	* pp/opgprof.cpp: use arrange_profiles API
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* libpp/Makefile.am:
+	* libpp/arrange_profiles.cpp:
+	* libpp/arrange_profiles.h: introduce new
+	code for partitioning profiles and handling
+	merging
+
+	* libpp/partition_files.h:
+	* pp/opreport_options.cpp:
+	* pp/opreport_options.h:
+	* pp/opreport.cpp: use the above code
+
+	* libpp/format_flags.h:
+	* libpp/profile_container.cpp: remove unneeded
+	multiple apps hint
+
+	* libpp/count_array.cpp:
+	* libpp/count_array.h: remove unnecessary code
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* configure.in: back to 0.7cvs
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* pp/opannotate.cpp: gcc 2.91 workaround
+	(in 0.6.1 release)
+
+2003-09-14  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.6.1
+
+2003-09-13  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: document "incorrect source attribution"
+	a bit
+
+2003-09-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/op_header.cpp: typo in comment
+
+2003-09-11  John Levon  <levon@movementarian.org>
+
+	* configure.in: check for -lintl, tweak -ldl check
+
+2003-09-11  John Levon  <levon@movementarian.org>
+
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c:
+	* libdb/db_manage.c:
+	* libdb/db_test.c: correct headers
+
+2003-09-11  John Levon  <levon@movementarian.org>
+
+	* op_lockfile.c: use correct headers
+
+2003-09-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/op_help.c: check than all events are distincts
+
+2003-09-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pch-c++.h:
+	* m4/precompiledheader.m4: new file to handle precompiled header
+	* m4/Makefile.am:
+	* configure.in:
+	* Makefile.am: handle precompiled header
+
+2003-09-05  John Levon  <levon@movementarian.org>
+
+	* opd_image.c: cleanup of ctx_switch_set_image()
+
+2003-09-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_image.c: After a context switch ensure we update correctly
+	  the current image.
+
+2003-09-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport.cpp:
+	* pp/opannotate.cpp: catch op_bfd exception and recover gracefully
+
+2003-09-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: tweak "signaling daemon " message as suggested
+	  by Carlo Wood
+
+2003-09-04  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: mention --reset in
+	"Getting Started"
+
+2003-09-03  John Levon  <levon@movementarian.org>
+
+	* libop/op_events.c:
+	* libpp/op_header.cpp:
+	* dae/opd_sample_files.c:
+	* daemon/opd_sample_files.c: propagate event
+	error back up to caller
+
+	* libdb/odb_hash.h: fix comment
+
+2003-09-02  John Levon  <levon@movementarian.org>
+
+	* dae/opd_image.c:
+	* dae/opd_proc.c:
+	* dae/oprofiled.c:
+	* daemon/opd_image.c: use abort() not exit()
+	on "can't happen" errors
+
+2003-09-02  John Levon  <levon@movementarian.org>
+
+	* dae/opd_proc.c:
+	* daemon/opd_image.c: fix error message
+
+2003-08-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/alpha.ev6.events: fix duplicate um tag
+
+2003-08-28  John Levon  <levon@movementarian.org>
+
+	* events/i386.athlon.events: fix duplicate minimum tag
+
+	* daemon/opd_image.c:
+	* libop/op_events.c: check for duplicate tags
+
+2003-08-28  John Levon  <levon@movementarian.org>
+
+
+2003-08-27  Will Cohen  <wcohen@redhat.com>
+
+	* utils/op_help.c (resolve_events): Typecast printf argument.
+
+2003-08-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opannotate_options.cpp:
+	* pp/opannotate_options.h:
+	* pp/opannotate.cpp: enable multiple events
+
+	* pp/opreport_options.cpp: remove #if 0 .... #endif
+
+2003-08-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/count_array.cpp: avoid to access invalid memory
+
+2003-08-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in:
+	* m4/builtinexpect.m4:
+	* m4/configmodule.m4:
+	* module/Makefile.in:
+	* module/ia64/Makefile.in:
+	* module/x86/makefile.in: always use EXTRA_CFLAGS_MODULE not
+	EXTRA_CFLAGS for module build flags
+
+2003-08-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libregex/op_regex.h:
+	* libregex/op_regex.cpp: tidy
+
+	* libutil++/op_bfd.cpp: remove obsolete comment
+
+2003-08-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/file_manip.h:
+	* libutil++/file_manip.cpp: is_directory(dirname): return true if
+	  dirname exists
+	* pp/common_option.cpp: validate --image-path parameters
+
+2003-08-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/i386.p4.events: clarify than 128BIT_MMX_UOP count only integer
+	  SSE2 ops
+	* pp/opreport.cpp: minor spacing change in output
+
+2003-08-22  John Levon  <levon@movementarian.org>
+
+	* daemon/oprofiled.c: report the kernel pointer size
+
+2003-08-22  John Levon  <levon@movementarian.org>
+
+	* daemon/oprofiled.c: read new /dev/oprofile/pointer_size
+	in preference to kcore. kcore code will eventually go.
+
+2003-08-21  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.cpp: update gcc2_compiled. comment
+	to reflect reality
+
+2003-08-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport.cpp: really merge when --merge=lib and image name are
+	  specified.
+
+2003-08-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opannotate.cpp: output threshold percent when necessary.
+
+2003-08-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: remove ELF-based symbol size code
+
+2003-08-15  William Cohen  <wcohen@redhat.com>
+
+	* doc/opcontrol.1.in:
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: Correct path to /root/.oprofile/daemonrc.
+
+2003-08-15  Thomas Spatzier  <TSPAT@de.ibm.com>
+
+	* daemon/opd_cookie.h: fix s390 syscall
+
+2003-08-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/string_manip.cpp: erase_to_last_of() is not a ltrim()
+
+2003-08-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	Dave Jones suggested this change.
+
+	* module/x86/op_model_p4.c: remove superflous ';' at end of some macro
+
+2003-08-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/string_manip.h: remove erase_from_last_of()
+	* libutil++/string_manip.cpp: and tidy erase_to_last_of(), rtrim() and
+	  ltrim()
+
+2003-08-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.h:
+	* libpp/profile_container.cpp: remove nil_symbol_index
+
+2003-08-13  John Levon  <levon@movementarian.org>
+
+	* libpp/profile_container.cpp:
+	* libpp/profile_container.h: remove "base_vma" parameter
+	to add_samples(), we can just re-grab it straight from
+	the abfd
+
+2003-08-13  John Levon  <levon@movementarian.org>
+
+	* libpp/profile_container.cpp:
+	* libpp/profile_container.h: remove unused "zero samples"
+	optimization hint: it's always false
+
+	* pp/opannotate.cpp:
+	* pp/opgprof.cpp:
+	* pp/opreport.cpp: from above
+
+2003-08-12  John Levon  <levon@movementarian.org>
+
+	* pp/opreport.cpp: small trivialities
+
+2003-08-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libregex/stl.pat.in: minor fix/improvements
+	* libregex/mangled-name.txt: add tests
+
+2003-08-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport.cpp: fix thinko when --merge=lib
+
+2003-08-12  John Levon  <levon@movementarian.org>
+
+	* pp/opreport.cpp: s/count_groups_summary/summary_container/g
+
+2003-08-12  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: document opreport's side-by-side a little
+	bit
+
+2003-08-12  John Levon  <levon@movementarian.org>
+
+	* pp/opreport.cpp: s/group_summary/app_summary/, and
+	a lot of other renamings to clarify the count groups
+	usage.
+
+2003-08-12  John Levon  <levon@movementarian.org>
+
+	* utils/op_help.c: add --unit-mask
+
+	* utils/opcontrol: use --unit-mask
+
+2003-08-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport.cpp: re write using count_array_t
+
+2003-08-11  John Levon  <levon@movementarian.org>
+
+	* libpp/count_array.cpp:
+	* libpp/count_array.h: auto-resize the number of groups
+	based on how we index.
+
+	* libpp/profile_container.cpp: remove check
+
+	* pp/opannotate.cpp: count_array.zero() not .empty()
+
+2003-08-11  John Levon  <levon@movementarian.org>
+
+	* libpp/filename_spec.h:
+	* libpp/profile_spec.cpp:
+	* libpp/profile_spec.h: add comments, allow comma lists
+	for event, count, and unit mask
+
+	* libutil++/comma_list.h: implement missing method
+
+2003-08-11  John Levon  <levon@movementarian.org>
+
+	* libpp/format_output.cpp:
+	* libpp/format_output.h: add set_nr_groups(), remove
+	pp_nr_counters.
+
+	* libpp/profile_container.cpp:
+	* libpp/profile_container.h:
+	* pp/opannotate.cpp:
+	* pp/opgprof.cpp:
+	* pp/opreport.cpp: count_group not counter
+
+2003-08-11  John Levon  <levon@movementarian.org>
+
+	* libpp/Makefile.am:
+	* libpp/counter_array.cpp:
+	* libpp/counter_array.h: rename to ...
+
+	* libpp/count_array.h:
+	* libpp/count_array.cpp: ... this ...
+
+	* libpp/format_output.cpp:
+	* libpp/format_output.h:
+	* libpp/profile.cpp:
+	* libpp/profile.h:
+	* libpp/profile_container.cpp:
+	* libpp/profile_container.h:
+	* libpp/sample_container.cpp:
+	* libpp/sample_container.h:
+	* libpp/symbol.h:
+	* pp/opannotate.cpp:
+	* pp/opgprof.cpp:
+	* pp/opreport.cpp: ... and several renamings to starting
+	change the notion from "counters" to the more general notion
+	of "count groups"
+
+2003-08-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	Multiple counter support for pp tools.
+
+	* libpp/counter_array.h:
+	* libpp/counter_array.cpp: resurrected from pp-interface-branch, for
+	 now memory use is inefficient.
+	* libpp/Makefile.am: add counter_array.cpp .h
+	* libpp/format_out.h:
+	* libpp/format_out.cpp: handle multiple counter + a general tidy
+	* libpp/format_flags.h: remove ff_immutable_mask and some nasty
+	  requisite on flags value
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp:
+	* libpp/sample_container.h:
+	* libpp/sample_container.cpp:
+	* libpp/symbol.h:
+	* libpp/symbol_container.cpp:
+	* libpp/symbol_sort.cpp:
+	* pp/opreport.cpp: handle multiple counter
+	* pp/opannotate.cpp: partial handling of multiple counter
+	* pp/opgprof.cpp:
+	* pp/opreport.cpp: minor bits
+
+2003-08-08  Will Cohen  <wcohen@redhat.com>
+
+	* dae/Makefile.am:
+	* daemon/Makefile.am: Correct library linking order.
+	* daemon/opd_util.c: Add needed include files.
+
+2003-08-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: move_and_remove() do nothing if source doesn't exist
+
+2003-08-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	revert the previous patch
+	* dae/Makefile.am:
+	* dae/opd_sample_files.h:
+	* dae/opd_sample_files.c:
+	* daemon/Makefile.am:
+	* daemon/opd_sample_files.c: un-share opd_sample_files
+	code
+
+2003-08-08  John Levon  <levon@movementarian.org>
+
+	* dae/Makefile.am:
+	* dae/opd_sample_files.h:
+	* dae/opd_sample_files.c:
+	* daemon/Makefile.am:
+	* daemon/opd_sample_files.c: share opd_sample_files
+	code
+
+2003-08-08  John Levon  <levon@movementarian.org>
+
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c:
+	* daemon/opd_util.h:
+	* daemon/opd_util.c: share opd_write_abi()
+
+2003-08-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_alloc_counter.c:
+	* libop/op_events.h: minor doxygen fix
+
+2003-08-08  John Levon  <levon@movementarian.org>
+
+	* dae/Makefile.am:
+	* dae/oprofiled.c:
+	* daemon/Makefile.am:
+	* daemon/oprofiled.c:
+	* daemon/opd_util.h:
+	* daemon/opd_util.c: share some small bits of code
+	between the daemons
+
+2003-08-08  John Levon  <levon@movementarian.org>
+
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c: remove mypid, unused
+
+2003-08-08  John Levon  <levon@movementarian.org>
+
+	* dae/Makefile.am:
+	* dae/opd_printf.h: remove duplicate header
+	and use daemon/opd_printf.h
+
+2003-08-08  John Levon  <levon@movementarian.org>
+
+	* dae/opd_image.c:
+	* dae/opd_sample_files.h:
+	* dae/opd_sample_files.c:
+	* daemon/opd_image.c:
+	* daemon/opd_sample_files.h:
+	* daemon/opd_sample_files.c: remove "create" bool
+	from opd_mangle_filename(): only one callsite needs
+	that functionality, open code the create instead
+
+	* dae/opd_proc.c:
+	* dae/opd_sample_files.h:
+	* dae/opd_sample_files.c:
+	* daemon/opd_sample_files.h:
+	* daemon/opd_sample_files.c: return error from
+	opd_open_sample_filename(). Do not fail when odb_open
+	fails due to --reset races.
+
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c: a little more verbosity.
+
+	* libutil/op_file.h:
+	* libutil/op_file.c: fix create_dir/path() comments,
+	don't use access()
+
+	* utils/opcontrol: reduce chance of --reset races
+
+2003-08-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/symbol_sort.h:
+	* libpp/symbol_sort.cpp: add app_name sort order, force sort order
+	  for criteria unspecified by user.
+	* pp/opreport_options.cpp: update --sort option help string.
+
+2003-08-04  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml:
+	* doc/opannotate.1.in:
+	* pp/opannotate.cpp:
+	* pp/opannotate_options.h:
+	* pp/opannotate_options.cpp: add --base-dirs
+
+2003-08-04  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml:
+	* doc/opannotate.1.in:
+	* pp/opannotate.cpp:
+	* pp/opannotate_options.h:
+	* pp/opannotate_options.cpp: add --search-dirs
+
+2003-08-04  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml:
+	* doc/opannotate.1.in:
+	* pp/opannotate.cpp:
+	* pp/opannotate_options.h:
+	* pp/opannotate_options.cpp: remove --source-dir and --base-dir,
+	  they're confusing and not useful in the current form
+
+2003-08-03  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: avoid using ps, it's very slow with kallsyms
+
+2003-08-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: c++ static function doesn't get a mangled name
+	  in debug info (see gcc #11774). Try to recover through a not
+	  completely reliable mechanism but better than ignoring the problem
+
+2003-08-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport.cpp: minor: more consistency about function ordering
+
+2003-08-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile.h:
+	* libpp/profile.cpp: profile::sample_count() new to allow raw access
+	  to samples count
+	* pp/opreport.cpp: use above function to implement opreport (w/o -l
+	  or --details options). opreport is roughly twice faster.
+
+2003-08-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport.cpp: clarify multiple counter support
+
+2003-08-01  John Levon  <levon@movementarian.org>
+
+	* libregex/stl.pat.in: fix _List_iterator regex
+	(from Phil)
+
+2003-07-31  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opannotate.cpp: output cpu type and cpu speed.
+
+2003-07-30  John Levon  <levon@movementarian.org>
+
+	* libpp/partition_files.cpp: remove some apparently
+	dead code
+
+2003-07-30  John Levon  <levon@movementarian.org>
+
+	* events/i386.p4.unit_masks: make flame_uops value
+	mandatory, Yuan.Lu@rrze.uni-erlangen.de does not
+	see any events without setting the unit mask
+
+2003-07-30  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: bfd_openr() keeps a copy of
+	the passed in char * around, sickenly enough. Ensure lifetimes
+	will always be correct by adding a filename data member to
+	op_bfd
+
+2003-07-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/op_header.h:
+	* libpp/op_header.cpp: separate output of cpu_type, cpu_speed
+	  and counter setup
+
+	* libpp/partition_files.h:
+	* libpp/partition_files.cpp: unmergeable_profile() split profile
+	  by the unmergeable.
+
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp:
+	* pp/opreport.cpp: initial multiple counter output, multiple counter
+	  with -l is not yet available.
+
+2003-07-29  John Levon  <levon@movementarian.org>
+
+	* doc/opcontrol.1.in: update for --event
+
+2003-07-29  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* doc/srcdoc/Doxyfile.in:
+	* oprof_report/: remove badly out of date oprof_report
+
+2003-07-28  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.7cvs
+
+2003-07-26  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.6
+
+2003-07-26  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: fix call of op_help
+
+2003-07-26  John Levon  <levon@movementarian.org>
+
+	* gui/oprof_start.cpp: replace folder icons with clearer
+	red/green circles
+
+2003-07-26  John Levon  <levon@movementarian.org>
+
+	* gui/oprof_start.cpp: actually select and show the default
+	event
+
+2003-07-26  John Levon  <levon@movementarian.org>
+
+	* gui/oprof_start.cpp: small string tweak, show "conflicts"
+	message consistently
+
+2003-07-26  John Levon  <levon@movementarian.org>
+
+	* gui/oprof_start.cpp: don't use invalidated iterator
+
+2003-07-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp: fix for 2.91.66
+
+	* libpp/profile.cpp: typo invoking an undefined behavior revealed
+	  by gcc stl debug mode
+	* libpp/profile.h: ensure we provide the right typedef to std::
+	  for profile::const_iterator revealed by gcc stl debug mode at compile
+	  time. The implementation is a bit tricky to work with old compiler
+	* libpp/symbol_sort.cpp: compare must define a weak ordered relation
+	  order, revealed by gcc stl debug mode.
+
+2003-07-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/ui/oprof_start.base.ui:
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp: change UI to use the new counter allocation
+	  API
+
+	* libop/op_alloc_counter.h:
+	* libop/op_alloc_counter.c:
+	* utils/op_help.c: minor const-ness api change
+
+2003-07-25  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol: Restrict the search path.
+
+2003-07-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_alloc_counter.c: use tabulation
+
+	* libop/op_events.c:
+	* libop/op_events.h: find_event_by_name() new
+	* utils/op_help.c: use find_event_by_name()
+
+2003-07-24  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/op_help.c: make valgrind happy + minor cleanup
+
+2003-07-24  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_alloc_counter.h:
+	* libop/op_alloc_counter.c: new file providing mapping from an event 
+	  list to hardware counter number
+	* utils/op_help.c: use the above api
+
+2003-07-24  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/op_help.c: fix hardware counter allocation order
+
+2003-07-23  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: comment out --base-dir mention
+
+2003-07-23  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: remove mention of oprof_start_event
+
+2003-07-23  John Levon  <levon@movementarian.org>
+
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c: don't uselessly try to unlink
+	non-existent lockfile
+
+	* daemon/opd_image.c:
+	* daemon/oprofiled.c: clean up buffer read messages
+
+2003-07-23  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: error out at --setup time if vmlinux is not
+	valid. Cleanup the error message if so
+
+	* daemon/opd_kernel.c: fix potential null deref
+
+2003-07-21  John Levon  <levon@movementarian.org>
+
+	* gui/oprof_start.cpp: select "No event" when switching counter
+	if needed
+
+2003-07-21  John Levon  <levon@movementarian.org>
+
+	* gui/oprof_start.cpp: fix default event choosing when
+	daemonrc exists
+
+2003-07-21  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp: thinko in has_unique_event(), don't warn for
+	  no counter with CPU_TIMER_INT
+
+2003-07-21  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp: allow to de-select a counter
+
+2003-07-21  John Levon  <levon@movementarian.org>
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_util.h:
+	* gui/oprof_start_util.cpp: remove uptime pretty printing.
+	It's broken for 2.5 and ugly code
+
+2003-07-21  John Levon  <levon@movementarian.org>
+
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp: use a default event if no
+	events are set yet
+
+2003-07-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* m4/compileroption.m4: fix for autoconf 2.13
+
+2003-07-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp:
+	* libpp/format_output.cpp:
+	* libpp/format_output.h:
+	* pp/opannotate.cpp:
+	* pp/opreport_options.cpp: minor tidy
+
+2003-07-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp: RTC mode was not working
+
+2003-07-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start_config.h:
+	* gui/oprof_start_config.cpp: remove dead code, fix kernel_only read
+
+2003-07-16  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: fix typo that was partly breaking
+	CPU_TIMER_INT
+
+2003-07-16  John Levon  <levon@movementarian.org>
+
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp: fixes for CPU_TIMER_INT
+
+2003-07-16  John Levon  <levon@movementarian.org>
+
+	* gui/ui/oprof_start.base.ui: remove add/remove event buttons,
+	fix resize weirdness
+
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp: remove add/remove event buttons, allow
+	short-form event descriptions
+
+2003-07-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/persistent_config.h: remove
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp: debug, remove dead code, works better now, see
+	  TODO
+
+2003-07-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_util.cpp: re-enable partially the gui, sorta of
+	  working if cautioulsy used
+
+2003-07-15  John Levon  <levon@movementarian.org>
+
+	* gui/ui/oprof_start_base.ui:
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp: some steps towards fixing gui for
+	the new events stuff
+
+2003-07-15  John Levon  <levon@movementarian.org>
+
+	* libop/op_events.h:
+	* libop/op_events.c: add op_default_event
+
+	* utils/op_help.c: move default event stuff to libop,
+	fix -c option
+
+2003-07-15  John Levon  <levon@movementarian.org>
+
+	* utils/op_help.c: fix default RTC event to be
+	"RTC_INTERRUPTS"
+
+2003-07-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol
+	* events/rtc..events: use RTC_INTERRUPTS as event name
+
+2003-07-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_sample_files.c: C89 compile fix
+
+2003-07-15  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol:
+	* utils/op_help.c: move the default event strings into
+	op_help.c instead of in opcontrol
+
+2003-07-15  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: document event name for timer interrupt
+
+	* daemon/opd_sample_files.c: handle CPU_TIMER_INT
+
+	* utils/op_help.c: fix a core dump
+
+2003-07-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_image.c: verbprintf() when starting reading buffer not
+	  printf
+
+2003-07-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* from BRANCH_CALLGRAPH:
+	* daemon/opd_image.c: printf -> verbprintf, fix comment
+	* daemon/opd_kernel.c: kernel/module samples statistics was wrong
+
+	* daemon/opd_image.c:
+	* daemon/opd_image.h:
+	* daemon/opd_kernel.c:
+	* daemon/opd_kernel.h: import cleanup from branch, mainly don't handle
+	  samples in opd_kernel.c but return (creating if necessary) an
+	  opd_image struct where the sample must go and let opd_image caller
+	  in opd_image.c do sample insertion
+
+2003-07-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: shows basename $0 with --version
+	* libpp/op_header.cpp: formating
+	
+2003-07-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: don't try to save current if the directory doesn't
+	  exist
+
+2003-07-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/stream_util.h:
+	* libutil++/stream_util.cpp: new file, io_state() save object
+	* libutil++/Makefile.am: handle new file
+	* libutil++/op_bfd.cpp:
+	* pp/opreport.cpp:
+	* libpp/op_header.cpp: use io_state
+
+2003-07-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/x86/op_model_p4.c: reflect intel documentation fix.
+
+2003-07-08  Will Cohen  <wcohen@redhat.com>
+
+	* daemon/opd_kernel.c: Handle /proc/modules format.
+	
+2003-07-08  Will Cohen  <wcohen@redhat.com>
+
+	* doc/oprofile.xml:
+	* configure.in: --enable-gcov option and documentation.
+
+2003-07-08  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol: Correct P4 default event.
+
+2003-06-03  John Levon  <levon@movementarian.org>
+
+	* from BRANCH_CALLGRAPH
+	* libdb/odb_hash.h:
+	* libdb/db_manage.c:
+	* libdb/db_insert.c: namespace safety
+
+	* libpp/partition_files.cpp:
+	* libpp/profile.cpp: spacing, add a FIXME
+
+2003-07-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opannotate.cpp:
+	* pp/opgprof.cpp:
+	* pp/opreport.cpp: cleanup walking through multimap with a
+	  pair<iterator, iterator>
+
+2003-07-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_image.c:
+	* libdb/db_insert.c: 64 bits arch compile fix, thanks to Falk Hueffner
+	 <falk@debian.org>
+
+2003-07-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport.cpp: honor options::show_header
+
+2003-06-30  Graydon Hoare  <graydon@redhat.com>
+
+	* libpp/op_header.cpp: Handle printing multiple bitmask values.
+
+2003-06-19  John Levon  <levon@movementarian.org>
+
+	* doc/Makefile.am: fix make distcheck
+
+2003-06-18  John Levon  <levon@movementarian.org>
+
+	* pp/opannotate_options.c: hide the unhandled
+	--base-dir option
+
+2003-06-18  John Levon  <levon@movementarian.org>
+
+	* pp/Makefile.am: don't build opdiff
+
+2003-06-17  Will Cohen  <wcohen@redhat.com>
+
+	* daemon/opd_cookie.h: Add s390 syscall value.
+	
+2003-06-17  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: don't accept "-r" - it's too easy to typo
+
+2003-06-17  John Levon  <levon@movementarian.org>
+
+	* doc/srcdoc/Doxyfile: removed
+
+	* doc/srcdoc/Doxyfile.in:
+	* configure.in: generate doxygen version nr. automatically
+
+2003-06-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db_insert.cpp: missing initialization of error message on
+	  error path
+
+2003-06-17  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: accept some short forms for common
+	operations
+
+2003-06-17  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: accept --foo blah as well as
+	--foo=blah
+
+2003-06-16  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: "opcontrol" will show usage
+	instead of doing nothing
+
+2003-06-16  Will Cohen  <wcohen@nc.rr.com>
+
+	* libabi/abi.cpp:
+	* libabi/op_import.cpp: Add required include for cassert.
+
+2003-06-16  John Levon  <levon@movementarian.org>
+
+	* events/x86-64.hammer.unit_masks: remove some
+	bogus FIXMEs
+
+2003-06-15  John Levon  <levon@movementarian.org>
+
+	* README: fix autogen.sh line
+
+2003-06-15  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.c: 64 bit fixes
+
+2003-06-15  John Levon  <levon@movementarian.org>
+
+	* utils/op_help.c: c89 fix
+
+2003-06-15  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.c: c89 fix
+
+2003-06-15  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: document --event
+
+	* utils/opcontrol:
+	* utils/op_help.c: allow unit mask, kernel, user to be
+	optional. Verify not too many events are passed.
+
+2003-06-15  John Levon  <levon@movementarian.org>
+
+	* libop/op_cpu_type.c: fix nr_counters cpu type check
+
+	* utils/op_help: implement --check_events, event validation
+	and counter allocation
+
+	* utils/opcontrol: use the above, implement --event=default
+
+2003-06-14  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.c: fix a stupid error in my previous TGID patch
+
+2003-06-12  Graydon Hoare  <graydon@redhat.com>
+
+	* libop/op_events.c (op_check_events): Check bitmasks as well as 
+	exclusive values, for unit masks.
+
+2003-06-12  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.c: we were not handling a truncated
+	TGID entry properly
+
+2003-06-12  John Levon  <levon@movementarian.org>
+
+	* libutil++/unique_storage.h: missing typename
+
+2003-06-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opannotate_options.cpp: typo in option name
+
+2003-06-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: boring_symbol() new to get a better choice
+	when eliminating symbol at identical vma
+
+2003-06-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: fix rtc option checking, bug added after 0.5.3,
+	no big deal
+
+2003-06-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libregex/op_regex.cpp:
+	* libpp/profile.cpp: compile fix, tree was broken by my previous patch
+
+2003-06-11  Jason Yeh  <jason.yeh@amd.com>
+
+	* events/i386.athlon.events: add CPU_CLK_UNHALTED
+
+	* utils/opcontrol: use the above by default
+
+	* events/x86-64.hammer.events:
+	* events/x86-64.hammer.unit_masks: various fixes
+
+2003-06-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/op_header.cpp:
+	* libpp/profile.cpp:
+	* libpp/profile_spec.cpp:
+	* libpp/symbol_sort.cpp:
+	* libregex/op_regex.cpp:
+	* libutil++/op_bfd.cpp: use exception rather exit(EXIT_FAILURE) in
+	library code
+
+2003-06-11  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.c: future-proof the code handlers
+
+2003-06-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opannotate.cpp: output_asm() avoid output when the set of selected
+	symbols doesn't contain any samples
+
+2003-06-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/unique_storage.h: we don't need to check if key is present
+	  before trying to insert it
+
+2003-06-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/name_storage.h: minor tidy
+	* libutil++/unique_storage.h: small efficiency improvement
+
+2003-06-09  John Levon  <levon@movementarian.org>
+
+	* pp/Makefile.am:
+	* libutil/Makefile.am: fix make distcheck
+
+2003-06-09  John Levon  <levon@movementarian.org>
+
+	* libpp/opp_symbol.h: rename to ...
+
+	* libpp/symbol.h: ... this
+
+	* libpp/Makefile.am:
+	* libpp/format_output.h:
+	* libpp/format_output.cpp:
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp:
+	* libpp/sample_container.h:
+	* libpp/sample_container.cpp:
+	* libpp/symbol_functors.h:
+	* libpp/symbol_sort.cpp: fix up from above and some header
+	cleanups
+
+2003-06-09  John Levon  <levon@movementarian.org>
+
+	* libpp/profile.h: std::pair not pair
+
+2003-06-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile.cpp: don't underflow start offset when the vma range
+	  is unknown
+	* pp/opreport.cpp: use samples_range() not samples_range(0, ~0)
+
+2003-06-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile.h:
+	* libpp/profile.cpp: replace accumulate_samples() API by an iterator
+	  interface
+	* libpp/profile_container.h:
+	* libpp/profilecontainer.cpp:
+	* pp/opreport.cpp: use new API
+
+2003-06-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* include/sstream: replace old version by the once shipped with
+	  2.95.3, seekg() in the old was not working
+
+2003-06-08  John Levon  <levon@movementarian.org>
+
+	* libpp/name_storage.h: don't need to define the tag structs
+
+	* libutil++/unique_storage.h: fix the comments,
+	make get() public
+
+2003-06-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_container.cpp:
+	* libutil++/string_manip.cpp: gcc 2.91.66 fix
+
+2003-06-08  John Levon  <levon@movementarian.org>
+
+	* libpp/name_storage.h:
+	* libpp/name_storage.cpp:
+	* libpp/opp_symbol.h:
+	* libpp/profile_container.cpp:
+	* libpp/symbol_functors.cpp:
+	* libutil++/unique_storage.h: don't derive from I()
+	at all for id_value, it's not needed. Hide .id and
+	provide operator<(), operator==(), operator!=(), and
+	set()
+
+2003-06-08  John Levon  <levon@movementarian.org>
+
+	* libutil++/unique_storage.h: make some of
+	id_value only visible to unique_storage.
+
+2003-06-08  John Levon  <levon@movementarian.org>
+
+	* libpp/name_storage.h:
+	* libutil++/unique_storage.h: move the ID class
+	into unique_storage, and make it derive from the
+	template parameter, to give simpler type safe support
+
+2003-06-08  John Levon  <levon@movementarian.org>
+
+	* libutil++/Makefile.am:
+	* libutil++/unique_storage.h: add new template for
+	unique storage of values
+
+	* libpp/name_storage.h:
+	* libpp/name_storage.cpp: use it
+
+2003-06-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_container.cpp: fix order of file output with opannotate
+	--source to be consistent with other tools
+
+2003-06-07  John Levon  <levon@movementarian.org>
+
+	* libpp/profile_container.cpp: fix operator<
+
+2003-06-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile.h:
+	* libpp/profile.cpp: change API to walk through vma with non zero
+	samples count rather looking for all vma. This is not very clean, an
+	iterator interface will be perhaps a better idea. Measures shows it's
+	to do it so for now I apply it.
+	* libpp/profile_container.cpp: update according to above change.
+
+2003-06-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp:
+	* libpp/symbol_container.h:
+	* libpp/symbol_container.cpp: remove dead api
+	  find_symbol(string symbol_name)
+
+2003-06-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/name_storage.h:
+	* libpp/name_storage.cpp:
+	* libpp/profile_container.cpp:
+	* libpp/profile_container.h:
+	* libpp/sample_container.h:
+	* libpp/sample_container.cpp:
+	* libpp/symbol_container.h:
+	* libpp/symbol_container.cpp:
+	* pp/opannotate.cpp: replace some use of string filename by
+	  debug_name_id
+
+2003-06-05  John Levon  <levon@movementarian.org>
+
+	* daemon/Makefile.am:
+	* daemon/opd_kernel.c:
+	* daemon/p_module.h: remove p_module.h, unused
+
+	* daemon/opd_cookie.h: use __NR_lookup_dcookie and
+	use our definitions only if it's not defined
+
+	* daemon/opd_image.c:
+	* daemon/opd_kernel.c:
+	* daemon/opd_sample_files.c:
+	* daemon/oprofiled.c: pedantry
+
+	* libabi/op_import.cpp:
+	* libabi/abi_test.cpp: fix build from odb change
+
+	* libop/op_config.h: move NR_CPUS to ...
+
+	* libop/op_config_24.h: ... here
+
+	* libop/op_hw_config.h: remove unused OP_COUNT_MAX
+
+2003-06-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/op_header.cpp:
+	* libpp/profile.cpp:
+	* dae/opd_proc.c:
+	* dae/opd_sample_files.c:
+	* daemon/opd_image.c:
+	* daemon/opd_sample_files.c:
+	* libdb/odb_hash.h:
+	* libdb/db_insert.c:
+	* libdb/db_manage.c:
+	* libdb/db_test.c: error message is now a field of a samples_odb_t
+
+2003-06-03  John Levon  <levon@movementarian.org>
+
+	* libutil++/child_reader.cpp:
+	* libabi/abi.cpp:
+	* libabi/abi.h:
+	* libabi/abi_test.cpp:
+	* libabi/op_api.h:
+	* libabi/op_abi.cpp:
+	* libabi/op_import.cpp: pedantry, remove unused code
+
+2003-06-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/oprofiled.c:
+	* libop/oprofiled.c:
+	* libop/op_cpu_type.c:
+	* module/oprofile.c:
+	* module/oprofile.h:
+	* pp/opdiff.cpp: more static data and function
+
+2003-05-31  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start_util.h:
+	* libdb/db_stat.c:
+	* libdb/odb_hash.h:
+	* libpp/format_output.h:
+	* libpp/locate_image.h:
+	* libpp/name_storage.h:
+	* libpp/partition_files.h:
+	* libpp/profile.h:
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: improve doxygen comment
+
+2003-05-31  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: use AC_DEFINE_UNQUOTED() to define version string
+	  in config.h not in version-1.h
+	* Makefile.am: distclean-local: is no longer used
+	* version-1.h.in: delete
+	* libutil/op_version.h:
+	* libutil/op_version.c: new file: package version output
+	* libutil/Makefile.am:
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c:
+	* gui/oprof_start.h:
+	* libop/op_events.c:
+	* libopt++/popt_options.cpp:
+	* libregex/demangle_sybol.cpp:
+	* module/oprofile.c:
+	* utils/op_help.c: tweak # include according
+
+2003-05-30  Dan Zink  <Dan.Zink@hp.com>
+
+	* module/x86/op_apic.c: really disable the apic if it was disabled
+
+2003-05-29  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: don't allow --rtc-value if not RTC mode
+
+2003-05-27  John Levon  <levon@movementarian.org>
+
+	* libutil++/string_manip.h: add <stdexcept>
+
+	* pp/opannotate.cpp: use '\n' not endl
+
+	* pp/opreport.cpp: untie cout
+
+2003-05-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* merge with pp-interface-branch: following ChangeLog was unmerged
+	  to branch
+
+	2003-05-27  John Levon  <levon@movementarian.org>
+
+	* configure.in: oprofile 0.5.3 is released, back to
+	0.6cvs
+
+	2003-05-26  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: update docs for --no-vmlinux
+
+	2003-05-26  John Levon  <levon@movementarian.org>
+
+	* libop/op_interface_25.h:
+	* daemon/opd_image.c: handle tgid for future
+	compatibility, fix compile on older gccs
+
+	2003-05-26  John Levon  <levon@movementarian.org>
+
+	* libop/op_interface_25.h: add LAST_CODE
+
+	* daemon/opd_stats.h:
+	* daemon/opd_stats.c: count short reads of
+	buffer and unplaceable samples
+
+	* daemon/opd_image.c: rewrite buffer parsing
+	code, handle window where we can't place a
+	sample
+
+	2003-05-26  John Levon  <levon@movementarian.org>
+
+	* libutil++/utility.h: fix typo
+
+	* utils/opcontrol: fix typo
+
+	2003-05-16  John Levon  <levon@movementarian.org>
+
+	* pp/counter_profile.cpp: remove bogus cpu speed
+	consistency check
+
+	2003-05-09  John Levon  <levon@movementarian.org>
+
+	* m4/Makefile.am:
+	* m4/compileroption.m4: add a generalised compiler option
+	tester
+
+	* configure.in: use it, add -fno-common
+
+	2003-05-09  John Levon  <levon@movementarian.org>
+
+	* daemon/oprofiled.c:
+	* dae/oprofiled.c: remove duplicate declaration found
+	via -fno-common
+
+	2003-05-04  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: fix validation errors from xmllint --valid
+	
+
+2003-05-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_spec.cpp: make image:/path/to:image working
+
+2003-05-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/string_manip.h:
+	* libutil++/string_manip.cpp: specialize
+	  lexical_cast_no_ws<unsigned int> to accept hexadecimal input
+
+	* pp/common_option.cpp: missing << endl
+
+2003-05-27  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.xml: update example in "Interpreting profiling results"
+	section
+
+2003-05-26  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: add new pp tools options
+
+2003-05-26  John Levon  <levon@movementarian.org>
+
+	* doc/opreport.1.in:
+	* doc/opgprof.1.in:
+	* doc/opannotate.1.in:
+	* doc/op_help.1.in: complete
+
+2003-05-26  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* doc/Makefile.am:
+	* doc/oprofile.1.in:
+	* doc/op_help.1.in:
+	* doc/opcontrol.1.in:
+	* doc/opreport.1.in:
+	* doc/opannotate.1.in:
+	* doc/opgprof.1.in: re-organise and add manpages
+
+2003-05-26  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: start to document the pp interface
+
+2003-05-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport.cpp: remove automatic switch to --symbols mode
+
+2003-05-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/symbol_sort.h:
+	* pp/opannotate_options.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opreport_options.cpp: handle meaningless options combinations
+
+2003-05-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opgprof_options.cpp: no need to use unmergeable_profile here
+
+2003-05-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/i386.piii.unit_masks: tweak comment, change default unit mask
+	  for kni instruction to 0 and type to exclusive
+
+2003-05-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_container.cpp: thinko
+	* pp/opreport.cpp: typo
+
+2003-05-25  John Levon  <levon@movementarian.org>
+
+	* libopt++/popt_options.h:
+	* libopt++/popt_options.cpp: obvious cleanup,
+	remove some dead code
+
+2003-05-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_flags: cf_image_name new column_flags flag
+	* libpp/profile_container.cpp: use above flag. Don't compare app_name
+	  by string but id
+	* pp/opreport.cpp: hide image_name when un-necessary
+
+2003-05-24  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/srcdoc/Doxyfile:
+	* libpp/profile.h:
+	* libpp/profile_container.h:
+	* libutil++/utility.h: remove gcc 2.91 noncopyable as empty base class
+	 work-around
+
+2003-05-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: do early check of libiberty
+
+	* libpp/symbol_sort.cpp: 2.91 compile fix
+
+2003-05-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/child_reader.h: minor #include fix
+
+2003-05-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/name_storage.cpp: debug_name_storage::name() 
+	  return an empty string when for zero id to avoid exception
+
+2003-05-21  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile.cpp:
+	* libpp/op_header.h:
+	* libpp/op_header.cpp: when sample file differ output the sample
+	  filename
+
+	* pp/opannotate.cpp: remove spurious output
+
+	* */Makefile.am:
+	* configure.in: handle our own OP_CFLAGS, OP_CXXFLAGS to let user
+	  free to use make CFLAGS=
+
+2003-05-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_spec.h:
+	* libpp/profile_spec.cpp: remove lib_image_exclude, use image_exclude
+	  instead. match() Handle image exclusion.
+
+	* libregex/stl.pat.in: FIXME
+
+	* libutil++/string_manip.h: compile fix
+
+2003-05-19  John Levon  <levon@movementarian.org>
+
+	* libutil++/comma_list.h:
+	* libpp/filename_spec.cpp:
+	* libutil++/string_manip.h:
+	* libutil++/generic_spec.h: rename strict_convert<>
+	to lexical_cast_no_ws<>
+
+2003-05-19  John Levon  <levon@movementarian.org>
+
+	* libutil++/generic_spec.h: move strict_convert<> to...
+
+	* libutil++/string_manip.h: ...here
+
+2003-05-19  John Levon  <levon@movementarian.org>
+
+	* libutil++/generic_spec.h: comma_list isn't a friend
+	any more
+
+	* libutil++/comma_list.h: use generic_spec<>::match()
+	directly
+
+2003-05-19  John Levon  <levon@movementarian.org>
+
+	* libpp/name_storage.h: s/name_map/stored_names/, it's not
+	a map any more.
+
+2003-05-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libregex/mangled-name.txt:
+	* libregex/stl.pat.in: partial handling of _Identity<> and
+	  _Select1st<>, pattern fail if type are too complex
+
+2003-05-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_output.cpp: small cleanup
+
+	* libpp/name_storage.h:
+	* libpp/name_storage.cpp: ensure type safety by providing distinct
+	  type identifier for each name_storage based container
+
+	* libpp/profile_container.cpp:
+	* libpp/sample_container.cpp:
+	* libpp/symbol_functors.cpp:
+	* libpp/symbol_sort.cpp:
+	* libpp/opp_symbol.h: use the name identifier api
+
+	* libpp/op_header.cpp: 
+	* libpp/partition_files.cpp: use a set<string> not a name_storage
+
+	* libpp/format_output.cpp: small cleanup
+
+
+2003-05-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/partition_files.cpp: merge partition entry when necessary
+	  fixing a corner case when a binary can be a dependent or a primary
+	  image and was not merged
+
+2003-05-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport_options.cpp:
+	* pp/opannotate_options.cpp: remove conflicting options shortcut
+
+2003-05-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libregex/stl.pat.in: add list<T>::{const_}+iterator
+
+2003-05-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/name_storage.cpp: basename() return an empty string for nil id
+
+2003-05-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: get_linenr() init linenr to zero
+
+	* libpp/name_storage.cpp: don't use id zero
+	* libpp/opp_symbol.h: now we use id and not string we must provide
+	  default ctor to initialize the id
+	* libpp/profile_container.cpp: init debug info entry only if
+	  get_linenr() succeed
+
+2003-05-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db_manage.c: better handling of zero sample file size when
+	  opening in read only mode
+
+	* module/x86/op_nmi.c: printk format fix
+
+2003-05-17  John Levon  <levon@movementarian.org>
+
+	* pp/opannotate_option.cpp:
+	* pp/opreport_options.cpp: command line changes
+
+2003-05-17  John Levon  <levon@movementarian.org>
+
+	* libpp/name_storage.h:
+	* libpp/name_storage.cpp: add present()
+
+	* libpp/op_header.cpp:
+	* libpp/partition_files.cpp: use a name store
+	to track what we've warned about, and clean up
+	the warnings a bit
+
+2003-05-16  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: expose anonymous symbols
+	to the world as "??sectionname". Useful for .plt
+	and .fini, which are quite common.
+
+	* libpp/name_storage.cpp: demangle anonymous symbols
+	nicely.
+
+2003-05-16  John Levon  <levon@movementarian.org>
+
+	* libpp/symbol_sort.cpp: fix image-sorting
+
+2003-05-16  John Levon  <levon@movementarian.org>
+
+	* libpp/name_storage.h:
+	* libpp/name_storage.cpp: make ID be per-container
+
+2003-05-16  John Levon  <levon@movementarian.org>
+
+	* libpp/name_storage.h:
+	* libpp/name_storage.cpp: merge processed names
+	into one string, remove the boolean
+
+2003-05-16  John Levon  <levon@movementarian.org>
+
+	* libpp/name_storage.h:
+	* libpp/name_storage.cpp: whoops, use string
+	not stored_name for the ID map
+
+2003-05-16  John Levon  <levon@movementarian.org>
+
+	* libpp/name_storage.h:
+	* libpp/name_storage.cpp: split into three
+	stores for debug filenames, symbols, and images
+
+	* libpp/format_output.cpp:
+	* libpp/profile_container.cpp:
+	* libpp/sample_container.cpp:
+	* libpp/symbol_container.cpp:
+	* libpp/symbol_sort.cpp:
+	* pp/opannotate.cpp: changes from above
+
+2003-05-16  John Levon  <levon@movementarian.org>
+
+	* libpp/Makefile.am:
+	* libpp/name_storage.h:
+	* libpp/name_storage.cpp: add shared storage
+	and caching of symbol and file names
+
+	* libpp/opp_symbol.h:
+	* libpp/format_output.cpp:
+	* libpp/profile_container.cpp:
+	* libpp/sample_container.cpp:
+	* libpp/symbol_container.cpp:
+	* libpp/symbol_container.h:
+	* libpp/symbol_sort.cpp:
+	* libpp/symbol_sort.h:
+	* pp/opannotate.cpp:
+	* pp/opreport.cpp: use it
+
+	* pp/opgprof_options.cpp: add unused demangle
+	options to hack-fix the build
+
+2003-05-16  John Levon  <levon@movementarian.org>
+
+	* libpp/symbol_sort.cpp: fix --sort debug
+
+2003-05-16  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: remove have_debug_info()
+
+2003-05-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/op_header.cpp: remove cpu_speed checking
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: bail out in get_linenr() if binary doesn't
+	  contain any debug info. Speed up my test case opreport --debug-info
+	  -l by 25
+
+2003-05-16  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.cpp: clean up interesting_symbol
+	a bit
+
+2003-05-16  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.cpp: make sure linenr is
+	always set to something
+
+	* libpp/opp_symbol.h: linenr should be unsigned
+
+	* libpp/profile_container.cpp: remove some unneeded
+	copies
+	
+2003-05-16  John Levon  <levon@movementarian.org>
+
+	* pp/opannotate.cpp: small renaming
+
+2003-05-15  John Levon  <levon@movementarian.org>
+
+	* libpp/symbol_container.h:
+	* libpp/symbol_container.cpp: add begin(), end(),
+	remove symbols_by_count()
+
+	* libpp/profile_container.cpp: use symbol container
+	iterator directly in select_symbols()
+
+2003-05-15  John Levon  <levon@movementarian.org>
+
+	* libpp/format_output.h:
+	* libpp/format_output.cpp:
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp:
+	* libpp/symbol_container.h:
+	* libpp/symbol_container.cpp:
+	* libpp/symbol_sort.h:
+	* libpp/symbol_sort.cpp:
+	* pp/opannotate.cpp:
+	* pp/opreport.cpp:
+	* pp/opgprof.cpp: move symbol_collection typedef
+	  into global namespace, and use consistently
+
+2003-05-15  John Levon  <levon@movementarian.org>
+
+	* libpp/format_output.h:
+	* libpp/format_output.cpp: add vma_format_64bit(),
+	remove bool parameter from output()
+
+	* pp/opreport.cpp: change from above, refactor flags
+	code into get_format_flags() helper
+
+2003-05-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_output.h:
+	* libpp/format_output.cpp:
+	* libpp/symbol_sort.h:
+	* libpp/symbol_sort.cpp: handle reverse sort in sorting not in output
+	* pp/opannotate.cpp:
+	* pp/opreport.cpp: update according
+
+2003-05-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/symbol_sort.h:
+	* libpp/symbol_sort.cpp: handle sort order as specified on command line
+
+	* pp/opgprof.cpp: sort symbol is not necessary for gprof
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp:
+	* pp/opannotate.cpp: use new sort API
+
+2003-05-12  John Levon  <levon@movementarian.org>
+
+	* libpp/symbol_sort.h:
+	* libpp/symbol_sort.cpp: partial implementation
+	of other sort options
+
+2003-05-12  John Levon  <levon@movementarian.org>
+
+	* libpp/Makefile.am:
+	* libpp/symbol_sort.h:
+	* libpp/symbol_sort.cpp: add sorting code
+
+	* symbol_functors.h: move some less() into
+	symbol_sort.cpp
+
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp: don't pass in
+	sort option to select_symbols(), do it in caller
+
+	* pp/opannotate.cpp:
+	* pp/opgprof.cpp:
+	* pp/opreport.cpp:
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp: from the above
+
+2003-05-12  John Levon  <levon@movementarian.org>
+
+	* format_flags.h: remove vma64_p. Add column_flags
+
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp: pass in a struct
+	to select_symbols. Generate hints for 64-bit VMA
+	and multiple apps in the profile.
+
+	* pp/opannotate.cpp:
+	* pp/opgprof.cpp:
+	* pp/opreport.cpp: use the above
+
+2003-05-12  John Levon  <levon@movementarian.org>
+
+	* libpp/format_output.cpp:
+	* libpp/format_flags.h:
+	* pp/opreport.cpp: trivial renaming of flags
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* libpp/format_output.cpp:
+	* libpp/format_flags.h: better output for
+	the default of short filenames
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* pp/opreport.cpp: improve the app/image name column
+	showing a bit
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* pp/opreport.cpp: default to -l if we were just
+	going to show one image summary.
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* pp/opreport.cpp: move some code around that
+	outputs the image summaries
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* libpp/format_output.h:
+	* libpp/format_output.cpp:
+	* pp/opreport.cpp:
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp: s/--short-filename/--long-filenames/
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* libpp/profile_spec.h:
+	* libpp/profile_spec.cpp: take exclude_dependent not
+	include_dependent
+
+	* pp/opannotate_options.c:
+	* pp/opgprof_options.c:
+	* pp/opreport_options.h:
+	* pp/opreport_options.c: change to use exclude_dependent,
+	remove --hide-dependent
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* locate_images.h:
+	* locate_images.cpp: extra_images can now use
+	relative paths for its search dirs. Move most of 
+	the warnings out of find_image_path, and make it
+	also handle relative paths. Return the file
+	even if it wasn't readable.
+
+	* libpp/partition_files.cpp: give warnings when
+	necessary.
+
+	* libpp/profile_spec.h:
+	* libpp/profile_spec.cpp: handle relative paths
+	inside image specs, as stated in pp_interface; also
+	use the extra images search path for resolution.
+
+	* pp/opannotate_options.cpp:
+	* pp/opreport_options.cpp:
+	* pp/opgprof_options.cpp: changes from above
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* libpp/format_flags.h: source doc improvements
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* libpp/opp_symbol.h: move vma64_p to ...
+
+	* libpp/format_flags.h: ... here
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* libpp/Makefile.am:
+	* libpp/outsymbflags.h:
+	* libpp/format_flags.h:
+	* libpp/profile_container.h:
+	* libpp/format_output.h:
+	* libpp/format_output.cpp:
+	* pp/opreport.cpp: rename outsymbflags to format_flags
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* profile_container.h:
+	* profile_container.cpp:
+	* opannotate.cpp: clean up select_filename() in a
+	similar fashion
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp:
+	* pp/opreport.cpp:
+	* pp/opannotate.cpp:
+	* pp/opgprof.cpp: another select_symbols() API cleanup
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* pp/opgprof.cpp: use select_symbols so we can
+	handle --threshold
+
+2003-05-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opannotate.cpp: use threshold for source output
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* pp/common_option.h:
+	* pp/common_option.cpp:
+	* pp/opannotate_options.cpp:
+	* pp/opreport_options.cpp: make --threshold
+	be a common option.
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* pp/profile_container.h:
+	* pp/profile_container.cpp:
+	* pp/opannotate.cpp:
+	* pp/opreport.cpp: clean up select_symbols
+	interface
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* pp/opreport.cpp: make --threshold work for
+	image summaries too
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* pp/opreport_options.cpp: fix --threshold
+	description to match reality
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* libpp/partition_files.h:
+	* libpp/partition_files.cpp:
+	* pp/opannotate_options.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp: rename merge_by members
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* pp/opreport.cpp: add some logic to not output
+	duplicate lines for dep images when we've already
+	shown all the possible details in the main image summary
+
+2003-05-11  John Levon  <levon@movementarian.org>
+
+	* pp/common_option.h: use std::
+
+2003-05-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport_options.cpp: move handle_threshold()
+	* pp/common_option.h:
+	* pp/common_option.cpp: here
+	* pp/opannotate_options.h:
+	* pp/opannotate_options.cpp:
+	* pp/opannotate.cpp: handle --threshold
+
+2003-05-10  John Levon  <levon@movementarian.org>
+
+	* libop/op_mangle.h:
+	* libop/op_mangle.c: use a temp struct for
+	passing the mangle parameters with a set of
+	flags.
+
+	* dae/opd_sample_files.c:
+	* daemon/opd_sample_files.c: use it
+
+2003-05-10  John Levon  <levon@movementarian.org>
+
+	* Makefile.am:
+	* HACKING:
+	* libop++/:
+	* pp/Makefile.am:
+	* libpp/Makefile.am:
+	* libpp/op_header.h:
+	* libpp/op_header.cpp: remove libop++ after
+	moving op_header into libpp
+
+2003-05-10  John Levon  <levon@movementarian.org>
+
+	* libop++/op_header.cpp: make CPU info take up
+	one line not two
+
+2003-05-10  John Levon  <levon@movementarian.org>
+
+	* libop++/Makefile.am:
+	* libop++/op_header.cpp:
+	* libop++/op_print_event.h:
+	* libop++/op_print_event.cpp: remove op_print_event
+	files, making it a function local to op_header.cpp
+
+2003-05-10  John Levon  <levon@movementarian.org>
+
+	* libop++/op_header.h:
+	* libop++/op_header.cpp: make output_header() be
+	an operator<<
+	
+	* pp/opannotate.cpp:
+	* pp/opreport.cpp: changes from the above
+
+	* libpp/profile.h: small cleanup
+
+2003-05-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/string_manip.h:
+	* libutil++/string_manip.cpp: replace format_percent() by
+	  format_double()
+
+	* libpp/format_output.cpp:
+	* pp/opannotate.cpp:
+	* pp/opreport.cpp: use format_double()
+
+2003-05-09  John Levon  <levon@movementarian.org>
+
+	* libpp/opp_symbol.h: app name, image name should
+	be in symbol not in file_location
+
+	* libpp/format_output.cpp:
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp:
+	* libpp/symbol_container.cpp:
+	* libpp/symbol_functors.cpp: changes from above
+
+2003-05-09  John Levon  <levon@movementarian.org>
+
+	* libpp/format_output.h:
+	* libpp/format_output.cpp: vma_64 doesn't need
+	to be in field_datum. make one output() private
+
+2003-05-09  John Levon  <levon@movementarian.org>
+
+	* libpp/format_output.h:
+	* libpp/format_output.cpp: pass a symbol ref
+	not name down into the formatters
+
+2003-05-09  John Levon  <levon@movementarian.org>
+
+	* libutil++/string_manip.h:
+	* libutil++/string_manip.cpp: sample_filename() is unused
+
+2003-05-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop++/op_header.h:
+	* libop++/op_header.cpp: read_header() new
+	* libop++/Makefile.in: we depend on libdb
+
+	* pp/opannotate.cpp:
+	* pp/opreport.cpp: better way to get sample file header
+
+2003-05-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_output.cpp: remove redundant map formater
+	* pp/opannotate.cpp: spurious cout
+
+2003-05-08  John Levon  <levon@movementarian.org>
+
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp:
+	* pp/opreport_options.h: clean up cout stuff as
+	suggested by Phil
+
+2003-05-08  John Levon  <levon@movementarian.org>
+
+	* libpp/profile_spec.h:
+	* libpp/profile_spec.c: rename the set_p variables,
+	remove pointless is_empty() function
+
+	* pp/opreport.cpp: split collation and output into
+	two separate functions. Rename the temporary structures
+	so it's hopefully a bit more obvious what's happening.
+	Add sourcedocs.
+
+2003-05-08  John Levon  <levon@movementarian.org>
+
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp: add options::cout,
+	  --output-file option
+
+	* pp/opreport.cpp: use options::cout
+
+2003-05-08  John Levon  <levon@movementarian.org>
+
+	* pp/format_output.cpp: fix cumulative column widths
+
+2003-05-08  John Levon  <levon@movementarian.org>
+
+	* opreport_options.h: add accumulated
+
+	* opreport.cpp: handle --accumulated
+
+2003-05-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/symbol_container.cpp: minor tidy
+
+	* libpp/profile.h:
+	* libpp/profile.cpp: allow to cumulate sample file
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp: remove free function add_samples()
+
+	* pp/annotate.cpp:
+	* pp/opgprof.cpp:
+	* pp/opreport.cpp: when possible cumulate samples into a profile_t
+	  first before cumulating them in a profile_container
+
+2003-05-07  John Levon  <levon@movementarian.org>
+
+	* pp/opannotate.cpp: small cleanup
+
+2003-05-07  John Levon  <levon@movementarian.org>
+
+	* pp/opreport_options.cpp: remove unneeded include
+
+2003-05-07  John Levon  <levon@movementarian.org>
+
+	* libpp/Makefile.am:
+	* libpp/parse_cmdline.h:
+	* libpp/parse_cmdline.cpp: rename to ...
+
+	* libpp/profile_spec.h:
+	* libpp/profile_spec.cpp: this. Make handle_nonoptions()
+	be a static factory create() method instead. Make
+	select_sample_filenames() be a member generate_file_list()
+	instead. Concomitant cleanups.
+
+	* libpp/filename_spec.h:
+	* pp/opannotate_options.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opreport_options.cpp: changes from above
+
+2003-05-07  John Levon  <levon@movementarian.org>
+
+	* libpp/profile.cpp: fix stupid error in last commit
+
+2003-05-07  John Levon  <levon@movementarian.org>
+
+	* libpp/profile.h:
+	* libpp/profile.cpp: remove sample_filename member,
+	bogus old spurious check, set_start_offset().
+
+	* libpp/profile_container.cpp:
+	* pp/opannotate.cpp:
+	* pp/opreport.cpp: changes from above
+
+2003-05-07  John Levon  <levon@movementarian.org>
+
+	* libpp/derive_files.h:
+	* libpp/derive_files.cpp: rename files as ...
+
+	* libpp/locate_images.h:
+	* libpp/locate_images.cpp: this.
+
+	* libpp/Makefile.am:
+	* libpp/partition_files.h:
+	* pp/common_option.h:
+	* pp/opgprof.cpp:
+	* pp/opgprof_options.h:
+	* pp/opreport_options.h: changes from above
+
+2003-05-07  John Levon  <levon@movementarian.org>
+
+	* libpp/derive_files.h:
+	* libpp/derive_files.cpp: rework into extra_images
+	class
+
+	* libpp/partition_files.h:
+	* libpp/partition_files.cpp:
+	* pp/common_option.h:
+	* pp/common_option.cpp:
+	* pp/opannotate.cpp:
+	* pp/opgprof.cpp:
+	* pp/opreport.cpp: use the above
+
+2003-05-07  John Levon  <levon@movementarian.org>
+
+	* libpp/Makefile.am:
+	* session.h:
+	* session.cpp: remove session.{h,cpp}
+
+2003-05-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/oprofpp.cpp pp/oprofpp_options.cpp pp/oprofpp_options.h:
+	* pp/op_time.cpp pp/op_time_options.cpp pp/op_time_options.h:
+	* pp/op_to_source.cpp pp/op_to_source_options.cpp:
+	* pp/op_to_source_options.h pp/op_merge.cpp: removed files
+
+	* pp/Makefile.am: update
+
+2003-05-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opgprof.cpp: infamous typo
+
+	* pp/opannotate.cpp: output sample file header
+
+
+2003-05-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpop++/op_mangling.h:
+	* libpop++/op_mangling.cpp: removed file
+	* libop++/op_header.h:
+	* libop++/op_header.cpp: new file, misc function acting on sample
+	  file header stolen from libpp/profile.(cpp|h)
+	* libop++/op_print_event.h: typo
+	* libop++/op_print_event.cpp: save/restore ostream state
+	* libop++/Makefile.am: update
+	
+	* libop/op_sample_file.h: remove dead #define OPD_MANGLE_CHAR
+
+	* libpp/profile.h:
+	* libpp/profile.cpp: move some member function to free function in
+	  libop++/op_header.(cpp|h)
+	* libpp/profile_container.cpp: minor call change
+
+	* libpp/Makefile.am: op_merge can't be compiled currently inhibit build
+
+	* libpp/opreport.cpp: output sample file header
+
+2003-05-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/path_filter.h: default param to empty string not "*"
+
+	* libpp/symbol_functors.h: remove dead code
+
+	* pp/opgprof.cpp: off by one in histsize calculation
+
+2003-05-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil/op_file.h:
+	* libutil/op_file.c: sanitize create_path()
+
+	* libutil++/path_filter.h: default ctor match all
+
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp:
+	* libpp/sample_container.h:
+	* libpp/sample_container.cpp:
+	* libpp/symbol_container.h:
+	* libpp/symbol_container.cpp: extend api to allow selecting symbol
+	  restricted to one application, ditto for retrieving samples
+
+	* pp/opannotate_options.h:
+	* pp/opannotate_options.cpp:
+	* pp/opannotate.cpp: implement
+
+	* pp/opgprof_options.h:
+	* pp/opgprof_options.cpp:
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp: comment fix
+
+	* pp/opreport.cpp: update to match new profile_container api
+
+2003-05-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport.cpp: don't show dependent file if !--include-dependent
+
+2003-05-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/partition_files.h:
+	* libpp/partition_files.cpp: sort_by_image_name() new return a list
+	  of sample filename sorted by bfd image name.
+	* libpp/profile_container.cpp: add_samples() don't build op_bfd object
+	  used here but pass it as parameters
+
+	* pp/opgprof.cpp:
+	* pp/opreport.cpp: use the above change to avoid opening multiple time
+	  a bfd object.
+
+	* pp/opannotate_options.cpp: add --(include|exclude)-symbols
+
+	* libpp/parse_cmdline.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opreport.cpp: make a distinction in error message between no
+	  sample available and sample file available but no one was selected
+
+2003-05-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opannotate_options.h:
+	* pp/opannotate_options.cpp:
+	* pp/opdiff.cpp:
+	* pp/opdiff_options.h:
+	* pp/opdiff_options.cpp:
+	* pp/opgprof.cpp:
+	* pp/opgprof_options.h:
+	* pp/opgprof_options.cpp:
+	* pp/opreport.cpp:
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp: move common options handling ...
+	* pp/common_option.h:
+	* pp/common_option.cpp: here
+
+	* pp/opannotate.cpp: add options
+
+	* libpp/parse_cmdline.cpp: #include <iterator> ...
+
+2003-05-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/counter_util.h:
+	* libpp/counter_util.cpp: remove these files from cvs
+
+	* libpp/derive_files.h:
+	* libpp/derive_files.cpp: remove dead code derive_files() + typo
+
+	* libpp/parse_cmdline.cpp: select_sample_filename() throw if empty
+	  session after filtering
+
+	* pp/common_option.cpp: catch invalid_argument, return failure on
+	  catched exception
+
+2003-05-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: remove _init from excluded symbol
+	* libpp/profile_container.cpp: tidy
+
+	* pp/opgprof.cpp: fix capping samples
+
+2003-04-30  John Levon  <levon@movementarian.org>
+
+	* pp/opgprof.cpp:
+	* pp/opgprof_options.cpp:
+	* libpp/profile.cpp: tiny cleanups, fix compile
+
+2003-04-30  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db_stat.c: minor improvement to stat, useful to track missed
+	  sample by our tools.
+
+	* pp/op_report.cpp: move matching_sample_filename() to ...
+	* libpp/parse_cmdline.h:
+	* libpp/parse_cmdline.cpp: here renamed select_sample_filename()
+
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp: expose begin() / end() from
+	 sample_container
+
+	* pp/common_option.h:
+	* pp/common_option.cpp: move option which was not really common to ..
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp: here
+	* pp/opannotate_options.h:
+	* pp/opannotate_options.cpp: and here
+
+	* pp/operport.cpp:
+	* pp/opannotate.cpp: better to return a value from main() ...
+
+	* pp/opgprof_options.h:
+	* pp/opgprof_options.cpp:
+	* pp/opgprof.cpp: implement opgprof
+
+2003-04-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/parse_cmdline.h:
+	* libpp/parse_cmdline.cpp: handle opreport /lib/libc-2.2.5.so, now
+	  non tag, non option argument match either an image name or lib name
+
+2003-04-29  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.cpp: remove "static " inside anon namespace
+
+2003-04-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_output.h:
+	* libpp/format_output.cpp: need header tweaking
+
+	* pp/opannotate.cpp:
+	* pp/opgprof.cpp: minor tidy
+
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp:
+	* pp/opreport.cpp: handle -no-header and --image-path
+
+2003-04-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/glob_filter.cpp:
+	* libutil++/path_filter.cpp:
+	* libutil++/string_filter.cpp: #include <algorithm>
+
+2003-04-28  John Levon  <levon@movementarian.org>
+
+	* libutil++/string_filter.cpp:
+	* libutil++/string_filter.h:
+	* libutil++/glob_filter.h:
+	* libutil++/glob_filter.cpp:
+	* libutil++/path_filter.h:
+	* libutil++/path_filter.cpp: use std::find[_if],
+	share some code
+
+2003-04-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: replace a loop by a std::copy()
+
+2003-04-28  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: cleanup of last fix
+
+2003-04-28  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: make symbol filtering
+	happen *after* adding of artificial symbol
+
+2003-04-28  John Levon  <levon@movementarian.org>
+
+	* libutil++/string_filter.cpp:
+	* libutil++/glob_filter.cpp:
+	* libutil++/path_filter.cpp: match as true if
+	include_list is empty and not excluded
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: use string_filter to
+	filter symbols
+
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp:
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp:
+	* pp/opreport.cpp: changes from using string_filter
+
+2003-04-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport.cpp: finish to remove use of split_sample_filename
+
+2003-04-28  John Levon  <levon@movementarian.org>
+
+	* libutil++/filename_match.h:
+	* libutil++/filename_match.cpp: replace with ...
+
+	* libutil++/Makefile.am:
+	* libutil++/string_filter.h:
+	* libutil++/string_filter.cpp:
+	* libutil++/glob_filter.h:
+	* libutil++/glob_filter.cpp:
+	* libutil++/path_filter.h:
+	* libutil++/path_filter.cpp: .. split up variants
+	of the filters
+
+	* libpp/parse_cmdline.cpp: use glob_filter
+
+	* pp/op_to_source.cpp: use path_filter
+
+2003-04-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/partition_files.h:
+	* libpp/partition_files.cpp:
+	* libpp/split_sample_filename.h:
+	* libpp/split_sample_filename.cpp:
+	* pp/opreport.cpp: replace some use of std::string sample_filename
+	  by a split_sample_filename struct
+
+2003-04-28  John Levon  <levon@movementarian.org>
+
+	* libutil++/filename_match.h:
+	* libutil++/filename_match.cpp: use file-scope
+	not private static member function
+
+2003-04-27  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_output.h:
+	* libpp/format_output.cpp: remove all string based output format flag
+
+	* libpp/format_output.cpp: move options::demangle handling ...
+	* libregx/demangle_symbol.cpp: here
+
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp:
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp:
+	* pp/opreport.cpp: handle --include-symbols
+
+2003-04-27  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp:
+	* pp/opreport.cpp: handle --threshold, remove --ignore-symbols
+
+2003-04-27  John Levon  <levon@movementarian.org>
+
+	* libpp/<various>: minor spacing etc.
+
+2003-04-27  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/outsymbflag.h: remove osf_short_xxx variant
+	* libpp/format_output.h:
+	* libpp/format_output.cpp: replace osf_short_xxx by a boolean
+	* libpp/profile_container.cpp: update according
+
+	* pp/opreport_options.h: export short_filename option
+	* pp/opreport.cpp: use short_filename
+
+2003-04-27  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/symbol_functors.h: add less_symbol predicate
+	* libpp/symbol_functors.cpp: new file, less_symbol implementation
+	* libpp/Makefile.am: symbol_functors.cpp
+
+	* libpp/symbol_container.h:
+	* libpp/symbol_container.cpp: use a node based container for symbols
+	  ensuring validity of symbol pointer over a symbol_container life time
+	* libpp/sample_container.h:
+	* libpp/sample_container.cpp: ditto as above for samples
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp: use this new api to merge symbols
+	  and sample.
+
+	* libpp/format_output.h:
+	* libpp/format_output.cpp: use new api to iterate over sample by symbol
+
+	* pp/opreport.cpp: detailed output
+	
+
+2003-04-27  John Levon  <levon@movementarian.org>
+
+	* pp/opreport.cpp: make opreport -l put largest results
+	at the top like opreport does
+
+2003-04-26  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_container.h: comment
+
+	* pp/opreport_options.h: more options export
+	* pp/opreport.cpp: implement -l. Doesn't works correctly: --merge=lib
+
+2003-04-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport_options.h: export global_percent
+	* pp/opreport.cpp: finish to implement op_time like behavior. Remains
+	  to implement op_time -l
+
+2003-04-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/partition_files.cpp: fix a crash when profile spec is empty
+
+	* pp/opreport_options.cpp: bail out if no samples files are found
+
+2003-04-25  John Levon  <levon@movementarian.org>
+
+	* pp/opreport_options.cpp: --hide-dependent should have 'h' as
+	short form. Add a FIXME for a crash
+
+2003-04-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/partition_files.cpp: thinko in sample filename partition
+
+	* pp/opreport_options.h: export more options
+	* pp/opreport_options.cpp: add --hide-dependent, change --merge to not
+	  default to all
+	* pp/opreport.cpp: handle --hide-dependent --include-dependent and
+	  --merge=lib. Code is ugly, tidy incoming
+
+2003-04-25  John Levon  <levon@movementarian.org>
+
+	* libpp/format_output.cpp:
+	* libpp/format_output.h:
+	* libpp/outsymbflag.h: "immutable" not "imutable"
+
+	* libpp/partition_files.cpp: include <iterator> to compile
+
+2003-04-24  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/partition_files.h: typo
+	* libpp/profile.cpp: difficult to get right result with a random value
+	  in profile::start_offset
+
+	* pp/opreport_options.h: export options::reverse_sort
+	* pp/opreport_options.cpp: bail out if we get multiple counter
+
+	* pp/opreport.cpp: raw output result for application (not symbol)
+	  output.
+
+2003-04-24  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/filename_spec.h:
+	* libpp/filename_spec.cpp:
+	* libpp/parse_cmdline.h:
+	* libpp/parse_cmdline.cpp:
+	* libpp/split_sample_filename.h:
+	* libpp/split_sample_filename.cpp: s/unit_mask/unitmask
+
+	* libpp/merge_spec.cpp:
+	* libpp/merge_spec.h: rename to
+	* libpp/partition_files.h:
+	* libpp/partition_files.cpp: here. Add and merge_option.
+	  partition_files is now a class.
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp:
+	* pp/opreport.cpp: update according to the above. Add a roughly support
+	  to count samples for plain op_time opreport like
+
+2003-04-24  John Levon  <levon@movementarian.org>
+
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp: chop off the _t of the class name
+
+	* libpp/format_output.cpp:
+	* libpp/format_output.h:
+	* libpp/symbol_container.cpp:
+	* libpp/symbol_container.h:
+	* pp/op_time.cpp:
+	* pp/op_to_source.cpp:
+	* pp/oprofpp.cpp: changes from the above
+
+2003-04-24  John Levon  <levon@movementarian.org>
+
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp: pedantry for sample_container
+	indices.
+
+	* libpp/sample_container.h:
+	* libpp/sample_container.cpp: various cleanups and docs. Add
+	and use size_type.
+
+	* libpp/symbol_container.h:
+	* libpp/symbol_container.cpp: renamings. Add and use size_type.
+
+2003-04-24  John Levon  <levon@movementarian.org>
+
+	* libpp/symbol_container.h:
+	* libpp/symbol_container.cpp: remove unused operator[].
+	Add some docs. Some small cleanups
+
+2003-04-24  John Levon  <levon@movementarian.org>
+
+	* libpp/symbol_container_imp.h:
+	* libpp/symbol_container_imp.cpp:
+	* libpp/sample_container_imp.h:
+	* libpp/sample_container_imp.cpp: These classes weren't using
+	the pimpl idiom, so the _imp was spurious. Remove that as well
+	as removing the _t from the names, and rename to ...
+
+	* libpp/symbol_container.h:
+	* libpp/symbol_container.cpp:
+	* libpp/sample_container.h:
+	* libpp/sample_container.cpp: ...files moved from the above with
+	new names.
+
+2003-04-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/generic_spec.h: minor formating tweak
+
+	* libpp/parse_cmdline.h:
+	* libpp/parse_cmdline.cpp: handle_non_options(): return parse_cmdline
+	  by value
+
+	* libpp/merge_spec.h:
+	* libpp/merge_spec.cpp: new files: partition list of samples filename
+	  according to merge options.
+	* libpp/Makefile.am: update
+
+	* pp/opreport_options.cpp: more options handling, use partition_files()
+
+2003-04-22  John Levon  <levon@movementarian.org>
+
+	* pp/opreport_options.cpp: compile fix
+
+2003-04-21  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/filename_match.h:
+	* libutil++/filename_match.cpp: add strict_match()
+
+	* libutil++/generic_spec.cpp: generic_spec<string>::set() was not
+	  setting is_all member leading to bad matching
+
+	* libpp/filename_spec.cpp: minor tidy
+
+	* libpp/parse_cmdline.h:
+	* libpp/parse_cmdline.cpp: fix match()
+
+	* libpp/split_sample_filename.h:
+	* libpp/split_sample_filename.cpp: handle sample file base directory
+
+	* libop++/op_print_event.h:
+	* libop++/op_print_event.cpp:
+	* libpp/format_output.h:
+	* libpp/format_output.cpp:
+	* libpp/opp_symbol.h:
+	* libpp/profile.h:
+	* libpp/profile.cpp:
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp:
+	* libpp/sample_container_imp.h:
+	* libpp/sample_container_imp.cpp:
+	* libpp/symbol_container_imp.h:
+	* libpp/symbol_container_imp.cpp:
+	* libpp/symbol_functors.h: remove all use of counter number
+
+	* libpp/counter_array.h:
+	* libpp/counter_array.cpp:
+	* libpp/counter_profile.h:
+	* libpp/counter_profile.cpp: no longer used, move some bits to
+	  libpp/profile.(h|cpp) and remove these files.
+	* libpp/Makefile.am: update according
+
+	* pp/op_merge.cpp: use profile_t not counter_profile_t
+	* pp/makefile.am: correct lib for op_merge
+
+	* pp/opreport_options.cpp: more options handling
+
+2003-04-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libopt++/popt_options.cpp: don't show help_str with --usage
+	* libpp/format_output.cpp: typo
+	* libutil/op_file.c: create dir with 755 not 700
+	* pp/common_option.cpp: source formating
+
+	* libpp/parse_cmdline.h:
+	* libpp/parse_cmdline.cpp: handle_non_options() new
+	* pp/opreport_options.cpp: handle more options
+
+	* pp/opsummary.cpp:
+	* pp/opsummary_options.h:
+	* pp/opsummary_options.cpp: remove, opreport should do its job.
+	* pp/Makefile.am: update
+
+2003-04-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libopt++/popt_options.cpp: allow "no-" prefix to long option name
+	  implicitly specify the value must be negated
+	* libopt++/popt_options.cpp: update doxygen documentation
+
+	* libpp/format_output.h: missing #include
+	* libpp/format_output.cpp: space + minor change
+
+	* pp/opannotate_options.h:
+	* pp/opannotate_options.cpp:
+	* pp/opdiff_options.h:
+	* pp/opdiff_options.cpp:
+	* pp/opgprof_options.h:
+	* pp/opgprof_options.cpp:
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp:
+	* pp/opsummary_options.h:
+	* pp/opsummary_options.cpp: new skeleton file
+
+	* pp/opannotate.cpp:
+	* pp/opdiff.cpp:
+	* pp/opgprof.cpp:
+	* pp/opreport.cpp:
+	* pp/opsummary.cpp: update to handle options
+
+	* pp/common_option.cpp: follow more closely pp_interface
+
+	* pp/opsummary_options.cpp: start to handle opsummary option
+
+	* pp/Makefile.am: update
+
+2003-04-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_output.h:
+	* libpp/format_output.cpp:
+	* libpp/outsymbflag.h:
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp: osf_header/osf_details are no longer
+	  flags but separate boolean.
+
+2003-04-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_kernel.c:
+	* daemon/opd_kernel.c: remove leading '/' on module name fixing 2.5
+	 module not under {kern} and similar case for "no-vmlinux" with 2.4/2.5
+
+	* libutil/op_file.c: tiny tidy
+
+2003-04-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_mangle.c: app_name and image was reversed, {dep} was missing
+
+2003-04-17  John Levon  <levon@movementarian.org>
+
+	* libpp/filename_spec.h:
+	* libutil++/comma_list.h: compile fixes
+
+2003-04-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: better --reset handling
+
+2003-04-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae works, daemon compiles but not tested.
+
+	* libop/op_config.h:
+	* libpp/op_session.h:
+	* libpp/session.cpp:
+	* pp/op_merge: handle new path to samples files.
+
+	* libutil++/file_manip.h:
+	* libutil++/file_manip.cpp: move create_dir(), create_path() ...
+	* libutil/op_file.h:
+	* libutil/op_file.c: here. Remove op_move_regular_file()
+
+	* daemon/opd_image.c:
+	* daemon/opd_sample_files.h:
+	* daemon/opd_sample_files.c:
+	* dae/opd_image.c:
+	* dae/opd_sample_files.h:
+	* dae/opd_sample_files.c: use new filename scheme
+
+	* daemon/oprofiled.c:
+	* dae/oprofiled.c: remove samples files backup stuff
+
+	* libop/op_mangle.h:
+	* libop/op_mangle.c: ugly modification to handle new samples filename
+
+	* utils/opcontrol: handle new samples files path, --save and --reset
+	  are working too.
+
+	* gui/oprof_start_util.cpp: use new create_path() API
+
+2003-04-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/common_option.cpp:
+	* pp/common_option.h:
+	* libregex/demangle_symbol.cpp: rename demangle_and_shrink to
+	  smart_demangle
+
+2003-04-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* starting branch pp-interface-branch
+
+	* Makefile.am:
+	* configure.in: handle new sub dir libpp
+
+	* libutil++/comma_list.h: new file handling of comma separated list of
+	  items.
+	* libutil++/generic_spec.cpp:
+	* libutil++/generic_spec.h: new file
+	* libutil++/Makefile.am: handle new file
+
+	* pp/counter_array.*:
+	* pp/counter_profile.*:
+	* pp/counter_util.*:
+	* pp/derive_files.*:
+	* pp/format_output.*:
+	* pp/opp_symbol.h:
+	* pp/outsymbflag.h:
+	* pp/profile.*:
+	* pp/profile_container.*:
+	* pp/sample_container_imp.*:
+	* pp/session.*:
+	* pp/symbol_container_imp.*:
+	* pp/symbol_functors.*: move to
+
+	* libpp/*: here
+	* libpp/filename_spec.cpp:
+	* libpp/filename_spec.h: new file handling of pp sample filename
+	* libpp/parse_cmdline.cpp:
+	* libpp/parse_cmdline.h: new file, handling of command line tag:value
+	* libpp/Makefile.am: new file build libpp.a
+
+	* pp/common_option.h:
+	* pp/common_option.cpp: common option to pp tools. Implement common
+	  entry point to pp tools.
+	* pp/opannotate.cpp:
+	* pp/opdiff.cpp:
+	* pp/opgprof.cpp:
+	* pp/opreport.cpp:
+	* pp/opsummary.cpp: skeleton file for all pp tools.
+	* pp/Makefile.am: remove old pp tools, add the news.
+
+2003-04-28  Alex Tsariounov  <alext@fc.hp.com>
+
+	* module/ia64/op_pmu.c: fix compile
+
+2003-04-24  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/compat22.h: add cpuid_edx when linux version < 2.2.21
+
+2003-04-24  Dave Jones <davej@codemonkey.org.uk>
+
+	* events/x86-64.hammer.events:
+	* events/x86-64.hammer.unit_masks: typo fixes from AMD.
+	* module/x86/cpu_type.c: Check for APIC on Athlon before enabling it.
+
+2003-04-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/i386-ht.events: all events allow only one counter, remove
+	  three events due to ESCR restriction.
+	* events/i386.events: add some comments.
+
+	* module/x86/op_model_p4.c: synch with linux 2.5 mainline
+	  - except events CTR_BPU_0 all virtual counter was not working.
+	  - Prevents a segfault when using incorrect counter number.
+	  - ESCR event select is 6 bits length not 5.
+	  - Don't fail silently in p4_setup_ctrs().
+	* module/x86/op_msr.h: match name used in linux.
+
+2003-04-15  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: small english fixes
+
+2003-04-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_kernel.c:
+	* dae/opd_proc.c:
+	* dae/oprofiled.c:
+	* utils/opcontrol:
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: handle --no-vmlinux
+
+	* daemon/opd_kernel.c: use no-vmlinux not /no-vmlinux when user
+	  specify --no-vmlinux
+
+2003-04-08  John Levon  <levon@movementarian.org>
+
+	* HACKING: describe what happens with oprofile-www
+
+2003-04-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: check for #717720 and direct user to
+	  FAQ if detected. Note than we don't detect all symptom of this bug.
+
+2003-04-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_exception.h: op_runtime_error is no longer abstract
+
+	* libregex/op_regex.h: comment and tidy
+	* libregex/op_regex.cpp: tidy
+
+2003-04-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/op_to_source.cpp: make each line be prefixed with the samples
+	counts. It was too hard to find samples inside previous format.
+
+2003-04-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/string_manip.cpp: work around for gcc 2.95
+	* p/op_to_source.cpp: minor cleanup
+
+2003-04-07  John Levon  <levon@movementarian.org>
+
+	* pp/op_to_source.cpp: cheat a bit to get
+	better indentation on the default setup, by
+	widening counter width to 7.
+
+2003-04-07  John Levon  <levon@movementarian.org>
+
+	* pp/op_to_source.cpp: append symbol summary
+	annotations separate from the prolog samples on
+	the same line.
+
+2003-04-07  John Levon  <levon@movementarian.org>
+
+	* pp/op_to_source.cpp: only output line 0 annotation
+	if samples found there.
+
+2003-04-07  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: make sure --ctrX-event=none gets noticed
+
+2003-04-06  John Levon  <levon@movementarian.org>
+
+	* libutil++/string_manip.h:
+	* libutil++/string_manip.cpp: remove ws_prefix(). Add
+	format_percent().
+
+	* pp/op_to_source.cpp: make each line be prefixed with
+	the sample counts, instead of on a line above, to preserve
+	line numbering.
+
+2003-04-06  John Levon  <levon@movementarian.org>
+
+	* pp/op_to_source.cpp: some renamings for clarity
+
+2003-04-06  John Levon  <levon@movementarian.org>
+
+	* pp/op_to_source.cpp: move extract_blank_at_begin() to ...
+
+	* libutil++/string_manip.cpp: ... here, and rename as
+	ws_prefix().
+	
+2003-04-06  John Levon  <levon@movementarian.org>
+
+	* pp/op_to_source.cpp: prefix comment lines.
+	Output the general footer on each separate file.
+	Output the info at the bottom when outputting
+	separate files (towards maintaining line numbering).
+
+2003-04-06  John Levon  <levon@movementarian.org>
+
+	* pp/op_to_source.cpp: construct a file-scope
+	cmdline string, instead of passing it around.
+
+2003-04-06  John Levon  <levon@movementarian.org>
+
+	* libregex/op_regexp.cpp: re-arrange a bit
+
+2003-04-06  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* all Makefile.am: don't blindly set $LIBS, use
+	explicit mention of which libs are needed.
+
+	* dae/Makefile.am:
+	* daemon/Makefile.am: only link with C++ if needed.
+
+2003-04-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_config_24.h:
+	* module/oprofile.c:
+	* module/oprofile.c: make watermark size proportional to buffer size.
+
+2003-04-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_events.h:
+	* libop/op_events.c: re-add op_min_count();
+
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c: use op_min_count() fixing #715923
+
+2003-04-01  John Levon  <levon@movementarian.org>
+
+	* libdb/Makefile.am: fix make dist
+
+	* daemon/opd_cookie.h: add SPARC syscall number.
+	  The system call function is OK for sparc/sparc64
+
+2003-03-31  Will Cohen  <wcohen@redhat.com>
+
+	* libdb/odb_hash.h: Renamed db_hash.h.
+
+	* dae/Makefile.am:
+	* dae/opd_image.c:
+	* dae/opd_image.h:
+	* dae/opd_proc.c:
+	* dae/opd_sample_files.c:
+	* daemon/Makefile.am:
+	* daemon/opd_image.c:
+	* daemon/opd_image.h:
+	* daemon/opd_sample_files.c:
+	* libabi/Makefile.am:
+	* libabi/abi.cpp:
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp:
+	* libdb/Makefile.am:
+	* libdb/db_debug.c:
+	* libdb/db_hash.h:
+	* libdb/db_insert.c:
+	* libdb/db_manage.c:
+	* libdb/db_stat.c:
+	* libdb/db_test.c:
+	* libdb/db_travel.c:
+	* pp/Makefile.am:
+	* pp/counter_profile.cpp:
+	* pp/counter_profile.h:
+	* pp/op_merge.cpp: Change names to avoid libdb.a name conflicts.
+	
+2003-03-30  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.6cvs
+
+	* doc/oprofile.xml: fix id. Add java etc. mention
+
+	* utils/Makefile.am:
+	* utils/op_start:
+	* utils/op_start_25:
+	* utils/op_stop:
+	* utils/op_stop_25:
+	* utils/op_dump:
+	* utils/op_dump_25:
+	* utils/op_session: finally remove the back compat crap
+
+	* HACKING: add release-notes policy
+
+2003-03-30  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.5.2
+
+2003-03-30  John Levon  <levon@movementarian.org>
+
+	* Makefile.am: remove op_arch.h for ia64
+
+2003-03-27  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: several more examples and fixes
+
+2003-03-26  John Levon  <levon@movementarian.org>
+
+	From a patch by Bryan Rittmeyer.
+
+	* module/oprofile.c:
+	* module/oprofile.h: push "irq_enabled" test
+	into arch code, don't pass struct pt_regs.
+
+	* module/x86/op_arch.h: cleanups
+
+	* module/x86/op_model_athlon.c:
+	* module/x86/op_model_ppro.c:
+	* module/x86/op_model_p4.c:
+	* module/x86/op_rtc.c: changes from above
+
+	* module/ia64/op_arch.h: remove
+	* module/ia64/op_pmu.c: change from above
+
+2003-03-24  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: document prologues, and inline functions
+
+2003-03-24  Will Cohen  <wcohen@redhat.com>
+
+	* libutil/op_fileio.c (op_get_line): Use lower cost getc().
+
+2003-03-24  John Levon  <levon@movementarian.org>
+
+	* m4/configmodule.m4: fix quoting problem for awk
+
+2003-03-23  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* m4/: move lots of stuff into separate .m4 files
+
+	* m4/typedef.m4: improve configure message
+
+2003-03-23  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* m4/Makefile.am:
+	* m4/copyifchange.m4:
+	* m4/docbook.m4:
+	* m4/kerneloption.m4:
+	* m4/kernelversion.m4:
+ 	* m4/resultyn.m4: move configure.in macros to m4/
+
+2003-03-23  John Levon  <levon@movementarian.org>
+
+	* m4/ChangeLog: add comment
+
+	* m4/typedef.m4: can't use AC_LANG_PUSH/POP
+
+2003-03-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* m4/Makefile.am:
+	* m4/typedef.m4: new file to get underlined type for a typedef.
+	
+	* configure.in: get at configure time the real underlined type
+	  for size_t and ptrdiff_t
+
+	* libregex/stl.pat: move to ...
+	* libregex/stl.pat.in: here. Use @SIZE_T_TYPE@ and @PTRDIFF_T_TYPE@
+	* libregex/Makefile.am: update according
+	* libregex/.cvsignore: ignore stl.pat
+
+2003-03-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: use $OP_HELP not op_help
+	* utils/op_help.c: remove short option for --get-cpu-frequency
+
+2003-03-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* m4: new directory
+	* m4/.cvsignore: new
+
+	* acinclude.m4: move to
+	* m4/qt.m4: here
+	* m4/Makefile.am: new for EXTRA_DIST = all our .m4
+	* Makefile.am:
+	* configure.in:
+	* autogen.sh: handle m4 subdir, add -I m4 to aclocal flags
+
+2003-03-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	  Suggested by John
+
+	* libutil/op_cpufreq.c: typo in comment
+
+	* utils/op_help.c: add --get-cpu-frequency, intentionnaly not
+	  documented.
+	* utils/opcontrol: use op_help --get-cpu-frequency and remove
+	  ugly shell script doing the same thing.
+
+2003-03-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil/op_cpufreq.h:
+	* libutil/op_cpufreq.c: new file exporting op_cpu_frequency()
+	* libutil/Makefile.am: update according
+
+	* utils/opcontrol: handle other arch
+
+	* gui/oprof_start_util.h:
+	* gui/oprof_start_util.cpp: remove get_cpu_speed()
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp: and use instead op_cpu_frequency()
+
+	* daemon/oprofiled.c:
+	* dae/oprofiled.c: replace --cpu-speed option by a call to
+	  op_cpu_frequencey()
+
+2003-03-20  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: doc some 2.5 module stuff
+
+2003-03-20  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: fix opcontrol --dump to do something
+
+	* daemon/opd_image.c: give a printf when reading the buffer.
+
+2003-03-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: correct get_vma_range()
+
+	* pp/oprofpp.cpp: do_dump_gprof() this time it's right!
+
+2003-03-18  John Levon  <levon@movementarian.org>
+
+	* pp/profile.cpp: improve mtime warning for 2.5 modules
+
+2003-03-18  John Levon  <levon@movementarian.org>
+
+	* pp/derive_files.cpp: some more 2.5 modules derivation fixes
+
+2003-03-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/derive_files.cpp: fix handling of 2.5 module name
+
+2003-03-18  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.c:
+	* libop/op_interface_25.h: rename to MODULE_LOADED_CODE
+
+2003-03-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* pp/derive_files.cpp: special to retrieve 2.5 module
+
+2003-03-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* pp/symbol_container_imp.h:
+	* pp/symbol_container_imp.cpp:
+	* pp/profile_container.h:
+	* pp/profile_container.cpp: find(string symbol_name) return a vector
+	  of symbol rather a a single symbol
+	* pp/oprofpp.cpp: use above change so oprofpp -s will show all
+	  symbol with the same name.
+
+	* pp/symbol_functors.h: remove unused functors equal_symbol_by_name
+
+2003-03-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* libutil/op_fileio.h:
+	* libutil/op_fileio.c: op_write_u64() new
+	* libutil/op_types.h: continue our silly typedef: add u64
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: op_bfd::arch_bits_per_address() new allowing
+	  to get, on a per-binary basis, the vma size.
+
+	* pp/oprofpp.cpp: fix 64 bits arch gprof output. Fix multiplier and
+	  get the multiplier of gprof file at runtime. Fix a very old bug
+	  where we credit the samples to previous gprof bin having the effect
+	  than sample at start of function was credited to the previous
+	  function
+
+2003-03-17  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_kernel.c:
+	* daemon/opd_kernel.h:
+	* daemon/opd_image.c:
+	* daemon/oprofiled.c: don't try to reread the module
+	list on a failed EIP match. We must have the module load
+	notification instead.
+
+2003-03-17  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_kernel.c: fix module accounting. Remove
+	quick-drop code that can't work.
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: english tweaks
+
+2003-03-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: remove documentation about -P, update doc about -p
+
+	* pp/derive_files.h:
+	* pp/derive_files.cpp: check_image_name(), add_to_alternate_filename()
+	  functions moved from op_time.cpp
+
+	* pp/op_time_options.h:
+	* pp/op_time_options.cpp:
+	* pp/op_time.cpp: remove -P option, minor cleanup
+
+	* pp/oprofpp_options.h:
+	* pp/oprofpp_options.cpp:
+	* pp/oprofpp.cpp: add -p option, minor cleanup
+	
+	* pp/op_to_source.cpp: minor cleanup
+
+2003-03-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: check return code for --ctr??-event=none
+
+2003-03-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp: check for --separate=xxxx in the right order.
+	  Old code do: if user set separate=library and separate=kernel only
+	  separate=library was taken by opcontrol
+
+2003-03-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: typo
+
+2003-03-16  John Levon  <levon@movementarian.org>
+
+	* configure.in: more docbook macro fixes
+
+2003-03-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil/op_libiberty.h: cut&paste typo breaking compilation on box
+	  w/o libiberty.h
+
+	* daemon/opd_image.c: remove bogus fprintf. compilation was broken
+	  on alpha.
+
+	* configure.in: xsltproc checking fix, was always accepted even
+	 on box where xsltproc is not installed
+
+2003-03-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* Makefile.am: add ChangeLog-2002 in dist files
+	* all Makefile.am: put one item by line for most  xxxx = blah
+	* doc/CodingStyle: rationale for the above change
+
+2003-03-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_events.c: minor cleanup
+
+2003-03-15  Dave Jones <davej@codemonkey.org.uk>
+
+	* module/x86/op_nmi.c: Remove stale debug code from yesterdays commit.
+
+2003-03-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: add checking for existence of xmemdup()
+
+	* libutil/Makefile.am:
+	* libutil/op_string.h:
+	* libutil/op_string.c: new, a few C string handling function
+
+	* libutil/op_libiberty.h:
+	* libutil/op_libiberty.c: xmemdup() new.
+
+	* libop/op_events.h:
+	* libop/op_events.c: tidy parser. Add op_free_events(). Fix minor
+	  buglet.
+
+	* dae/oprofiled.c:
+	* daemon/oprofiled.c: fix memleak from parsing events files
+
+	* gui/Makefile.am:
+	* pp/Makefile.am: fix lib ordering, now libop depend on libutil
+
+	* utils/op_help.c: error message if invalid cpu type. Fix op_help
+	  when using timer interrupt.
+
+2003-03-14  Andi Kleen <ak@suse.de>
+
+	* module/x86/op_nmi.c: Fix another possible race condition.
+
+2003-03-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* libregex/stl.pat: support for rb tree, set/map, anonymous namespace.
+	  Fix incorrect pattern for gcc 3.2. Handle 2.95 vector/string
+	  iterator and a few stl free function handling. add all C++ base type.
+	* libregex/mangled-name.txt: test for the above change
+
+2003-03-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp: gcc 2.91 warning work around
+
+2003-03-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_events.c: fix a daemon segfault depending on the used
+	  libc version, added 2003-03-04 (0.5.1 is ok)
+
+2003-03-13  Dave Jones <davej@codmeonkey.org.uk>
+
+	* events/x86-64.hammer.events: Remove duplicate minimum tag
+	  from RETIRED_INSNS counter.
+
+2003-03-11  John Levon  <levon@movementarian.org>
+
+	* module/ia64/op_pmu.c: include op_arch.h not arch.h
+
+2003-03-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: remove unsupported --warnnet, fix docbook root dir test
+	* doc/oprofile.xml: typo
+
+2003-03-10  John Levon  <levon@movementarian.org>
+
+	* doc/Makefile.am:
+	* configure.in:
+	* doc/xsl/catalog-1.xml.in: more docbook changes
+
+2003-03-10  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* doc/Makefile.am:
+	* doc/xsl/xhtml.xsl:
+	* doc/xsl/xhtml-chunk.xsl:
+	* doc/xsl/catalog-1.xml.in: Use a catalog for finding
+	the XSL, so we only have one .in file now.
+
+2003-03-08  Will Cohen  <wcohen@redhat.com>
+
+	* doc/Makefile.am: Correct path for htmldir.
+
+2003-03-08  John Levon  <levon@movementarian.org>
+
+	* libop/op_cpu_type.c: improve error message
+
+	* utils/op_help.c: show CPU name in events list. Show CPU
+	 pretty name in op_help --get-cpu-type.
+
+2003-03-08  John Levon  <levon@movementarian.org>
+
+	* configure.in: specify distcheck ./configure flags.
+	  Add version.h to distclean.
+
+	* doc/Makefile.am: 
+	* doc/xsl/xhtml-1.in:
+	* doc/xsl/xhtml-chunk-1.in: fix make distcheck
+
+2003-03-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/xsl/.cvsignore: update
+
+	* module/x86/cpu_type.c: <smpboot.h> is not necessary
+
+2003-03-07  John Levon  <levon@movementarian.org>
+
+	* README: document autogen.sh
+
+2003-03-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* doc/xsl/xhtml.xsl.in: move to
+	* doc/xsl/xhtml-1.xsl.in: here
+	* doc/xsl/xhtml-chunk.xsl.in: move to
+	* doc/xsl/xhtml-chunk-1.xsl.in: here
+	* doc/Makefile.am; update according
+	* configure.in: avoid to touch doc/xsl generated files
+
+2003-03-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* daemon/opd_image.c:
+	* daemon/op_stats.c:
+	* daemon/opd_stats.h: add statistics for nil image whilst receiving
+	  user space samples.
+
+2003-03-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* libdb/db_hash.h:
+	* libdb/db_insert.c: get error message from db_insert()
+
+	* libdb/db_test.c:
+	* dae/opd_proc.c:
+	* daemon/opd_image.c:
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp:
+	* pp/op_merge.cpp: update according to the new api
+
+2003-03-06  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: pedantry
+
+2003-03-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: document --smart-demangle
+
+2003-03-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/ia64/op_pmu.c:
+	* module/x86/op_nmi.c: remove #include <op_events.h>
+
+2003-03-06  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: sh != C. This is the last opcontrol
+	  bug, honest ! OK, maybe not.
+
+2003-03-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* gui/oprof_start.cpp: save_config() gcc 2.95.3 warning work-around
+
+2003-03-05  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: Make --setup optional (e.g.
+	  opcontrol --no-vmlinux). Fix a bug in the --setup
+	  exclusive arg testing.
+
+	* doc/oprofile.xml: reflect the above
+
+2003-03-05  John Levon  <levon@movementarian.org>
+
+	* libutil++/string_manip.h:
+	* libutil++/string_manip.cpp: cleanup, use s.find
+	  because older gcc's don't have the right s.compare
+
+2003-03-04  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: only sleep 2 after dump on 2.4
+
+2003-03-04  John Levon  <levon@movementarian.org>
+
+	* configure.in: tweak the xsltproc test
+
+2003-03-04  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* doc/Makefile.am: don't try to build the docs
+	  if it will fail.
+
+2003-03-04  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol:
+	* daemon/opd_kernel.h:
+	* daemon/opd_image.c:
+	* daemon/opd_kernel.c:
+	* daemon/oprofiled.c: implement --no-vmlinux.
+ 	  Remove back compat for is_kernel.
+
+	* gui/uioprof_start.base.ui:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.h:
+	* gui/oprof_start_config.cpp: support the above
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: doc the above
+
+2003-03-04  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: allow --version, --help early on
+
+2003-03-04  John Levon  <levon@movementarian.org>
+
+	* libop/op_events.c: alter the parser to give file/linenr on
+	  error, and handle more whitespace.
+
+2003-03-04  John Levon  <levon@movementarian.org>
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start.h:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h:
+
+	* libutil++/string_manip.h:
+	* libutil++/string_manip.cpp: add is_prefix(),
+	  make the trimmers take an argument
+
+2003-03-04  John Levon  <levon@movementarian.org>
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start.h:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h:
+	* gui/persistent_config.h:
+
+	* libutil++/string_manip.h:
+	* libutil++/string_manip.cpp: add split(), tobool(), touint()
+
+	* utils/opcontrol: don't write BUF_SIZE twice. Write
+	  RTC_VALUE properly. Write KERNEL_ONLY
+
+2003-03-03  John Levon  <levon@movementarian.org>
+
+	* gui/oprof_start.cpp: use --ctrX-event=none,
+	  --separate=none. --pid/pgrp-filter=0 was already
+	  being done.
+
+2003-03-03  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml:
+	* doc/opcontrol: add --ctrX-event=none
+
+2003-03-03  Will Cohen  <wcohen@redhat.com>
+
+	* gui/oprof_start.cpp (oprof_start::on_start_profiler): Limit
+	  check to only utm_bitmask.
+
+2003-03-03  Will Cohen  <wcohen@redhat.com>
+
+    * events/ia64.itanium2.events:
+    * events/ia64.itanium2.unit_masks: Add Itanium 2 events.
+
+2003-03-03  Will Cohen  <wcohen@redhat.com>
+
+    * libop/op_events.h:
+    * libop/op_events.c: Correct checking for the number of unit
+      masks.
+
+2003-03-03  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: another round of cleanups
+
+	* pp/op_merge.cpp: --counter not --use-counter,
+	  for consistency
+
+2003-03-03  John Levon  <levon@movementarian.org>
+
+	Patch from Chris Moller, modified.
+
+	* dae/opd_proc.c:
+	* dae/opd_sample_files.c:
+	* daemon/opd_image.c:
+	* daemon/opd_sample_files.c:
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp:
+	* libdb/db_hash.h:
+	* libdb/db_insert.c:
+	* libdb/db_manage.c:
+	* libdb/db_test.c:
+	* pp/counter_profile.cpp:
+	* pp/op_merge.cpp: push asserts in libdb down into
+	  the clients.
+
+2003-03-03  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml:
+	* doc/oprofile.1.in:
+	* utils/opcontrol: add --separate=none, --pid/pgrp-filter=non
+
+2003-03-03  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* doc/Makefile.am:
+	* doc/oprofile.xml:
+	* doc/xsl/xhtml-chunk.xsl.in:
+	* doc/xsl/xhtml.xsl.in:
+	* doc/xsl/xhtml-common.xsl: Add version to the
+	  docs. Some doc cleanups
+
+2003-03-02  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: --separate=library should turn kernel off
+
+2003-03-02  John Levon  <levon@movementarian.org>
+
+	* events/Makefile.am: fix uninstall
+
+2003-03-02  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: more re-workings prodded by aeb
+
+2003-03-02  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_kernel.c: remove /proc/ksyms reading
+
+2003-03-02  John Levon  <levon@movementarian.org>
+
+	* libutil/op_fileio.c: change op_get_line to return
+	  NULL on EOF. Also bump up the default allocation some.
+
+	* dae/opd_kernel.c:
+	* dae/opd_parse_proc.c:
+	* daemon/opd_kernel.c:
+	* libop/op_events.c: changes from the above
+
+2003-03-02  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* Makefile.am:
+	* events/: add text files describing the CPU counters
+	  and unit masks. Install them.
+
+	* libop/op_events.h:
+	* libop/op_events.c: remove the bletcherous hard coded
+	  descriptions.
+
+	* module/ia64/op_pmu.c:
+	* module/x86/op_nmi.c: remove another big of validation
+
+	* libutil/op_list.h: make C++ friendly
+
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c: add op_get_cpu_name()
+
+	* libop/Makefile:
+	* libop/op_events_desc.h:
+	* libop/op_events_desc.cpp: removed
+
+	* libop++/op_print_event.cpp:
+	* utils/Makefile.am:
+	* utils/op_help.c:
+	* gui/oprof_start.h:
+	* gui/oprof_start.cpp: changes from above
+
+2003-03-01  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: tweaks
+
+	* utils/opcontrol: scale the default event count. Please
+	  test ...
+
+2003-03-01  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: setup default events. Allow part-setting
+	  using --setup. Fix a help text.
+
+	* doc/oprofile.xml: changes from the above
+
+2003-03-01  John Levon  <levon@movementarian.org>
+
+	* libop/op_cpu_type.c: fix alpha/ev4 mis-detection
+
+2003-03-01  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: expand intro a little, small fixes
+
+2003-03-01  John Levon  <levon@movementarian.org>
+
+	* pp/format_output.cpp: use "%" not "%-age"
+
+2003-02-28  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: fix IS_TIMER setting, noticed by
+	  Duncan Sands
+
+2003-02-28  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.6cvs
+
+2003-02-28  John Levon  <levon@movementarian.org>
+
+	* doc/Makefile.am: tweak
+
+	* libregex/Makefile.am: fix make dist
+
+2003-02-27  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.5.1
+
+2003-02-27  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: clarify --separate=kernel
+
+2003-02-25  John Levon  <levon@movementarian.org>
+
+	* configure.in: clarify --with-kernel-support
+
+	* libop/op_events.c:
+	* module/x86/op_nmi.c:
+	* module/ia64/op_nmi.c: remove sanity checking - it's
+	  the wrong place to have such code, is a barrier to op_events
+	  cleanup, and makes life harder for NDAers.
+
+2003-02-25  Will Cohen <wcohen@redhat.com>
+
+	* utils/opcontrol (do_deinit): Correct search for /dev/oprofile.
+
+2003-02-24  Dave Jones <davej@codemonkey.org.uk>
+
+	* module/x86/op_apic.[c|h]: move NMI gate setup to architecture
+	  specific SET_NMI_GATE macro. x86=no change.
+	  Make x86-64 use the kernels _set_gate instead of its own open
+	  coded variant.
+
+2003-02-23  John Levon  <levon@movementarian.org>
+
+	* version-1.h.in: another rename
+
+2003-02-23  John Levon  <levon@movementarian.org>
+
+	* configure.in: set up OP_DATADIR and OP_BINDIR
+
+	* gui/oprof_start.cpp:
+	* libregex/demangle_symbol.cpp: use the above
+
+	* version_tpl.h.in: move to ...
+
+	* version.h.in.in: ... here
+
+2003-02-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* configure.in: add AX_COPY_IF_CHANGE() use it to generate version.h
+	* .cvsignore: update
+
+	* gui/Makefile.am:
+	* gui/oprof_start.cpp:
+	* libregex/Makefile.am:
+	* libregex/demangle_symbol.cpp: don't use -DBINDIR, rather include
+	  version.h to get install path
+
+2003-02-23  John Levon  <levon@movementarian.org>
+
+	* README: quick start build insns
+
+2003-02-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* libregex/Makefile.am: install stl.pat in $prefix/share/oprofile
+	* libregex/demangle_symbol.cpp: use DATADIR not BINDIR
+	* libregex/magle-name.txt: add test for pointer
+	* libregex/stl.pat: partial support for pointer
+
+2003-02-23  John Levon  <levon@movementarian.org>
+
+	* autogen.sh: error out if options passed
+
+2003-02-23  John Levon  <levon@movementarian.org>
+
+	* libregex/op_regex.h:
+	* libregex/regex_test.cpp: fix std::
+
+2003-02-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/demangle_symbol.cpp:
+	* libutil++/demangle_symbol.h: move to
+	* libregex/demangle_symbol.cpp:
+	* libregex/demangle_symbol.h: here to avoid circular reference between
+	  libutil++ and libregex
+	* libregex/Makefile.am:
+	* libutil++/Makefile.am: update according to file move
+
+	* pp/Makefile.am:
+	* pp/op_time.cpp:
+	* pp/op_time_options.cpp:
+	* pp/op_to_source.cpp:
+	* pp/op_to_source_options.cpp:
+	* pp/oprofpp.cpp:
+	* pp/oprofpp_options.cpp: add -D --Demangle options enabling C++
+	  demangled name filtering.
+
+2003-02-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/string_manip.h:
+	* libutil++/string_manip.cpp: trim(), ltrim(), rtrim() new functions
+
+	* Makefile.am: handle libregex directory
+	* configure.in: handle libregex/Makefile
+
+	* libregex/.cvsignore:
+	* libregex/Makefile.am :
+	* libregex/mangled-name.txt:
+	* libregex/op_regex.cpp:
+	* libregex/op_regex.h:
+	* libregex/regex_test.cpp:
+	* libregex/stl.pat: new file implementing a match and replace regular
+	  expression around glibc regex. Not used for now, next commit will
+	  use this for pp tools C++ name demangling.
+
+2003-02-22  John Levon  <levon@movementarian.org>
+
+	* configure.in: fix X, non-Qt build case
+
+2003-02-22  John Levon  <levon@movementarian.org>
+
+	* libutil++/Makefile.am: fix make dist
+
+2003-02-21  Dave Jones <davej@codemonkey.org.uk>
+
+	* configure.in: Enable building on hammer again.
+
+2003-02-21  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: "Params used" was lying
+
+2003-02-20  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.c: Fixed a bitch of a bug with separate-kernel,
+	  now attribution of kernel samples should be more accurate
+
+2003-02-20  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: set LIB_SAMPLES if KERNEL_SAMPLES in .daemonrc
+
+2003-02-20  John Levon  <levon@movementarian.org>
+
+	* dae/opd_stats.h:
+	* dae/opd_stats.c:
+	* daemon/opd_stats.h:
+	* daemon/opd_stats.c:
+	* dae/opd_proc.c:
+	* daemon/opd_image.c: remove unused OPD_SAMPLE_COUNTS. Actually
+	  count samples for 2.5
+
+2003-02-20  John Levon  <levon@movementarian.org>
+
+	* libop/op_interface_25.h:
+	* daemon/opd_kernel.c: implement module dropping
+
+	* daemon/opd_image.c:
+	* daemon/opd_kernel.c: attempt to make verbose logs
+	  less confusing
+
+2003-02-22  Dave Jones <davej@codemonkey.org.uk>
+
+	* libop/op_events.c: segregload is utm_mask not utm_exclusive
+
+2003-02-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* pp/output_format.h:
+	* pp/output_format.cpp:
+	* pp/op_time.cpp:
+	* pp/oprofpp.cpp:
+	* pp/opp_symbol.h: better handling of 64/32 bits bfd_vma
+	  in output
+
+2003-02-20  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_exception.h:
+	* libutil++/op_exception.cpp: throw() where needed
+
+2003-02-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* daemon/opd_image.h:
+	* daemon/opd_image.cpp:
+	* daemon/opd_kernel.cpp: fix thinko with --separate=kernel resulting
+	  in duplicate opening of the same samples file.
+
+2003-02-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_exception.h:
+	* libutil++/op_exception.cpp: new files, base class for exception.
+	  Not used for now.
+
+2003-02-19  John Levon  <levon@movementarian.org>
+
+	* acinclude.m4: update from upstream
+
+	* gui/ui/oprof_start.base.ui:
+	* gui/oprof_start.cpp: separate --setup,--start.
+	  Hide non-2.5 stuff in 2.5.
+
+2003-02-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* dae/opd_sample_files.c:
+	* daemon/opd_sample_files.c: opd_handle_old_sample_file() don't
+	  try to delete old samples files if they don't exist.
+
+2003-02-18  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol (do_options): Better option error checking.
+
+2003-02-17  Will Cohen  <wcohen@redhat.com>
+
+	* pp/format_output.h (show_help): namespace std.
+
+2003-02-17  Will Cohen  <wcohen@redhat.com>
+
+	* TODO: update.
+
+2003-02-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	From Anton Blanchard :
+
+	* daemon/opd_image.c: cookie_t fix for 64 bits
+
+2003-02-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* libopt++/popt_options.cpp:
+	* libopt++/popt_options.h: handle an user specific additional
+	  help string
+
+	* pp/output_format.h:
+	* pp/output_format.cpp:
+	* pp/op_time_options.cpp:
+	* pp/oprofpp_options.cpp: use it to show in --output_format
+	  options details.
+
+2003-02-14  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml:
+	* pp/oprofpp_options.cpp: allow --show-shared-libs with -s
+
+2003-02-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* TODO: update
+
+	* pp/output_format.h:
+	* pp/output_format.cpp: fix #686272, crash when using
+	  oprofpp -s symb_name.
+
+2003-02-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_kernel.h:
+	* dae/opd_image.h:
+	* dae/opd_image.c: don't use hash entry zero for kernel image
+	 fix #686175
+
+2003-02-13  Will Cohen  <wcohen@redhat.com>
+
+	* daemon/opd_cookie.h(opd_nr_lookup_dcookie): Correct number.
+
+2003-02-13  Will Cohen  <wcohen@redhat.com>
+
+	* daemon/opd_cookie.h(opd_nr_lookup_dcookie): Add x86_64.
+
+2003-02-13  John Levon  <levon@movementarian.org>
+
+	* dae/opd_image.c: little cleanup and fix error message
+	  to not lie
+
+2003-02-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: enhance doc about --separate=kernel
+
+	* utils/opcontrol: handle gracefully opcontrol --deinit if profiler
+	  was already shutdown. Avoid wrong warning when umount /dev/oprofile
+
+2003-02-12  Will Cohen  <wcohen@redhat.com>
+
+	* gui/oprof_start.cpp (oprof_start::oprof_start,
+	    oprof_start::on_flush_profiler_data,
+	    oprof_start::on_start_profiler,
+	    oprof_start::on_stop_profiler): Use opcontrol.
+	* gui/oprof_start_util.cpp (daemon_status::daemon_status):
+	    Allow reading interrupt info from new kernel interface.
+	* libop/op_get_interface.c: New.
+	* libop/Makefile.am: Add libop/op_get_interface.c.
+	* libop/op_cpu_type.h: Add enum op_interface.
+
+	I Added some bits. Phil
+	* gui/oprof_start.cpp: correct --separate= handling
+	* gui/oprof_start_util.cpp: read only the real number of interrupts
+
+2003-02-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: handle --note-table-size --kernel-only (2.4 kernel)
+
+2003-02-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/op_start: map --separate-samples to daemon option
+	  --separate-lib-samples.
+
+2003-02-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* dae/opd_image.c:
+	* dae/opd_kernel.c:
+	* dae/opd_kernel.h:
+	* dae/opd_parse_proc.c:
+	* dae/opd_proc.c:
+	* dae/opd_proc.h:
+	* dae/opd_sample_files.c:
+	* dae/oprofiled.c:
+	* daemon/opd_image.c:
+	* daemon/opd_image.h:
+	* daemon/opd_kernel.c:
+	* daemon/opd_kernel.h:
+	* daemon/opd_sample_files.c:
+	* daemon/oprofiled.c: per application kernel samples files
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml: document opcontrol --separate=kernel
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h:
+	* gui/ui/oprof_start.base.ui: remove ignore_daemon checkbox, handle
+	  --separate=[library|kernel]
+
+	* libop/op_sample_file.h: add separate_kernel_samples field, file
+	  format is backward compatible
+
+	* libabi/abi.cpp:
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp: handle new samples file header field
+
+	* pp/counter_profile.cpp: dump new sample files header field.
+
+	* utils/opcontrol: handle --separate=kernel
+
+2003-02-09  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol: Add rtc-value option.
+
+2003-02-09  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: stale lock file detection
+
+2003-02-06  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol (do_dump): Do not exit if no daemon.
+
+2003-02-06  Will cohen  <wcohen@redhat.com>
+
+	* doc/oprofile.1.in: Update man page information.
+
+2003-02-03  John Levon  <levon@movementarian.org>
+
+	* configure.in: 0.6cvs
+
+2003-02-02  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.5
+
+2003-02-02  John Levon  <levon@movementarian.org>
+
+	* configure.in: disable x86_64
+
+2003-02-02  John Levon  <levon@movementarian.org>
+
+	* pp/format_output.cpp: revert previous patch, Phil's
+	  x86 binutils is built with 64-bit bfd_vma
+
+2003-02-01  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: rename --separate-samples to --separate=library
+	  for future proofing.
+
+	* pp/format_output.cpp: output vma at a suitable width
+
+2003-01-31  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol(get_kernel_range): Match only .text segment.
+
+2003-01-31  Graydon Hoare  <graydon@redhat.com>
+
+	* libabi/abi.cpp
+	* libabi/abi_test.cpp
+	* libabi/op_import.cpp: Treat endianness as a property of the datum
+	being imported, rather than the memory architecture.
+
+2003-01-31  Dave Jones <davej@codemonkey.org.uk>
+
+	* module/x86/op_model_athlon.c: Don't poke reserved bits in the counter.
+	  Only rdmsr/wrmsr counters that we've enabled in the NMI handler.
+	  ulong->uint conversion.
+
+2003-01-30  Philippe Elie  <phil.el@wanadoo.fr>
+
+	From Randolph Chung :
+
+	* daemon/opd_cookie.h: add parisc support
+
+2003-01-30  John Levon  <levon@movementarian.org>
+
+	From Anton Blanchard :
+
+	* daemon/opd_cookie.h: add ppc32/64
+
+	* utils/op_start_25: fix start of kernel for ppc
+
+2003-01-30  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol(get_kernel_range): Avoid using perl arithmetic.
+
+2003-01-29  Dave Jones <davej@codemonkey.org.uk>
+
+	* utils/opcontrol: Trying to use the options --pid-filter=pid and
+	  --pgmr-filter=pgmr, opcontrol returned "command not found.
+	  This was due to 2 missing 'test' statements.
+	
+2003-01-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/op_to_source.cpp: read vma with strtoull not strtoul fixing
+	  32/64 failure to read output of objdump
+
+2003-01-29  Dave Jones <davej@codemonkey.org.uk>
+
+	* libop/op_cpu_type.c: Clue the user in on why the cpu type isn't
+	  recognised, by suggesting the module wasn't loaded.
+	* libop/op_events.c: Doh, unit masks use bit numbers, not values.
+
+2003-01-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/op_help.c: get cpu type only if not forced on command line.
+	  Avoid wrong warning about unsupported cpu type.
+
+2003-01-27  Will Cohen  <wcohen@redhat.com>
+
+	* daemon/opd_cookie.h(opd_nr_lookup_dcookie): Add ia64 version.
+
+2003-01-27  Dave Jones <davej@codemonkey.org.uk>
+
+	* libop/op_events.c: K8 HT events are utm_exclusive, not utm_bitmask
+	* libop/op_events.c: Add additional K8 unit masks.
+
+2003-01-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_interface_25.h:
+	* daemon/opd_image.c: prepare drop modules support. exit() when
+	  receiving unknown escape code.
+
+2003-01-23   Randolph Chung  <tausq@debian.org>
+
+	Added minor change: backward compatibility, u_int to uint, fix
+	32/64 bits escape code marker comparison. Phil
+
+	* libop/op_interface_25.h:
+	* daemon/opd_kernel.c:
+	* daemon/opd_image.c: new scheme to recognize kernel or user space
+	  eip, now kernel module pass the relevent information through
+	  escape sequence.
+
+2003-01-21  Dave Jones <davej@codemonkey.org.uk>
+
+	* libop/op_events.c: Add unit mask for Hypertransport events.
+
+2003-01-21  Dave Jones <davej@codemonkey.org.uk>
+
+	* libop/op_events.c: Add x86-64 specific events.
+
+2003-01-21  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_kernel.c: use sscanf to parse /proc/modules
+
+2003-01-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_kernel.c: more robust /proc/modules parsing.
+
+2003-01-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_kernel.c: 2.5 modules support, for now I keep
+	  the code for /proc/ksyms parsing in daemon. Let's it living a few
+	  weeks please.
+
+2003-01-18  Falk Hueffner  <falk@debian.org>
+
+	I added to the original patch all %L to %ll, Phil
+
+	* daemon/opd_image.c:
+	* daemon/opd_kernel.c:
+	* libutil/op_types.h: 64 bits printf/scanf safety.
+
+2003-01-18  Falk Hueffner  <falk@debian.org>
+
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c: add Alpha CPU families.
+	* libop/op_events.h: make op_event.cpu_mask u32, since we now have
+	  more than 16 CPU types
+	* libop/op_hw_config.h: bump OP_MAX_COUNTERS to 20 for Alpha
+	* libop/op_events.c: add Alpha events
+	* daemon/opd_cookie.h: add dcookie syscall number for Alpha
+	* utils/op_help.c (main): add help string for Alpha
+
+2003-01-18  John Levon  <levon@movementarian.org>
+
+	* module/Makefile.in:
+	* module/x86/Makefile.in:
+	* module/ia64/Makefile.in: kernel headers are too fubar
+	  for -Werror. So I'm taking my ball home.
+
+2003-01-17  John Levon  <levon@movementarian.org>
+
+	* HACKING:
+	* doc/CodingStyle: add
+
+2003-01-17  John Levon  <levon@movementarian.org>
+
+	* TODO: some updates
+
+2003-01-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/x86/op_model_p4.c: pmc_setup_one_p4_counter() show clearly
+	  than event == 0 is an error
+
+2003-01-15  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: prefer oprofiled/op_help binaries in the same
+	  dir as opcontrol
+
+2003-01-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_events.c: rename OP_P4_HT2 to OP_P4_ALL
+
+2003-01-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop++/op_print_event.cpp: no event,nor unit mask for CPU_TIMER_INT,
+	  problem reported by Ka Fai Lu.
+
+2003-01-12  John Levon  <levon@movementarian.org>
+
+	From Graydon Hoare
+
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c: add P4 HT
+
+	* libop/op_events.c: tag P4 HT events
+
+2003-01-11   Randolph Chung  <tausq@debian.org>
+
+	* daemon/oprofiled.c: fix ELF sniff
+
+2003-01-11  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.c: bail out immediately on dcookie
+	  lookup failure.
+
+2003-01-10  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_cookie.h: insulate against missing arch support
+	  for sys_lookup_dcookie
+
+	* daemon/opd_image.c: use the above
+
+2003-01-10  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_image.c:
+	* daemon/oprofiled.c: move complete_dump to a better place
+
+2003-01-10  John Levon  <levon@movementarian.org>
+
+	* libutil/op_types.h: add cookie_t and vma_t
+
+	* daemon/opd_image.c:
+	* daemon/opd_image.h:
+	* daemon/opd_kernel.c:
+	* daemon/opd_kernel.h: use above types, and kernel_pointer_size
+
+	* daemon/oprofiled.c: sniff /proc/kcore for kernel_pointer_size
+
+2003-01-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libopt++/popt_options.cpp:
+	* libopt++/popt_options.h: work-around to support both gcc new parser
+	  and gcc 2.95
+
+2003-01-08  John Levon  <levon@movementarian.org>
+
+	* libop/op_type.cpp: support for ascii-string cpu types
+
+2003-01-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp:
+	* libutil++/op_bfd.h:
+	* pp/oprofpp.cpp: more use of bfd_vma
+
+2003-01-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/Makefile.am: fix include dir
+	* libdb/db_test.c: don't assume than sizeof(struct opd_header) == 128
+
+2003-01-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.h: fix for 64 bits.
+
+2003-01-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libabi/abi.cpp:
+	* libabi/op_import.cpp: broken by my last change in libdb.
+
+2003-01-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* db/db_hash.h: do_hash() use db_key_t as parameter
+
+2003-01-04  John Levon  <levon@movementarian.org>
+
+	* pp/op_time.cpp: suggest opcontrol --dump instead
+
+	* utils/opcontrol: implement --start-daemon. Fix a number
+	  of bugs
+
+	* doc/oprofile.xml:
+	* doc/oprofile.1.in: document --start-daemon
+
+2003-01-03  Will Cohen  <wcohen@redhat.com>
+
+	* daemon/oprofiled.c (opd_do_samples): Typecast to match
+	  arguments.
+
+See ChangeLog-2002 for earlier changelogs.
diff --git a/oprofile-0.9.7/ChangeLog-2004 b/oprofile-0.9.7/ChangeLog-2004
new file mode 100644
index 0000000..e04b10b
--- /dev/null
+++ b/oprofile-0.9.7/ChangeLog-2004
@@ -0,0 +1,1034 @@
+2004-12-25  Will Cohen  <wcohen@redhat.com>
+
+	* events/Makefile.am: Corrected type for events_files.
+
+2004-12-12  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: expand list of supported CPU types.
+
+2004-12-12  Ralf Baechle  <ralf@linux-mips.org>
+
+	* daemon/opd_cookie.c: Define __NR_lookup_dcookie for all three
+	  supported MIPS ABIs.
+
+	* events/mips/r10000/events:
+	* events/mips/r10000/unit_masks:
+	* events/mips/r12000/events:
+	* events/mips/r12000/unit_masks:
+	* events/mips/r5432/events:
+	* events/mips/r5432/unit_masks:
+	* events/mips/r5500/events:
+	* events/mips/r5500/unit_masks:
+	* events/mips/rm7000/events:
+	* events/mips/rm7000/unit_masks:
+	* events/mips/rm9000/events:
+	* events/mips/rm9000/unit_masks:
+	* events/mips/sb1/events:
+	* events/mips/sb1/unit_masks:
+	* events/Makefile.am:
+	* libop/op_events.c:
+	* utils/op_help.c:
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c: Add support for the MIPS R10000 and R12000,
+	  QED RM7000 and PMC-Sierra RM9000, NEC VR5432 and VR5500 and Sibyte SB1
+	   processors.
+
+	* README: List myself as the caretaker of the MIPS bits.
+
+2004-11-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_events.c: simplify a bit get_mapping()
+
+2004-11-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_stats.c: some statistics are useless, don't print them
+	  if we can't read the oprofilefs files.
+
+2004-11-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_sfile.c: sfile_clear_kenel() : clear also callgraph
+	  file depending on module.
+
+2004-11-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_sfile.h:
+	* daemon/opd_sfile.c: fix #971487, daemon was unable to retrieve
+	  correctly callgraph sample file for kernel space samples. Fixed by
+	  adding relevant information to cg_hash_entry.
+
+	* libpp/callgraph_container.cpp: more verbosity
+
+2004-11-19  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: Fix AMD link (noticed by Emmanuel Araman).
+
+2004-11-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opgprof.cpp: ensure we load all callgraph file
+
+2004-11-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/locate_images.cpp: ensure error is always set,
+	  callgraph_container was using an uninitialized value.
+
+2004-11-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: improve a bit the symbol chosen when
+	  multiple symbol live at same vma
+
+2004-11-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.xml: some words about UP kernel > 2.6.9 and the need of
+	  lapic at boot.
+
+2004-11-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/common_option.h:
+	* pp/common_option.cpp: move threshold option from here ...
+	* pp/opannotate_options.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opreport_options.cpp:
+	* pp/opstack_options.cpp: to each of these file using it. Side effect
+	  is to remove this option from oparchive which didn't handle it.
+	
+	* doc/oparchive.1.in:
+	* doc/oprofile.xml: there isn't any --threshold option to oparchive
+
+2004-11-07  Kristis Makris  <kristis.makris@asu.edu>
+
+	* doc/internals.xml: fix typo
+
+2004-11-01  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* events/ppc64/970/events: Make min count 10000 for all PM_INST_CMPL;
+	  and remove redundant event in group 2
+	* events/ppc64/power4/event_mappings: Set LSB of MMCRA so kernel kludge
+	  can be removed at some later date
+	* events/ppc64/power4/events: Make min counts consistent with ppc970
+	* events/ppc64/power5/events: Make min counts consistent with ppc970	  
+
+2004-11-01  Greg Banks  <gnb@melbourne.sgi.com>
+
+	* libop/op_events.c: Make the default sample rate for
+	  IA64 sensible (i.e. 10 times smaller).
+
+2004-10-15  Will Cohen  <wcohen@redhat.com>
+
+	* events/ppc64/power4/events: Corrected group 4 counter assignments.
+
+2004-10-15  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* events/Makefile.am:
+	* events/ppc64/970/event_mappings:
+	* events/ppc64/970/events:
+	* events/ppc64/970/unit_masks:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/op_help.c:
+	* utils/opcontrol: Added ppc64/970 support.
+
+2004-10-14  Greg Banks  <gnb@melbourne.sgi.com>
+
+	* configure.in:
+	* daemon/opd_perfmon.c: autoconf for sched_setaffinity
+	  and perfmonctl, fix sched_setaffinity call for early
+	  2.6 kernels
+
+2004-10-07  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol: Correct ppc64 check that events are in same group.
+
+2004-09-21  Will Cohen  <wcohen@redhat.com>
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: Add logic to use the preferred symbol name.
+
+2004-09-17  John Levon  <levon@movementarian.org>
+
+	* utils/op_help.c: don't deref a NULL pointer
+	  on failure to read /dev/oprofile/cpu_type
+
+2004-09-17  Anton Blanchard  <anton@samba.org>
+
+	* libop/op_events.c: fix compile warnings
+
+2004-09-16  John Levon  <levon@movementarian.org>
+
+	* m4/configmodule.m4: disable x86-64 on 2.4
+
+2004-09-15  Maynard P. Johnson  <maynardj@us.ibm.com>
+
+	* events/Makefile.am:
+	* libop/op_cpu_type.h:
+	* libop/op_events.h:
+	* libop/op_events.c:
+	* utils/op_help.c:
+	* utils/opcontrol: PPC64 support
+	
+2004-09-13  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.8.2cvs
+
+2004-09-11  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.8.1
+
+2004-09-11  John Levon  <levon@movementarian.org>
+
+	* libpp/locate_images.h: doxygen for archive_path
+
+2004-08-18  Will Cohen  <wcohen@redhat.com>
+
+	* doc/oprofile.xml: List default events in documentation.
+
+2004-08-12  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.cpp: we need to verify
+	functionname is non-NULL in *both* places
+
+2004-08-12  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.cpp: add a hack to support
+	Objective C
+
+2004-07-21  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db_manage.c: thinko in #931871 bug fix.
+
+2004-07-21  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/arrange_profiles.cpp: fix opreport -m lib, broken in 0.8
+	  when using opcontrol --separate=kernel with message
+	  "add_to_profile_sample_files(): sample file parsed twice"
+
+2004-07-18  John Levon  <levon@movementarian.org>
+
+	* libop/op_mangling.c: dep image always used
+	'{root}' token
+
+2004-07-15  John Levon  <levon@movementarian.org>
+
+	* doc/internals.xml: document some more
+
+2004-07-09  John Levon  <levon@movementarian.org>
+
+	* libpp/populate.cpp: quash timestamp warnings
+	 when using archive: profile specifier
+
+2004-07-09  John Levon  <levon@movementarian.org>
+
+	* pp/opstack_options.cpp: include call-graph
+	  files in archive.
+
+2004-07-06  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.1.in:
+	* doc/oprofile.xml:
+	* libpp/profile_spec.h:
+	* libpp/profile_spec.cpp: remove sample-file
+	  and binary profile specifiers
+
+	* doc/opcontrol.1.in:
+	* doc/oprofile.xml:
+	* pp/common_option.cpp:
+	* utils/opcontrol: allow either "lib" or "library"
+	 for merge/separate option. Document "lib"
+
+2004-07-06  Will Cohen <wcohen@redhat.com>
+
+	* doc/oprofile.xml:
+	* doc/Makefile.am:
+	* doc/oparchive.1.in:
+	* doc/oprofile.1.in:
+	* libpp/profile_spec.cpp:
+	* libpp/profile_spec.h:
+	* libpp/populate.h:
+	* libpp/populate.cpp:
+	* libpp/callgraph_container.cpp:
+	* libpp/callgraph_container.h:
+	* libpp/arrange_profiles.cpp:
+	* libpp/arrange_profiles.h:
+	* libpp/locate_images.cpp:
+	* libpp/locate_images.h:
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp:
+	* libutil++/file_manip.cpp:
+	* libutil++/file_manip.h:
+	* pp/Makefile.am:
+	* pp/oparchive.cpp:
+	* pp/oparchive_options.cpp:
+	* pp/oparchive_options.h:
+	* pp/opreport.cpp:
+	* pp/opreport_options.h:
+	* pp/opreport_options.cpp:
+	* pp/opstack.cpp:
+	* pp/opstack_options.h:
+	* pp/opstack_options.cpp:
+	* pp/opannotate_options.cpp:
+	* pp/opannotate_options.h:
+	* pp/opgprof.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opgprof_options.h:
+	* pp/opannotate.cpp:
+	* configure.in: Support for oparchive.
+
+2004-07-05  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.1.in: add opstack(1) to SEE ALSO
+
+2004-06-21  John Levon  <levon@movementarian.org>
+
+	* events/i386/p4/events:
+	* events/i386/p4-ht/events:
+	* module/x86/op_model_athlon.c:
+	* module/x86/op_model_p4.c:
+	* module/x86/op_model_ppro.c:
+	* module/ia64/op_pmu.c: fix bug 964097 (event
+	code of 0x00 doesn't work) by relying consistently
+	on "enabled" not "event"
+
+2004-05-29  John Levon  <levon@movementarian.org>
+
+	* libdb/tests/Makefile.am: fix build
+
+	* daemon/opd_mangling.c:
+	* daemon/opd_mangling.h:
+	* daemon/opd_sfile.c:
+	* daemon/opd_sfile.h:
+	* daemon/liblegacy/opd_sample_files.h:
+	* libabi/abi.cpp:
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp:
+	* libdb/Makefile.am:
+	* libdb/db_debug.c:
+	* libdb/db_insert.c:
+	* libdb/db_manage.c:
+	* libdb/db_stat.c:
+	* libdb/db_travel.c:
+	* libdb/odb.h:
+	* libdb/odb_hash.h:
+	* libdb/tests/db_test.c:
+	* libpp/op_header.cpp:
+	* libpp/profile.cpp:
+	* libpp/profile.h: s/samples_odb_t/odb_t/, move
+	odb_hash.h to odb.h
+
+2004-05-28  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_mangling.cpp:
+	* daemon/opd_sfile.cpp:
+	* daemon/liblegacy/opd_proc.c:
+	* daemon/liblegacy/opd_sample_files.c:
+	* libabi/abi_test.cpp:
+	* libabi/op_import.cpp:
+	* libdb/db_manage.cpp:
+	* libdb/odb_hash.h:
+	* libpp/profile.cpp: introduce and use odb_get_data(),
+	odb_open_count()
+
+2004-05-28  John Levon  <levon@movementarian.org>
+
+	* libpp/callgraph_container.cpp:
+	* libpp/arrange_profiles.cpp: trivialities
+
+2004-05-28  Bin Ren  <bin.ren@cl.cam.ac.uk>
+
+	* daemon/opd_mangling.c:
+	* daemon/opd_sfile.c:
+	* daemon/oprofiled.c:
+	* daemon/liblegacy/opd_image.c:
+	* daemon/liblegacy/opd_proc.c:
+	* daemon/liblegacy/opd_sample_files.c:
+	* libdb/db_debug.c:
+	* libdb/db_insert.c:
+	* libdb/db_manage.c:
+	* libdb/db_stat.c:
+	* libdb/odb_hash.h:
+	* libdb/db_travel.c:
+	* libpp/op_header.cpp:
+	* libpp/profile.cpp:
+	* libutil/op_string.c:
+	* libutil/op_string.h: fix dcookie alias bug by
+	  introducing one level of indirection and hash
+	  sample files by path names (bug #931871)
+
+2004-05-11  John Levon  <levon@movementarian.org>
+
+	* libutil++/file_manip.h: clarify behaviour of
+	  op_realpath()
+
+	* libpp/opannotate.cpp: add some checks to avoid
+	  creating files outside of the output directory
+
+2004-05-11  Andi Kleen  <ak@suse.de>
+
+	* libpp/callgraph_container.cpp:
+	* libpp/profile_container.cpp:
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: use unsigned long in various
+	  places - u32 was breaking 64-bit usage
+
+2004-05-11  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.8.1cvs
+
+2004-05-07  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.8
+
+2004-05-07  John Levon  <levon@movementarian.org>
+
+	* libpp/filename_spec.h:
+	* libpp/filename_spec.cpp:
+	* libpp/profile_spec.cpp: "dependant" not "dependent"
+
+2004-04-19  Will Cohen  <wcohen@redhat.com>
+
+	* events/i386/p4/unit_masks:
+	* events/i386/p4-ht/unit_masks: Correct machine_clear unit mask.
+
+2004-04-04  Will Cohen  <wcohen@redhat.com>
+
+	* m4/builtinexpect.m4:
+	* m4/compileroption.m4:
+	* m4/configmodule.m4:
+	* m4/copyifchange.m4:
+	* m4/docbook.m4:
+	* m4/extradirs.m4:
+	* m4/findkernel.m4:
+	* m4/kerneloption.m4:
+	* m4/kernelversion.m4:
+	* m4/mallocattribute.m4:
+	* m4/poptconst.m4:
+	* m4/precompiledheader.m4:
+	* m4/qt.m4:
+	* m4/resultyn.m4:
+	* m4/sstream.m4:
+	* m4/typedef.m4: Add quotes as required for automake 1.8. 
+
+2004-04-04  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: improvements to the call-graph
+	* documentation.
+
+2004-03-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: remove spurious cerr <<; fix a potential memory
+	  leak
+
+2004-03-28  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.cpp: fix a BFD leak on format failure. Fix a
+	  small race when the binary changes, and we error fatally
+	  instead of recovering.
+
+2004-03-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/x86/hammer_op_syscalls.c: use the first map with VM_EXECUTABLE
+	  bit to do the exec notification, this fix a 32 bits application
+	  profiling regression. We dunno exactly what is this second mmap ...
+	  but we must ignore one of these. Fix #921243
+
+2004-03-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/ia64/op_pmu.c: the way to set pfm_syst_wide and
+	  pfm_dcr_pp changed between 2.4.19 and 2.4.20
+
+2004-03-22  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol: Correct order of do_init_daemon_vars and
+	decide_orofile_devices.
+	
+2004-03-22  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol: Tweak error messages and factor out common code.
+
+2004-03-19  Anton Blanchard  <anton@samba.org>
+
+	* daemon/opd_sfile.c: Add function name to some error messages
+
+2004-03-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: tweak a bit error message.
+
+2004-03-03  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol: Support --dump for normal users.
+
+2004-02-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/callgraph_container.cpp: make g++ -D_GLIBCXX_DEBUG happy, see
+	  http://gcc.gnu.org/PR14340
+
+	* module/op_dcache.h:
+	* module/op_dname.c: some gcc version are confused by extern
+	  declaration followed by later static.
+
+2004-02-28  Zwane Mwaikambo  <zwane@linuxpower.ca>
+
+	* libutil++/op_bfd.cpp:
+	* utils/opcontrol: This patch fixes the listing of symbols within the
+	  kernel image on ARM i was having. The problem was due to the fact
+	  that ARM/Linux kernel text starts with a section called .init unlike
+	  all the currently supported Linux architectures. So the solution is
+	  to start at section 0
+
+2004-02-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/x86/op_syscalls.c: warning fix
+
+2004-02-23  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/Makefile.am:
+	* daemon/liblegacy/Makefile.am: force daemon build with frame pointer.
+	  If daemon is built w/o frame pointer we get random arc, some of them
+	  go in the vma used by an existing mmaped sample file, so cookie
+	  lookup return a sample filename which is used as a from or to
+	  component, this break pptools by creating invalid filename.  Note
+	  this doesn't protect agaisnt a make CFLAGS=-fomit-frame-pointer.
+
+	* libpp/callgraph_container.cpp: use the right {cg_}image_name for
+	  verbose output.
+
+2004-02-21  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_flags.h:
+	* libpp/format_output.cpp:
+	* libpp/format_output.h:
+	* pp/opstack.cpp: alternate output format.
+
+2004-02-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/srcdoc/Doxyfile.in: Fix for doxygen 1.3.6
+	* libpp/profile_spec.h:
+	* libutil++/op_bfd.h: minor Doxygen comments fix
+
+2004-02-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/tests/string_manip_tests.cpp: fix a $ make check failure
+	  from the last format_percent() change
+
+2004-02-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_output.cpp: change output spacing.
+
+2004-02-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opstack_options.h:
+	* pp/opstack.cpp: pass mege_options::lib to callgraph_container
+	* libpp/callgraph_container.cpp:
+	* libpp/callgraph_container.h: handle merge_options::lib
+
+2004-02-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_output.cpp: use "self/child" for header
+	* libutil++/string_manip.cpp: format_percent() return "0" if
+	  value == 0.0
+	* libpp/callgraph_container.cpp: remove some dead code.
+
+2004-02-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/compat24.h:
+	* module/x86/cpu_type.c:
+	* module/x86/op_apic.c:
+	* module/x86/op_model_p4.c:
+	* module/x86/op_nmi.c:
+	* module/x86/op_x86_model.h: backport P4 HyperThreading support from
+	   2.6 to 2.4.
+
+2004-02-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/i386/p4/events:
+	* events/i386/p4/unit_masks:
+	* events/i386/p4-ht/events:
+	* events/i386/p4-ht/unit_masks: fix MEMORY_COMPLETE unit mask
+
+2004-02-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile.cpp: samples_range() throw if start > end
+
+2004-02-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/ia64/itanium2/unit_masks: comments
+	* utils/op_help.c: add --callgraph to sanitize min events count
+	* utils/opcontrol: pass --callgraph to op_help
+
+2004-02-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/oprofiled.c: send alarm() after fork not before, behavior
+	  changed between 2.4 and 2.6 and according to posix 2.6 is right.
+
+2004-02-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/op_help.c: output the default unit mask. when querying the
+	  default mask output it in decimal not hexadecimal
+	* libpp/op_header.cpp: event number must be output as integer not as
+	  unsigned char type
+	* libop/op_parse_event.c: clarify error message
+
+	* libop/op_events.c: better validation of unit mask
+	* events/ia64/itanium2/unit_masks:
+	* events/x86-64/hammer/unit_masks: fix so make check pass, done through
+	  documentation reading.
+
+
+2004-02-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/i386/p4-ht/events: multiply all minimum count by two
+
+2004-02-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_stats.c: handle new statistics added in callgraph patch
+
+2004-02-11  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol: fix normalise_events for default event.
+
+2004-02-10  Will Cohen  <wcohen@redhat.com>
+
+	* events/i386/p6_mobile/events:
+	* events/i386/p6_mobile/unit_masks:
+	* events/Makefile.am:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/op_help.c: Add support for Pentium M (Centrino).
+
+2004-02-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/i386/p4/events: s/instructions/uops/ when appropriate
+	* events/i386/p4/unit_masks: change many bitmask to mandatory,
+	  fix invalid default value, remove mask only used with HyperThreading
+	* events/i386/p4-ht/unit_masks: s/bitmask/mandatory. Remove unused
+	  unit mask
+
+	* libop/op_events.h:
+	* libop/op_events.c: warn if an unit mask is not used (this add a
+	  warning for Itanium2, added in TODO)
+
+	* libop/op_parse_event.c: don't silently accept invalid value as zero
+	  (e.g FOO:3000:0xx21 was accepted as FOO:3000:0x0)
+
+	* utils/opcontrol: mandatory default value was rejected because we
+	  checked the events before getting the default unit mask.
+
+2004-02-08  Zwane Mwaikambo  <zwane@arm.linux.org.uk>
+
+	* daemon/opd_cookie.c: Fix syscall base number.
+
+2004-02-08  Zwane Mwaikambo  <zwane@arm.linux.org.uk>
+
+	* daemon/opd_cookie.c: arm support for timer interrupt
+
+2004-02-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/liblegacy/opd_sample_files.c: op_mangle_filename() presume
+	  mangle_values::dep_name is never NULL, this fix a daemon segfault
+	  with 2.4 kernel
+
+2004-02-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/i386/p4/unit_masks:
+	* events/i386/p4-ht/unit_masks: global_power_events need mandatory
+	 unit mask
+
+2004-02-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/arrange_profiles.cpp: re-order function to fix a build problem
+	  with gcc 3.3.1
+
+2004-02-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/callgraph_container.cpp: tweak computation of callee_counts
+
+2004-02-05  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/callgraph_container.cpp: Big Thinko (tm), callee samples offset
+	  are unordered
+
+2004-02-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/callgraph_container.cpp:
+	* libpp/format_output.cpp: arc_recorder::get_caller()/get_callee() name
+	  was reversed (caught by Will Cohen)
+
+2004-02-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/callgraph_container.cpp:
+	* libpp/callgraph_container.h:
+	* pp/opreport_options.h:
+	* pp/opstack.cpp: implement --threshold
+
+2004-02-02  Will Cohen  <wcohen@redhat.com>
+
+	* libpp/callgraph_container.h:
+	* libpp/format_output.h: missing std:: in header.
+
+2004-02-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/callgraph_container.h:
+	* libpp/callgraph_container.cpp: rewrite populate() and ehance
+	  caller_callee_recorder to support multiple profile classes.
+	* pp/opstack_options.cpp: accept multiple profile class
+
+2004-02-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/callgraph_container.cpp: get correct source filenname liner
+	* libpp/format_output.cpp: re-factorize a bit by moving anon
+	  namespace from format_output:: to ::
+
+2004-02-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.xml:
+	* doc/opstack.1.in: document new options
+
+	* libpp/callgraph_container.h:
+	* libpp/callgraph_container.cpp: improve readability, add linenr
+	  debug information recording partially, see TODO
+
+	* libpp/format_output.h: s/formatter/opreport_formatter, define
+	  cg_formatter
+	* libpp/format_output.cpp: implement cg_formatter, factorize some code
+	  in formatter base class
+
+	* pp/opreport.cpp: s/formatter/opreport_formatter
+	* pp/opstack_options.h:
+	* pp/opstack_options.cpp: implement output selection/formatting options
+	* pp/opstack.cpp: use cg_formatter for output.
+
+2004-01-30  Philippe Elie  <phil.el@wanadoo.fr>
+
+	commit not itended but tree is stable so add a ChangeLog ...
+	* libpp/Makefile.am:
+	* libpp/symbol.cpp: new file for output_hint()
+	* libpp/profile_container.cpp: use output_hint()
+	* libpp/callgraph_container.cpp:
+	* libpp/callgraph_container.h:
+	* libpp/symbol.h:
+	* pp/opstack.cpp: get output hint from the callgraph container.
+
+2004-01-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/init.c:
+	* daemon/opd_events.c:
+	* daemon/opd_kernel.c:
+	* daemon/opd_mangling.c:
+	* daemon/opd_printf.h:
+	* daemon/opd_sfile.c:
+	* daemon/opd_trans.c:
+	* daemon/oprofiled.c:
+	* daemon/oprofiled.h:
+	* daemon/liblegacy/init.c:
+	* daemon/liblegacy/opd_image.c:
+	* daemon/liblegacy/opd_kernel.c:
+	* daemon/liblegacy/opd_mapping.c:
+	* daemon/liblegacy/opd_parse_proc.c:
+	* daemon/liblegacy/opd_proc.c:
+	* daemon/liblegacy/opd_sample_files.c:
+	* utils/opcontrol: split daemon --verbose, w/o argument it's synonymous
+	  to --verbose=all. Better splitting is welcome
+
+	* daemon/opd_sfile.c: Fix thinko, opcontrol --reset coredump'ed
+
+2004-01-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_events.c:
+	* utils/op_help.c: don't use default in switch (cpu_type) to ensure
+	  adding a cpu type will issue a warning where we forget to handle it.
+
+2004-01-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_sfile.c: invert from/to start offset for kernel samples
+
+	* pp/opstack.cpp:
+	* libpp/callgraph_container.h:
+	* libpp/callgraph_container.cpp: if we can't bfd_open a binary and
+	  the sample file show it's a kernel sample file we must ignore
+	  completely the it. (Added to TODO, there is something fragile here)
+
+2004-01-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/image_errors.cpp: typo, warn at first error not from second
+
+2004-01-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/tests/utility_tests.cpp:
+	* libopt++/popt_options.cpp: s/template <class/template <typename/
+
+2004-01-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/init.c: show buffer read only when --verbose
+
+	* libpp/image_errors.cpp:
+	* libpp/image_errors.h: add needed API for callgraph image error
+	* libpp/callgraph_container.cpp: use it.
+	* pp/opstack.cpp: report_image_errors()
+
+2004-01-27  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: Fix bfd_find_nearest_line() and separate
+	  debug info, please test it.
+
+2004-01-27  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/opcontrol.1.in:
+	* doc/oprofile.xml:
+	* utils/opcontrol: add --cpu-buffer-size and document it.
+
+2004-01-27  Will Cohen  <wcohen@redhat.com>
+
+	* events/i386/p4/unit_masks:
+	* events/i386/p4-ht/unit_masks: correct branch_type unit mask.
+	
+2004-01-25  John Levon  <levon@movementarian.org>
+
+	* doc/Makefile.am: fix make chunk
+
+	* doc/buffers.dia: add editable source
+
+	* doc/buffers.png: fix stupid typos
+
+	* doc/internals.xml: add some more text
+
+2004-01-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/parse_filename.h:
+	* libpp/parse_filename.cpp: profile_spec_equal() new predicate
+	* libpp/arrange_profiles.cpp: use it to ensure we create a new
+	  profile_samples_file when needed.
+
+2004-01-24  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.1.in:
+	* doc/opstack.1.in: some cleanups
+
+	* libop/tests/load_events_files_tests.c:
+	* libop/tests/alloc_counter_tests.c:
+	* libop/op_events.c: rename env var to OPROFILE_EVENTS_DIR
+
+2004-01-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_sfile.c: (getfile()) avoid out of bound sf->files[] access
+
+2004-01-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/callgraph_container.cpp: tweak comparator to sort arcs.
+	* pp/common_option.cpp: typo.
+
+2004-01-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/opannotate.1.in:
+	* doc/opgprof.1.in:
+	* doc/opreport.1.in:
+	* doc/oprofile.xml:
+	* doc/opstack.1.in: document --verbose options a bit
+	* libutil++/cverb.cpp:
+	* libutil++/cverb.h:
+	* pp/common_option.cpp: remove vlevel2 verbose object
+
+2004-01-20  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/cverb.h:
+	* libutil++/cverb.cpp: new cverb handling. most interresting are
+	  --verbose=sfile,bfd,level1 resp. sample filename handling bfd
+	  handling and more verbosity (only for bfd actually)
+
+	* pp/opgprof.cpp: controlled by --verbose==bfd, add level1 to get
+	  verbose symbols.
+	* libpp/callgraph_container.cpp:
+	* libutil++/op_bfd.cpp:
+	* pp/common_option.cpp:
+	* pp/opannotate_options.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opreport_options.cpp:
+	* pp/opstack_options.cpp: use it
+
+2004-01-19  John Levon  <levon@movementarian.org>
+
+	* libpp/callgraph_container.h:
+	* libpp/callgraph_container.cpp: rename caller_callee_recorder
+	to arc_recorder.
+
+	* doc/CodingStyle: mention trailing comments
+
+	* utils/opcontrol: fix formatting. Error if --note-table-size
+	is passed on 2.6 kernels.
+
+2004-01-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db_debug.c: fix build on alpha
+	* libpp/callgraph_container.cpp: missing std:: in header
+
+2004-01-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/callgraph_container.cpp: Obviously not2(weak_ordering_function)
+	  is not a weak_ordering function leading to mysterious segfault
+	  during sort.
+
+2004-01-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/opstack.1.in: new file, describe opstack usage
+	* doc/oprofile.xml: describe opstack
+
+2004-01-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: Don't fix symbol offset for symbol definition
+	  coming from the original file. A corner case remain broken: symbols
+	  definition coming from debug file and belonging to another section
+	  than .text are incorrecttly offseted.
+
+2004-01-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_sample_file.h: with cg file we need two field is_kernel.
+	* daemon/opd_events.c:
+	* daemon/opd_events.h:
+	* daemon/opd_mangling.c:
+	* daemon/liblegacy/opd_sample_files.c: handle cg_to_is_kernel
+
+	* pp/populate.cpp:
+	* pp/populate.h:
+	* pp/image_errors.cpp:
+	* pp/image_errors.h: move this four files to libpp
+
+	* libpp/populate.cpp: we can get empty filename now, ignore them.
+	* libpp/image_error.h: remove this file by moving its contents ...
+	* libpp/image_errors.h here (this two filenames was confusing)
+
+	* libpp/Makefile.am: update according to files move.
+
+	* libpp/arrange_profiles.h:
+	* libpp/arrange_profiles.cpp: Fix find_profile_sample_files(), I was
+	  creating to many profile_sample_files. Add a bunch of operator<<.
+
+	* libpp/callgraph_container.h:
+	* libpp/callgraph_container.cpp:
+
+	* libpp/filename_spec.h: add cg_filename member
+	* libpp/filename_spec.cpp: handle cg_filename, Fix an error in
+	  is_dependant(), I'm a bit nervous about this predicate...
+
+	* libpp/locate_images.h:
+	* libpp/locate_images.cpp: #include fix
+
+	* libpp/parse_filename.cpp: Fix cg filename handling to not trigger
+	  some invalid_filename error with cg filename.
+
+	* libpp/profile.h:
+	* libpp/profile.cpp: we can no longer assume we use u32, so use
+	  odb_key_t in public interface. Add operator== acting on iterator
+
+	* libpp/symbol_container.cpp:
+	* libpp/symbol_container.h: add find(symbol const &);
+	* libpp/profile_container.h:
+	* libpp/profile_container.cpp: add a public interface to iterate over
+	  all smybols and to find a specific symbol
+
+	* libpp/symbol.h: typo, missing include
+
+	* pp/Makefile.am: handle opstack various new files and files move to
+	  libpp.
+
+	* pp/opreport.cpp:
+	* pp/opannotate.cpp: pass symbol_filter as params to populate()
+
+	* pp/opannotate_options.cpp: add verbose output of profile_classes
+	* pp/opgprof_options.cpp:
+	* pp/opreport_options.cpp:
+
+	* pp/opstack.cpp:
+	* pp/opstack_options.cpp:
+	* pp/opstack_options.h: new callgraph utility far to be complete but
+	  enough to start to play with callgraph.
+
+2004-01-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil/op_fileio.c: op_write_file(): allow to write zero byte.
+	* libutil/op_fileio.h: add fatal error for opd_read_int_from_file()
+	* daemon/init.c: add fatal error for opd_read_fs_int
+	* daemon/oprofiled.c:
+	* daemon/oprofiled.h:
+	* daemon/liblegacy/init.c:
+	* daemon/liblegacy/opd_24_stats.c: use this new fatal parameter
+	* daemon/opd_stats.c: dump /dev/oprofile/stats/*
+
+	* daemon/opd_sfile.c:
+	* daemon/opd_sfile.h: augment opd_sfile with an hash table of related
+	  call graph file
+	
+	* daemon/opd_mangling.c:
+	* daemon/opd_mangling.h:
+	* daemon/liblegacy/opd_sample_files.c:
+	* libop/op_mangle.c:
+	* libop/op_mangle.h: use new mangling name scheme, in short word:
+	  {dep} part is no longer optionnal, a {cg}/binary_name can optionnally
+	  follow the {dep} part
+	* libop/tests/mangle_tests.c: update test according to sample filename
+	  change
+
+	* libpp/filename_spec.cpp:
+	* libpp/filename_spec.h: filename_spec::is_dependant() new function
+	* libpp/parse_filename.h: add a cg_image member
+	* libpp/parse_filename.cpp: handle callgraph filename
+
+	* libpp/arrange_profiles.cpp:
+	* libpp/arrange_profiles.h: rather to use string for sample files, use
+	  a { string sample_filename, list<string> cg_files }, if {dep} part
+	  != {cg} part it's a cross-call binary.
+	  Note the sample_filename string can be empty (callgraph file w/o any
+	  samples into a binary)
+
+	* libpp/profile_spec.h:
+	* libpp/profile_spec.cpp: fix filtering of callgraph filename (this fix
+	  Carlo problem where opreport die with an invalid_filename error)
+
+	* pp/opgprof.cpp: use the new arrange_profiles.h API to acquire
+	  callgraph filename associated with a binary
+	* pp/opgprof_options.cpp: don't filter callgraph filename
+
+	* pp/opreport.cpp:
+	* pp/populate.cpp: update according arrange_profile API change
+
+	* utils/opcontrol: add --callgraph=#depth parameter
+	* doc/opcontrol.1.in:
+	* doc/oprofile.xml: document opcontrol --callgraph=#depth
+
+2004-01-16  Will Cohen  <wcohen@redhat.com>
+
+	* libutil++/op_bfd.cpp: Always use filepos of original file.
+
+2004-01-16  Will Cohen  <wcohen@redhat.com>
+
+	* libop/op_config.h (DEBUGDIR): New.
+	* libutil/op_fileio.h:
+	* libutil/op_fileio.c: New function calc_crc32
+	* libutil++/Makefile.am: Add libop to include directory.
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: New functions separate_debug_file_exists,
+	  get_debug_link_info, find_separate_debug_file, open_bfd, and
+	  get_symbols_from_file to support separate debug files. 
+
+2004-01-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opgprof_options.cpp: use the proper type for options::demangle
+
+2004-01-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libregex/op_regex.cpp:
+	* libregex/op_regex.h: tidy a bit private interface
+
+2004-01-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start_config.h:
+	* gui/oprof_start_util.h:
+	* libpp/symbol.h:
+	* libutil++/cverb.cpp:
+	* libutil++/cverb.h:
+	* pp/opannotate_options.cpp:
+	* pp/opgprof_options.cpp: move some #include <> from .h to .cpp
+
+2004-01-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libregex/op_regex.cpp: don't assume int('a') > int('0')
+
+See ChangeLog-2004 for earlier changelogs.
diff --git a/oprofile-0.9.7/ChangeLog-2005 b/oprofile-0.9.7/ChangeLog-2005
new file mode 100644
index 0000000..b2e76ee
--- /dev/null
+++ b/oprofile-0.9.7/ChangeLog-2005
@@ -0,0 +1,963 @@
+2005-12-30  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/bfd_support.cpp: bfd_find_nearest_line() can return NULL
+	  in the sixth parameters, check the returned value. Problem reported
+	  by Nicolas Savoire <nicos@maunakeatech.com>
+
+2005-12-07  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* events/ppc64/power5/events: Change counter for CYCLES 
+	  in order to use PM_CYC vs PM_RUN_CYC.  This makes a
+	  difference now with kernels > 2.6.14 since the PowerPC
+	  runlatch is now honored and PM_RUN_CYC counts CYCLES
+	  only when not in idle loop.
+
+2005-12-05  Will Cohen  <wcohen@redhat.com>
+
+	* libpp/arrange_profiles.cpp: Correct anon namespace for gcc 4.1.
+
+2005-11-30  Junichi Uekawa  <dancer@netfort.gr.jp>
+
+	* doc/oprofile.1.in: $prefix is unprocessed, use
+	  @prefix@ instead.
+
+2005-11-17  Sean Lee  <joy.lists@gmail.com>
+
+	* utils/opcontrol: Fix a typo. Cleanup load_module_26()
+
+2005-10-19  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_cookie.c: use __MIPSEB__ not _MIPSEB
+
+2005-10-18  Maynard Johnson <maynardj@us.ibm.com>
+
+	* events/ppc64/power4/event_mappings:
+	* events/ppc64/970/event_mappings:
+	* events/ppc64/power5/events:
+	* events/ppc64/power5/event_mappings: Ensure SAMPLE_ENABLE bit
+	  is set correctly, in preparation for coming change in
+	  PPC64 driver.  Also, based on user input, add new event
+	  CYCLES_RND_SMPL for Power5.
+
+2005-10-18  David Daney  <ddaney@avtrex.com>
+
+	* daemon/opd_cookie.c: Handle MIPS o32 for both big and little endian.
+
+2005-10-18  Andy Fleming  <afleming@freescale.com>
+
+	* events/Makefile.am:
+	* events/ppc/e500v2/events:
+	* events/ppc/e500v2/unit_masks:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/ophelp.c: add support for latest e500 processor
+
+2005-09-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_events.c:
+	* libop/op_events.h:
+	* libpp/op_header.cpp: use 32 bits unsigned int for unit mask, u16
+	  use was an historical artefact coming from the p6 implementation.
+	  This allow to pass more information and will be used by P4 driver.
+
+2005-09-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp: the last unit mask checkbox is no longer a
+	  "validate all unit mask" so don't treat it specially. It avoid to
+	  lost the last bit in the unit mask each time oprof_start is used.
+
+2005-08-31  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.1.in: quote .BR strings
+
+2005-08-31  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.1.in: document archive: specifier
+
+2005-08-30  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/oparchive_options.cpp: fix #1276058, oparchive must force merging
+	  to avoid trigerring some sanity check in arrange_profiles(). Allowing
+	  merging is not a problem as merging doesn't occur in oparchive.
+
+2005-08-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/x86-64/hammer/unit_masks:
+	* events/x86-64/hammer/events: new events to count data cache
+	  access/miss by lock'ed insn.
+
+2005-08-24  Maynard Johnson <maynardj@us.ibm.com>
+
+	* events/ppc64/power4/events:
+	* events/ppc64/power4/event_mappings:
+	* events/ppc64/power5/events:
+	* events/ppc64/power5/event_mappings:
+	* events/ppc64/970/events:
+	* events/ppc64/970/event_mappings: Add all supported events and groups.
+	  This change some events name.
+
+2005-08-24  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: minor tidy
+	* daemon/opd_trans.c: more static function
+	* events/ppc/e500/events: typo
+
+2005-08-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/db_stat.c: use 64 bits to cumulate samples count.
+
+2005-08-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/file_manip.cpp: Change the last modification time after
+	  copying it.
+
+2005-08-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/odb.h:
+	* libdb/db_manage.c:
+	* libdb/db_insert.c: split the api in two part, one to update a node
+	  (or create it) by incrementing by one its associated value and
+	  one to create a new node with a given value. This optimize the
+	  fast path used by the daemon. Sanity check inside the fast path has
+	  been removed too.
+
+	* daemon/opd_sfile.c:
+	* daemon/liblegacy/opd_proc.c:
+	* libabi/opimport.cpp:
+	* libabi/tests/abi_test.cpp:
+	* libdb/tests/db_test.c: update according 
+
+2005-08-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/bfd_support.h:
+	* libutil++/op_bfd.cpp: comment how and why we can use the debuginfo
+	  bfd object.
+	  
+
+2005-08-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/file_manip.cpp: fix compilation on GCC 2.95.x
+
+2005-08-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	  Fix #1256978: sum of samples count overflow
+
+	* libutil/op_types.h: typedef a unsigned 64 bits count_type
+	* libpp/callgraph_container.cpp:
+	* libpp/format_output.cpp:
+	* libpp/profile.cpp:
+	* libpp/profile.h:
+	* libpp/profile_container.cpp:
+	* libpp/symbol.h:
+	* libutil/op_types.h:
+	* libutil++/growable_vector.h:
+	* pp/opreport.cpp: use it all over place where we need to sum up
+	  samples count
+	* pp/opgprof.cpp: check for samples count capping for callgraph
+	  output
+
+2005-08-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/tests/db_test.c: add a better speed test
+
+2005-08-13  Maynard Johnson <maynardj@us.ibm.com>
+
+	* gui/oprof_start.h:
+	* libop/op_events.c:
+	* libop/op_events.h:
+	* libpp/op_header.cpp: change op_event.val field from u8 to u32 to
+	  allow event numbers higher than 0X100.
+
+2005-08-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/odb.h: 
+	* libdb/db_insert.c:
+	* libdb/db_manage.c: use a two step node allocation to ensure adding
+	  a node will be sort of atomically visible in another process
+
+2005-08-13  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libdb/odb.h: clarify the way odb_get_iterator work
+	* libpp/profile.cpp: use odb_get_iterator properly to ensure we account
+	  zero relative offset. This fix a corner case when kernel module get
+	  a sample at the first byte of their .text section.
+
+2005-08-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/file_manip.cpp: fix a race when changing the mode and owner
+	  of copied file.
+	* pp/oparchive.cpp: warn if a file can't be copied, avoid to copy 
+	  inexisting image for anon mammping
+
+2005-08-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h:
+	* gui/ui/oprof_start.base.ui:
+	* libop/op_config.h: add --cpu-buffer-size for 2.6
+
+2005-08-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/file_manip.h:
+	* libutil++/file_manip.cpp: preserve as many of file attributes and
+	  owner we can when copying a file. This affected running oparchive
+	  with root right allowing non root user to read all archived binaries.
+	  Problem started in cvs the 2005-08-07
+
+2005-08-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_anon.c:
+	* daemon/opd_kernel.c: fix two scanf potential buffer overflow
+
+2005-08-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/x86/cpu_type.c: fix #1254390, problem and solution
+	  by Thomas Kho <tkho@users.sourceforge.net>
+
+	* module/oprofile.c:
+	* module/oprofile.h: #1266604 fix a compilation problem with
+	  gcc <= 3.3. It's not worth to try to continue to use fastcall
+	  for op_do_profile.
+
+	* module/x86/op_model_p4.c: backport some change from the 2.6 driver:
+	  on some P4 model 3 IQ_ESCR0/1 doesn't exist and acessing them fault.
+
+2005-08-08  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/opcontrol.1.in:
+	* doc/oprofile.xml: document opcontrol --buffer-watershed
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h:
+	* gui/ui/oprof_start.base.ui:
+	* utils/opcontrol: implement 2.6 buffer_watershed
+
+2005-08-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/file_manip.h:
+	* libutil++/file_manip.cpp: use iostream to copy file
+	* libpp/populate.cpp: check_mtime() even when using archive: spec
+	* pp/oparchive.cpp: fix comment
+
+2005-08-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport.cpp: don't throw a std::string but an op_runtime_error
+
+2005-08-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/oprofiled.c:
+	* daemon/liblegacy/init.c:
+	* daemon/liblegacy/opd_image.c:
+	* daemon/liblegacy/opd_parse_proc.c:
+	* gui/oprof_start.cpp:
+	* gui/oprof_start_util.cpp:
+	* libdb/db_debug.c:
+	* libdb/db_insert.c:
+	* libdb/db_manage.c:
+	* libdb/tests/db_test.c:
+	* libop/op_events.c:
+	* libop/tests/alloc_counter_tests.c:
+	* libop/tests/parse_event_tests.c:
+	* libopt++/popt_options.cpp:
+	* libpp/arrange_profiles.cpp:
+	* libpp/callgraph_container.cpp:
+	* libpp/filename_spec.cpp:
+	* libpp/image_errors.cpp:
+	* libpp/name_storage.cpp:
+	* libpp/profile_container.cpp:
+	* libpp/profile_spec.cpp:
+	* libregex/op_regex.cpp:
+	* libregex/tests/regex_test.cpp:
+	* libutil++/string_manip.cpp:
+	* pp/opannotate.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp:
+	* utils/ophelp.c: coding style
+
+2005-08-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.xml: more documentation about annotated source and
+	  inlined functions.
+	* libpp/profile_container.cpp:
+	* libpp/profile_container.h:
+	* libpp/symbol_container.cpp:
+	* libpp/symbol_container.h: new public interface to select all symbols
+	  defined in a given source file.
+	* pp/opannotate.cpp: when no source file is available we can at least
+	  output all symbols name/samples count belonging to this source.
+
+2005-08-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_container.cpp:
+	* libpp/profile_container.h:
+	* libpp/symbol_container.cpp:
+	* libpp/symbol_container.h: find symbol by source filename, linenr :
+	  change public interface to return multiple symbols
+	* pp/opannotate.cpp: Fix #1252754
+
+2005-08-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/opimport.1.in:
+	* doc/oprofile.xml: improve documentation about opimport
+
+2005-08-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/ui/oprof_start.base.ui: handle ui events help string when using
+	  keyboard to navigate through event list
+
+2005-08-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libabi/Makefile.am:
+	* libabi/abi.cpp:
+	* libabi/abi.h:
+	* libabi/op_abi.h:
+	* libabi/tests/Makefile.am:
+	* libabi/op_abi.cpp: removed
+	* libabi/op_abi.c: new file, abi file writing in plain C
+
+	* configure.in:
+	* daemon/Makefile.am:
+	* daemon/oprofiled.c:
+	* daemon/liblegacy/Makefile.am:
+	* doc/Makefile.am:
+	* doc/oprofile.xml: build unconditionnaly libabi
+
+	* doc/opimport.1.in: new file, man page for opimport, need some
+	  tweaking probably
+
+2005-08-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp:
+	* gui/oprof_start.h:
+	* gui/oprof_start_config.cpp:
+	* gui/oprof_start_config.h:
+	* gui/ui/oprof_start.base.ui: add a button to reset the profiling
+	  session and an edit field to setup the callgraph depth
+
+2005-08-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start_util.h:
+	* gui/oprof_start_util.cpp:
+	* gui/oprof_start.cpp: hardcode config directory to /root,
+	  rename get_user_filename() to get_config_filename()
+
+2005-08-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start_util.cpp: fix detection of stopped daemon. Fix a
+	  miscounted interrupt nr after a start/stop/start
+
+2005-08-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.xml: improve documentation about RTC mode.
+
+2005-08-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* gui/oprof_start.cpp: fix events parsing according to the way
+	  we store them in setupfile changed by the last patch.
+
+2005-08-02  Richard Purdie  <rpurdie@openedhand.com>
+
+	* HACKING: Add note about bashisms being bad
+	* doc/oprofile.xml: Remove bash dependency
+	* utils/opcontrol: remove bashisms from the script
+
+2005-08-02  Richard Purdie  <rpurdie@openedhand.com>
+
+	* utils/opcontrol: remove some bashism, not yet enough to remove
+	  bash dependency
+
+2005-07-21  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.9.2cvs
+
+2005-07-18  John Levon  <levon@movementarian.org>
+
+	* libutil++/tests/Makefile.am: canonicalize
+	  SRCDIR to fix make check
+
+2005-07-18  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.9.1
+
+2005-07-11  John Levon  <levon@movementarian.org>
+
+	* module/oprofile.c: fix for GCC 3.4, spotted by
+	  Jason Lunz <lunz@falooley.org>
+
+2005-01-06  Ralf Baechle  <ralf@linux-mips.org>
+
+	* events/Makefile.am:
+	* events/mips/24K/events:
+	* events/mips/24K/unit_masks:
+	* libop/op_events.c:
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c:
+	* utils/ophelp.c: Add MIPS 24K support
+
+2005-06-16  Richard Purdie  <rpurdie@o-hand.com>
+
+	* utils/opcontrol: fix ARM kernels again after 2005-05-04
+	  change to op_bfd.cpp broke it again. Only look for .text
+	  section for our kernel range.
+
+2005-06-13  Richard Purdie  <rpurdie@o-hand.com>
+
+	* libpp/callgraph_container.cpp:
+	* libpp/profile.cpp: ignore any symbols before .text
+	  for start_offset profiles
+
+2005-06-02  Jason Lunz  <lunz@falooley.org>
+
+	* libpp/diff_container.cpp:
+	* libpp/format_output.cpp:
+	* libutil++/bfd_support.cpp:
+	* libutil++/op_bfd.cpp: fix compilation on GCC 2.95.x,
+	  older glibc
+
+2005-06-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opannotate_options.cpp: error out if --assembly and --output-dir
+	  are used together
+	* doc/opannotate.1.in:
+	* doc/oprofile.xml: update docucmentation according.
+
+2005-05-31  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.9.1cvs
+
+2005-05-27  John Levon  <levon@movementarian.org>
+
+	* libpp/diff_container.cpp: convert the diffs into
+	  an actual percentage!
+
+	* configure.in: bump to 0.9
+
+2005-05-26  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_cookie.c:
+	* daemon/opd_sfile.c:
+	* daemon/opd_trans.c: fixes for image filtering
+
+2005-05-09  Will Cohen  <wcohen@redhat.com>
+
+	* daemon/opd_sfile.c: Fix variable declaration to compile on gcc 3.4.
+	
+2005-05-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/common_option.cpp: split argument "{}" in two separate argument
+
+2005-05-04  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: fix typos
+
+2005-05-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/cverb.cpp:
+	* libutil++/cverb.h: fix comment, remove unecessary friend declaration.
+
+2005-05-04  John Levon  <levon@movementarian.org>
+
+	* daemon/liblegacy/opd_kernel.c: fix previous workaround
+	  so it only triggers on x86
+
+2005-05-04  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: don't assume .text is the first SEC_CODE
+	  section. Keep a map of section file offsets to fix up dbfd
+	  symbols. Remove broken sanity checks.
+
+2005-05-02  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: small change
+
+2005-05-02  John Levon  <levon@movementarian.org>
+
+	* daemon/Makefile.am:
+	* daemon/opd_anon.h:
+	* daemon/opd_anon.c:
+	* daemon/init.c:
+	* daemon/opd_cookie.c:
+	* daemon/opd_events.h:
+	* daemon/opd_events.c:
+	* daemon/opd_mangling.c:
+	* daemon/opd_sfile.h:
+	* daemon/opd_sfile.c:
+	* daemon/opd_trans.h:
+	* daemon/opd_trans.c:
+	* daemon/liblegacy/opd_sample_files.c:
+	* doc/oprofile.xml:
+	* libabi/abi.cpp:
+	* libabi/opimport.cpp:
+	* libabi/tests/abi_test.cpp:
+	* libop/op_mangle.h:
+	* libop/op_mangle.c:
+	* libop/op_sample_file.h:
+	* libpp/callgraph_container.cpp:
+	* libpp/image_errors.cpp:
+	* libpp/op_header.cpp:
+	* libpp/parse_filename.cpp:
+	* libpp/populate.cpp:
+	* libpp/profile.h:
+	* libpp/profile.cpp:
+	* libpp/profile_spec.cpp:
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp:
+	* pp/opannotate.cpp:
+	* pp/opgprof.cpp: add basic anon mapping support
+
+2005-04-28  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol:
+	* doc/opcontrol.1.in:
+	* doc/oprofile.xml: add opcontrol --status
+
+2005-04-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_sfile.c: clear only 256 entry in the sfile lru list
+
+2005-04-28  John Levon  <levon@movementarian.org>
+
+	* libabi/abi.cpp:
+	* libabi/op_import.cpp: add cg_to_is_kernel to abi
+
+	* configure.in:
+	* libabi/tests/Makefile.am:
+	* libabi/tests/abi_test.cpp: move test to subdir
+
+2005-04-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* module/ia64/op_pmu.c: compile fix, pfm_syst_info has been added
+	  between 2.4.20 and 2.4.21
+
+2005-04-27  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil/op_file.h: op_file_readable() accept only regular file
+	* libutil/op_file.c:
+	* libutil++/tests/file_manip_tests.cpp:
+
+2005-04-27  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_sfile.h:
+	* daemon/opd_sfile.c: rewrite. Fix --no-vmlinux taking up
+	  CPU when using call graph profiling
+
+2005-04-27  John Levon  <levon@movementarian.org>
+
+	* daemon/oprofiled.h: remove dead prototype
+
+2005-04-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_mangling.c: protect last against sfile lru deletion
+	* daemon/opd_sfile.c: allow null sfile to sfile_get(), sfile_put()
+
+2005-04-24  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_cookie.h:
+	* daemon/opd_cookie.c:
+	* daemon/opd_trans.c:
+	* daemon/opd_sfile.c:
+	* daemon/opd_stats.h:
+	* daemon/opd_stats.c: handle NO_COOKIE (drop on the floor)
+
+	* m4/qt.m4: allow gcc 4.0 compile with Qt headers
+	  by using -isystem
+
+2005-04-23  John Levon  <levon@movementarian.org>
+
+	* configure.in: add --with-gcc, --with-binutils (for
+	  development use only, undocumented)
+
+2005-04-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/locate_images.h: add a virtual dtor to extra_images::matcher
+
+2005-04-22  John Levon  <levon@movementarian.org>
+
+	* doc/internals.xml: some paragraphs on call graphs
+
+	* libop/op_events.h:
+	* libop/op_events.c:
+	* libutil/op_deviceio.h:
+	* libutil/op_deviceio.c:
+	* libutil/op_fileio.h:
+	* libutil/op_fileio.c: remove dead code
+
+	* libutil/op_lock_file.h:
+	* libutil/op_lock_file.c: make a function static
+
+	* libutil++/Makefile.am:
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp:
+	* libutil++/bfd_support.h:
+	* libutil++/bfd_support.cpp: move lots of BFD gunk into
+	  a separate file. Fix synth symbols support, with lots of
+	  testing by Maynard.
+
+	* libutil++/comma_list.h: remove unused set_p
+
+	* pp/opannotate.cpp: complain less verbosely if the input file
+	  couldn't be found
+
+2005-04-14  John Levon  <levon@movementarian.org>
+
+	* libutil++/growable_vector.h:
+	* libpp/diff_container.cpp: fix fill()
+
+	* pp/opreport.cpp: fix multiple apps for diff output
+
+2005-04-14  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_interface.h:
+	* daemon/opd_trans.c: remove legacy TRACE_END
+
+	* daemon/liblegacy/opd_kernel.c:
+	* daemon/liblegacy/opd_proc.c: avoid attributing "no mapping"
+	  samples to vmlinux when using --no-vmlinux via a sick hack
+
+2005-04-13  John Levon  <levon@movementarian.org>
+
+	* libutil++/growable_vector.h: add fill()
+
+	* libutil++/diff_container.cpp: use it
+
+	* libpp/symbol_sort.cpp: code clean up
+
+2005-04-13  John Levon  <levon@movementarian.org>
+
+	* libpp/diff_container.h:
+	* libpp/diff_container.cpp: syms doesn't need to be a member
+
+2005-04-13  Nathan Tallent  <eraxxon@cs.rice.edu>
+
+	* utils/opcontrol: fix unquoted variable references in 'test'
+ 	  expressions
+
+2005-04-13  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libutil++/op_bfd.cpp: skip null-name section symbols
+
+2005-04-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/string_manip.cpp: fix double formating when value are
+	  negative
+
+2005-04-12  John Levon  <levon@movementarian.org>
+
+	* libpp/arrange_profiles.h:
+	* libpp/arrange_profiles.cpp:
+	* pp/opreport_options.cpp:
+	* pp/common_option.cpp: verify diff profile classes match
+
+2005-04-12  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml:
+	* doc/oprofile.1.in: document diff profiles
+
+2005-04-12  John Levon  <levon@movementarian.org>
+
+	* libpp/diff_container.cpp: fix duplicate syms in output
+
+	* pp/opreport.cpp:
+	* libpp/diff_container.h:
+	* libpp/diff_container.cpp: implement thresholding etc.
+
+2005-04-12  John Levon  <levon@movementarian.org>
+
+	* libpp/Makefile.am:
+	* libpp/count_array.cpp:
+	* libpp/count_array.h:
+	* libpp/diff_container.cpp:
+	* libpp/diff_container.h:
+	* libpp/format_flags.h:
+	* libpp/format_output.cpp:
+	* libpp/format_output.h:
+	* libpp/profile_spec.cpp:
+	* libpp/profile_spec.h:
+	* libpp/symbol.h:
+	* libpp/symbol_functors.cpp:
+	* libpp/symbol_sort.cpp:
+	* libpp/symbol_sort.h:
+	* libutil++/Makefile.am:
+	* libutil++/growable_vector.h:
+	* libutil++/string_manip.cpp:
+	* libutil++/string_manip.h:
+	* pp/common_option.cpp:
+	* pp/common_option.h:
+	* pp/opannotate.cpp:
+	* pp/opannotate_options.cpp:
+	* pp/opannotate_options.h:
+	* pp/oparchive.cpp:
+	* pp/oparchive_options.cpp:
+	* pp/oparchive_options.h:
+	* pp/opdiff.cpp:
+	* pp/opdiff_options.cpp:
+	* pp/opdiff_options.h:
+	* pp/opgprof.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opgprof_options.h:
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp:
+	* pp/opreport_options.h: implement an initial version of diff
+	  profiling
+
+2005-04-11  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml:
+	* doc/opreport.1.in:
+	* doc/opannotate.1.in:
+	* pp/opreport_options.cpp:
+	* pp/opannotate_options.cpp: add -D and -%
+
+2005-04-11  John Levon  <levon@movementarian.org>
+
+	* pp/opannotate.cpp: fix opannotate matching several binaries
+
+2005-04-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: fix a segfault if a binary file can't be
+	  accessed (opreport -gl; opannotate) problem and solution pointed
+	  by Maynard P. Johnson <maynardj@us.ibm.com>.
+	* libutil++/op_bfd.h: op_bfd member function must check for a NULL
+	  ibfd before using it.
+
+2005-04-07  John Levon  <levon@movementarian.org>
+
+	* libutil/tests/Makefile.am:
+	* libutil++/tests/Makefile.am:
+	* libdb/tests/Makefile.am:
+	* libop/tests/Makefile.am: fix tests build
+
+2005-04-07  John Levon  <levon@movementarian.org>
+
+	* m4/Makefile.am:
+	* m4/binutils.m4:
+	* configure.in: move binutils stuff into a macro
+
+	* doc/oprofile.xml: fixes and improvements
+
+2005-04-07  John Levon  <levon@movementarian.org>
+
+	* libpp/callgraph_container.cpp: hoist image/app name lookup
+	  outside of the loop
+
+2005-04-07  John Levon  <levon@movementarian.org>
+
+	* libutil++/op_bfd.cpp: performance improvements with handling
+	  symbols
+
+2005-04-06  John Levon  <levon@movementarian.org>
+
+	* libpp/populate.h:
+	* libpp/populate.cpp:
+	* libpp/callgraph_container.cpp:
+	* libutil++/cached_value.h:
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp:
+	* pp/opannotate.cpp:
+	* pp/opreport.cpp:
+	* libutil++/tests/Makefile.am:
+	* libutil++/tests/cached_value_tests.cpp: tweak CRC buffer.
+	Do delayed debug info searching (makes no actual difference).
+
+2005-04-05  John Levon  <levon@movementarian.org>
+
+	* libpp/format_output.cpp: add separator at first function
+	  for opreport -c
+
+2005-04-05  John Levon  <levon@movementarian.org>
+
+	* libpp/callgraph_container.h:
+	* libpp/callgraph_container.cpp:
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp: implement -i / -e for
+	  opreport -c
+
+2005-04-05  John Levon  <levon@movementarian.org>
+
+	* libpp/format_output.h:
+	* libpp/format_output.cpp:
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp: implement --global-percent
+	  for opreport -c
+
+2005-04-04  John Levon  <levon@movementarian.org>
+
+	* configure.in:
+	* doc/Makefile.am:
+	* doc/oprofile.xml:
+	* doc/opstack.1.in:
+	* doc/opreport.1.in:
+	* doc/oprofile.1.in:
+	* pp/.cvsignore:
+	* pp/Makefile.am:
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp:
+	* pp/opreport_options.h:
+	* pp/opstack.cpp:
+	* pp/opstack_options.cpp:
+	* pp/opstack_options.h: remove opstack in favour of opreport -c
+
+	* libpp/callgraph_container.cpp: fix for new call-graph code
+
+	* doc/oprofile.xml:
+	* doc/oparchive.1.in: document -x, re-organise manual
+
+2005-04-04 Maynard Johnson  <maynardj@us.ibm.com>
+
+	* configure.in: further check for bfd synthesised
+	  symbols support
+
+2005-04-04  John Levon  <levon@movementarian.org>
+
+	* libpp/callgraph_container.cpp:
+	* libpp/callgraph_container.h:
+	* libpp/format_flags.h:
+	* libpp/format_output.cpp:
+	* libpp/format_output.h:
+	* libpp/symbol.cpp:
+	* libpp/symbol.h:
+	* libpp/symbol_sort.cpp:
+	* libpp/symbol_sort.h:
+	* libutil++/op_bfd.cpp:
+	* pp/common_option.cpp:
+	* pp/common_option.h:
+	* pp/opstack.cpp:
+	* pp/opstack_options.cpp:
+	* pp/opstack_options.h: re-whack call-graph collection
+	  and output format
+
+2005-04-03 Maynard Johnson  <maynardj@us.ibm.com>
+
+	* configure.in:
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: synthesis dotted symbols
+	  if necessary
+
+2005-03-31  John Levon  <levon@movementarian.org>
+
+	* HACKING:
+	* TODO:
+	* configure.in:
+	* doc/Makefile.am:
+	* doc/op_help.1.in:
+	* doc/ophelp.1.in:
+	* doc/oprofile.xml:
+	* libabi/.cvsignore:
+	* libabi/Makefile.am:
+	* libabi/opimport.cpp:
+	* utils/.cvsignore:
+	* utils/Makefile.am:
+	* utils/opcontrol:
+	* utils/ophelp.c: rename op_import->opimport,
+	  op_help->ophelp. Allow normal user to use
+	  opcontrol --list-events
+
+2005-03-31  John Levon  <levon@movementarian.org>
+
+	* doc/internals.xml: more internals docs
+
+2005-03-29  John Levon  <levon@movementarian.org>
+
+	* libpp/callgraph_container.h:
+	* libpp/callgraph_container.cpp:
+	* libpp/format_output.h:
+	* libpp/format_output.cpp:
+	* libpp/profile_container.h:
+	* libpp/symbol.h:
+	* libpp/symbol_sort.h:
+	* libpp/symbol_sort.cpp:
+	* libpp/symbol_container.h:
+	* libpp/symbol_container.cpp:
+	* pp/opreport_options.h: header file cleanup
+
+2005-03-26  John Levon  <levon@movementarian.org>
+
+	* Makefile.am:
+	* doc/oprofile.xml:
+	* m4/configmodule.m4:
+	* module/x86/Makefile.in:
+	* module/x86/hammer_entry.S:
+	* module/x86/hammer_ia32entry.S:
+	* module/x86/hammer_op_syscalls.c:
+	* module/x86/hammer_oprofile_nmi.S:
+	* module/x86/op_apic.h:
+	* module/x86/op_arch.h:
+	* module/x86/op_nmi.c: remove x86-64 support for 2.4
+	  kernels, as it's non-functional
+
+2005-03-26  John Levon  <levon@movementarian.org>
+
+	* daemon/oprofiled.c: honour oprofiled -v first, complain
+	if --events option is missing instead of core dumping
+
+	* doc/oprofiled.xml: explain opreport -d behaviour for
+	  no-symbol binaries
+
+2005-03-14  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* utils/op_help.c:
+	* doc/oprofile.xml: 
+	  Update PPC64-related documentation to include URL links to
+	  IBM publications.
+
+2005-03-22  John Levon  <levon@movementarian.org>
+
+	* configure.in: bump to 0.9cvs
+
+2005-03-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* configure.in: bump to 0.8.2
+
+2005-03-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* events/i386/p4/events:
+	* events/i386/p4/unit_masks:
+	* events/i386/p4-ht/events:
+	* events/i386/p4-ht/unit_masks: remove FRONT_END_EVENT, EXECUTION_EVENT
+	  and REPLAY_EVENT.
+
+	* libop/tests/alloc_counter_tests.c: update test according events
+	  removal
+
+2005-03-18  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: revert last patch, bash can't do integer
+	  arithmetic on hexadecimal.
+
+2005-02-21  John Levon  <levon@movementarian.org>
+
+	* utils/opcontrol: further validation of the kernel range to
+	  prevent an unrelocated vmlinux being used
+
+2005-02-07  John Levon  <levon@movementarian.org>
+
+	* events/arm/xscale1/unit_masks: fix 'zero' unit mask
+
+2005-01-25  Maynard Johnson <maynardj@us.ibm.com>
+
+	* doc/oprofile.xml: Add PowerPC 64-bit processor support information
+
+2005-01-24  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.cpp: always initialize op_bfd_symbol:symb_hidden
+	 and symb_weak, not a bug fix but a cleanup.
+
+2005-01-04  Andy Fleming  <afleming@freescale.com>
+
+	* events/Makefile.am:
+	* events/ppc/e500/events:
+	* events/ppc/e500/unit_masks:
+	* libop/op_events.c:
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c:
+	* utils/op_help.c: Add PPC e500 support
+
+2005-01-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opannotate.cpp: fix #1093162 by simplifying the code, this was
+	  likely to be a compiler problem but the new code is simpler.
diff --git a/oprofile-0.9.7/ChangeLog-2006 b/oprofile-0.9.7/ChangeLog-2006
new file mode 100644
index 0000000..9451bb3
--- /dev/null
+++ b/oprofile-0.9.7/ChangeLog-2006
@@ -0,0 +1,296 @@
+2006-12-14  Maynard Johnson <maynardj@us.ibm.com>
+
+	* doc/oprofile.xml:
+	* events/Makefile.am:
+	* events/ppc64/cell-be/events:
+	* events/ppc64/cell-be/unit_masks:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/opcontrol:
+	* utils/ophelp.c Add support for Cell Broadband Engine
+
+2006-12-14  Dave Nomura <dcnltc@us.ibm.com>
+
+	* daemon/init.c: move open_opd_files call to initialization phase
+
+2006-12-11  Maynard Johnson <maynardj@us.ibm.com>
+
+	* m4/kerneloption.m4:
+	* m4/kernelversion.m4: eliminate/replace usage of obsolete kernel
+	  header linux/config.h
+
+
+2006-12-06  Daniel Jacobowitz  <dan@debian.org>
+
+	* libopt++/popt_options.cpp: complete fix for static
+	  initialisation ordering bug on ARM
+
+2006-11-24  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml:
+	* doc/oprofile.1.in: warn about braces parsing in differential
+	  mode.
+
+	* doc/opreport.1.in:
+	* doc/oparchive.1.in:
+	* doc/opannotate.1.in:
+	* doc/opgprof.1.in: point explicitly to oprofile(1)
+
+	* pp/opreport_options.cpp: --xml is incompatible with
+	  differential profiles.
+
+2006-11-22  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_alloc_counter.c: reapply 2006-8-03  Jeremiah Lott patch
+	  which was accidentally reverted, as a sideeffect this patch change
+	  counter allocation order. It can't hurt since our storage don't
+	  take care about counter number.
+	* libop/tests/alloc_counter_tests.c: add a test case for this patch.
+	  Take care about counter allocation order change.
+
+2006-11-19  Maynard Johnson <maynardj@us.ibm.com>
+
+	* doc/oprofile.xml:  Document platforms where callgraph is supported
+
+2006-11-17  Dave Nomura  <dcnltc@us.ibm.com>
+
+	* doc/Makefile.am:
+	* doc/opreport.1.in:
+	* doc/opreport.xsd:
+	* doc/oprofile.xml:
+	* libop/op_alloc_counter.c:
+	* libpp/Makefile.am:
+	* libpp/arrange_profiles.cpp:
+	* libpp/format_output.cpp:
+	* libpp/format_output.h:
+	* libpp/op_header.cpp:
+	* libpp/profile_container.cpp:
+	* libpp/symbol.cpp:
+	* libpp/symbol.h:
+	* libpp/xml_utils.cpp:
+	* libpp/xml_utils.h:
+	* libutil++/Makefile.am:
+	* libutil++/bfd_support.cpp:
+	* libutil++/cverb.cpp:
+	* libutil++/cverb.h:
+	* libutil++/op_bfd.cpp:
+	* libutil++/op_bfd.h:
+	* libutil++/xml_output.cpp:
+	* libutil++/xml_output.h:
+	* pp/common_option.cpp:
+	* pp/common_option.h:
+	* pp/oparchive_options.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp:
+	* pp/opreport_options.h: XML output support.
+
+2006-8-03  Jeremiah Lott  <jeremiah.lott@timesys.com>
+
+	* libop/op_alloc_counter.c: allocate_counter(...) was returning
+	  prior to considering all possible allocation strategies.
+
+2006-11-15  Adam Bordelon  <me@cs.rice.edu>
+
+	* doc/internals.xml:
+	* doc/opannotate.1.in:
+	* doc/oparchive.1.in:
+	* doc/opcontrol.1.in:
+	* doc/opgprof.1.in:
+	* doc/opreport.1.in:
+	* doc/oprofile.xml: Documented --session-dir option.
+ 
+ 	* daemon/init.c:
+	* daemon/liblegacy/init.c:
+	* daemon/oprofiled.c:
+	* libop/Makefile.am:
+	* libop/op_config.c:
+	* libop/op_config.h:
+	* libop/op_config_24.h:
+	* libop/op_mangle.c:
+	* libpp/profile_spec.c:
+	* pp/common_option.cpp:
+	* utils/opcontrol: Added --session-dir option, to place sample database in dir instead of default location (/var/lib/oprofile), and program can be run as normal user.
+
+2006-11-15  John Levon  <levon@movementarian.org>
+
+	* events/x86-64/hammer/events: fix event names with '/' in them
+	  (bug 1597054)
+
+	* libop/op_events.c: check for '/' and fail if so
+
+2006-11-09  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/opreport.1.in: 
+	* doc/oprofile.xml: --long-filenames : -f is the short opt, not -l
+
+2006-10-16  Richard Purdie <rpurdie@openedhand.com>
+
+	* libutil++/bfd_support.cpp: Ignore uninteresting arm mapping symbols
+
+2006-10-16  Richard Purdie <rpurdie@openedhand.com>
+
+	* utils/opcontrol: Remove a bashism in validate_separate_args()
+
+2006-10-13  Maynard Johnson <maynardj@us.ibm.com>
+
+        * doc/opcontrol.1.in: Document callgraph support for PowerPC
+
+2006-09-25  Jon Callan  <Jon.Callan@arm.com>
+
+	* libopt++/popt_options.cpp: fix static init order problem, seen
+	  on ARM.
+
+2006-09-21  Dean Gaudet  <dgaudet@users.sourceforge.net>
+
+	* events/i386/core_2/events: rename some events
+	* events/i386/core_2/unit_masks: various fixes for
+	  double-counting events
+
+2006-09-21  Mark A. Greer  <mgreer@mvista.com>
+
+	* events/ppc/7450/events:
+	* events/ppc/7450/unit_masks:
+	* utils/ophelp.c: ppc 745x event improvements.
+
+2006-09-15  Will Cohen  <wcohen@redhat.com>
+
+	* Makefile.am: Add ChangeLog-2004 and ChangeLog-2005 to distro.
+	
+2006-09-15  Will Cohen  <wcohen@redhat.com>
+
+	* configure.in: Bump to 0.9.3cvs.
+
+2006-09-15  Will Cohen  <wcohen@redhat.com>
+
+	* configure.in: Bump to 0.9.2.
+
+2006-09-11  Will Cohen  <wcohen@redhat.com>
+
+	* configure.in: Bump to 0.9.2.1rc1.
+
+2006-09-11  Will Cohen  <wcohen@redhat.com>
+
+	* events/i386/core_2/unit_masks:
+	* events/i386/core_2/events: Correct names and masks.
+	
+2006-09-07  Benjamin LaHaise  <bcrl@kvack.org>
+	
+	* events/i386/core_2/events: Correct some event names.
+
+2006-09-05  Will Cohen  <wcohen@redhat.com>
+
+	* configure.in: bump to 0.9.2
+
+2006-09-05  Will Cohen  <wcohen@redhat.com>
+
+	* libpp/symbol_container.cpp: Explicit casting.
+
+2006-08-27  Ray Bryant  <raybry@amd.com>
+
+	* events/x86-64/hammer/events:
+	* events/x86-64/hammer/unit_masks:
+	* libop/op_events.h: make names match the BKDG names from AMD
+
+2006-08-22  Benjamin LaHaise  <bcrl@kvack.org>
+
+	* events/Makefile.am:
+	* events/i386/core_2/events:
+	* events/i386/core_2/unit_masks:
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c:
+	* libop/op_events.c:
+	* utils/ophelp.c: support Intel Core 2 events
+
+2006-07-15  Luca Barbato  <lu_zero@gentoo.org>
+
+	* events/Makefile.am:
+	* events/ppc/7450/events:
+	* events/ppc/7450/unit_masks:
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c:
+	* libop/op_events.c:
+	* utils/ophelp.c: support PowerPC G4 events
+ 
+2006-06-21  Ralf Baechle  <ralf@linux-mips.org>
+
+	* libop/op_cpu_type.h:
+	* utils/ophelp.c:
+	* libop/op_cpu_type.c:
+	* libop/op_events.c:
+	* events/Makefile.am:
+	* events/mips/5K:
+	* events/mips/20K:
+	* events/mips/25K:
+	* events/mips/34K: add new MIPS support.
+
+2006-05-13  Benjamin LaHaise  <bcrl@kvack.org>
+
+	* events/Makefile.am:
+	* events/i386/core/events:
+	* events/i386/core/unit_masks:
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c:
+	* libop/op_events.c:
+	* module/x86/cpu_type.c:
+	* utils/ophelp.c: support Intel Core Duo events
+
+2006-03-01  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+	* utils/opcontrol: (do_save_setup): Save KERNEL_RANGE and XEN_RANGE 
+	values into setup file.
+	(do_load_setup): Print KERNEL_RANGE, XENIMAGE and XEN_RANGE values in
+	verbose mode.
+
+2006-03-19  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_anon.c: bump LRU size to avoid significant maps
+	  parsing overhead.
+
+2006-03-19  John Levon  <levon@movementarian.org>
+
+	* daemon/opd_anon.c:
+	* daemon/opd_sfile.h:
+	* daemon/opd_sfile.c: make sure we protect trans->last
+	  if it's an anon sf, and we need to do cleanup. Speed
+	  cleanup somewhat.
+
+2006-02-17  Maynard Johnson <maynardj@us.ibm.com>
+
+	* doc/oprofile.xml:
+	* events/ppc64/power5+/events:
+	* events/ppc64/power5+/event_mappings:
+	* events/ppc64/unit_masks:
+	* events/Makefile.am:
+	* libop/op_events.c:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* utils/opcontrol:
+	* utils/ophelp.c:  Add support for Power5+
+
+2006-02-10  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol: Use full paths for which and dirname.
+
+2006-01-22  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: mention 2.4 + power management
+
+2006-01-16  Mike Carlson  <corfe83dev@gmail.com>
+
+	* doc/opcontrol.1.in: fix typo
+
+2006-01-16  Jose Renato Santos  <jsantos@hpl.hp.com>
+
+	* daemon/init.c:
+	* daemon/opd_interface.h:
+	* daemon/opd_kernel.h:
+	* daemon/opd_kernel.c:
+	* daemon/opd_trans.c:
+	* daemon/oprofiled.h:
+	* daemon/oprofiled.c:
+	* doc/opcontrol.1.in:
+	* utils/opcontrol: Added support for Xen
+
+See ChangeLog-2005 for earlier changelogs.
diff --git a/oprofile-0.9.7/ChangeLog-2007 b/oprofile-0.9.7/ChangeLog-2007
new file mode 100644
index 0000000..c377825
--- /dev/null
+++ b/oprofile-0.9.7/ChangeLog-2007
@@ -0,0 +1,757 @@
+2007-12-11  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/op_bfd.h: remove sym_offset(), we can get what did
+	  sym_offset() in a simpler way at call site
+	* libutil++/op_bfd.cpp:
+	* libpp/callgraph_container.cpp:
+	* libpp/profile_container.cpp:
+	* libpp/profile_container.h:
+
+2007-11-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_stats.c: dump invalid pc count, added to oprofile stats
+	  fs 2.6.24-rc
+
+2007-11-15  Dave Nomura  <dcnltc@us.ibm.com>
+
+	* fixed a some typos in manually patched event files
+
+2007-11-15  Dave Nomura  <dcnltc@us.ibm.com>
+
+	* libpp/format_output.cpp: output XML SYMBOL_DATA for callers/callees
+	* libpp/format.h:
+
+2007-11-15   Dave Nomura  <dcnltc@us.ibm.com>
+
+	* events/ppc64/power6/event_mappings: updated Power6 event files
+	* events/ppc64/power6/events:
+
+2007-11-15  Philippe Elie  <phil.el@wanadoo.fr>
+
+	handle --root which act as a replacement (a prefix) for the / fs
+	* libpp/locate_images.cpp: root path search taking care if a
+	  root path is given we never search through "/"
+	* libpp/locate_images.h:
+	* libpp/populate.cpp:
+	* libpp/populate_for_spu.cpp: use the right path to check last
+	  modification time, this is yet again a change in behavior, module
+	  was never found a this point, even if we found them later, and we
+	  didn't try to check_mtime(), so opreport is again a bit more verbose
+	* libutil++/op_bfd.cpp: be more cautious when checking if we can try to
+	  open the bfd file, don't open it in the '/' fs if a --root is  given
+	* libpp/profile_spec.cpp: convey the root_path all over the code.
+	* libpp/profile_spec.h:
+	* pp/common_option.cpp:
+	* pp/common_option.h:
+	* pp/opannotate_options.cpp:
+	* pp/oparchive.cpp:
+	* pp/oparchive_options.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opreport_options.cpp:
+	* doc/opannotate.1.in: document --root
+	* doc/oparchive.1.in:
+	* doc/opgprof.1.in:
+	* doc/opreport.1.in:
+	* doc/oprofile.xml:
+
+2007-11-10  Dave Nomura  <dcnltc@us.ibm.com>
+
+	* libutil++/bfd_support.cpp: is_correct_function() is itended to deal
+	  with missing debug information, if linenr != 0, don't call it since
+	  we know we have valid debug info
+
+2007-11-08  Haavard Skinnemoen  <hskinnemoen@atmel.com>
+
+	* utils/opcontrol: Busybox's implementation of "kill" doesn't
+	  understand the "-s SIG" option. Use "-SIG" instead.
+
+2007-11-07  Philippe Elie  <phil.el@wanadoo.fr>
+
+	Compile fix for gcc 2.95.3
+	* libpp/format_output.cpp: unused local var, then unused params
+	* libpp/format_output.h:
+	* libpp/op_header.cpp: missing include
+	* libutil++/bfd_spu_support.cpp: gcc 2.95.3 do not like struct bfd,
+	 2.95 get it wrong probably but anyway all these struct are useless.
+
+2007-11-06  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opannotate.cpp: for module we didn't use the right image name,
+	  this bug appeared after 0.9.3 release
+
+2007-11-05  Richard Purdie  <rpurdie@openedhand.com>
+
+	* events/arm/armv6/events: Fix armv6 events to match mainline kernels
+
+2007-11-04  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: nmi watchdog is now cleanly handled in the kernel
+	  but it can be on by default even if CONFIG_WATCHDOG=n, a sysctl
+	  exists to put it off. We need to check this in opcontrol since we
+	  returned success if a counter is missing and starting oprofile with
+	  oprof_start silently failed.
+
+2007-11-03  Richard Purdie  <rpurdie@openedhand.com>
+
+	* pp/oparchive.cpp:  Check list_files option before calling
+	  create_dir() for debug files.
+
+2007-11-03  Philippe Elie  <phil.el@wanadoo.fr>
+
+	with --xml and --details, bfd open/close was done one time per
+	symbols, not one time per application. Solved by moving open/close
+	in the caller and cache bfd object, this work because --xml imply
+	symbols are sorted by app name then lib name. This is not perfect as
+	we can open/close multiple time bfd object with --separate=library
+	but still a real win. Quick test showed an improvement by over 40
+	times. Improvement grows as number of symbols per binary.
+	* libpp/xml_utils.cpp: move bfd open ...
+	* libpp/xml_utils.h:
+	* libpp/format_output.cpp: ... here
+	* libpp/format_output.h:
+	* pp/opreport.cpp:
+
+2007-11-02  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/opreport_options.cpp: --xml is not compatible with --sort since
+	  xml output need some predefined sort options, we warned against
+	  the use of --sort but didn't reset the sort options to default.
+
+2007-11-01  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* pp/oparchive_options.cpp: oparchive need to be run as root if you
+	  want to get save all binaries, generally I don't like to restrict
+	  user to do silly things but --output-directory / is an easy typo
+	  to do and will completely screw up the box.
+
+2007-10-30  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_output.cpp: Fix #931882, xml output not changed at
+	the moment.
+
+2007-10-30  Philippe Elie  <phil.el@wanadoo.fr>
+
+	Prepare #931882 fix, continue to move down real filename
+	retrieval by extending image_name_storage which can hold now the
+	real image name and the image as derived from the sample filename.
+	Use the new api in a compatible way with the old behavior, no output
+	change intended.
+	* libpp/format_output.cpp:
+	* libpp/format_output.h:
+	* libpp/locate_images.cpp:
+	* libpp/locate_images.h:
+	* libpp/name_storage.cpp:
+	* libpp/name_storage.h:
+	* libpp/symbol.cpp:
+	* libpp/symbol.h:
+	* libpp/xml_utils.cpp:
+	* libpp/xml_utils.h:
+	* pp/opreport.cpp:
+
+2007-10-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/image_errors.cpp: Pass to image_errors the archive_path through
+	  an extra_images to ensure no duplicate error message occur nor we
+	  miss error, this fix two bugs, one with differential profile
+	  an error message was missing when two binary are missing, another
+	  with opreport where the same error message was duplicate because in
+	  on case we passed the real binary name (prefixed with archive_path)
+	  while latter we passed the short form of the binary name.
+	* libpp/image_errors.h:
+	* libpp/callgraph_container.cpp:
+	* libpp/populate.cpp:
+	* libpp/populate_for_spu.cpp:
+	* libpp/xml_utils.cpp:
+	* libutil++/op_bfd.h:
+
+	* pp/opannotate.cpp: global var archive_path is no longer used
+	* pp/opannotate_options.cpp:
+	* pp/opannotate_options.h:
+	* pp/oparchive.cpp:
+	* pp/opgprof.cpp:
+	* pp/opgprof_options.h:
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp:
+	* pp/opreport_options.h:
+
+2007-10-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	Cleanup the way per spec archive_path is handled, as extra_images
+	is built using an archive_path it make no sense to pass archive_path
+	as parameter all over the place, rather make it a member of
+	extra_images and use it, anyway it was required the archive_path
+	passed to find_image_path() was the same as used to build the
+	extra_images.
+
+	As a side effect it fix a corner case: oparchive archive:tmp1 -o tmp2
+	was not working for module, archiving from an archive should work now.
+	* libpp/arrange_profiles.cpp:
+	* libpp/arrange_profiles.h:
+	* libpp/callgraph_container.cpp:
+	* libpp/callgraph_container.h:
+	* libpp/locate_images.cpp:
+	* libpp/locate_images.h:
+	* libpp/populate.cpp:
+	* libpp/populate.h:
+	* libpp/populate_for_spu.cpp:
+	* libpp/populate_for_spu.h:
+	* libpp/profile_spec.cpp:
+	* libpp/xml_utils.cpp:
+	* libpp/xml_utils.h:
+	* libutil++/op_bfd.cpp:
+	* libutil++/op_bfd.h:
+	* libutil++/op_spu_bfd.cpp:
+	* pp/opannotate.cpp:
+	* pp/oparchive.cpp:
+	* pp/oparchive_options.cpp:
+	* pp/oparchive_options.h:
+	* pp/opgprof.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opreport.cpp:
+
+2007-10-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/file_manip.cpp: do not create the output file if the input
+	  file can not be read. It change oparchive behavior which created
+	  empty file with input file like -rws--x--x 1 root root
+
+2007-10-28  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/format_output.cpp: minor overkill
+
+2007-10-27  Philippe Elie  <phil.el@wanadoo.fr>
+
+	Fix #1819350, it turned out this implied another fix for differential
+	profile, extra_images must be built per profile specification not
+	globally so most of this patch pass an extra_images down to op_bfd.
+	The way image name resolution has changed. We fixup an image name
+	only when really needed, when opening a bfd file, when checking a
+	binary exists and when we try matching an image name with a profile
+	specification, this robustify differential profile. This patch also
+	allow a profile_spec ala image:*oprofile.ko which was broken too.
+	It's now mandatory to use the same -p option used with oparchive when
+	using an archive with other pp tools, it was already the case but was
+	broken, this patch does not clarify the documentation about this
+	point because I suspect oparchive should be modified to save at the
+	top level directory the contents of -p option, pp tools will use that
+	automatically and --image_path will be obsoleted when used with an
+	archive.
+
+	This patch except clarifying than --image-path with archive: is a bit
+	special does not add any user level visible change.
+	* libpp/arrange_profiles.cpp:
+	* libpp/arrange_profiles.h:
+	* libpp/callgraph_container.cpp:
+	* libpp/callgraph_container.h:
+	* libpp/locate_images.cpp:
+	* libpp/locate_images.h:
+	* libpp/populate.cpp:
+	* libpp/populate_for_spu.cpp:
+	* libpp/profile_container.cpp:
+	* libpp/profile_container.h:
+	* libpp/profile_spec.cpp:
+	* libpp/profile_spec.h:
+	* libpp/xml_utils.cpp:
+	* libpp/xml_utils.h:
+	* libutil++/Makefile.am:
+	* libutil++/op_bfd.cpp:
+	* libutil++/op_bfd.h:
+	* libutil++/op_spu_bfd.cpp:
+	* pp/common_option.cpp:
+	* pp/common_option.h:
+	* pp/opannotate.cpp:
+	* pp/opannotate_options.cpp:
+	* pp/oparchive.cpp:
+	* pp/oparchive_options.cpp:
+	* pp/opgprof.cpp:
+	* pp/opgprof_options.cpp:
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp:
+
+2007-10-27  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libpp/profile_spec.cpp: look like an obvious typo, we must fixup
+	  the string we are parsing not a previously seen or empty string
+
+2007-10-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libutil++/sparse_array.h: size() return the max index while we
+	  want the max index + 1, the only user is diff_container,
+	  differential container is broken in 0.9.3. This fix bug #1820202
+
+2007-10-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: fix the previous opcontrol --reset patch, it was
+	  broken if the daemon is running because --reset imply --dump so
+	  we can use this --reset shortcut only if the daemon is not running.
+
+2007-10-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: if objdump is missing the error message is
+	  obscure, this fix bug #1564920 by checking if objdump exists
+	  and is an executable before using it
+
+2007-10-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: --reset doesn't need to load the module, it was
+	  counter-intuitive than the sequence opcontrol --deinit;
+	  opcontrol --reset must be followed by another opcontrol --deinit
+
+2007-10-25  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: error out earlier if the module is not loaded
+	  even for --list-events or --dump to avoid obscure error message
+
+2007-10-24  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_config.h: bump sample filename format, should have been
+	  done before 0.9.3
+	* libpp/op_header.cpp: do not use odb_open() to read the sample file
+	  header, if it fails it can return EINVAL if sanity checking fails
+	  so we can't know if the failure came from a sample file format
+	  change or some other failure. This explain some "sample_filename:
+	  Invalid argument" we got in bug report when user didn't cleanup
+	  the sample file directory.
+	* libpp/profile.cpp: use read_header() first to check the sample file
+	  format to get better error message.
+
+2007-10-19  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_events.c: force the use of hexa notation in event file for
+	  the field intended to be in hexacidemal so make check will catch
+	  attempt to use decimal notation for them.
+
+	* events/mips/20K/events: all event number were in decimal but parsed
+	  as hexadecimal, this fix bug #1717298
+	* events/mips/24K/events:
+	* events/mips/25K/events:
+	* events/mips/5K/events:
+	* events/mips/r12000/events:
+	* events/mips/sb1/events:
+	* events/mips/vr5432/events:
+	* events/mips/vr5500/events:
+	* events/mips/34K/events: comment a bunch of overlapping event.
+	* events/ppc64/cell-be/unit_masks: well, 0 == 0x0 but it's easier
+	  to catch real error by forcing hexa notation for default unit mask.
+
+	* libop/tests/alloc_counter_tests.c: fix mips/34K test, the used event
+	  has been remoded
+
+2007-10-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* doc/oprofile.xml: fix dead url
+	* utils/ophelp.c:
+
+2007-10-17  Jason Yeh  <jason.yeh@amd.com>
+
+	* events/x86-64/family10/events: This patch updates the events and
+	  unit_masks files to match the BIOS and Kernel Developer's Guide
+	  For AMD Family 10h Processors Rev 3.00 released on September 07,
+	  2007. The notable changes are L3 cache events and updates to
+	  corresponding unit masks.
+	* events/x86-64/family10/unit_masks:
+
+2007-10-17  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/opcontrol: newer shell accept if -z ... but older need 
+	  if test -z. This broke opcontrol --dump with bash 2.x and probably
+	  other shell. With bash the error when running opcontrol as non root
+	  was:
+	    /usr/local/bin/opcontrol: line 1670: -z: command not found
+
+2007-10-12  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* libop/op_events.c: check for '.' inside event name, they can't work
+	* events/i386/core_2/events: change '.' by '_' in events name
+	* events/ppc64/cell-be/events:
+
+2007-10-11  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* events/ppc64/970MP/event_mappings: Turn off profiling in
+	  hypervisor on 970MP to prevent lost interrupts
+
+2007-10-10  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* events/ppc64/970MP/events:
+	* events/ppc64/970MP/event_mappings: Fix MMCR values
+	  and counter-to-event mappings on a few 970MP groups
+
+2007-10-09  Melchior Franz  <mfranz@aon.at>
+
+	* libregex/op_regex.cpp: Fix broken string concatenation
+
+2007-10-05  Will Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol: Modify opcontrol to allow  short form -l and -d for
+	  normal users.
+
+2007-09-25  Brian Twichell <tbrian@us.ibm.com>
+
+	* utils/opcontrol: Modify opcontrol to use a more inclusive
+	  kernel range
+
+2007-08-23  Maynard Johnson <maynardj@us.ibm.com>
+
+	* daemon/opd_anon.c: Make anonymous sample recording
+	  work with 32-bit OProfile and 64-bit anonymous code
+
+2007-08-14  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml:
+	* doc/opcontrol.1.in: clarify behaviour of opcontrol -e
+
+2007-08-02  Jens Wilke <jens.wilke@de.ibm.com>
+
+	* ChangeLog:  Correct the date from previous patch (maynardj)
+
+	* libutil++/op_bfd.cpp: Fix sym_offset calculation.
+	  Bug triggers on 64 bit systems with code mapped
+	  with an address >4G.
+
+2007-08-02  Jens Wilke <jens.wilke@de.ibm.com>
+
+	* libpp/profile_container.cpp: Remove unnecessary offset
+	  calculation.
+
+2007-07-18  Maynard Johnson <maynardj@us.ibm.com>
+
+	* doc/Makefile.am: Include buffers diagram in dist
+
+	* doc/oprofile.xml: Correct filename reference to opreport.xsd
+
+2007-07-16  Maynard Johnson <maynardj@us.ibm.com>
+
+        * configure.in: Bump to 0.9.4cvs.
+
+2007-07-16  Maynard Johnson <maynardj@us.ibm.com>
+
+	* configure.in:
+	* Makefile.am:  Bump release to 0.9.3 and add a line to
+	  EXTRA_DIST to distribute ChangeLog-2006.
+
+2007-07-09  Maynard Johnson <maynardj@us.ibm.com>
+
+        * doc/opreport.xsd:
+        * libpp/xml_utils.cpp: Correct schema version bump
+
+2007-07-02  Maynard Johnson <maynardj@us.ibm.com>
+
+	* libpp/populate_for_spu.cpp: Fix logic in is_spu_profile()
+	  to handle '--separate=thread' option.
+
+2007-06-27  Maynard Johnson <maynardj@us.ibm.com>
+
+	* ChangeLog: ChangeLog cleanup
+
+2007-06-15  Maynard Johnson <maynardj@us.ibm.com>
+
+	* doc/opreport.xsd:
+	* libpp/xml_utils.cpp: Bump schema version to 2.0 to coincide with
+	  callgraph elements added recently to the schema
+
+2007-06-13  Maynard Johnson <maynardj@us.ibm.com>
+
+	* doc/oprofile.xml:
+	* events/Makefile.am:
+	* events/ppc64/power5++/event_mappings:
+	* events/ppc64/power5++/events:
+	* events/ppc64/power5++/unit_masks:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/opcontrol:
+	* utils/ophelp.c: Add support for POWER5++ (i.e., POWER5+ with PMU
+	  set to POWER6 mode)
+
+2007-06-12  dean gaudet  <dean@arctic.org>
+
+	* events/i386/core_2/events:
+	* events/i386/core_2/unit_masks:  updates to match
+	  253669-022US ISA vol 3B from Intel.  (Including fix
+	  for #1580064 from Arun Sharma.)
+
+2007-06-08  dean gaudet  <dean@arctic.org>
+
+	* events/x86-64/hammer/events:
+	* events/x86-64/hammer/unit_masks: updates from December 2006
+	  AMD update
+
+2007-05-31  Maynard Johnson <maynardj@us.ibm.com>
+
+	* libpp/symbol.h:
+	* libutil++/bfd_support.h:
+	* m4/cellspubfdsupport.m4: Fixups for compile failures on older Linux
+	  distributions
+
+2007-05-29  Dave Nomura  <dcnltc@us.ibm.com>
+
+	* libregex/demangle_symbol.cpp: Strip off leading '.' generated for elf6r-powerpc targets in mangled symbol names.
+
+2007-05-24  Richard Purdie  <rpurdie@openedhand.com>
+
+	* events/arm/xscale1/events:
+	* events/arm/xscale2/events: Add extra Xscale PMU event definitions
+
+2007-05-24  Richard Purdie  <rpurdie@openedhand.com>
+
+	* events/arm/armv6/events:
+	* events/arm/armv6/unit_masks:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/ophelp.c: Name ARM11 support to be consistent with the kernel,
+	  remove some duplicate code and add some extra events
+
+2007-05-24  Richard Purdie  <rpurdie@openedhand.com>
+
+	* oprofile/pp/oparchive.cpp: If the debug files have the same name
+	  as the original binary, the binary gets overwritten. Add in a .debug
+	  directory to avoid this.
+
+2007-05-23  Joerg Wagner  <wagner@ccrl-nece.de>
+
+	* events/Makefile.am:
+	* events/arm/mpcore/events:
+	* events/arm/mpcore/unit_masks:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/ophelp.c: ARM MPCore support
+
+2007-05-23  Riku Voipio  <riku.voipio@iki.fi>
+
+	* events/Makefile.am:
+	* events/arm/armv6/events:
+	* events/arm/armv6/unit_masks:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/ophelp.c: ARM11 support
+
+2007-05-21  Richard Purdie  <rpurdie@openedhand.com>
+  
+	* doc/opreport.xsd:
+	* libpp/format_output.cpp:
+	* libpp/format_output.h:
+	* libpp/xml_utils.cpp:
+	* libutil++/xml_output.cpp:
+	* libutil++/xml_output.h:
+	* pp/opreport.cpp:
+	* pp/opreport_options.cpp: Add callgraph XML output
+ 
+2007-05-20  Dean Gaudet  <dgaudet@users.sourceforge.net>
+
+	* events/i386/core_2/events: ITLB_MISS_RETIRED,MEM_LOAD_RETIRED
+	  only work with counter 0
+
+2007-05-20  Richard Purdie  <rpurdie@openedhand.com>
+
+	* libpp/callgraph_container.cpp:
+	* libpp/callgraph_container.h:
+	* libpp/format_output.cpp:
+	* libpp/format_output.h:
+	* libpp/symbol.h:
+	* libpp/symbol_sort.cpp:
+	* libpp/symbol_sort.h:
+	* pp/opreport.cpp: Convert cg_collection to symbol_collection and use
+	dynamic casting allowing more code reuse for callgraphs
+
+2007-05-19  Richard Purdie  <rpurdie@openedhand.com>
+
+	* doc/oparchive.1.in:
+	* doc/oprofile.xml:
+	* pp/oparchive.cpp:
+	* pp/oparchive_options.cpp:
+	* pp/oparchive_options.h: Add --list-files option to list all files
+	  that would be handled by oparchive.
+
+2007-05-19  Olof Johansson  <olof@lixom.net>
+
+	* events/Makefile.in:
+	* events/ppc64/pa6t/event_mappings:
+	* events/ppc64/pa6t/events:
+	* events/ppc64/pa6t/unit_masks:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/opcontrol:
+	* utils/ophelp.c: PA Semi 6T support
+
+2007-05-09  Richard Purdie  <rpurdie@openedhand.com>
+
+	* oprofile/daemon/opd_cookie.c: Fix syscall for ARM EABI
+
+2007-05-10  Maynard Johnson <maynardj@us.ibm.com>
+
+	* libpp/Makefile.am:
+	* libpp/populate.cpp:
+	* libpp/populate_for_spu.cpp:
+	* libpp/populate_for_spu.h:
+	* libpp/profile.h:
+	* libpp/profile.cpp:
+	* libutil++/Makefile.am:
+	* libutil++/bfd_spu_support.cpp:
+	* libutil++/bfd_support.h:
+	* libutil++/op_bfd.h:
+	* libutil++/op_spu_bfd.cpp:
+	* libpp/xml_utils.cpp:
+	* libpp/profile_container.cpp:
+	* libpp/symbol.h: Patch 3 of 3 for adding support for profiling
+	  Cell Broadband Engine SPU
+
+2007-05-10  Maynard Johnson <maynardj@us.ibm.com>
+
+	* daemon/liblegacy/opd_sample_files.c:
+	* daemon/opd_events.c:
+	* daemon/opd_events.h:
+	* daemon/opd_interface.h:
+	* daemon/Makefile.am:
+	* daemon/opd_mangling.c:
+	* daemon/opd_sfile.c:
+	* daemon/opd_sfile.h:
+	* daemon/opd_spu.c:
+	* daemon/opd_trans.c:
+	* daemon/opd_trans.h:
+	* libop/op_sample_file.h: Patch 2 of 3 for adding support for profiling
+	  Cell Broadband Engine SPU
+
+2007-05-10  Maynard Johnson <maynardj@us.ibm.com>
+
+	* configure.in:
+	* doc/oprofile.xml:
+	* events/ppc64/cell-be/events:
+	* m4/Makefile.am:
+	* m4/cellspubfdsupport.m4:
+	* utils/opcontrol: Patch 1 of 3 for adding support for profiling
+	  Cell Broadband Engine SPU
+
+2007-04-25  Manoj Ekbote  <manoj.ekbote@broadcom.com>
+
+	* events/mips/sb1/events: fix SB1 events
+
+2007-04-19  Dave Nomura  <dcnltc@us.ibm.com>
+
+	* events/ppc64/power6/events: counter 3 should have been used 
+	  in the specification of the default CYCLES event, not counter 1
+
+2007-04-13  Will Cohen  <wcohen@redhat.com>
+
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h: Move new entries to end of list
+	to improve backward compatibility with enum values.
+	
+2007-04-11  John Levon  <levon@movementarian.org>
+
+	* doc/oprofile.xml: IRC channel is on OFTC
+
+2007-04-10  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* utils/ophelp.c: if userspace doesn't recognize the cpu type
+	  warn the user it can use timer mode or upgrade oprofile.
+
+2007-04-04  Maynard johnson <maynardj@us.ibm.com>
+
+	* libutil++/file_manip.cpp: catch result from chown() to avoid
+	  compilation warning (treated as error)
+
+2007-03-23  Jason Yeh  <jason.yeh@amd.com>
+
+	* events/Makefile.am:
+	* events/x86-64/family10/events:
+	* events/x86-64/family10/unit_masks:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/ophelp.c: Add AMD Family 10 support.
+	
+2007-02-28  Rob Bradford  <rob@o-hand.com>
+
+	* pp/oparchive.cpp: return from main
+
+2007-02-21  Rob Bradford <rob@o-hand.com>
+
+	Reverted previous patches.
+	* pp/oparchive.cpp: Save debuginfo files in .debug sub directory.
+
+	* pp/oparchive.cpp:
+	* pp/oparchive_options.h:
+	* pp/oparchive_options.cpp: List files option.
+
+2007-02-21  Rob Bradford <rob@o-hand.com>
+
+	* pp/oparchive.cpp: Save debuginfo files in .debug sub directory.
+
+	* pp/oparchive.cpp:
+	* pp/oparchive_options.h:
+	* pp/oparchive_options.cpp: List files option.
+
+2007-02-16  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/opd_mangling.c: missing initialisation when mangling an 
+	  anon and callgraph filename. Fix given by Amitabha Roy.
+
+2007-02-06  Dave Nomura <dcnltc@us.ibm.com>
+
+	* libpp/symbol.h:
+	* libutil++/Makefile.am:
+	* libutil++/sparse_array.h: represent count_array_t as a sparse 
+	  array type based on std::map rather than growable_vector which is
+	  based on std::vector to reduce the excessive heap usage on large
+	  profiles.
+
+2007-02-02  Amitabha Roy  <amitabha.roy@gmail.com>
+
+	* daemon/opd_anon.c:
+	* daemon/opd_anon.h:
+	* daemon/opd_mangling.c:
+	* libop/op_mangle.c:
+	* libop/op_mangle.h:
+	* libpp/parse_filename.cpp: save and report name of anonymous
+	  mapping if there is one (as self-contradictory as that
+	  sounds).
+
+2007-02-02  Dave Nomura <dcnltc@us.ibm.com>
+
+	* events/Makefile.am:
+	* events/ppc64/970MP/event_mappings:
+	* events/ppc64/970MP/events:
+	* events/ppc64/970MP/unit_masks:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/ophelp.c: PPC970MP has different hardware counters than the rest
+	  of the PPC family and must be treated as a different architecture
+	  by oprofile.
+
+2007-01-31  Dave Nomura <dcnltc@us.ibm.com>
+
+	* libpp/xml_utils.cpp: opreport -X was still getting some incorrect 
+	  symbols attributed to the <binary> when processing a --separate=lib
+	  profile.
+	  
+2007-01-29  Philippe Elie  <phil.el@wanadoo.fr>
+
+	* daemon/oprofiled.c: no need for 0755 for the log file mode, use 0644
+	* utils/opcontrol: don't create the log in opcontrol
+
+2007-01-26  Dave Nomura <dcnltc@us.ibm.com>
+
+	* libpp/format_output.cpp:
+	* libpp/xml_utils.cpp: opreport -X was mixing the symbols associated with
+	  an application with those of a library when processing a --separate=lib
+	  profile.
+
+2007-01-02  Dave Nomura <dcnltc@us.ibm.com>
+
+	* events/Makefile.am:
+	* events/ppc64/power6/event_mappings:
+	* events/ppc64/power6/events:
+	* events/ppc64/power6/unit_masks:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/opcontrol:
+	* utils/ophelp.c:  Add support for Power6
+
+
+See ChangeLog-2006 for earlier changelogs.
diff --git a/oprofile-0.9.7/ChangeLog-2008 b/oprofile-0.9.7/ChangeLog-2008
new file mode 100644
index 0000000..4543889
--- /dev/null
+++ b/oprofile-0.9.7/ChangeLog-2008
@@ -0,0 +1,451 @@
+2008-12-23  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* utils/opcontrol: reverse the logic in
+	  is_non_cell_ppc64_variant to avoid the need
+	  for maintenance as new ppc64 variants are addded
+
+2008-12-12  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libop/Makefile.am: Add Andi Kleen's new op_hw_specific.h
+	  file to to Makefile.am
+
+2008-11-24  Robert Richter <robert.richter@amd.com>
+
+	* utils/opcontrol: Correct spelling error
+
+2008-11-24  Robert Richter <robert.richter@amd.com>
+
+	* daemon/opd_events.c:
+	* daemon/opd_events.h:
+	* daemon/opd_mangling.c:
+	* daemon/opd_mangling.h:
+	* daemon/opd_sfile.c:
+	* daemon/opd_trans.c:
+	* events/x86-64/family10/events:
+	* utils/opcontrol: fix whitespaces
+
+2008-11-12  Andi Kleen  <andi@firstfloor.org>
+
+	* libop/op_events.c
+	* libop/op_events.h
+	* libpp/op_header.cpp: Fix regression in arch perfmon code
+	  (see bug #2161762)
+
+2008-11-12  Andi Kleen  <andi@firstfloor.org>
+
+	* events/i386/arch_perfmon/events: Fix event name to avoid
+	  parsing error
+
+2008-11-05  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libutil++/file_manip.cpp: Add mode arg to open
+
+2008-10-30  William Cohen  <wcohen@redhat.com>
+
+	* m4/binutils.m4: Defeat compiler optimization in configure
+	  check for bfd_get_synthetic_symtab
+
+2008-10-27  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libutil++/op_spu_bfd.cpp: Initialize anon_obj to false for op_bfd
+	  objects for Cell SPE embedded binaries
+
+2008-10-23  Dave Nomura  <dcnltc@us.ibm.com>
+
+	* libutil++/xml_output.cpp:
+	* libutil/xml_out.c:
+	* libutil/xml_out.h:
+	* libutil/xml_events.c:
+	* libutil/xml_events.h:
+	* libutil/Makefile.am:
+	* libop/op_xml_out.c:
+	* libop/op_xml_out.h:
+	* libop/op_xml_events.c:
+	* libop/op_xml_events.h:
+	* libop/Makefile.am: moved xml util routines to libop and fixed some
+	  other problems in the previous patch
+
+2008-10-15  Dave Nomura  <dcnltc@us.ibm.com>
+
+	* utils/ophelp.c:
+	* libutil++/xml_output.cpp:
+	* libutil++/xml_output.h:
+	* libutil/xml_out.c:
+	* libutil/xml_out.h:
+	* libutil/xml_events.c:
+	* libutil/xml_events.h:
+	* libutil/Makefile.am: added -X option to ophelp to generate XML
+
+2008-10-06  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* configure.in:
+	* m4/binutils.m4:
+	* m4/cellspubfdsupport.m4: Handle BFD's new dependency on libz
+
+2008-08-28  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* configure.in: Add configure option for non-standard binutils lib
+
+2008-08-28  Andi Kleen  <andi@firstfloor.org>
+
+	* events/i386/arch_perfmon/events:
+	* events/i386/arch_perfmon/unit_masks:
+	* events/Makefile.am:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* libop/op_events.h:
+	* libop/op_hw_specific.h:
+	* libpp/op_header.cpp:
+	* utils/ophelp.c: support for Intel arch perfmon
+
+2008-08-28  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* configure.in: Change AM_INIT_AUTOMAKE to 0.9.5cvs; enables -werror
+	  gcc option to stop build on warnings
+
+2008-08-27  Jatin Nansi <jnansi@redhat.com>
+
+	* utils/opcontrol: vecho parameters after "--verbose" option processed
+
+2008-08-08  Daniel Hansel <daniel.hansel@linux.vnet.ibm.com>
+
+	* daemon/init.c: Fixed call of execvp() to execute opjitconv if
+	  it is installed in a custom directory
+
+2008-08-07  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libutil++/bfd_support.cpp:
+	* libutil++/op_bfd.cpp:
+	* libutil++/op_bfd.h: Fix a couple problems relating
+	  to overlay symbols for Cell SPE applications
+
+2008-07-31  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* configure.in: Fix to allow libtool to recognize
+	  alternate binutils dir passed via --with-binutils
+
+2008-07-24  Jean Pihet <jpihet@mvista.com>
+
+	* events/arm/armv7/events:
+	* events/arm/armv7/unit_masks:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/ophelp.c: Added ARMv7 support to be consistent with the
+	  kernel, added ARMv7 specific events.
+	  Tested on OMAP3430 and OMAP3530 chipsets.
+
+2008-07-17  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* configure.in: bump version in AM_INIT_AUTOMAKE to 0.9.4
+
+2008-07-17  Will Cohen  <wcohen@redhat.com>
+
+	* libop/op_alloc_counter.c: Assume perfmon managing PMU hw
+	  when no counters
+
+2008-07-07  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* HACKING: Ask contributors to include Signed-off-by
+	  line with their patches
+
+2008-07-03  Richard Purdie  <rpurdie@openedhand.com>
+
+	* libutil++/bfd_support.cpp:
+	* libutil++/bfd_support.h:
+	* libutil++/op_bfd.cpp:
+	* libutil++/op_bfd.h:
+	* libutil++/op_spu_bfd.cpp:
+	* pp/oparchive.cpp: Switch separate_debug_file_exists()
+	  and hence find_separate_debug_file() to use
+	  extra_images::find_image_path() so debug files in --root
+	  directories are correctly found
+
+2008-07-03  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* ChangeLog:  Correct date of previous entry
+	* README_PACKAGERS: Add more advice to packagers
+	  regarding the new JIT support libraries
+
+2008-07-03  Maynard Johnson <maynardj@us.ibm.com>
+
+	* libopagent/Makefile.am:
+	* libopagent/opagent.c:
+	* remove libopagent/bfddefines.c: Move code from bfddefines
+	  to libopagent to fix cross-compile error
+
+2008-06-30  Shunichi Fuji  <palglowr@gmail.com>
+
+	* libpp/callgraph_container.cpp: Fix compile warning
+	  using gcc 4.3.1 for uninitialized variable
+
+2008-06-23  Maynard Johnson <maynardj@us.ibm.com>
+
+	* daemon/opd_stats.c: Do not force printing of sample_invalid_eip
+	  since this is not available from pre-2.6.24 kernels
+
+2008-06-23  Maynard Johnson <maynardj@us.ibm.com>
+
+	* opjitconv/opjitconv.c: Switch to special user account
+	  after determining whether or not we have JIT dump files
+	  to process in order to avoid unnecessary error messages
+	  in oprofiled.log
+
+2008-06-11  Maynard Johnson <maynardj@us.ibm.com>
+
+	* configure.in:
+	* Makefile.am:
+	* agents/Makefile.am:
+	* doc/oprofile.xml: Change make install error to warning
+	  if special user account does not exist
+
+2008-06-11  Maynard Johnson <maynardj@us.ibm.com>
+
+	* Makefile.am: Add README_PACKAGERS to EXTRA_DIST
+
+2008-06-03  Will Cohen  <wcohen@redhat.com>
+
+	* libop/op_alloc_counter.c: Use counters actually available.
+
+2008-05-21  George McCollister  <georgem@novatech-llc.com>
+
+	* daemon/opd_cookie.c: Fix ARM big-endian syscall
+
+2008-05-20  Jason Yeh  <jason.yeh@amd.com>
+
+	* events/x86_64/hammer/events:
+	* events/x86_64/hammer/unit_masks:
+	* events/x86_64/family10/events:
+	* events/x86_64/family10/unit_masks: update for recent BKDG
+	revisions
+
+2008-05-19  Maynard Johnson <maynardj@us.ibm.com>
+
+	* libpp/profile_spec.cpp: Fix bug in differential profile
+	  when using archive spec and an image spec
+
+2008-05-19  Maynard Johnson <maynardj@us.ibm.com>
+
+	* libpp/format_output.cpp:
+	* libpp/xml_utils.cpp:
+	* libutil++/op_bfd.cpp:
+	* libutil++/op_bfd.h: Do not to try to get symbol contents
+	  for artificial symbols and other cases where no symbol contents
+	  exist.  Also change to use scoped array for symbol contents
+	  instead of automatic allocation from the stack to avoid allocation
+	  attempt exceeding max stack size.
+
+2008-05-09  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* configure.in:
+	* Makefile.am: Improve error messages for special user account checks
+
+2008-05-08  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libpp/callgraph_container.cpp:
+	* libpp/profile_container.cpp:
+	* libutil++/op_bfd.h:
+	* libutil++/op_bfd.cpp: Fix to allow 32-bit opreport to
+	  properly process samples from 64-bit JIT profile agent
+
+2008-04-29  René Rebe  <rene@exactcode.de>
+
+        * libabi/opimport.cpp:
+        * libpp/op_header.cpp:
+        * libpp/profile.cpp:
+        * libutil++/bfd_support.cpp:
+        * libutil++/cverb.cpp:
+        * libutil++/op_bfd.cpp:
+        * libutil++/op_spu_bfd.cpp:
+        * pp/common_option.cpp:
+        * pp/opannotate_options.cpp:
+        * pp/oparchive.cpp:
+        * pp/opgprof_options.cpp: added explicit includes for C functions
+	  as required for compilation with GCC-4.3
+
+2008-04-28  Daniel Hansel <daniel.hansel@linux.vnet.ibm.com>
+
+	* oprofile/agents/jvmpi/jvmpi_oprofile.cpp:
+	* oprofile/agents/jvmpi/Makefile.am:
+	* oprofile/agents/jvmti/libjvmti_oprofile.c:
+	* oprofile/agents/jvmti/Makefile.am:
+	* oprofile/agents/Makefile.am:
+	* oprofile/autogen.sh:
+	* oprofile/configure.in:
+	* oprofile/daemon/init.c:
+	* oprofile/daemon/Makefile.am:
+	* oprofile/daemon/opd_anon.c:
+	* oprofile/daemon/opd_pipe.c:
+	* oprofile/daemon/opd_pipe.h:
+	* oprofile/daemon/oprofiled.c:
+	* oprofile/daemon/oprofiled.h:
+	* oprofile/doc/Makefile.am:
+	* oprofile/doc/op-jit-devel.xml:
+	* oprofile/doc/oprofile.xml:
+	* oprofile/libop/op_config.c:
+	* oprofile/libop/op_config.h:
+	* oprofile/libopagent/bfddefines.c:
+	* oprofile/libopagent/jitdump.h:
+	* oprofile/libopagent/Makefile.am:
+	* oprofile/libopagent/opagent.c:
+	* oprofile/libopagent/opagent.h:
+	* oprofile/libopagent/opagent_symbols.ver:
+	* oprofile/libpp/arrange_profiles.cpp:
+	* oprofile/libpp/callgraph_container.cpp:
+	* oprofile/libpp/filename_spec.cpp:
+	* oprofile/libpp/filename_spec.h:
+	* oprofile/libpp/op_header.cpp:
+	* oprofile/libpp/op_header.h:
+	* oprofile/libpp/parse_filename.cpp:
+	* oprofile/libpp/parse_filename.h:
+	* oprofile/libpp/profile_container.cpp:
+	* oprofile/libpp/profile.cpp:
+	* oprofile/libpp/profile.h:
+	* oprofile/libpp/profile_spec.cpp:
+	* oprofile/libregex/demangle_java_symbol.cpp:
+	* oprofile/libregex/demangle_java_symbol.h:
+	* oprofile/libregex/demangle_symbol.cpp:
+	* oprofile/libregex/Makefile.am:
+	* oprofile/libregex/tests/java_test.cpp:
+	* oprofile/libregex/tests/Makefile.am:
+	* oprofile/libutil/Makefile.am:
+	* oprofile/libutil/op_file.c:
+	* oprofile/libutil/op_file.h:
+	* oprofile/libutil/op_growable_buffer.c:
+	* oprofile/libutil/op_growable_buffer.h:
+	* oprofile/libutil/op_list.h:
+	* oprofile/libutil++/bfd_support.cpp:
+	* oprofile/libutil++/bfd_support.h:
+	* oprofile/libutil++/file_manip.cpp:
+	* oprofile/libutil++/op_bfd.cpp:
+	* oprofile/libutil++/op_bfd.h:
+	* oprofile/Makefile.am:
+	* oprofile/opjitconv/conversion.c:
+	* oprofile/opjitconv/create_bfd.c:
+	* oprofile/opjitconv/debug_line.c:
+	* oprofile/opjitconv/jitsymbol.c:
+	* oprofile/opjitconv/Makefile.am:
+	* oprofile/opjitconv/opjitconv.c:
+	* oprofile/opjitconv/opjitconv.h:
+	* oprofile/opjitconv/parse_dump.c:
+	* oprofile/pp/opgprof.cpp:
+	* oprofile/README_PACKAGERS:
+	* oprofile/TODO:
+	* oprofile/utils/opcontrol: JIT support
+
+2008-04-18  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* m4/binutils.m4: A correct fix for the --with-binutils problem
+
+2008-04-17  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* m4/binutils.m4: Revert previous patch as it was buggy
+
+2008-04-16  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* m4/binutils.m4:  Fix the bfd_get_synthetic_symtab check
+	  in this m4 macro to work correctly with '--with-binutils'
+	  configure option 
+
+2008-04-10  Chris J Arges  <arges@linux.vnet.ibm.com>
+
+	* utils/opcontrol:
+	For ppc64 architectures, need to check if all user/kernel flags
+	per counter match. Then use this value to set user/kernel domain
+	profiling.
+
+2008-03-13  Dave Nomura <dcnltc@us.ibm.com>
+
+	* libutil++/op_bfd.cpp:
+	* libutil++/op_bfd.h:
+	* pp/opreport.cpp:
+	gcc 4.3 gives warnings on const function return types
+
+2008-03-03  John Levon  <levon@movementarian.org>
+
+	* daemon/oprofiled.c: fix error message typo
+
+2008-02-22  Haavard Skinnemoen  <hskinnemoen@atmel.com>
+
+	*  events/Makefile.am:
+	*  events/avr32/events:
+	*  events/avr32/unit_masks:
+	*  libop/op_cpu_type.c:
+	*  libop/op_cpu_type.h:
+	*  libop/op_events.c:
+	*  utils/ophelp.c: Add AVR32 support
+ 
+2008-02-22  Richard Purdie  <rpurdie@openedhand.com>
+
+	* libutil++/file_manip.cpp:
+	* pp/oparchive.cpp:
+	Check files actually exist before copying or listing the file as part of
+	oparchive --list-files.
+
+	The copy_file function breaks if passed a directory as a file to copy 
+	since it will create a file at the destination causing subtle bugs.
+
+2008-02-22  Andy Fleming <afleming@freescale.com>
+
+	*  events/Makefile.am:
+	*  events/ppc/e300/events:
+	*  events/ppc/e300/unit_masks:
+	*  libop/op_cpu_type.c:
+	*  libop/op_cpu_type.h:
+	*  libop/op_events.c:
+	*  utils/ophelp.c: Add e300 support
+ 
+2008-02-22  Bob Nelson  <rrnelson@us.ibm.com>
+
+	* utils/opcontrol: Fix loop in dump code when using
+	  --session-dir on a network drive.  (clock issues)
+
+2008-02-15  Will Cohen  <wcohen@redhat.com>
+
+	* gui/oprof_start_util.cpp
+	* libutil++/file_manip.cpp
+	* libutil++/bfd_support.cpp
+	* libutil++/bfd_spu_support.cpp
+	* libutil++/op_spu_bfd.cpp
+	* libutil++/cverb.cpp
+	* libutil++/child_reader.cpp
+	* pp/opgprof_options.cpp
+	* pp/opannotate_options.cpp
+	* pp/oparchive.cpp
+	* pp/common_option.cpp
+	* libpp/sample_container.cpp
+	* libpp/op_header.cpp
+	* libpp/profile.cpp
+	* libabi/opimport.cpp
+	* libregex/demangle_symbol.cpp: Add includes for gcc 4.3 compatibility.
+
+2008-02-07  Bob Nelson  <rrnelson@us.ibm.com>
+
+	* libutil++/op_bfd.h:  add bool symb_artificial to op_bfd_symbol
+	* libutil++/op_bfd.cpp:  ctor changes, use symb_artificial
+	* libutil++/op_spu_bfd.cpp:  profile SPU 'stack' code
+
+2008-02-04  Bob Nelson  <rrnelson@us.ibm.com>
+
+	* daemon/opd_spu.c: Fix number of records to check for
+	  in an SPU context switch
+
+2008-01-21  Daniel Hansel  <daniel.hansel@linux.vnet.ibm.com>
+
+	* various: style cleanups
+
+2008-01-15  Isaku Yamahata  <yamahata@valinux.co.jp>
+
+	* daemon/opd_trans.c: fix previous SPU patch
+
+2008-01-11  Isaku Yamahata  <yamahata@valinux.co.jp>
+
+	* daemon/opd_perfmon.c: Xen support for IA64
+
+2008-01-11  Markus Armbruster  <armbru@redhat.com>
+
+	* daemon/opd_interface.h:
+	* daemon/opd_trans.c: work around SPU/Xen code numbering problem
+
+See ChangeLog-2007 for earlier changelogs.
diff --git a/oprofile-0.9.7/ChangeLog-2009 b/oprofile-0.9.7/ChangeLog-2009
new file mode 100644
index 0000000..4edcda3
--- /dev/null
+++ b/oprofile-0.9.7/ChangeLog-2009
@@ -0,0 +1,421 @@
+2009-12-07  Robert Richter  <robert.richter@amd.com>
+
+	* agents/Makefile.am:
+	* configure.in: adding config option to disable oprofile user check
+
+2009-11-25  Chen Jie  <chenj@lemote.com>
+
+	* events/Makefile.am:
+	* events/mips/loongson2/events: New File
+	* events/mips/loongson2/unit_masks: New File
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c: Add default event for loongson2
+	* libutil/op_cpufreq.c: Add freq estimation for high performance mips processors
+	* utils/ophelp.c: Add support for ICT loongson2
+
+2009-11-25  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* configure.in: bump version in AM_INIT_AUTOMAKE to 0.9.7cvs
+
+2009-11-24  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* configure.in: bump version in AM_INIT_AUTOMAKE to 0.9.6
+
+2009-10-29  William Cohen  <wcohen@redhat.com>
+
+	* daemon/opd_perfmon.c: Fix start-daemon problem on ia64
+
+2009-10-29  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* events/ppc64/power7/events:
+	* events/ppc64/power7/event_mappings: Updates to POWER7 events and
+	  groups
+
+2009-10-28  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* doc/opreport.xsd: Fix up schema and bump version to match 2009-06-18 fix;
+	  other schema fixups for correctness and to facilitate XML document-to-schema
+	  validation works
+	* libpp/xml_utils.cpp: bump schema version
+	* libpp/format_output.cpp:
+	* libpp/format_output.h: Fix regression in XML callgraph output
+	  caused by 2009-06-18 fix
+
+2009-10-26  Robert Richter <robert.richter@amd.com>
+
+	* doc/oprofile.1.in: fix user-space daemon logfile in man page
+
+2009-10-26  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libutil++/bfd_support.cpp:
+	* libutil++/bfd_support.h: Fix regression in handling separate
+	  debuginfo files 
+
+2009-10-23  Robert Richter  <robert.richter@amd.com>
+
+	* autogen.sh: create copies with libtoolize instead of symlinks
+
+2009-10-23  Suravee Suthikulpanit  <suravee.suthikulpanit@amd.com>
+
+	* events/x86-64/family10/events:
+	* events/x86-64/family10/unit_masks: Update events and unitmasks
+	  from publication 31116 revision 3.34 and fixes
+
+2009-10-23  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* README_PACKAGERS: Add mention of new opjitconv binary
+
+2009-10-14  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* agents/jvmpi/jvmpi_oprofile.cpp: Add extra #includes since new
+	  libstdc++ header files do not include standard C header files
+
+2009-10-13  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* utils/opcontrol: Remove incorrect redundant invocation of
+	  get_image_range
+
+2009-10-09  Robert Richter <robert.richter@amd.com>
+
+	* libop/op_xml_events.c:
+	* libop/op_xml_out.c:
+	* libop/op_xml_out.h:
+	* libutil++/xml_output.cpp: fix buffer overflows in xml generator
+
+2009-09-14  Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* utils/opcontrol: Fix timer mode
+
+2009-09-08  Robert Richter <robert.richter@amd.com>
+
+	* utils/opcontrol: fix deinit; kill daemon only if running to prevent
+	  unnecessary "Daemon not running" message
+
+2009-09-08  Robert Richter <robert.richter@amd.com>
+
+	* utils/opcontrol: fix help message
+
+2009-09-04  Robert Richter <robert.richter@amd.com>
+
+	* utils/opcontrol: Do stop only if enabled
+
+2009-08-20  Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* libop/op_xml_events.c: 
+	* libop/op_xml_out.h: 
+	* libop/op_xml_out.c: Fix ophelp -X output for IBS events
+	* utils/ophelp.c: Fix ophelp output for "counter:cpuid" and 
+	  "ext:xxx" case.
+
+2009-07-31  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* configure.in: bump version in AM_INIT_AUTOMAKE to 0.9.6cvs
+
+2009-07-31  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* configure.in: bump version in AM_INIT_AUTOMAKE to 0.9.5
+
+2009-07-31  Andi Kleen   <ak@linux.intel.com>
+
+	* events/i386/nehalem/events: Fix name of event 0xa7
+
+2009-07-20  Jeffrey Yasskin  <jyasskin@google.com>
+
+	* libutil++/bfd_support.h(find_nearest_line):
+	* libutil++/bfd_support.cpp(find_nearest_line):
+	* libutil++/op_bfd.h(op_bfd::get_linenr):
+	* libutil++/op_bfd.cpp(op_bfd::get_linenr): Change the type of offset
+	  from unsigned int to bfd_vma to accommodate addresses above 4G
+
+2009-07-17  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libutil++/bfd_support.cpp: Fix logic error from previous
+	  patch to this file
+
+2009-07-14  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* Makefile.am: Add ChangeLog-2008 to EXTRA_DIST
+
+2009-07-10  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libpp/profile_spec.cpp:
+	* pp/oparchive.cpp:
+	* utils/opcontrol:  Handle bad samples from kernel due to overflows
+
+2009-06-29  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* events/ppc64/power7/events:
+	* events/ppc64/power7/event_mappings: Update to IBM POWER7 events
+	  and groups
+
+2009-06-23  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libutil++/bfd_support.cpp: Discard symbols from sections that do
+	  not have SEC_LOAD flag set; this prevents issues with bogus symbol
+	  size computation, resulting in "samples_range(): start > end" message
+
+2009-06-23  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libpp/profile_spec.cpp:
+	* pp/common_option.cpp: Fix image-path option to be appended
+	  to archive path
+
+2009-06-18  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libpp/format_output.h:
+	* libpp/format_output.cpp: Make sure that all callgraph symbols are
+	  reported, even if 0 samples
+
+2009-06-05  William Cohen  <wcohen@redhat.com>
+
+	* libutil++/bfd_support.cpp: Avoid calling bfd_find_nearest_line
+	  with NULL syms argument
+
+2009-06-05  Andi Kleen  <ak@linux.intel.com>
+
+	* libop/op_events.h: (find_event_by_name):
+	* libop/op_events.c: (find_event_by_name): Match unit mask.
+	* libop/op_parse_event.c: (parse_events): Set unit_mask_valid
+	* libop/op_parse_event.h: (parsed_eventd): Add unit_mask_valid
+	* libop/tests/alloc_counter_tests.c: (do_test):
+	* libop/tests/parse_event_tests.c:
+	* daemon/opd_ibs: (ibs_parse_and_set_events):
+	* gui/oprof_start.cpp (alloc_selected_events):
+	* utils/ophelp.c: (resolve_events, show_unit_mask):
+	  Update find_event_by_name call.
+
+2009-06-05 Andi Kleen <ak@linux.intel.com>
+
+	* libop/tests/alloc_counter_tests.c:
+	Don't use non existent unit masks in P4 counter tests.
+
+2009-06-03 Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* events/x86-64/family10/events:
+	* events/x86-64/family10/unit_masks: Update events and unitmasks
+	  for the AMD Six-core Opteron processor support from
+	  publication 31116 revision 3.28
+
+2009-05-27 Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* utils/opcontrol: Fix IBS initialization
+
+2009-05-27 Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+ 	* daemon/oprofiled.c:
+	* daemon/opd_ext.c: Fix extended feature initialization
+
+2009-05-27 Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* doc/oprofile.xml:
+	* doc/internals.xml: Add Extended-Interface and IBS documentation,
+	
+2009-05-19 Andi Kleen  <ak@linux.intel.com>
+
+ 	* utils/ophelp.c: (cleanup) Fix cleanup crash.
+ 
+2009-05-19  Andi Kleen  <ak@linux.intel.com>
+
+ 	* events/i386/atom/events: Use hardcoded counters. Readd
+ 	UNHALTED_REFERENCE_CLOCK.
+ 	* events/i386/nehalem/events:
+ 	* events/i386/nehalem/unit_masks: Use hardcoded counters.
+ 	Clarify CPU_CLOCKS_UNHALTED.REF_P
+
+2009-05-19 Andi Kleen <ak@linux.intel.com>
+
+ 	* libop/op_hw_specific.h: (arch_get_filter):
+ 	Return -1 when CPUID is not available.
+
+2009-05-18  Brian Bloniarz   <bmb@athenacr.com>
+
+	* libutil/op_file.c: Fix crash when chasing broken symlinks
+
+2009-05-13  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* pp/oparchive.cpp: Fixes for oparchive session-dir as reported in
+	  bugs 2646389 and 2646376
+
+2009-05-13  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* utils/opcontrol: Fix for session-dir setup, bug report 2646398
+
+2009-05-13  Brian Bloniarz  <bmb@athenacr.com>
+
+	* utils/opcontrol: Replace bash built-in let with posix statements
+
+2009-05-07  Andi Kleen  <ak@linux.intel.com>
+	* utils/ophelp.c:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* libop/op_hw_specific.h: Add workaround_nehalem_aaj79
+	* events/Makefile.am:
+	* events/i386/atom/events: Add Atom support (New file)
+	* events/i386/atom/unit_masks: Add Atom support (New file)
+	* events/i386/nehalem/events: Add Nehalem support (New file)
+	* events/i386/nehalem/unit_masks: Add Nehalem support (New file)
+	* events/i386/core_i7/events: Add Core i7 support (New file)
+	* events/i386/core_i7/unit_masks: Add Core i7 support (New file)
+
+2009-05-07  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* oprof-compat/events/Makefile.am:
+	* oprof-compat/events/ppc64/ibm-compat-v1/event_mappings: (new)
+	* oprof-compat/events/ppc64/ibm-compat-v1/events: (new)
+	* oprof-compat/events/ppc64/ibm-compat-v1/unit_masks: (new)
+	* oprof-compat/libop/op_cpu_type.c:
+	* oprof-compat/libop/op_cpu_type.h:
+	* oprof-compat/libop/op_events.c:
+	* oprof-compat/utils/ophelp.c:  Add support for IBM ppc64 architected events
+
+2009-05-06  Andi Kleen  <ak@linux.intel.com>
+
+	* utils/ophelp.c: Use word wrap to output event descriptions
+
+2009-05-01  Andi Kleen  <ak@linux.intel.com>
+
+	* events/i386/arch_perfmon/events: Update event names to conform to manual.
+
+2009-05-01  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* configure.in:
+	* m4/binutils.m4: Workaround to make oprofile build on recent SUSE
+
+2009-04-29  Andi Kleen  <ak@linux.intel.com>
+
+	* libop/op_events.c: Add support for include and unit mask merging
+	  statements in event files
+
+2009-04-29  Andi Kleen  <ak@linux.intel.com>
+
+	* libop/op_events.c: Allow make check to accumulate some errors
+	  before exiting
+
+2009-04-28  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* events/Makefile.am:
+	* events/ppc64/power7/event_mappings: (new)
+	* events/ppc64/power7/events: (new)
+	* events/ppc64/power7/unit_masks: (new)
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/ophelp.c:  Add support for IBM POWER7 processor
+
+2009-04-22  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* agents/jvmpi/jvmpi_oprofile.cpp: Change this file to use LGPL license
+	  to allow JVMPI agent library to link to non-GPL code
+
+2009-04-17  Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* utils/opcontrol: Add IBS support, patch 4 of 4
+
+2009-04-17  Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* pp/opannotate.cpp: Add IBS support, patch 3 of 4
+
+2009-04-17  Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* events/x86-64/family10/events:
+	* events/x86-64/family10/unit_masks: Add IBS support, patch 2 of 4
+
+
+2009-04-17  Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* daemon/Makefile.am:
+	* daemon/opd_extended.c:
+	* daemon/opd_ibs.c: New File
+	* daemon/opd_ibs.h: New File
+	* daemon/opd_ibs_macro.h: New File
+	* daemon/opd_ibs_trans.c: New File
+	* daemon/opd_ibs_trans.h: New File
+	* daemon/opd_interface.h:
+	* daemon/opd_sfile.c:
+	* daemon/opd_sfile.h:
+	* daemon/opd_trans.c:
+	* libdb/db_insert.c:
+	* libdb/odb.h: Add IBS support, patch 1 of 4
+
+2009-04-15  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libpp/xml_utils.cpp: Fix binary count total in XML output
+	  when using --separate=lib
+
+2009-04-08  William Cohen  <wcohen@redhat.com>
+
+	* configure.in: Add check for basename declaration
+
+2009-04-01  Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* daemon/Makefile.am:
+	* daemon/opd_events.c:
+	* daemon/opd_extended.h: New File
+	* daemon/opd_extended.c: New File
+	* daemon/opd_printf.h:
+	* daemon/opd_sfile.h:
+	* daemon/opd_sfile.c:
+	* daemon/opd_stats.c:
+	* daemon/opd_trans.h:
+	* daemon/opd_trans.c:
+	* daemon/oprofiled.c:
+	* libop/op_events.h:
+	* libop/op_events.c:
+	* libop/op_alloc_counter.c:
+	* utils/ophelp.c: Add Extended Feature Interface
+
+2009-03-17  Suraveee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* events/Makefile.am
+	* events/x86-64/family11h/events: New event file
+	* events/x86-64/family11h/unit_masks: New Unitmask file
+	* libop/op_cpu_type.c: Adding family11h
+	* libop/op_cpu_type.h: Adding family11h
+	* libop/op_events.c: Adding family11h
+	* utils/ophelp.c: Adding family11h and update documents
+
+2009-03-17  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libop/op_allocate_counter.c: Make map_event_to_counter handle
+	  a non-native cpu_type
+
+2009-03-05  Robert Richter <robert.richter@amd.com>
+
+	* libutil++/bfd_support.cpp: suppress 'unused parameter' warning
+
+2009-02-10  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libabi/tests/abi_test.cpp:
+	* libregex/tests/java_test.cpp:
+	* libregex/tests/regex_test.cpp: Use C++ style #includes
+	  for stdlib and string
+	
+
+2009-02-09  Kjetil Barvik  <barvik@broadpark.no>
+
+	* libabi/tests/abi_test.cpp:
+	* libregex/tests/java_test.cpp:
+	* libregex/tests/regex_test.cpp:
+	* libutil/tests/file_tests.c: Fix gcc warnings
+
+2009-02-06  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libutil++/bfd_support.cpp:
+	* libutil++/bfd_support.h:
+	* libutil++/op_bfd.cpp: Fixup debuginfo processing for ppc64
+
+2009-02-03  Carl Love  <cel@us.ibm.com>
+
+	* utils/opcontrol:
+	* doc/oprofile.xml:
+	* events/ppc64/cell-be/events:
+	* events/ppc64/cell-be/unit_masks: Added IBM CELL SPU event profiling support
+
+2009-01-05  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* m4/binutils.m4: Fix error in AC_CHECK_LIB action
+
+
+See ChangeLog-2008 for earlier changelogs.
diff --git a/oprofile-0.9.7/ChangeLog-2010 b/oprofile-0.9.7/ChangeLog-2010
new file mode 100644
index 0000000..f7ce595
--- /dev/null
+++ b/oprofile-0.9.7/ChangeLog-2010
@@ -0,0 +1,182 @@
+2010-12-16  John Villalovos <john.l.villalovos@intel.com>
+
+	* events/Makefile.am:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_hw_specific.h:
+	* libop/op_events.c:
+	* utils/ophelp.c:
+	* events/i386/westmere/events (new):
+	* events/i386/westmere/unit_masks (new): Add support for Intel
+	  Westmere micro-architecture processors
+
+2010-12-15  Will Cohen  <wcohen@redhat.com>
+
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_hw_specific.h: User-space identification of processors
+	  that support Intel architectural events
+
+2010-12-14  Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* oprofile/daemon/opd_ibs_trans.c: Fix non-x86 build issue 
+	  due to cpuid instruction
+
+2010-11-7  Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* oprofile/utils/opcontrol:
+	* oprofile/daemon/init.c:
+	* oprofile/daemon/opd_extended.h:
+	* oprofile/daemon/opd_extended.c:
+	* oprofile/daemon/opd_ibs.h:
+	* oprofile/daemon/opd_ibs.c:
+	* oprofile/daemon/opd_ibs_trans.h:
+	* oprofile/daemon/opd_ibs_trans.c:
+	* oprofile/events/x86-64/family10/unit_masks:
+	* oprofile/daemon/opd_ibs_macro.h: Additional IBS supports for 
+	  family12/14/15h including:
+		- IBS Op branch target address log
+		- IBS Op memory access log
+		- IBS Op extended count bits
+
+2010-11-7  Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+
+	* events/Makefile.am:
+	* libop/op_events.c:
+	* libop/op_cpu_type.h:
+	* libop/op_cpu_type.c:
+	* utils/ophelp.c:
+	* events/x86-64/family12h/events: New File
+	* events/x86-64/family12h/unit_masks: New File
+	* events/x86-64/family14h/events: New File
+	* events/x86-64/family14h/unit_masks: New File
+	* events/x86-64/family15h/events: New File
+	* events/x86-64/family15h/unit_masks: New File
+	  Add support for new AMD processors (family12h/14h/15h)
+
+2010-10-15  Roland Grunberg  <roland.grunberg@gmail.com>
+
+	* libop/op_xml_events.c:
+	* libop/op_xml_out.c:
+	* libop/op_xml_out.h:
+	* doc/ophelp.xsd: Add unit mask type attribute for an event in
+	  the ophelp schema
+
+2010-10-15  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* doc/ophelp.xsd:
+	* libop/op_xml_events.c: Fix schema validation issues and error in
+	  xml generation
+
+2010-10-13  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libabi/opimport.cpp: Fix uninitialized variable warning when
+	  building with gcc 4.4
+
+2010-10-13  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* events/mips/Makefile.am: Correction to 8/26 MIPS patch
+	  to add events and unit_masks to makefile
+
+2010-10-07  William Cohen  <wcohen@redhat.com>
+
+	* events/i386/arch_perfmon/events: Correct filter values.
+
+2010-08-26  Paul Lind  <plind@mips.com>
+
+	* libop/op_cpu_type.[h,c]:
+	* libop/op_events.c:
+	* utils/ophelp.c: Add "mips/74K" and "mips/1004K" as valid cpu types,
+	  and change number of available 34K counters to 2.
+	* libop/tests/alloc_counter_tests.c: correct 34K test to 2 counters.
+	* events/mips/24K/events: correct the performance counters for 24K.
+	* events/mips/34K/events: correct the performance counters for 34K.
+	* events/mips/74K/[events,unit_masks]: Add events for 74K.
+	* events/mips/1004K/[events,unit_masks]: Add events for 1004K.
+
+2010-08-13  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* utils/opcontrol:
+	* doc/opcontrol.1.in: Update help and man page for opcontrol to indicate
+	  that buffer values may be reset to default values by passing a '0'
+
+2010-08-02  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* utils/opcontrol:
+	* libpp/profile_spec.cpp:
+	* pp/oparchive.cpp:  Moved the copying of stats to opcontrol::do_dump_data
+	  and removed the unnecessary and confusing message that indicated
+	  when overflow stats were not available.
+
+2010-07-13  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* events/arm/armv7-common/events: (new)
+	* events/arm/armv7-common/unit_masks: (new)
+	* events/arm/armv7-ca9/events: (new)
+	* events/arm/armv7-ca9/unit_masks: (new)
+	  I neglected to do 'cvs add' for these new files in the
+	  previous commit; doing so now.
+
+2010-07-01  Will Deacon  <will.deacon@arm.com>
+
+	* events/arm/armv7-common/events:
+	* events/arm/armv7-common/unit_masks:
+	* events/arm/armv7/events: factor out ARMv7 common architectural events
+	* events/Makefile.am:
+	* libop/op_cpu_type.c:
+	* libop/op_cpu_type.h:
+	* libop/op_events.c:
+	* utils/ophelp.c: correct usage of core terminology for v7 and MPCore
+	* events/arm/armv7-ca9/events:
+	* events/arm/armv7-ca9/unit_masks: add support for Cortex-A9 events
+
+2010-06-21  John Villalovos <john.l.villalovos@intel.com>
+
+	* libop/op_cpu_type.[h,c]:
+	* libop/op_events.c:
+	* utils/ophelp.c: Add "i386/nehalem" as a valid cpu_type.  This will
+	allow the kernel in the future (if desired) to use "i386/nehalem"
+	instead of "i386/core_i7".  Core i7 processors can be either Nehalem
+	or Westmere microarchitecture but the "i386/core_i7" cpu_type in
+	Oprofile is only for Nehalem microarchitecture processors.
+
+2010-06-11  William Cohen <wcohen@redhat.com>
+
+        * libregex/stl.pat.in: Avoid machine specific configuration.
+
+2010-05-18  Daniel Hansel  <daniel.hansel@linux.vnet.ibm.com>
+
+	* doc/oprofile.xml: Document that only kernel versions 2.6.13 or
+	  later provide support for anonymous mapped regions
+
+2010-04-13  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* libutil++/bfd_support.cpp: Fix up translate_debuginfo_syms
+	  so it doesn't rely on section index values being the same
+	  between real image and debuginfo file (to resolve problem
+	  reported by Will Cohen on Fedora 12)
+
+2010-03-25  Oliver Schneider  <oliver@assarbad.net>
+
+	* libpp/parse_filename.cpp:  Catch case where a basic_string::erase
+	  error can occur in opreport when parsing an invalid sample file name
+
+2010-03-25  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* events/mips/loongson2/events: New File
+	* events/mips/loongson2/unit_masks: New File
+	   I neglected to do 'cvs add' for these new two new files
+	   back on Nov 25, 2009 when I committed the initial
+	   loongson2 support.  This change corrects that error.
+
+2010-03-01  Gabor Loki  <loki@inf.u-szeged.hu>
+
+	* daemon/opd_pipe.c: Fix memory leak
+	* utils/opcontrol: Fix messages sending method to opd_pipe
+
+2010-01-20  Maynard Johnson  <maynardj@us.ibm.com>
+
+	* m4/qt.m4: Fix qt lib check so it works on base 64-bit system
+
+
+See ChangeLog-2009 for earlier changelogs.
diff --git a/oprofile-0.9.7/ChangeLog-2011 b/oprofile-0.9.7/ChangeLog-2011
new file mode 100644
index 0000000..c710c11
--- /dev/null
+++ b/oprofile-0.9.7/ChangeLog-2011
@@ -0,0 +1,20 @@
+2011-02-25  Maynard Johnson  <maynardj@us.ibm.com>
+
+	From this date forward, ChangeLog entries will not
+	be necessary, since 'git log' can now be used to show
+	changes in the repository.
+
+2011-02-09  William Cohen  <wcohen@redhat.com>
+
+	* libpp/format_output.h: Do not use mutable for reference variable.
+
+2011-01-17  Will Deacon  <will.deacon@arm.com>
+
+	* events/arm/armv7-ca9/events: Add missing TLB event
+
+2011-01-05  William Cohen  <wcohen@redhat.com>
+
+	* utils/opcontrol: Add argument checking for numerical arguments
+
+
+See ChangeLog-2010 for earlier changelogs.
diff --git a/oprofile-0.9.7/Makefile.am b/oprofile-0.9.7/Makefile.am
new file mode 100644
index 0000000..62e8936
--- /dev/null
+++ b/oprofile-0.9.7/Makefile.am
@@ -0,0 +1,110 @@
+#### ATTENTION ####
+#    The agents directory must be kept as the last subdir
+SUBDIRS = \
+	. \
+	m4 \
+	libutil \
+	libop \
+	libopagent \
+	libdb \
+	libutil++ \
+	libopt++ \
+	libabi \
+	daemon \
+	utils \
+	libregex \
+	libpp \
+	opjitconv \
+	pp \
+	events \
+	doc \
+	gui \
+	agents
+#### ATTENTION ####
+#    The agents directory must be kept as the last subdir
+
+
+
+ACLOCAL_AMFLAGS = -I m4
+
+# The module will not build under distcheck
+DISTCHECK_CONFIGURE_FLAGS = --with-kernel-support
+
+if !kernel_support
+
+.PHONY: module
+
+all-local: module
+
+# This must use a fully-qualified SUBDIRS path, so we can't use ${top_srcdir}
+module:
+	make -C libutil
+	make -C libop
+	(cd $(KSRC) && $(MAKE) SUBDIRS=$(OPROFILE_DIR)/module/@OPROFILE_MODULE_ARCH@ modules) || exit 1 ;
+	(cd $(KSRC) && $(MAKE) SUBDIRS=$(OPROFILE_DIR)/module modules) || exit 1 ;
+
+install-exec-local:
+	-mkdir -p $(MODINSTALLDIR)/oprofile
+	cp module/oprofile-module.o $(MODINSTALLDIR)/oprofile/oprofile.o
+	if test $(KVERS) = "`uname -r`"; then depmod -a ; fi
+
+clean-local:
+	rm -f module/*.o module/@OPROFILE_MODULE_ARCH@/*.o \
+	module/.*.o.cmd module/.*.o.flags \
+	module/@OPROFILE_MODULE_ARCH@/.*.o.cmd module/@OPROFILE_MODULE_ARCH@/.*.o.flags
+
+endif
+
+EXTRA_DIST = \
+	ChangeLog-2001 \
+	ChangeLog-2002 \
+	ChangeLog-2003 \
+	ChangeLog-2004 \
+	ChangeLog-2005 \
+        ChangeLog-2006 \
+	ChangeLog-2007 \
+	ChangeLog-2008 \
+	ChangeLog-2009 \
+	ChangeLog-2010 \
+	ChangeLog-2011 \
+	autogen.sh \
+	README_PACKAGERS \
+	include/sstream \
+	module/Makefile.in \
+	module/compat.c \
+	module/op_dname.c \
+	module/op_init.c \
+	module/oprofile.c \
+	module/op_util.c \
+	module/compat22.h \
+	module/compat24.h \
+	module/compat.h \
+	module/op_cache.h \
+	module/op_dcache.h \
+	module/oprofile.h \
+	module/op_util.h \
+	module/ia64/Makefile.in \
+	module/ia64/oprofile_stubs.S \
+	module/ia64/cpu_type.c \
+	module/ia64/op_pmu.c \
+	module/ia64/op_syscalls.c \
+	module/ia64/IA64entry.h \
+	module/ia64/IA64minstate.h \
+	module/ia64/IA64syscallstub.h \
+	module/ia64/op_ia64_model.h \
+	module/x86/Makefile.in \
+	module/x86/oprofile_nmi.S \
+	module/x86/apic_compat.h \
+	module/x86/op_apic.h \
+	module/x86/op_arch.h \
+	module/x86/op_x86_model.h \
+	module/x86/op_msr.h \
+	module/x86/cpu_type.c \
+	module/x86/op_apic.c \
+	module/x86/op_fixmap.c \
+	module/x86/op_model_athlon.c \
+	module/x86/op_model_p4.c \
+	module/x86/op_model_ppro.c \
+	module/x86/op_nmi.c \
+	module/x86/op_rtc.c \
+	module/x86/op_syscalls.c
diff --git a/oprofile-0.9.7/Makefile.in b/oprofile-0.9.7/Makefile.in
new file mode 100644
index 0000000..90e4065
--- /dev/null
+++ b/oprofile-0.9.7/Makefile.in
@@ -0,0 +1,897 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
+	$(top_srcdir)/configure $(top_srcdir)/doc/srcdoc/Doxyfile.in \
+	$(top_srcdir)/doc/xsl/catalog-1.xml.in \
+	$(top_srcdir)/module/Makefile.in \
+	$(top_srcdir)/module/ia64/Makefile.in \
+	$(top_srcdir)/module/x86/Makefile.in COPYING TODO config.guess \
+	config.sub depcomp install-sh ltmain.sh missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/binutils.m4 \
+	$(top_srcdir)/m4/builtinexpect.m4 \
+	$(top_srcdir)/m4/cellspubfdsupport.m4 \
+	$(top_srcdir)/m4/compileroption.m4 \
+	$(top_srcdir)/m4/configmodule.m4 \
+	$(top_srcdir)/m4/copyifchange.m4 $(top_srcdir)/m4/docbook.m4 \
+	$(top_srcdir)/m4/extradirs.m4 $(top_srcdir)/m4/findkernel.m4 \
+	$(top_srcdir)/m4/kerneloption.m4 \
+	$(top_srcdir)/m4/kernelversion.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/mallocattribute.m4 \
+	$(top_srcdir)/m4/poptconst.m4 \
+	$(top_srcdir)/m4/precompiledheader.m4 $(top_srcdir)/m4/qt.m4 \
+	$(top_srcdir)/m4/resultyn.m4 $(top_srcdir)/m4/sstream.m4 \
+	$(top_srcdir)/m4/typedef.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = doc/xsl/catalog-1.xml doc/srcdoc/Doxyfile \
+	module/Makefile module/x86/Makefile module/ia64/Makefile
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d "$(distdir)" \
+    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr "$(distdir)"; }; }
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_LIBS = @BFD_LIBS@
+CAT_ENTRY_END = @CAT_ENTRY_END@
+CAT_ENTRY_START = @CAT_ENTRY_START@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOCBOOK_ROOT = @DOCBOOK_ROOT@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTRA_CFLAGS_MODULE = @EXTRA_CFLAGS_MODULE@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVA_HOMEDIR = @JAVA_HOMEDIR@
+KINC = @KINC@
+KSRC = @KSRC@
+KVERS = @KVERS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBERTY_LIBS = @LIBERTY_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MODINSTALLDIR = @MODINSTALLDIR@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPROFILE_DIR = @OPROFILE_DIR@
+OPROFILE_MODULE_ARCH = @OPROFILE_MODULE_ARCH@
+OP_CFLAGS = @OP_CFLAGS@
+OP_CXXFLAGS = @OP_CXXFLAGS@
+OP_DOCDIR = @OP_DOCDIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POPT_LIBS = @POPT_LIBS@
+PTRDIFF_T_TYPE = @PTRDIFF_T_TYPE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_INCLUDES = @QT_INCLUDES@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LIB = @QT_LIB@
+QT_LIBS = @QT_LIBS@
+QT_VERSION = @QT_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T_TYPE = @SIZE_T_TYPE@
+STRIP = @STRIP@
+UIC = @UIC@
+UIChelp = @UIChelp@
+VERSION = @VERSION@
+XMKMF = @XMKMF@
+XML_CATALOG = @XML_CATALOG@
+XSLTPROC = @XSLTPROC@
+XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+topdir = @topdir@
+
+#### ATTENTION ####
+#    The agents directory must be kept as the last subdir
+SUBDIRS = \
+	. \
+	m4 \
+	libutil \
+	libop \
+	libopagent \
+	libdb \
+	libutil++ \
+	libopt++ \
+	libabi \
+	daemon \
+	utils \
+	libregex \
+	libpp \
+	opjitconv \
+	pp \
+	events \
+	doc \
+	gui \
+	agents
+
+#### ATTENTION ####
+#    The agents directory must be kept as the last subdir
+ACLOCAL_AMFLAGS = -I m4
+
+# The module will not build under distcheck
+DISTCHECK_CONFIGURE_FLAGS = --with-kernel-support
+EXTRA_DIST = \
+	ChangeLog-2001 \
+	ChangeLog-2002 \
+	ChangeLog-2003 \
+	ChangeLog-2004 \
+	ChangeLog-2005 \
+        ChangeLog-2006 \
+	ChangeLog-2007 \
+	ChangeLog-2008 \
+	ChangeLog-2009 \
+	ChangeLog-2010 \
+	ChangeLog-2011 \
+	autogen.sh \
+	README_PACKAGERS \
+	include/sstream \
+	module/Makefile.in \
+	module/compat.c \
+	module/op_dname.c \
+	module/op_init.c \
+	module/oprofile.c \
+	module/op_util.c \
+	module/compat22.h \
+	module/compat24.h \
+	module/compat.h \
+	module/op_cache.h \
+	module/op_dcache.h \
+	module/oprofile.h \
+	module/op_util.h \
+	module/ia64/Makefile.in \
+	module/ia64/oprofile_stubs.S \
+	module/ia64/cpu_type.c \
+	module/ia64/op_pmu.c \
+	module/ia64/op_syscalls.c \
+	module/ia64/IA64entry.h \
+	module/ia64/IA64minstate.h \
+	module/ia64/IA64syscallstub.h \
+	module/ia64/op_ia64_model.h \
+	module/x86/Makefile.in \
+	module/x86/oprofile_nmi.S \
+	module/x86/apic_compat.h \
+	module/x86/op_apic.h \
+	module/x86/op_arch.h \
+	module/x86/op_x86_model.h \
+	module/x86/op_msr.h \
+	module/x86/cpu_type.c \
+	module/x86/op_apic.c \
+	module/x86/op_fixmap.c \
+	module/x86/op_model_athlon.c \
+	module/x86/op_model_p4.c \
+	module/x86/op_model_ppro.c \
+	module/x86/op_nmi.c \
+	module/x86/op_rtc.c \
+	module/x86/op_syscalls.c
+
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+	@:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	$(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+	@if test ! -f $@; then \
+	  rm -f stamp-h1; \
+	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+	else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in:  $(am__configure_deps) 
+	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+	rm -f stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config.h stamp-h1
+doc/xsl/catalog-1.xml: $(top_builddir)/config.status $(top_srcdir)/doc/xsl/catalog-1.xml.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+doc/srcdoc/Doxyfile: $(top_builddir)/config.status $(top_srcdir)/doc/srcdoc/Doxyfile.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+module/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/Makefile.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+module/x86/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/x86/Makefile.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+module/ia64/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/ia64/Makefile.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool config.lt
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	test -d "$(distdir)" || mkdir "$(distdir)"
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	-test -n "$(am__skip_mode_fix)" \
+	|| find "$(distdir)" -type d ! -perm -755 \
+		-exec chmod u+rwx,go+rx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-lzma: distdir
+	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+	$(am__remove_distdir)
+
+dist-xz: distdir
+	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+	$(am__remove_distdir)
+
+dist-tarZ: distdir
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.lzma*) \
+	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.xz*) \
+	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	test -d $(distdir)/_build || exit 0; \
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && am__cwd=`pwd` \
+	  && $(am__cd) $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+	  && cd "$$am__cwd" \
+	  || exit 1
+	$(am__remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+	@$(am__cd) '$(distuninstallcheck_dir)' \
+	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-recursive
+@kernel_support_TRUE@all-local:
+all-am: Makefile config.h all-local
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+@kernel_support_TRUE@install-exec-local:
+@kernel_support_TRUE@clean-local:
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+	distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-exec-local
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
+	ctags-recursive install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am all-local am--refresh check check-am clean \
+	clean-generic clean-libtool clean-local ctags ctags-recursive \
+	dist dist-all dist-bzip2 dist-gzip dist-lzma dist-shar \
+	dist-tarZ dist-xz dist-zip distcheck distclean \
+	distclean-generic distclean-hdr distclean-libtool \
+	distclean-tags distcleancheck distdir distuninstallcheck dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-exec-local install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags tags-recursive uninstall uninstall-am
+
+
+@kernel_support_FALSE@.PHONY: module
+
+@kernel_support_FALSE@all-local: module
+
+# This must use a fully-qualified SUBDIRS path, so we can't use ${top_srcdir}
+@kernel_support_FALSE@module:
+@kernel_support_FALSE@	make -C libutil
+@kernel_support_FALSE@	make -C libop
+@kernel_support_FALSE@	(cd $(KSRC) && $(MAKE) SUBDIRS=$(OPROFILE_DIR)/module/@OPROFILE_MODULE_ARCH@ modules) || exit 1 ;
+@kernel_support_FALSE@	(cd $(KSRC) && $(MAKE) SUBDIRS=$(OPROFILE_DIR)/module modules) || exit 1 ;
+
+@kernel_support_FALSE@install-exec-local:
+@kernel_support_FALSE@	-mkdir -p $(MODINSTALLDIR)/oprofile
+@kernel_support_FALSE@	cp module/oprofile-module.o $(MODINSTALLDIR)/oprofile/oprofile.o
+@kernel_support_FALSE@	if test $(KVERS) = "`uname -r`"; then depmod -a ; fi
+
+@kernel_support_FALSE@clean-local:
+@kernel_support_FALSE@	rm -f module/*.o module/@OPROFILE_MODULE_ARCH@/*.o \
+@kernel_support_FALSE@	module/.*.o.cmd module/.*.o.flags \
+@kernel_support_FALSE@	module/@OPROFILE_MODULE_ARCH@/.*.o.cmd module/@OPROFILE_MODULE_ARCH@/.*.o.flags
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/oprofile-0.9.7/README b/oprofile-0.9.7/README
new file mode 100644
index 0000000..74b0a12
--- /dev/null
+++ b/oprofile-0.9.7/README
@@ -0,0 +1,46 @@
+This is an alpha release version of oprofile, a transparent
+low-overhead system-wide profiler.
+
+You can find some documentation in the doc/ directory.
+
+Please visit the oprofile website at : http://oprofile.sf.net/
+
+oprofile was written by John Levon <levon@movementarian.org>
+and Philippe Elie <phil.el@wanadoo.fr>.
+
+Maynard Johnson <maynardj@us.ibm.com> is the current maintainer.
+
+Dave Jones <davej@suse.de> provided bug fixes and support for
+the AMD Athlon, and AMD Hammer families of CPUs.
+
+Bob Montgomery <bobm@fc.hp.com> provided bug fixes, the initial RTC
+driver and the initial ia64 driver.
+
+Will Cohen <wcohen@redhat.com> integrated the ia64 driver into the
+oprofile release, and contributed bug fixes and several cleanups.
+
+Graydon Hoare <graydon@redhat.com> provided P4 port, bug fixes and cleanups.
+
+Ralf Baechle <ralf@linux-mips.org> provided the MIPS port.
+
+Other contributors are listed in the ChangeLog.
+
+Building
+--------
+
+Please read the installation instructions in doc/oprofile.html or
+http://oprofile.sourceforge.net/doc/install.html.
+
+Quick start :
+
+(If using git: ./autogen.sh first. You need automake 1.5 or higher. You
+can specify a different version, e.g.
+ACLOCAL=aclocal-1.5 AUTOMAKE=automake-1.5 AUTOCONF=autoconf-2.13 AUTOHEADER=autoheader-2.13 ./autogen.sh)
+
+2.4 kernels
+
+	./configure --with-linux=/path/to/kernel/source
+
+2.6 kernels
+
+	./configure --with-kernel-support
diff --git a/oprofile-0.9.7/README_PACKAGERS b/oprofile-0.9.7/README_PACKAGERS
new file mode 100644
index 0000000..cfdf43f
--- /dev/null
+++ b/oprofile-0.9.7/README_PACKAGERS
@@ -0,0 +1,79 @@
+Building an RPM for OProfile
+==================================
+
+When building an RPM for OProfile, please follow the RPM packaging guidelines
+described in:
+   http://www.rpm.org/RPM-HOWTO/build.html
+
+
+New file to install as of release 0.9.3
+---------------------------------------
+
+As of release 0.9.3, opreport is capable of generating XML output.
+Tool developers who wish to use the xml output will need to have
+access to the doc/opreport.xsd file, which describes the schema.
+RPM packagers may install this file in the same package as the other
+standard OProfile components or in a separate devel package if desired.
+
+
+New files to install as of release 0.9.4
+---------------------------------------
+
+As of release 0.9.4, OProfile includes a JIT support library called libopagent.
+This library is needed at runtime when profiling JITed code from supported
+virtual machines.  The install location for this library is:
+	<oprof-install-dir>/<libdir>/oprofile
+
+And there's a new binary file to install that's used for JIT profiling called
+opjitconv.  As with the other oprofile executables, this file is installed in
+the <oprof-install-dir>/bin directory.
+
+OProfile also includes support for profiling Java applications.  This support
+must be configured by way of the '--with-java=<path_to_jdk>' configure
+option.  If your JDK is older than version 1.5, only a JVMPI agent library
+is built.  If your JDK is version 1.5, both JVMPI and JVMTI agent
+libraries are built.  If your JDK is 1.6 or newer, only the JVMTI agent
+library is built.  As with libopagent described above, the install location
+for these is '<libdir>/oprofile'.
+
+RPM packagers can install the <libdir>/oprofile libraries in the same package
+as the other standard OProfile components or in a separate package if desired.
+It is recommended to run ldconfig in %post and %postun to add/remove the
+<libdir>/oprofile path from the standard library search paths.
+
+On bi-arch platforms that support more than one "bitness" of userspace software
+(e.g., 32-bit and 64-bit programs), it is recommended that the libopagent and
+Java agent libraries be packaged in a separate RPM.  You could then build
+OProfile twice -- once for each bitness type.  You would then distribute both
+versions of the RPMs containing the libraries, but only one RPM containing the
+"base" OProfile (i.e., executables, scripts, etc.).
+
+The new JIT support also provides the ability for third parties to develop
+JIT agents for other virtual machines.  The development files provided for this
+purpose are:
+	doc/op-jit-devel.html
+	include/opagent.h
+
+Again, the RPM packager may package these files in the default package
+or in a separate devel package.
+
+
+Requirement for building a binary RPM package
+----------------------------------------
+
+OProfile requires the special user account "oprofile" to exist for purposes
+of processing samples from JIT'ed code (e.g., Java applications).
+
+When defining the spec file for the OProfile RPM, you should add the automatic
+creation of the special "oprofile" user account.  Please refer to the URL
+below for an example of how this can be done:
+   http://fedoraproject.org/wiki/Packaging/UsersAndGroups
+
+For example, the following commands would add the necessary user account:
+
+   %pre
+   getent group oprofile >/dev/null || groupadd -r oprofile
+   getent passwd oprofile >/dev/null || \
+   useradd -r -g oprofile -d /home/oprofile -s /sbin/nologin \
+       -c "Special user account to be used by OProfile" oprofile
+   exit 0
diff --git a/oprofile-0.9.7/TODO b/oprofile-0.9.7/TODO
new file mode 100644
index 0000000..fcae2bd
--- /dev/null
+++ b/oprofile-0.9.7/TODO
@@ -0,0 +1,268 @@
+This is an (incomplete) list of some of the stuff we want to look at doing.
+
+If you're interested in hacking on any of these, please contact the list first
+for some pointers and/or read HACKING and doc/CodingStyle.
+
+1.0 release
+-----------
+
+(this is a minimal selection of stuff I think we need)
+
+ o default to a vmlinux location: need agreement from kernel developers
+ o default to --separate=library (with anon, =none, makes not much sense)
+ o prettify image name for .jo files and allow lib-image: to specify it
+ o gisle's fixes
+ o opreport tgid:<tgid> doesn't work even if .jo files with that pid
+ o Fix:
+
+warning: [vdso] (tgid:9236 range:0x7fff98ffd000-0x7fff98fff000) could not be found.
+warning: /no-vmlinux could not be found.
+warning: /usr/lib64/libpanel-applet-2.so.0.2.27.#prelink#.sXCUK1 (deleted) could not be found.
+
+ o amd64 32 bit build needs a sys32_lookup_dcookie() translator in the
+   kernel
+ o decide on -m tgid semantics for anon regions
+ o if ev67 is not fixed, back it out
+ o lapic : module should says "didn't find apic" if needed, FAQ and doc should
+  speak a bit about lapic kernel option on x86 and recent kernel
+ o see the big comment in db_insert.c, it's possible to allow unlimited
+   amount of samples with a very minor change in libdb.
+ o if oprofile doesn't recognize the processor selected by the kernel
+   opcontrol could setup the module in timer mode (remove/reload prolly), and
+   warn the user it must upgrade oprofile to get all the feature from its
+   hardware.
+
+Later
+-----
+
+ o remove 2.95/2.2 support so we can use boost multi index container in
+   symbol/sample container
+ o consider if we can improve anon mapping growing support
+
+<movement> [moz@lambent pp]$ ./opreport -lf lib-image:/lib/tls/libc-2.3.2.so /bin/bash | grep vfprintf
+<movement> 14        0.1301  6         0.0102  /lib/tls/libc-2.3.2.so   vfprintf
+<movement> [moz@lambent pp]$ ./opreport -lf lib-image:/lib/tls/libc-2.3.2.so /usr/bin/vim | grep vfprintf
+<movement> 176       2.0927  349       1.2552  /lib/tls/libc-2.3.2.so   vfprintf
+<movement> [moz@lambent pp]$ ./opreport -lf lib-image:/lib/tls/libc-2.3.2.so { image:/bin/bash } { image:/usr/bin/vim } | grep vfprintf
+<movement> 176      10.9657  +++       349       7.8888  +++       vfprintf
+<movement> 14       ---      ---       6        ---      ---       vfprintf
+<movement> it seems them as two separate symbols
+<movement> but can we remove the app_name from rough_less and still be able to walk the two lists?
+<movement> even if we could, it would still go wrong when we're profiling multiple apps
+
+ o Java stuff??
+ o with opreport -c I can get "warning: /no-vmlinux could not be found.".
+   Should be smarter ?
+ o opreport -c gives weird output for an image with no symbols:
+
+    samples  %        symbol name
+  15965    100.000  (no symbols)
+253      100.000  (no symbols)
+  15965    98.4400  (no symbols)
+  253       1.5600  (no symbols) [self]
+
+ o consider tagging opreport -c entries with a number like gprof
+ o --details for opreport -c, or diff??
+ o should [self] entries be ommitted if 0 ??
+ o stress test opreport -c: compile a Big Application w/o frame pointer and look
+   how driver and opreport -c react.
+ o oparchive could fix up {kern} paths with -p (what about diff between
+   archive and current though?)
+ o can say more in opcontrol --status
+ o consider a sort option for diff %
+ o opannotate is silent about symbols missing debug info
+ o oprofiled.log now contains various statistics about lost sample etc. from
+  the driver. Post profile tools must parse that and warn eventually, warning
+  must include a proposed work around. User need this: if nothing seems wrong
+  people are unlikely to get a look in oprofiled.log (I ran oprofile on 2.6.1
+  2 weeks before noticing at 30000 I lost a lot of samples, the profile seemed
+  ok du to the randomization of lost samples). As developper we need that too,
+  actually we have no clear idea of the behavior on different arch, NUMA etc.
+  Not perfect because if the profiler is running the oprofiled.log will show
+  those warning only after the first  alarm signal, I think we must dump the
+  statistics information after each opcontrol --dump to avoid that.
+ o odb_insert() can fail on ftruncate or mremap() in db_manage.c but we don't
+  try to recover gracefully.
+ o output column shortname headers for opreport -l
+ o is relative_to_absolute_path guaranteeing a trailing '/' documented ?
+ o move oprofiled.log to OP_SAMPLE_DIR/current ?
+ o pp tools must handle samples count overflow (marked as (unsigned)-1)
+ o the way we show kernel modules in 2.5 is not very obvious - "/oprofile"
+ o oparchive will be more usefull with a --root= options to allow profiling
+  on a small box, nfs mount / to another box and transfer sample file and
+  binary on a bigger box for analysis. There is also a problem in oparchive
+  you can use session: to get the right path to samples files but oprofiled.log
+  and abi files path are hardcoded to /var/lib/oprofile.
+ o callgraph patch: better way to skip ignored backtrace ?
+ o lib-image: and image: behavior depend on --separate=, if --separate=library
+  opreport "lib-image:*libc*" --merge=lib works but not
+  opreport "image:*libc*" --merge=lib whilst the behavior is reversed if
+  --separate==none. Must we take care ?
+ o dependencies between profile_container.h symbol_container.h and
+  sample_container.h become more and more ugly, I needed to include them
+  in a specific order in some source (still true??)
+ o add event aliases for common things like icache misses, we must start to 
+  think about metrics including simple like event alias mapped to two or more
+  events and intepreted specially by user space tools like using the ratio
+  of samples; more tricky will be to select an event used as call count (no
+  cg on it) and  used to emulate the call count field in gprof. I think this is
+  a after 1.0 thing but event aliases must be specified in a way allowing such
+  extension
+ o do we need an opreport like opreport -c (showing caller/callee at binary
+  boundary not symbols) ?
+ o we should notice an opcontrol config change (--separate etc.) and
+   auto-restart the daemon if necessary (Run)
+ o we can add lots more unit tests yet
+ o Itanium event constraints are not implemented
+ o GUI still has a physical-counter interface, should have a general one
+   like opcontrol --event
+ o I think we should have the ability to have *fixed* width headers, e.g. :
+
+vma      samples  cum. samples  %           cum. %     symbol name             image name              app name
+0804c350 64582    64582         35.0757     35.0757    odb_insert              /usr/loc...in/oprofiled /usr/local/oprofile-pp/bin/oprofiled
+
+  Note the ellipsis
+ o should we make the sighup handler re-read counter config and re-start profiling too ?
+ o improve --smart-demangle
+	o allow user to add it's own pattern in user.pat, document it.
+	o hard code ${typename} regular definition to remove all current limitations (difficult, perhaps after 1.0 ?).
+ o oprof_start dialog size is too small initially
+ o i18n. We need a good formatter, and also remember format_percent()
+ o opannotate --source --output-dir=~moz/op/ /usr/bin/oprofiled
+   will fail because the ~ is not expanded (no space around it) (popt bug I say)
+ o cpu names instead of numbers in 2.4 module/ ?
+ o remove 1 and 2 magic numbers for oprof_ready
+ o adapt Anton's patch for handling non-symbolled libraries ? (nowaday C++
+  anon namespace symbol are static, 3.4 iirc, so with recent distro we are
+  more likely to get problems with a "fallback to dynamic symbols" approch)
+ o use standard C integer type <stdint.h> int32_t int16_t etc.
+ o event multiplexing for real
+ o randomizing of reset value
+ o XML output
+ o profile the NMI handler code
+ o opannotate : I added this to the doc about difference between nr samples
+  credited to a source function and total number of samples for this function:
+   "The missing samples are not lost, they will be credited to another source
+    location where the inlined function is defined. The inlined function will
+    be credited from multiple call site and merged in one place in the
+   annotated source file so there is no way to see from what call site are
+   coming the samples for an inlined function."
+  I think we can work around this: output multiple instances of inlined
+  function like :
+  inline foo() { foo: total 1500 30.00 ...
+  ... annotated source from all call site 
+  inline foo() { foo (call site bar()): total 500 10.00
+  .. annotated source from call site bar() etc.
+  what about template..., can we do/must we do something like that
+  template <class T> eat_cpu() and do a similar things, merging and annotating
+  all instantation then annotating for each distinct instantation, this will
+  break our "keep the source line number in annotated source file identical to
+  the original source"
+ o events/mips/34k/events, some events does not make sense, they get identical
+  event number, um and counter nr so they overlap, currently commented
+ o can we find a more efficient implementation for sparse_array ?
+ o libpp/profile.cpp:is_spu_sample_file() can be simplified by using
+  read_header()
+ o while fixing #1819350 I needed to make extra_images per profile session
+   rather than a global var so I think we need to revisit find_image_path(),
+   extra_found_images, --image-path (-p).
+   Actually we can't do something ala:
+   opreport { archive:tmp1 search_path=/lib/modules/2.6.20 } { archive:tmp2 search_path=/.../2.6.20.9 }
+   because search_path is specified through -p which is not a part of the
+   profile spec. Fixing #1819350 covered all case except this one but w/o any
+   user visible change. Another way will be to save the -p option used with
+   oparchive in a file at the toplevel of the archive, use it with all tools
+   when an archive: is specified on the command line and deprecate the use of
+   -p in such case.
+ o consider to make extra_images a ref counted object, it's copied by value
+  a few time but can contain a lot of string. There is also some ugly public
+  member extra_images to fix.
+ o daemon bss size can be improved, grep for MAX_PATH to see where dynamic
+   allocation can be used, try $ nm oprofiled --size-sort too.
+
+Documentation
+-------------
+
+ o the docs should mention the default event for each arch somewhere
+ o more discussion of problematic code needs to go in the "interpreting" section. 
+ o document gcc 2.95 and linenr info problems especially for inline functions
+ o finish the internals manual
+
+JIT support
+-----------
+
+ o We need a more dynamic structure to handle entries_address_ascending and
+   entries_symbols_ascending, actually many scaling problem occur because they
+   are array, this was perfect to get a first implementation focusing on
+   handling overlap and all but the need to qsort/copy arrays at each iteration
+   is a performance killer. Some sort of AVL tree will do the job.
+ o Related to the previous, it's possible to do all processing in opjitconv.c
+   in a single left to right walk of the jitentry list.
+ o see the FIXME at parse_dump.c:parse_code_unload()
+ o Increment JITHEADER_VERSION in jitdump.h to be sure that the new code only
+   accepts dump file created by the new code.
+ o opjitconv.c:replacement_name() should be enough clever to avoid name
+   collision so we can remove the recursive call to disambiguate_symbol_names(),
+   need a hash table or some sort of associative array to check quickly if a
+   name exists, we will need some sort of avl tree so it's probably better
+   to do not implement a hash table only for this purpose.
+ o op_write_native_code() must accept one more parameter, the real code size
+   which can be zero or equal to code_size, this will allow to create elf
+   file w/o any code contents, only a symbol table and .text sections w/o
+   contents (yes ELF format allow that). For dynamic binary translation it'll
+   avoid to dump tons of code for little use, opannotate --assembly will not
+   work on such elf file but it can be a real win. It'll need to add to
+   jitrecord0 a real_size field, and some trickery when building the elf file,
+   taking care about the case we mix zero code size with non zero code size.
+   Perhaps we can use it too for java, filtering native method etc. Actually
+   we allow a simplified form of this feature by allowing to disable/enable
+   code dumping but at the whole dump level not on a symbol basis, quite
+   possible sufficient. [mpj: We're backing away from the idea of dumping
+   JIT records without code.  Since BFD asymbol type does not include symbol size,
+   the op_bfd technique for determining symbol size relies on knowing the true
+   file size; and if code is not included in the .jo file, we don't have true size.]
+ o The pipe used for triggering JIT dump conversion should be used for normal
+   dumping too.
+ o See FIXME in agents/jvmti/libjvmti_oprofile.c:
+   If enablement to get line number info would be configurable through command line,
+   what should be the default on/off?
+ o See FIXME in opjitconv/debug_line.c
+ o The way to use the pipe should be made more secure to avoid denial of service
+   attacks. We have to think about it.
+ o Callgraph does not work properly for the .jo files the JIT support creates.
+   See section Chapter 4, sect 2.3.2 "Callgraph and JIT support". Try to figure
+   out a way to correlate an anonymous sample callgraph entry with
+   the .jo file that may exist for the anonymous code.
+ o see mail from Gisle Dankel:
+   "JIT_SUPPORT: Adding support for file-backed non-ELF JIT code"
+   -> should be changed (if useful) before next release
+ o See FIXME in op_header.cpp:
+   The check for header.mtime of JIT sample files is not correct because currently
+   this mtime value is set to zero due to missing cookie setting for JIT sample files.
+   Some additional check/setting to header.mtime should be made for JIT sample files.
+ o Mono JIT support:
+
+   2007-11-08: with callgraph massi got
+   <massi> oparchive error: parse_filename() invalid filename: /var/lib/oprofile/samples/current/{root}/var/lib/oprofile/samples/current/{root}/home/massi/mono/amd64/bin/mono/{dep}/{anon:anon}/32432.0x40a26000.0x40a36000/CPU_CLK_UNHALTED.100000.0.all.all.all/{dep}/{root}/var/lib/oprofile/samples/current/{root}/home/massi/mono/amd64/bin/mono/{dep}/{anon:anon}/32432.0x40a26000.0x40a36000/CPU_CLK_UNHALTED.100000.0.all.all.all/{cg}/{root}/usr/oprofile/bin/oprofiled/CPU_CLK_
+
+   Massi added Mono JIT support, code on the stack is never unloaded and there is
+   no byte code, code is always compiled to native machine code, this mean than
+   for mono at least we can do callgraph if we can fix this samples filename
+   problem.
+
+General checks to make
+----------------------
+ 
+ o rgrep FIXME
+ o valgrind (--show-reachable=yes --leak-check=yes)
+ o audit to track unnecessary include <>
+ o gcc 3.0/3.x compile
+ o Qt2/3 check, no Qt check
+ o verify builds (modversions, kernel versions, athlon etc.). I have the
+  necessary stuff to check kernel versions/configurations on PIII core (Phil)
+ o use nm and a little script to track unused function
+ o test it to hell and back
+ o compile all C++ programs with STL_port and test them (gcc 3.4 contain a
+   debug mode too but std::string iterator are not checked)
+ o There is probably place of post profile tools where looking at errno will give better error messages.
+
diff --git a/oprofile-0.9.7/aclocal.m4 b/oprofile-0.9.7/aclocal.m4
new file mode 100644
index 0000000..f45010d
--- /dev/null
+++ b/oprofile-0.9.7/aclocal.m4
@@ -0,0 +1,1144 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
+[m4_warning([this file was generated for autoconf 2.67.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+# 
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# 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.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=m4_default([$1], [0.9.0])
+	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		AC_MSG_RESULT([yes])
+	else
+		AC_MSG_RESULT([no])
+		PKG_CONFIG=""
+	fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_default([$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+    pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+    PKG_CHECK_EXISTS([$3],
+                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+		     [pkg_failed=yes])
+ else
+    pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+   	AC_MSG_RESULT([no])
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
+        else 
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+	m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+        ])
+elif test $pkg_failed = untried; then
+     	AC_MSG_RESULT([no])
+	m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+        ])
+else
+	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+	$3
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+			     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+		  [_AM_DEPENDENCIES(CC)],
+		  [define([AC_PROG_CC],
+			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+		  [_AM_DEPENDENCIES(CXX)],
+		  [define([AC_PROG_CXX],
+			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES(OBJC)],
+		  [define([AC_PROG_OBJC],
+			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes.	            -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/binutils.m4])
+m4_include([m4/builtinexpect.m4])
+m4_include([m4/cellspubfdsupport.m4])
+m4_include([m4/compileroption.m4])
+m4_include([m4/configmodule.m4])
+m4_include([m4/copyifchange.m4])
+m4_include([m4/docbook.m4])
+m4_include([m4/extradirs.m4])
+m4_include([m4/findkernel.m4])
+m4_include([m4/kerneloption.m4])
+m4_include([m4/kernelversion.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
+m4_include([m4/mallocattribute.m4])
+m4_include([m4/poptconst.m4])
+m4_include([m4/precompiledheader.m4])
+m4_include([m4/qt.m4])
+m4_include([m4/resultyn.m4])
+m4_include([m4/sstream.m4])
+m4_include([m4/typedef.m4])
diff --git a/oprofile-0.9.7/agents/Makefile.am b/oprofile-0.9.7/agents/Makefile.am
new file mode 100644
index 0000000..c049fa7
--- /dev/null
+++ b/oprofile-0.9.7/agents/Makefile.am
@@ -0,0 +1,36 @@
+
+SUBDIRS =
+
+if BUILD_JVMTI_AGENT
+SUBDIRS += 	jvmti
+endif
+
+if BUILD_JVMPI_AGENT
+SUBDIRS +=      jvmpi
+endif
+
+INSTALL_EXEC_HOOK =
+
+if CHECK_ACCOUNT
+INSTALL_EXEC_HOOK += __install-exec-hook
+endif
+
+__install-exec-hook:
+	@getent passwd oprofile >/dev/null || ( \
+	echo "****************************************************************" ; \
+	echo "*    WARNING:" ; \
+	echo "*      Create the 'oprofile' user account to enable profiling of JITed code." ; \
+	echo "****************************************************************") ;
+	@getent group oprofile >/dev/null ||  ( \
+	echo "****************************************************************" ; \
+	echo "*    WARNING:" ; \
+	echo "*      Create the 'oprofile' group to enable profiling of JITed code." ; \
+	echo "****************************************************************") ;
+	@test -z `id -gn oprofile 2>/dev/null` || \
+	test `id -gn oprofile 2>/dev/null` = "oprofile" || ( \
+	echo "****************************************************************" ; \
+	echo "*    WARNING:" ; \
+	echo "*      The special user 'oprofile' must have the default group set to 'oprofile'." ; \
+	echo "****************************************************************") ;
+
+install-exec-hook: $(INSTALL_EXEC_HOOK)
diff --git a/oprofile-0.9.7/agents/Makefile.in b/oprofile-0.9.7/agents/Makefile.in
new file mode 100644
index 0000000..43d63c2
--- /dev/null
+++ b/oprofile-0.9.7/agents/Makefile.in
@@ -0,0 +1,636 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@BUILD_JVMTI_AGENT_TRUE@am__append_1 = jvmti
+@BUILD_JVMPI_AGENT_TRUE@am__append_2 = jvmpi
+@CHECK_ACCOUNT_TRUE@am__append_3 = __install-exec-hook
+subdir = agents
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/binutils.m4 \
+	$(top_srcdir)/m4/builtinexpect.m4 \
+	$(top_srcdir)/m4/cellspubfdsupport.m4 \
+	$(top_srcdir)/m4/compileroption.m4 \
+	$(top_srcdir)/m4/configmodule.m4 \
+	$(top_srcdir)/m4/copyifchange.m4 $(top_srcdir)/m4/docbook.m4 \
+	$(top_srcdir)/m4/extradirs.m4 $(top_srcdir)/m4/findkernel.m4 \
+	$(top_srcdir)/m4/kerneloption.m4 \
+	$(top_srcdir)/m4/kernelversion.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/mallocattribute.m4 \
+	$(top_srcdir)/m4/poptconst.m4 \
+	$(top_srcdir)/m4/precompiledheader.m4 $(top_srcdir)/m4/qt.m4 \
+	$(top_srcdir)/m4/resultyn.m4 $(top_srcdir)/m4/sstream.m4 \
+	$(top_srcdir)/m4/typedef.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = jvmti jvmpi
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_LIBS = @BFD_LIBS@
+CAT_ENTRY_END = @CAT_ENTRY_END@
+CAT_ENTRY_START = @CAT_ENTRY_START@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOCBOOK_ROOT = @DOCBOOK_ROOT@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTRA_CFLAGS_MODULE = @EXTRA_CFLAGS_MODULE@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVA_HOMEDIR = @JAVA_HOMEDIR@
+KINC = @KINC@
+KSRC = @KSRC@
+KVERS = @KVERS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBERTY_LIBS = @LIBERTY_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MODINSTALLDIR = @MODINSTALLDIR@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPROFILE_DIR = @OPROFILE_DIR@
+OPROFILE_MODULE_ARCH = @OPROFILE_MODULE_ARCH@
+OP_CFLAGS = @OP_CFLAGS@
+OP_CXXFLAGS = @OP_CXXFLAGS@
+OP_DOCDIR = @OP_DOCDIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POPT_LIBS = @POPT_LIBS@
+PTRDIFF_T_TYPE = @PTRDIFF_T_TYPE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_INCLUDES = @QT_INCLUDES@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LIB = @QT_LIB@
+QT_LIBS = @QT_LIBS@
+QT_VERSION = @QT_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T_TYPE = @SIZE_T_TYPE@
+STRIP = @STRIP@
+UIC = @UIC@
+UIChelp = @UIChelp@
+VERSION = @VERSION@
+XMKMF = @XMKMF@
+XML_CATALOG = @XML_CATALOG@
+XSLTPROC = @XSLTPROC@
+XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+topdir = @topdir@
+SUBDIRS = $(am__append_1) $(am__append_2)
+INSTALL_EXEC_HOOK = $(am__append_3)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign agents/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign agents/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-exec-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-exec-hook install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs installdirs-am \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am
+
+
+__install-exec-hook:
+	@getent passwd oprofile >/dev/null || ( \
+	echo "****************************************************************" ; \
+	echo "*    WARNING:" ; \
+	echo "*      Create the 'oprofile' user account to enable profiling of JITed code." ; \
+	echo "****************************************************************") ;
+	@getent group oprofile >/dev/null ||  ( \
+	echo "****************************************************************" ; \
+	echo "*    WARNING:" ; \
+	echo "*      Create the 'oprofile' group to enable profiling of JITed code." ; \
+	echo "****************************************************************") ;
+	@test -z `id -gn oprofile 2>/dev/null` || \
+	test `id -gn oprofile 2>/dev/null` = "oprofile" || ( \
+	echo "****************************************************************" ; \
+	echo "*    WARNING:" ; \
+	echo "*      The special user 'oprofile' must have the default group set to 'oprofile'." ; \
+	echo "****************************************************************") ;
+
+install-exec-hook: $(INSTALL_EXEC_HOOK)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/oprofile-0.9.7/agents/jvmpi/Makefile.am b/oprofile-0.9.7/agents/jvmpi/Makefile.am
new file mode 100644
index 0000000..8e6bb6e
--- /dev/null
+++ b/oprofile-0.9.7/agents/jvmpi/Makefile.am
@@ -0,0 +1,12 @@
+pkglib_LTLIBRARIES = libjvmpi_oprofile.la
+
+libjvmpi_oprofile_la_CXXFLAGS = -W -Wall -fPIC
+
+libjvmpi_oprofile_la_SOURCES = jvmpi_oprofile.cpp
+
+libjvmpi_oprofile_la_LIBADD = ../../libopagent/libopagent.la
+
+AM_CPPFLAGS = \
+       -I ${top_srcdir}/libopagent \
+       -I @JAVA_HOMEDIR@/include \
+       -I @JAVA_HOMEDIR@/include/linux
diff --git a/oprofile-0.9.7/agents/jvmpi/Makefile.in b/oprofile-0.9.7/agents/jvmpi/Makefile.in
new file mode 100644
index 0000000..4b0f54a
--- /dev/null
+++ b/oprofile-0.9.7/agents/jvmpi/Makefile.in
@@ -0,0 +1,591 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = agents/jvmpi
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/binutils.m4 \
+	$(top_srcdir)/m4/builtinexpect.m4 \
+	$(top_srcdir)/m4/cellspubfdsupport.m4 \
+	$(top_srcdir)/m4/compileroption.m4 \
+	$(top_srcdir)/m4/configmodule.m4 \
+	$(top_srcdir)/m4/copyifchange.m4 $(top_srcdir)/m4/docbook.m4 \
+	$(top_srcdir)/m4/extradirs.m4 $(top_srcdir)/m4/findkernel.m4 \
+	$(top_srcdir)/m4/kerneloption.m4 \
+	$(top_srcdir)/m4/kernelversion.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/mallocattribute.m4 \
+	$(top_srcdir)/m4/poptconst.m4 \
+	$(top_srcdir)/m4/precompiledheader.m4 $(top_srcdir)/m4/qt.m4 \
+	$(top_srcdir)/m4/resultyn.m4 $(top_srcdir)/m4/sstream.m4 \
+	$(top_srcdir)/m4/typedef.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+libjvmpi_oprofile_la_DEPENDENCIES = ../../libopagent/libopagent.la
+am_libjvmpi_oprofile_la_OBJECTS =  \
+	libjvmpi_oprofile_la-jvmpi_oprofile.lo
+libjvmpi_oprofile_la_OBJECTS = $(am_libjvmpi_oprofile_la_OBJECTS)
+libjvmpi_oprofile_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(libjvmpi_oprofile_la_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libjvmpi_oprofile_la_SOURCES)
+DIST_SOURCES = $(libjvmpi_oprofile_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_LIBS = @BFD_LIBS@
+CAT_ENTRY_END = @CAT_ENTRY_END@
+CAT_ENTRY_START = @CAT_ENTRY_START@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOCBOOK_ROOT = @DOCBOOK_ROOT@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTRA_CFLAGS_MODULE = @EXTRA_CFLAGS_MODULE@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVA_HOMEDIR = @JAVA_HOMEDIR@
+KINC = @KINC@
+KSRC = @KSRC@
+KVERS = @KVERS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBERTY_LIBS = @LIBERTY_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MODINSTALLDIR = @MODINSTALLDIR@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPROFILE_DIR = @OPROFILE_DIR@
+OPROFILE_MODULE_ARCH = @OPROFILE_MODULE_ARCH@
+OP_CFLAGS = @OP_CFLAGS@
+OP_CXXFLAGS = @OP_CXXFLAGS@
+OP_DOCDIR = @OP_DOCDIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POPT_LIBS = @POPT_LIBS@
+PTRDIFF_T_TYPE = @PTRDIFF_T_TYPE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_INCLUDES = @QT_INCLUDES@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LIB = @QT_LIB@
+QT_LIBS = @QT_LIBS@
+QT_VERSION = @QT_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T_TYPE = @SIZE_T_TYPE@
+STRIP = @STRIP@
+UIC = @UIC@
+UIChelp = @UIChelp@
+VERSION = @VERSION@
+XMKMF = @XMKMF@
+XML_CATALOG = @XML_CATALOG@
+XSLTPROC = @XSLTPROC@
+XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+topdir = @topdir@
+pkglib_LTLIBRARIES = libjvmpi_oprofile.la
+libjvmpi_oprofile_la_CXXFLAGS = -W -Wall -fPIC
+libjvmpi_oprofile_la_SOURCES = jvmpi_oprofile.cpp
+libjvmpi_oprofile_la_LIBADD = ../../libopagent/libopagent.la
+AM_CPPFLAGS = \
+       -I ${top_srcdir}/libopagent \
+       -I @JAVA_HOMEDIR@/include \
+       -I @JAVA_HOMEDIR@/include/linux
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign agents/jvmpi/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign agents/jvmpi/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+	}
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libjvmpi_oprofile.la: $(libjvmpi_oprofile_la_OBJECTS) $(libjvmpi_oprofile_la_DEPENDENCIES) 
+	$(libjvmpi_oprofile_la_LINK) -rpath $(pkglibdir) $(libjvmpi_oprofile_la_OBJECTS) $(libjvmpi_oprofile_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjvmpi_oprofile_la-jvmpi_oprofile.Plo@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+@am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+libjvmpi_oprofile_la-jvmpi_oprofile.lo: jvmpi_oprofile.cpp
+@am__fastdepCXX_TRUE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjvmpi_oprofile_la_CXXFLAGS) $(CXXFLAGS) -MT libjvmpi_oprofile_la-jvmpi_oprofile.lo -MD -MP -MF $(DEPDIR)/libjvmpi_oprofile_la-jvmpi_oprofile.Tpo -c -o libjvmpi_oprofile_la-jvmpi_oprofile.lo `test -f 'jvmpi_oprofile.cpp' || echo '$(srcdir)/'`jvmpi_oprofile.cpp
+@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/libjvmpi_oprofile_la-jvmpi_oprofile.Tpo $(DEPDIR)/libjvmpi_oprofile_la-jvmpi_oprofile.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='jvmpi_oprofile.cpp' object='libjvmpi_oprofile_la-jvmpi_oprofile.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjvmpi_oprofile_la_CXXFLAGS) $(CXXFLAGS) -c -o libjvmpi_oprofile_la-jvmpi_oprofile.lo `test -f 'jvmpi_oprofile.cpp' || echo '$(srcdir)/'`jvmpi_oprofile.cpp
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/oprofile-0.9.7/agents/jvmpi/jvmpi_oprofile.cpp b/oprofile-0.9.7/agents/jvmpi/jvmpi_oprofile.cpp
new file mode 100644
index 0000000..800667f
--- /dev/null
+++ b/oprofile-0.9.7/agents/jvmpi/jvmpi_oprofile.cpp
@@ -0,0 +1,239 @@
+/**
+ * @file jvmpi_oprofile.cpp
+ * JVMPI agent implementation to report jitted JVM code to OProfile
+ *
+ * @remark Copyright 2007 OProfile authors
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @author Maynard Johnson
+ *
+ * Copyright IBM Corporation 2007
+ *
+ */
+
+#include <iostream>
+#include <map>
+#include <string>
+#include <cstring>
+#include <stdexcept>
+#include <cerrno>
+
+extern "C" {
+#include <stdint.h>
+#include <jvmpi.h>
+#include <opagent.h>
+}
+
+using namespace std;
+
+static bool debug = false;
+static op_agent_t agent_hdl;
+
+class class_details {
+public:
+	string name;
+	map<jmethodID, string> method_names;
+	map<jmethodID, string> method_signatures;
+};
+
+
+static pthread_mutex_t class_map_mutex = PTHREAD_MUTEX_INITIALIZER;
+static map <jobjectID, class_details> loaded_classes;
+
+void class_load(JVMPI_Event * event)
+{
+	class_details cls;
+	cls.name = event->u.class_load.class_name;
+	JVMPI_Method * passed_methods = event->u.class_load.methods;
+	for (int i = 0; i < event->u.class_load.num_methods;
+	     i++, passed_methods++) {
+		cls.method_names[passed_methods->method_id] =
+			passed_methods->method_name;
+		cls.method_signatures[passed_methods->method_id] =
+			passed_methods->method_signature;
+	}
+
+	pthread_mutex_lock(&class_map_mutex);
+	loaded_classes[event->u.class_load.class_id] = cls;
+	pthread_mutex_unlock(&class_map_mutex);
+}
+
+void class_unload(JVMPI_Event * event)
+{
+	pthread_mutex_lock(&class_map_mutex);
+	loaded_classes.erase(event->u.class_load.class_id);
+	pthread_mutex_unlock(&class_map_mutex);
+}
+
+JVMPI_Interface * jvmpi;
+
+void compiled_method_load(JVMPI_Event * event)
+{
+	jmethodID method = event->u.compiled_method_load.method_id;
+	void * code_addr =  event->u.compiled_method_load.code_addr;
+	jint code_size =  event->u.compiled_method_load.code_size;
+
+	jvmpi->DisableGC();
+	 /* Get the class of the method */
+	jobjectID classID = jvmpi->GetMethodClass(method);
+	jvmpi->EnableGC();
+
+	pthread_mutex_lock(&class_map_mutex);
+	map<jobjectID, class_details>::iterator iter =
+		loaded_classes.find(classID);
+	if (iter == loaded_classes.end()) {
+		throw runtime_error("Error: Cannot find class for compiled"
+				    " method\n");
+	}
+
+	class_details cls_info = ((class_details)iter->second);
+	map<jmethodID, string>::iterator method_it =
+		cls_info.method_names.find(method);
+	if (method_it == cls_info.method_names.end()) {
+		throw runtime_error("Error: Cannot find method name for "
+				    "compiled method\n");
+	}
+	char const * method_name = ((string)method_it->second).c_str();
+	method_it = cls_info.method_signatures.find(method);
+	if (method_it == cls_info.method_signatures.end()) {
+		throw runtime_error("Error: Cannot find method signature "
+				    "for compiled method\n");
+	}
+	char const * method_signature = ((string)method_it->second).c_str();
+
+	string const class_signature = "L" + cls_info.name + ";";
+	pthread_mutex_unlock(&class_map_mutex);
+
+	if (debug) {
+		cerr << "load: class=" << class_signature << ", method ="
+		     << method_name << ", method signature = "
+		     << method_signature
+		     << ", addr=" << code_addr << ", size="
+		     << code_size << endl;
+	}
+
+	// produce a symbol name out of class name and method name
+	int cnt = strlen(method_name) + strlen(class_signature.c_str()) +
+		strlen(method_signature) + 2;
+	char buf[cnt];
+	strncpy(buf, class_signature.c_str(), cnt - 1);
+	strncat(buf, method_name, cnt - strlen(buf) - 1);
+	strncat(buf, method_signature, cnt - strlen(buf) - 1);
+	if (op_write_native_code(agent_hdl, buf, (uint64_t) code_addr,
+				 code_addr, code_size))
+		perror("Error: op_write_native_code()");
+}
+
+void compiled_method_unload(JVMPI_Event * event)
+{
+	void * code_addr =  event->u.compiled_method_load.code_addr;
+	if (debug) {
+		cerr << "unload: addr="
+			<< (unsigned long long) (uintptr_t) code_addr
+			<< endl;
+	}
+	if (op_unload_native_code(agent_hdl, (uint64_t)code_addr))
+		perror("Error: op_unload_native_code()");
+}
+
+void jvm_shutdown(JVMPI_Event * event)
+{
+	/* Checking event here is not really necessary; added only to silence
+	 * the 'unused parameter' compiler warning.
+	 */
+	if (event)
+		if (op_close_agent(agent_hdl))
+			perror("Error: op_close_agent()");
+}
+
+
+void jvm_notify_event(JVMPI_Event * event)
+{
+	switch (event->event_type) {
+	case JVMPI_EVENT_COMPILED_METHOD_LOAD:
+		compiled_method_load(event);
+		break;
+	case JVMPI_EVENT_COMPILED_METHOD_UNLOAD:
+		compiled_method_unload(event);
+		break;
+	case JVMPI_EVENT_JVM_SHUT_DOWN:
+		jvm_shutdown(event);
+		break;
+	case JVMPI_EVENT_CLASS_LOAD:
+		class_load(event);
+		break;
+	case JVMPI_EVENT_CLASS_UNLOAD:
+		class_unload(event);
+		break;
+	default:
+		break;
+	}
+}
+
+extern "C" {
+JNIEXPORT jint JNICALL JVM_OnLoad(JavaVM * jvm, char * options,
+                                  void * reserved)
+{
+	int err;
+
+	if (options && strstr(options, "version")) {
+		cerr << "jvmpi_oprofile: current libopagent version "
+				 << op_major_version() << "." << op_minor_version()
+				 << endl;
+		throw runtime_error("Exiting");
+	}
+
+	if (options && strstr(options, "debug=yes")) {
+		debug = true;
+		/* Add something braindead to silence the 'unused parameter'
+		 * compiler warning.
+		 */
+		if (reserved)
+			debug = true;
+	}
+
+	if (debug)
+		cerr << "jvmpi_oprofile: agent activated" << endl;
+
+	agent_hdl = op_open_agent();
+	if (!agent_hdl) {
+		perror("Error: op_open_agent()");
+		throw runtime_error("Exiting");
+	}
+
+	/* The union below is used to avoid the 'dereferencing type-punned
+	 * pointer will break strict-aliasing rules' compiler warning on the
+	 * GetEnv call.
+	 */
+	union {
+		JVMPI_Interface * jvmpi_ifc;
+		void * jvmpi_ifc_ptr;
+	} jvmpi_GetEnv_arg;
+	err = jvm->GetEnv(&jvmpi_GetEnv_arg.jvmpi_ifc_ptr, JVMPI_VERSION_1);
+	if (err < 0) {
+		cerr << "GetEnv failed with rc=" << err << endl;
+		throw runtime_error("Exiting");
+	}
+	jvmpi = jvmpi_GetEnv_arg.jvmpi_ifc;
+	jvmpi->EnableEvent(JVMPI_EVENT_COMPILED_METHOD_LOAD, NULL);
+	jvmpi->EnableEvent(JVMPI_EVENT_COMPILED_METHOD_UNLOAD, NULL);
+	jvmpi->EnableEvent(JVMPI_EVENT_JVM_SHUT_DOWN, NULL);
+	jvmpi->EnableEvent(JVMPI_EVENT_CLASS_LOAD, NULL);
+
+	jvmpi->NotifyEvent = jvm_notify_event;
+	return JNI_OK;
+}
+}
diff --git a/oprofile-0.9.7/agents/jvmti/Makefile.am b/oprofile-0.9.7/agents/jvmti/Makefile.am
new file mode 100644
index 0000000..a9a90a4
--- /dev/null
+++ b/oprofile-0.9.7/agents/jvmti/Makefile.am
@@ -0,0 +1,14 @@
+AM_CFLAGS = @OP_CFLAGS@
+
+pkglib_LTLIBRARIES = libjvmti_oprofile.la
+
+libjvmti_oprofile_la_CFLAGS = $(AM_CFLAGS) -fPIC
+
+libjvmti_oprofile_la_LIBADD = ../../libopagent/libopagent.la
+
+libjvmti_oprofile_la_SOURCES = libjvmti_oprofile.c
+
+AM_CPPFLAGS = \
+       -I ${top_srcdir}/libopagent \
+       -I @JAVA_HOMEDIR@/include \
+       -I @JAVA_HOMEDIR@/include/linux
diff --git a/oprofile-0.9.7/agents/jvmti/Makefile.in b/oprofile-0.9.7/agents/jvmti/Makefile.in
new file mode 100644
index 0000000..3fb25a0
--- /dev/null
+++ b/oprofile-0.9.7/agents/jvmti/Makefile.in
@@ -0,0 +1,592 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = agents/jvmti
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/binutils.m4 \
+	$(top_srcdir)/m4/builtinexpect.m4 \
+	$(top_srcdir)/m4/cellspubfdsupport.m4 \
+	$(top_srcdir)/m4/compileroption.m4 \
+	$(top_srcdir)/m4/configmodule.m4 \
+	$(top_srcdir)/m4/copyifchange.m4 $(top_srcdir)/m4/docbook.m4 \
+	$(top_srcdir)/m4/extradirs.m4 $(top_srcdir)/m4/findkernel.m4 \
+	$(top_srcdir)/m4/kerneloption.m4 \
+	$(top_srcdir)/m4/kernelversion.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/mallocattribute.m4 \
+	$(top_srcdir)/m4/poptconst.m4 \
+	$(top_srcdir)/m4/precompiledheader.m4 $(top_srcdir)/m4/qt.m4 \
+	$(top_srcdir)/m4/resultyn.m4 $(top_srcdir)/m4/sstream.m4 \
+	$(top_srcdir)/m4/typedef.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+libjvmti_oprofile_la_DEPENDENCIES = ../../libopagent/libopagent.la
+am_libjvmti_oprofile_la_OBJECTS =  \
+	libjvmti_oprofile_la-libjvmti_oprofile.lo
+libjvmti_oprofile_la_OBJECTS = $(am_libjvmti_oprofile_la_OBJECTS)
+libjvmti_oprofile_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libjvmti_oprofile_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libjvmti_oprofile_la_SOURCES)
+DIST_SOURCES = $(libjvmti_oprofile_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_LIBS = @BFD_LIBS@
+CAT_ENTRY_END = @CAT_ENTRY_END@
+CAT_ENTRY_START = @CAT_ENTRY_START@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOCBOOK_ROOT = @DOCBOOK_ROOT@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTRA_CFLAGS_MODULE = @EXTRA_CFLAGS_MODULE@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVA_HOMEDIR = @JAVA_HOMEDIR@
+KINC = @KINC@
+KSRC = @KSRC@
+KVERS = @KVERS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBERTY_LIBS = @LIBERTY_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MODINSTALLDIR = @MODINSTALLDIR@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPROFILE_DIR = @OPROFILE_DIR@
+OPROFILE_MODULE_ARCH = @OPROFILE_MODULE_ARCH@
+OP_CFLAGS = @OP_CFLAGS@
+OP_CXXFLAGS = @OP_CXXFLAGS@
+OP_DOCDIR = @OP_DOCDIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POPT_LIBS = @POPT_LIBS@
+PTRDIFF_T_TYPE = @PTRDIFF_T_TYPE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_INCLUDES = @QT_INCLUDES@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LIB = @QT_LIB@
+QT_LIBS = @QT_LIBS@
+QT_VERSION = @QT_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T_TYPE = @SIZE_T_TYPE@
+STRIP = @STRIP@
+UIC = @UIC@
+UIChelp = @UIChelp@
+VERSION = @VERSION@
+XMKMF = @XMKMF@
+XML_CATALOG = @XML_CATALOG@
+XSLTPROC = @XSLTPROC@
+XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+topdir = @topdir@
+AM_CFLAGS = @OP_CFLAGS@
+pkglib_LTLIBRARIES = libjvmti_oprofile.la
+libjvmti_oprofile_la_CFLAGS = $(AM_CFLAGS) -fPIC
+libjvmti_oprofile_la_LIBADD = ../../libopagent/libopagent.la
+libjvmti_oprofile_la_SOURCES = libjvmti_oprofile.c
+AM_CPPFLAGS = \
+       -I ${top_srcdir}/libopagent \
+       -I @JAVA_HOMEDIR@/include \
+       -I @JAVA_HOMEDIR@/include/linux
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign agents/jvmti/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign agents/jvmti/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+	}
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libjvmti_oprofile.la: $(libjvmti_oprofile_la_OBJECTS) $(libjvmti_oprofile_la_DEPENDENCIES) 
+	$(libjvmti_oprofile_la_LINK) -rpath $(pkglibdir) $(libjvmti_oprofile_la_OBJECTS) $(libjvmti_oprofile_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjvmti_oprofile_la-libjvmti_oprofile.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libjvmti_oprofile_la-libjvmti_oprofile.lo: libjvmti_oprofile.c
+@am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjvmti_oprofile_la_CFLAGS) $(CFLAGS) -MT libjvmti_oprofile_la-libjvmti_oprofile.lo -MD -MP -MF $(DEPDIR)/libjvmti_oprofile_la-libjvmti_oprofile.Tpo -c -o libjvmti_oprofile_la-libjvmti_oprofile.lo `test -f 'libjvmti_oprofile.c' || echo '$(srcdir)/'`libjvmti_oprofile.c
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libjvmti_oprofile_la-libjvmti_oprofile.Tpo $(DEPDIR)/libjvmti_oprofile_la-libjvmti_oprofile.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libjvmti_oprofile.c' object='libjvmti_oprofile_la-libjvmti_oprofile.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjvmti_oprofile_la_CFLAGS) $(CFLAGS) -c -o libjvmti_oprofile_la-libjvmti_oprofile.lo `test -f 'libjvmti_oprofile.c' || echo '$(srcdir)/'`libjvmti_oprofile.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/oprofile-0.9.7/agents/jvmti/libjvmti_oprofile.c b/oprofile-0.9.7/agents/jvmti/libjvmti_oprofile.c
new file mode 100644
index 0000000..7157d44
--- /dev/null
+++ b/oprofile-0.9.7/agents/jvmti/libjvmti_oprofile.c
@@ -0,0 +1,326 @@
+/**
+ * @file jvmti_oprofile.c
+ * JVMTI agent implementation to report jitted JVM code to Oprofile
+ *
+ * @remark Copyright 2007 OProfile authors
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @author Jens Wilke
+ * @Modifications Daniel Hansel
+ *
+ * Copyright IBM Corporation 2007
+ *
+ */
+
+#include <stdio.h>
+#include <jvmti.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include "opagent.h"
+
+static int debug = 0;
+static int can_get_line_numbers = 0;
+static op_agent_t agent_hdl;
+
+/**
+ * Handle an error or a warning, return 0 if the checked error is 
+ * JVMTI_ERROR_NONE, i.e. success
+ */
+static int handle_error(jvmtiError err, char const * msg, int severe)
+{
+	if (err != JVMTI_ERROR_NONE) {
+		fprintf(stderr, "%s: %s, err code %i\n",
+			severe ? "Error" : "Warning", msg, err);
+	}
+	return err != JVMTI_ERROR_NONE;
+}
+
+
+/**
+ * returned array is map_length length, params map and map_length != 0
+ * format of lineno information is JVMTI_JLOCATION_JVMBCI, map is an array
+ * of { address, code byte index }, table_ptr an array of { byte code index,
+ * lineno }
+ */
+static struct debug_line_info * 
+create_debug_line_info(jint map_length, jvmtiAddrLocationMap const * map,
+		       jint entry_count, jvmtiLineNumberEntry* table_ptr,
+		       char const * source_filename)
+{
+	struct debug_line_info * debug_line;
+	int i, j;
+	if (debug) {
+		fprintf(stderr, "Source %s\n", source_filename);
+		for (i = 0; i < map_length; ++i) {
+			fprintf(stderr, "%p %lld\t",
+			        map[i].start_address,
+			        (long long)map[i].location);
+		}
+		fprintf(stderr, "\n");
+		for (i = 0; i < entry_count; ++i) {
+			fprintf(stderr, "%lld %d\t",
+				(long long)table_ptr[i].start_location,
+				table_ptr[i].line_number);
+		}
+		fprintf(stderr, "\n");
+	}
+
+	debug_line = calloc(map_length, sizeof(struct debug_line_info));
+	if (!debug_line)
+		return 0;
+
+	for (i = 0; i < map_length; ++i) {
+		/* FIXME: likely to need a lower_bound on the array, but
+		 * documentation is a bit obscure about the contents of these
+		 * arrray
+		 **/
+		for (j = 0; j < entry_count - 1; ++j) {
+			if (table_ptr[j].start_location > map[i].location)
+				break;
+		}
+		debug_line[i].vma = (unsigned long)map[i].start_address;
+		debug_line[i].lineno = table_ptr[j].line_number;
+		debug_line[i].filename = source_filename;
+	}
+
+	if (debug) {
+		for (i = 0; i < map_length; ++i) {
+			fprintf(stderr, "%lx %d\t", debug_line[i].vma,
+				debug_line[i].lineno);
+		}
+		fprintf(stderr, "\n");
+	}
+	
+	return debug_line;
+}
+
+
+static void JNICALL cb_compiled_method_load(jvmtiEnv * jvmti,
+	jmethodID method, jint code_size, void const * code_addr,
+	jint map_length, jvmtiAddrLocationMap const * map,
+	void const * compile_info)
+{
+	jclass declaring_class;
+	char * class_signature = NULL;
+ 	char * method_name = NULL;
+ 	char * method_signature = NULL;
+	jvmtiLineNumberEntry* table_ptr = NULL;
+	char * source_filename = NULL;
+	struct debug_line_info * debug_line = NULL;
+ 	jvmtiError err;
+
+	/* shut up compiler warning */
+	compile_info = compile_info;
+
+	err = (*jvmti)->GetMethodDeclaringClass(jvmti, method,
+						&declaring_class);
+	if (handle_error(err, "GetMethodDeclaringClass()", 1))
+		goto cleanup2;
+
+	if (can_get_line_numbers && map_length && map) {
+		jint entry_count;
+
+		err = (*jvmti)->GetLineNumberTable(jvmti, method,
+						   &entry_count, &table_ptr);
+		if (err == JVMTI_ERROR_NONE) {
+			err = (*jvmti)->GetSourceFileName(jvmti,
+				declaring_class, &source_filename);
+			if (err ==  JVMTI_ERROR_NONE) {
+				debug_line =
+					create_debug_line_info(map_length, map,
+						entry_count, table_ptr,
+						source_filename);
+			} else if (err != JVMTI_ERROR_ABSENT_INFORMATION) {
+				handle_error(err, "GetSourceFileName()", 1);
+			}
+		} else if (err != JVMTI_ERROR_NATIVE_METHOD &&
+			   err != JVMTI_ERROR_ABSENT_INFORMATION) {
+			handle_error(err, "GetLineNumberTable()", 1);
+		}
+	}
+
+	err = (*jvmti)->GetClassSignature(jvmti, declaring_class,
+					  &class_signature, NULL);
+	if (handle_error(err, "GetClassSignature()", 1))
+		goto cleanup1;
+
+	err = (*jvmti)->GetMethodName(jvmti, method, &method_name,
+				      &method_signature, NULL);
+	if (handle_error(err, "GetMethodName()", 1))
+		goto cleanup;
+
+	if (debug) {
+		fprintf(stderr, "load: declaring_class=%p, class=%s, "
+			"method=%s, signature=%s, addr=%p, size=%i \n",
+			declaring_class, class_signature, method_name,
+			method_signature, code_addr, code_size);
+	}
+
+	{
+	int cnt = strlen(method_name) + strlen(class_signature) +
+		strlen(method_signature) + 2;
+	char buf[cnt];
+	strncpy(buf, class_signature, cnt - 1);
+	strncat(buf, method_name, cnt - strlen(buf) - 1);
+	strncat(buf, method_signature, cnt - strlen(buf) - 1);
+	if (op_write_native_code(agent_hdl, buf,
+				 (uint64_t)(uintptr_t) code_addr,
+				 code_addr, code_size)) {
+		perror("Error: op_write_native_code()");
+		goto cleanup;
+	}
+	}
+
+	if (debug_line)
+		if (op_write_debug_line_info(agent_hdl, code_addr, map_length,
+					     debug_line))
+			perror("Error: op_write_debug_line_info()");
+
+cleanup:
+	(*jvmti)->Deallocate(jvmti, (unsigned char *)method_name);
+	(*jvmti)->Deallocate(jvmti, (unsigned char *)method_signature);
+cleanup1:
+	(*jvmti)->Deallocate(jvmti, (unsigned char *)class_signature);
+	(*jvmti)->Deallocate(jvmti, (unsigned char *)table_ptr);
+	(*jvmti)->Deallocate(jvmti, (unsigned char *)source_filename);
+cleanup2:
+	free(debug_line);
+}
+
+
+static void JNICALL cb_compiled_method_unload(jvmtiEnv * jvmti_env,
+	jmethodID method, void const * code_addr)
+{
+	/* shut up compiler warning */
+	jvmti_env = jvmti_env;
+	method = method;
+
+	if (debug)
+		fprintf(stderr, "unload: addr=%p\n", code_addr);
+	if (op_unload_native_code(agent_hdl, (uint64_t)(uintptr_t) code_addr))
+		perror("Error: op_unload_native_code()");
+}
+
+
+static void JNICALL cb_dynamic_code_generated(jvmtiEnv * jvmti_env,
+	char const * name, void const * code_addr, jint code_size)
+{
+	/* shut up compiler warning */
+	jvmti_env = jvmti_env;
+	if (debug) {
+		fprintf(stderr, "dyncode: name=%s, addr=%p, size=%i \n",
+			name, code_addr, code_size);
+	}
+	if (op_write_native_code(agent_hdl, name,
+				 (uint64_t)(uintptr_t) code_addr,
+				 code_addr, code_size))
+		perror("Error: op_write_native_code()");
+}
+
+
+JNIEXPORT jint JNICALL
+Agent_OnLoad(JavaVM * jvm, char * options, void * reserved)
+{
+	jint rc;
+	jvmtiEnv * jvmti = NULL;
+	jvmtiEventCallbacks callbacks;
+	jvmtiCapabilities caps;
+	jvmtiJlocationFormat format;
+	jvmtiError error;
+
+	/* shut up compiler warning */
+	reserved = reserved;
+
+	if (options && !strcmp("version", options)) {
+		fprintf(stderr, "jvmti_oprofile: current libopagent version %i.%i.\n",
+		        op_major_version(), op_minor_version());
+		return -1;
+	}
+
+	if (options && !strcmp("debug", options))
+		debug = 1;
+
+	if (debug)
+		fprintf(stderr, "jvmti_oprofile: agent activated\n");
+
+	agent_hdl = op_open_agent();
+	if (!agent_hdl) {
+		perror("Error: op_open_agent()");
+		return -1;
+	}
+
+	rc = (*jvm)->GetEnv(jvm, (void *)&jvmti, JVMTI_VERSION_1);
+	if (rc != JNI_OK) {
+		fprintf(stderr, "Error: GetEnv(), rc=%i\n", rc);
+		return -1;
+	}
+
+	memset(&caps, '\0', sizeof(caps));
+	caps.can_generate_compiled_method_load_events = 1;
+	error = (*jvmti)->AddCapabilities(jvmti, &caps);
+	if (handle_error(error, "AddCapabilities()", 1))
+		return -1;
+
+	/* FIXME: settable through command line, default on/off? */
+	error = (*jvmti)->GetJLocationFormat(jvmti, &format);
+	if (!handle_error(error, "GetJLocationFormat", 1) &&
+	    format == JVMTI_JLOCATION_JVMBCI) {
+		memset(&caps, '\0', sizeof(caps));
+		caps.can_get_line_numbers = 1;
+		caps.can_get_source_file_name = 1;
+		error = (*jvmti)->AddCapabilities(jvmti, &caps);
+		if (!handle_error(error, "AddCapabilities()", 1))
+			can_get_line_numbers = 1;
+	}
+
+	memset(&callbacks, 0, sizeof(callbacks));
+	callbacks.CompiledMethodLoad = cb_compiled_method_load;
+	callbacks.CompiledMethodUnload = cb_compiled_method_unload;
+	callbacks.DynamicCodeGenerated = cb_dynamic_code_generated;
+	error = (*jvmti)->SetEventCallbacks(jvmti, &callbacks,
+					    sizeof(callbacks));
+	if (handle_error(error, "SetEventCallbacks()", 1))
+		return -1;
+
+	error = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE,
+			JVMTI_EVENT_COMPILED_METHOD_LOAD, NULL);
+	if (handle_error(error, "SetEventNotificationMode() "
+			 "JVMTI_EVENT_COMPILED_METHOD_LOAD", 1))
+		return -1;
+	error = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE,
+			JVMTI_EVENT_COMPILED_METHOD_UNLOAD, NULL);
+	if (handle_error(error, "SetEventNotificationMode() "
+			 "JVMTI_EVENT_COMPILED_METHOD_UNLOAD", 1))
+		return -1;
+	error = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE,
+			JVMTI_EVENT_DYNAMIC_CODE_GENERATED, NULL);
+	if (handle_error(error, "SetEventNotificationMode() "
+			 "JVMTI_EVENT_DYNAMIC_CODE_GENERATED", 1))
+		return -1;
+	return 0;
+}
+
+
+JNIEXPORT void JNICALL Agent_OnUnload(JavaVM * jvm)
+{
+	/* shut up compiler warning */
+	jvm = jvm;
+	if (op_close_agent(agent_hdl))
+		perror("Error: op_close_agent()");
+}
diff --git a/oprofile-0.9.7/autogen.sh b/oprofile-0.9.7/autogen.sh
new file mode 100755
index 0000000..5148e80
--- /dev/null
+++ b/oprofile-0.9.7/autogen.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# run to generate needed files not in Git repository
+
+# NB: if you run this file with AUTOMAKE, AUTOCONF, etc. environment
+# variables set, you *must* run "configure" with the same variables
+# set. this is because "configure" will embed the values of these variables
+# into the generated Makefiles, as @AUTOMAKE@, @AUTOCONF@ etc. and it will
+# trigger regeneration of configuration state using those programs when any
+# of Makefile.am etc. change.
+
+run() {
+	echo "Running $1 ..."
+	$1
+}
+
+set -e
+
+ACLOCAL=${ACLOCAL:-aclocal}
+AUTOHEADER=${AUTOHEADER:-autoheader}
+AUTOMAKE=${AUTOMAKE:-automake}
+AUTOCONF=${AUTOCONF:-autoconf}
+
+if $AUTOMAKE --version | grep -q 1.4
+	then
+	echo ""
+	echo "Automake 1.4 not supported. please set \$AUTOMAKE"
+	echo "to point to a newer automake, or upgrade."
+	echo ""
+	exit 1
+fi
+
+if test -n "$1"; then
+	echo "autogen.sh doesn't take any options" >&2
+	exit 1
+fi
+
+libtoolize --automake -c
+run "$ACLOCAL -I m4"
+run $AUTOHEADER
+run "$AUTOMAKE --foreign --add-missing --copy"
+run $AUTOCONF
diff --git a/oprofile-0.9.7/config.guess b/oprofile-0.9.7/config.guess
new file mode 100755
index 0000000..c2246a4
--- /dev/null
+++ b/oprofile-0.9.7/config.guess
@@ -0,0 +1,1502 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   Free Software Foundation, Inc.
+
+timestamp='2009-12-30'
+
+# This file 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., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    sh5el) machine=sh5le-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep -q __ELF__
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit ;;
+    *:OpenBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+	exit ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	exit ;;
+    macppc:MirBSD:*:*)
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+	echo arm-unknown-riscos
+	exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7; exit ;;
+	esac ;;
+    s390x:SunOS:*:*)
+	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+	echo i386-pc-auroraux${UNAME_RELEASE}
+	exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+	eval $set_cc_for_build
+	SUN_ARCH="i386"
+	# If there is a compiler, see if it is configured for 64-bit objects.
+	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+	# This test works for both compilers.
+	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		grep IS_64BIT_ARCH >/dev/null
+	    then
+		SUN_ARCH="x86_64"
+	    fi
+	fi
+	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	    { echo "$SYSTEM_NAME"; exit; }
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit ;;
+    *:AIX:*:[456])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    eval $set_cc_for_build
+
+	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.23
+	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+	    # => hppa64-hp-hpux11.23
+
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep -q __LP64__
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+		{ echo "$SYSTEM_NAME"; exit; }
+	echo unknown-hitachi-hiuxwe2
+	exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    *:UNICOS/mp:*:*)
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:FreeBSD:*:*)
+	case ${UNAME_MACHINE} in
+	    pc98)
+		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
+	exit ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit ;;
+    *:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit ;;
+    i*:windows32*:*)
+    	# uname -m includes "-pc" on this system.
+    	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit ;;
+    *:Interix*:*)
+    	case ${UNAME_MACHINE} in
+	    x86)
+		echo i586-pc-interix${UNAME_RELEASE}
+		exit ;;
+	    authenticamd | genuineintel | EM64T)
+		echo x86_64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	    IA64)
+		echo ia64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit ;;
+    8664:Windows_NT:*)
+	echo x86_64-pc-mks
+	exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+	echo x86_64-unknown-cygwin
+	exit ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep -q ld.so.1
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit ;;
+    arm*:Linux:*:*)
+	eval $set_cc_for_build
+	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+	    | grep -q __ARM_EABI__
+	then
+	    echo ${UNAME_MACHINE}-unknown-linux-gnu
+	else
+	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	fi
+	exit ;;
+    avr32*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit ;;
+    crisv32:Linux:*:*)
+	echo crisv32-axis-linux-gnu
+	exit ;;
+    frv:Linux:*:*)
+    	echo frv-unknown-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	LIBC=gnu
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+	exit ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef ${UNAME_MACHINE}
+	#undef ${UNAME_MACHINE}el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=${UNAME_MACHINE}el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=${UNAME_MACHINE}
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    or32:Linux:*:*)
+	echo or32-unknown-linux-gnu
+	exit ;;
+    padre:Linux:*:*)
+	echo sparc-unknown-linux-gnu
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-gnu
+	exit ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit ;;
+    xtensa*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit ;;
+    i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit ;;
+    i*86:*:5:[678]*)
+    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i586.
+	# Note: whatever this is, it MUST be the same as what config.sub
+	# prints for the "djgpp" host, or else GDB configury will decide that
+	# this is a cross-build.
+	echo i586-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+	OS_REL='.3'
+	test -r /etc/.relid \
+	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes@openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit ;;
+    *:*:*:FTX*)
+	# From seanf@swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
+    *:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo hppa1.1-stratus-vos
+	exit ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit ;;
+    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
+	echo i586-pc-haiku
+	exit ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-7:SUPER-UX:*:*)
+	echo sx7-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8:SUPER-UX:*:*)
+	echo sx8-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8R:SUPER-UX:*:*)
+	echo sx8r-nec-superux${UNAME_RELEASE}
+	exit ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Darwin:*:*)
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	case $UNAME_PROCESSOR in
+	    i386)
+		eval $set_cc_for_build
+		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		      grep IS_64BIT_ARCH >/dev/null
+		  then
+		      UNAME_PROCESSOR="x86_64"
+		  fi
+		fi ;;
+	    unknown) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit ;;
+    *:*VMS:*:*)
+    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
+	    A*) echo alpha-dec-vms ; exit ;;
+	    I*) echo ia64-dec-vms ; exit ;;
+	    V*) echo vax-dec-vms ; exit ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	exit ;;
+    i*86:rdos:*:*)
+	echo ${UNAME_MACHINE}-pc-rdos
+	exit ;;
+    i*86:AROS:*:*)
+	echo ${UNAME_MACHINE}-pc-aros
+	exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+	{ echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit ;;
+    c34*)
+	echo c34-convex-bsd
+	exit ;;
+    c38*)
+	echo c38-convex-bsd
+	exit ;;
+    c4*)
+	echo c4-convex-bsd
+	exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/oprofile-0.9.7/config.h.in b/oprofile-0.9.7/config.h.in
new file mode 100644
index 0000000..5c8891b
--- /dev/null
+++ b/oprofile-0.9.7/config.h.in
@@ -0,0 +1,111 @@
+/* config.h.in.  Generated from configure.in by autoheader.  */
+
+/* whether popt prototype takes a const char ** */
+#undef CONST_POPT
+
+/* Defined if you have the version of bfd_openr_iovec with 7 parameters */
+#undef HAVE_BFD_OPENR_IOVEC_WITH_7PARMS
+
+/* Define to 1 if you have the declaration of `basename', and to 0 if you
+   don't. */
+#undef HAVE_DECL_BASENAME
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `iberty' library (-liberty). */
+#undef HAVE_LIBIBERTY
+
+/* 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). */
+#undef HAVE_LIBPOPT
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* 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. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* 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 <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 <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `xcalloc' function. */
+#undef HAVE_XCALLOC
+
+/* Define to 1 if you have the `xmemdup' function. */
+#undef HAVE_XMEMDUP
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
+/* whether malloc attribute is understood */
+#undef MALLOC_ATTRIBUTE_OK
+
+/* package binary directory */
+#undef OP_BINDIR
+
+/* package data directory */
+#undef OP_DATADIR
+
+/* Name of package */
+#undef PACKAGE
+
+/* 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 home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Synthesize special symbols when needed */
+#undef SYNTHESIZE_SYMBOLS
+
+/* whether bfd.h defines bool values */
+#undef TRUE_FALSE_ALREADY_DEFINED
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
diff --git a/oprofile-0.9.7/config.sub b/oprofile-0.9.7/config.sub
new file mode 100755
index 0000000..c2d1257
--- /dev/null
+++ b/oprofile-0.9.7/config.sub
@@ -0,0 +1,1714 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   Free Software Foundation, Inc.
+
+timestamp='2010-01-22'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file 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., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis | -knuth | -cray | -microblaze)
+		os=
+		basic_machine=$1
+		;;
+        -bluegene*)
+	        os=-cnk
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco6)
+		os=-sco5v6
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+	| bfin \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fido | fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| lm32 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | mcore | mep | metag \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64octeon | mips64octeonel \
+	| mips64orion | mips64orionel \
+	| mips64r5900 | mips64r5900el \
+	| mips64vr | mips64vrel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mips64vr5900 | mips64vr5900el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| moxie \
+	| mt \
+	| msp430 \
+	| nios | nios2 \
+	| ns16k | ns32k \
+	| or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| rx \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu | strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| ubicom32 \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| z8k | z80)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+	ms1)
+		basic_machine=mt-unknown
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* | avr32-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | craynv-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| lm32-* \
+	| m32c-* | m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64octeon-* | mips64octeonel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64r5900-* | mips64r5900el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mips64vr5900-* | mips64vr5900el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| mt-* \
+	| msp430-* \
+	| nios-* | nios2-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* | rx-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile-* | tilegx-* \
+	| tron-* \
+	| ubicom32-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| xstormy16-* | xtensa*-* \
+	| ymp-* \
+	| z8k-* | z80-*)
+		;;
+	# Recognize the basic CPU types without company name, with glob match.
+	xtensa*)
+		basic_machine=$basic_machine-unknown
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aros)
+		basic_machine=i386-pc
+		os=-aros
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	blackfin)
+		basic_machine=bfin-unknown
+		os=-linux
+		;;
+	blackfin-*)
+		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	bluegene*)
+		basic_machine=powerpc-ibm
+		os=-cnk
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+        cegcc)
+		basic_machine=arm-unknown
+		os=-cegcc
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16)
+		basic_machine=cr16-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	dicos)
+		basic_machine=i686-pc
+		os=-dicos
+		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m68knommu)
+		basic_machine=m68k-unknown
+		os=-linux
+		;;
+	m68knommu-*)
+		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+        microblaze)
+		basic_machine=microblaze-xilinx
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	mingw32ce)
+		basic_machine=arm-unknown
+		os=-mingw32ce
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	ms1-*)
+		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	openrisc | openrisc-*)
+		basic_machine=or32-unknown
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	parisc)
+		basic_machine=hppa-unknown
+		os=-linux
+		;;
+	parisc-*)
+		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pc98)
+		basic_machine=i386-pc
+		;;
+	pc98-*)
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rdos)
+		basic_machine=i386-pc
+		os=-rdos
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sde)
+		basic_machine=mipsisa32-sde
+		os=-elf
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh5el)
+		basic_machine=sh5le-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+        # This must be matched before tile*.
+        tilegx*)
+		basic_machine=tilegx-unknown
+		os=-linux-gnu
+		;;
+	tile*)
+		basic_machine=tile-unknown
+		os=-linux-gnu
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	z80-*-coff)
+		basic_machine=z80-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+        -auroraux)
+	        os=-auroraux
+		;;
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+	      | -sym* | -kopensolaris* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* | -aros* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -openbsd* | -solidbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* | -cegcc* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-zvmoe)
+		os=-zvmoe
+		;;
+	-dicos*)
+		os=-dicos
+		;;
+        -nacl*)
+	        ;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        score-*)
+		os=-elf
+		;;
+        spu-*)
+		os=-elf
+		;;
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+        c4x-* | tic4x-*)
+        	os=-coff
+		;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+        mep-*)
+		os=-elf
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-haiku)
+		os=-haiku
+		;;
+	*-ibm)
+		os=-aix
+		;;
+    	*-knuth)
+		os=-mmixware
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-cnk*|-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/oprofile-0.9.7/configure b/oprofile-0.9.7/configure
new file mode 100755
index 0000000..ad5c164
--- /dev/null
+++ b/oprofile-0.9.7/configure
@@ -0,0 +1,21750 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.67.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+	# neutralization value for shells without unset; and this also
+	# works around shells that cannot unset nonexistent variables.
+	BASH_ENV=/dev/null
+	ENV=/dev/null
+	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+	export CONFIG_SHELL
+	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+$*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+	   test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	  # Cool, printf works
+	  :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	     test "X$echo_testing_string" = 'X\t' &&
+	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	     test "X$echo_testing_string" = "X$echo_test_string"; then
+	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	  export CONFIG_SHELL
+	  SHELL="$CONFIG_SHELL"
+	  export SHELL
+	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	     test "X$echo_testing_string" = 'X\t' &&
+	     echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	     test "X$echo_testing_string" = "X$echo_test_string"; then
+	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        else
+	  # maybe with a smaller string...
+	  prev=:
+
+	  for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+	    then
+	      break
+	    fi
+	    prev="$cmd"
+	  done
+
+	  if test "$prev" != 'sed 50q "$0"'; then
+	    echo_test_string=`eval $prev`
+	    export echo_test_string
+	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+	  else
+	    # Oops.  We lost completely, so just stick with echo.
+	    ECHO=echo
+	  fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+PACKAGE_URL=
+
+ac_unique_file="libop/op_config.h"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+OP_DOCDIR
+OP_CXXFLAGS
+OP_CFLAGS
+CHECK_ACCOUNT_FALSE
+CHECK_ACCOUNT_TRUE
+POPT_LIBS
+BFD_LIBS
+LIBERTY_LIBS
+CAT_ENTRY_END
+CAT_ENTRY_START
+DOCBOOK_ROOT
+XSLTPROC_FLAGS
+XML_CATALOG
+have_xsltproc_FALSE
+have_xsltproc_TRUE
+XSLTPROC
+have_qt_FALSE
+have_qt_TRUE
+UIChelp
+QT_LIBS
+QT_CFLAGS
+QT_VERSION
+QT_LIB
+UIC
+MOC
+QT_LDFLAGS
+QT_INCLUDES
+X_EXTRA_LIBS
+X_LIBS
+X_PRE_LIBS
+X_CFLAGS
+XMKMF
+PTRDIFF_T_TYPE
+SIZE_T_TYPE
+topdir
+EXTRA_CFLAGS_MODULE
+BUILD_JVMPI_AGENT_FALSE
+BUILD_JVMPI_AGENT_TRUE
+BUILD_JVMTI_AGENT_FALSE
+BUILD_JVMTI_AGENT_TRUE
+JAVA_HOMEDIR
+MODINSTALLDIR
+OPROFILE_MODULE_ARCH
+KVERS
+kernel_support_FALSE
+kernel_support_TRUE
+KINC
+KSRC
+CXXCPP
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+ac_ct_CXX
+CXXFLAGS
+CXX
+OPROFILE_DIR
+DATE
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
+CPP
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+lt_ECHO
+AR
+OBJDUMP
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LIBTOOL
+RANLIB
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_dependency_tracking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+enable_libtool_lock
+with_binutils
+with_binutils_libname
+with_gcc
+with_kernel_support
+with_linux
+with_module_dir
+with_java
+with_extra_includes
+with_extra_libs
+with_target
+with_x
+enable_gui
+with_qt_dir
+with_qt_includes
+with_qt_libraries
+enable_pch
+enable_gcov
+enable_werror
+enable_optimization
+enable_account_check
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+CXX
+CXXFLAGS
+CCC
+CXXCPP
+XMKMF
+QT_CFLAGS
+QT_LIBS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking ...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+X features:
+  --x-includes=DIR    X include files are in DIR
+  --x-libraries=DIR   X library files are in DIR
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-gui  compile with gui component (qt3|qt4|yes|no),
+		     if not given or set to yes, gui defaults to qt3
+  --enable-pch                 enable precompiled header (default is disabled)
+  --enable-gcov                enable option for gcov coverage testing (default is disabled)
+  --disable-werror            disable -Werror flag (default is enabled for non-release)
+  --disable-optimization      disable optimization flags (default is enabled)
+  --disable-account-check     disable account check (default is enabled)
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-binutils=dir		Path to binutils installation to use
+  --with-binutils-libname       Lib dir name under binutils installation; [lib]]
+  --with-gcc=dir		Path to GCC installation to use
+  --with-kernel-support        Use 2.6 kernel (no kernel source tree required)
+  --with-linux=dir             Path to Linux source tree
+  --with-module-dir=dir        Path to module installation directory
+  --with-java=java-home        Path to Java home directory (default is "no"; "yes" will use /usr as Java home)
+  --with-extra-includes=DIR    add extra include paths
+  --with-extra-libs=DIR        add extra library paths
+  --with-target=cell-be   Check BFD support for Cell Broadband Engine SPU profiling
+  --with-x                use the X Window System
+  --with-qt-dir           where the root of Qt is installed
+  --with-qt-includes      where the Qt includes are.
+  --with-qt-libraries     where the Qt library is installed.
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  PKG_CONFIG  path to pkg-config utility
+  PKG_CONFIG_PATH
+              directories to add to pkg-config's search path
+  PKG_CONFIG_LIBDIR
+              path overriding pkg-config's built-in search path
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  CXXCPP      C++ preprocessor
+  XMKMF       Path to xmkmf, Makefile generator for X Window System
+  QT_CFLAGS   C compiler flags for QT, overriding pkg-config
+  QT_LIBS     linker flags for QT, overriding pkg-config
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+configure
+generated by GNU Autoconf 2.67
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_decl
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_func
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_cxx_try_cpp LINENO
+# ------------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_cpp
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval "test \"\${$3+set}\"" = set; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_cxx_check_func LINENO FUNC VAR
+# ------------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_cxx_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_cxx_check_func
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.67.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5 ; }
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+am__api_version='1.11'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE=oprofile
+ VERSION=0.9.7
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5 ; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+ac_fn_c_check_decl "$LINENO" "basename" "ac_cv_have_decl_basename" "#include <libgen.h>
+"
+if test "x$ac_cv_have_decl_basename" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BASENAME $ac_have_decl
+_ACEOF
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+case `pwd` in
+  *\ * | *\	*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.6b'
+macro_revision='1.3017'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if test "${ac_cv_path_FGREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test "${lt_cv_path_NM+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if test "${lt_cv_nm_interface+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:4928: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:4931: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:4934: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[	 ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if test "${lt_cv_ld_reload_flag+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if test "${lt_cv_deplibs_check_method+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 6139 "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  ppc64-*linux*|powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  ppc*-*linux*|powerpc*-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if test "${lt_cv_cc_needs_belf+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_NMEDIT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LIPO+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_LIPO="lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL64+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&5
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+	LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[012]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# Set options
+
+
+
+        enable_dlopen=no
+
+
+  enable_win32_dll=no
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; pic_mode="$withval"
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if test "${lt_cv_objdir+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:7668: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:7672: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='--shared'
+	lt_prog_compiler_static='--static'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fpic'
+	lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl*)
+	# IBM XL C 8.0/Fortran 10.1 on PPC
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-qpic'
+	lt_prog_compiler_static='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)
+	  # Sun C 5.9
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Wl,'
+	  ;;
+	*Sun\ F*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl=''
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+	lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8007: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:8011: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8112: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:8116: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8167: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:8171: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu)
+    link_all_deplibs=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  whole_archive_flag_spec=
+	  tmp_sharedflag='--shared' ;;
+	xl[cC]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+	  hardcode_libdir_flag_spec=
+	  hardcode_libdir_flag_spec_ld='-rpath $libdir'
+	  archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    ld_shlibs=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+	link_all_deplibs=no
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      export_dynamic_flag_spec='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' ${wl}-bernotok'
+	  allow_undefined_flag=' ${wl}-berok'
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec='$convenience'
+	  archive_cmds_need_lc=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_from_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  whole_archive_flag_spec=''
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_flag_spec_ld='+b $libdir'
+	hardcode_libdir_separator=:
+	hardcode_direct=yes
+	hardcode_direct_absolute=yes
+	export_dynamic_flag_spec='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	*)
+	  hardcode_direct=yes
+	  hardcode_direct_absolute=yes
+	  export_dynamic_flag_spec='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo(void) {}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        LDFLAGS="$save_LDFLAGS"
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	hardcode_direct=yes
+	hardcode_shlibpath_var=no
+	hardcode_direct_absolute=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	  export_dynamic_flag_spec='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     hardcode_libdir_flag_spec='-R$libdir'
+	     ;;
+	   *)
+	     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	export_dynamic_flag_spec='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+	pic_flag=$lt_prog_compiler_pic
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+        then
+	  archive_cmds_need_lc=no
+        else
+	  archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
+$as_echo "$archive_cmds_need_lc" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = x""yes; then :
+  lt_cv_dlopen="shl_load"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 10551 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self_static+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 10647 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=0.9.0
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+		PKG_CONFIG=""
+	fi
+fi
+
+DATE="`date '+%a %d %B %Y'`"
+
+
+OPROFILE_DIR=`pwd`
+
+
+# this needs to come before --with-gcc so we link with binutil's version
+# of libiberty ... sigh
+
+# Check whether --with-binutils was given.
+if test "${with_binutils+set}" = set; then :
+  withval=$with_binutils; BINUTILSDIR=$withval
+fi
+
+
+if test "$BINUTILSDIR" != ""; then
+	LD="$BINUTILSDIR/ld"
+	if test "$CFLAGS" = ""; then
+		CFLAGS="-g -O2"
+	fi
+	if test "$CXXFLAGS" = ""; then
+		CXXFLAGS="-g -O2"
+	fi
+	CFLAGS="$CFLAGS -I$BINUTILSDIR/include"
+	CXXFLAGS="$CXXFLAGS -I$BINUTILSDIR/include"
+
+# Check whether --with-binutils-libname was given.
+if test "${with_binutils_libname+set}" = set; then :
+  withval=$with_binutils_libname; BINUTILSLIB=$withval
+fi
+
+	if test "$BINUTILSLIB" = ""; then
+		BINUTILSLIB="lib"
+	fi
+	LDFLAGS="$LDFLAGS -L$BINUTILSDIR/$BINUTILSLIB -Xlinker -R -Xlinker $BINUTILSDIR/$BINUTILSLIB"
+fi
+
+
+# Check whether --with-gcc was given.
+if test "${with_gcc+set}" = set; then :
+  withval=$with_gcc; GCCDIR=$withval
+fi
+
+
+if test "$GCCDIR" != ""; then
+	CC="$GCCDIR/bin/gcc"
+	CXX="$GCCDIR/bin/g++"
+	LDFLAGS="$LDFLAGS -L$GCCDIR/lib -Xlinker -R -Xlinker $GCCDIR/lib"
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+	 CXXFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+	 CXXFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+  if test "${ac_cv_prog_CXXCPP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+_lt_caught_CXX_error=yes; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+else
+  _lt_caught_CXX_error=yes
+fi
+
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  compiler_CXX=$CC
+  for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+    else
+      lt_prog_compiler_no_builtin_flag_CXX=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          whole_archive_flag_spec_CXX=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+    ld_shlibs_CXX=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+      aix[4-9]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        archive_cmds_CXX=''
+        hardcode_direct_CXX=yes
+        hardcode_direct_absolute_CXX=yes
+        hardcode_libdir_separator_CXX=':'
+        link_all_deplibs_CXX=yes
+        file_list_spec_CXX='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[012]|aix4.[012].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    hardcode_direct_CXX=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    hardcode_minus_L_CXX=yes
+	    hardcode_libdir_flag_spec_CXX='-L$libdir'
+	    hardcode_libdir_separator_CXX=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag="$shared_flag "'${wl}-G'
+	  fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test "$aix_use_runtimelinking" = yes; then
+	      shared_flag='${wl}-G'
+	    else
+	      shared_flag='${wl}-bM:SRE'
+	    fi
+          fi
+        fi
+
+        export_dynamic_flag_spec_CXX='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        always_export_symbols_CXX=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          allow_undefined_flag_CXX='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+          hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+	    hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+	    allow_undefined_flag_CXX="-z nodefs"
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    no_undefined_flag_CXX=' ${wl}-bernotok'
+	    allow_undefined_flag_CXX=' ${wl}-berok'
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec_CXX='$convenience'
+	    archive_cmds_need_lc_CXX=yes
+	    # This is similar to how AIX traditionally builds its shared
+	    # libraries.
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  allow_undefined_flag_CXX=unsupported
+	  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	else
+	  ld_shlibs_CXX=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+        # as there is no search path for DLLs.
+        hardcode_libdir_flag_spec_CXX='-L$libdir'
+        allow_undefined_flag_CXX=unsupported
+        always_export_symbols_CXX=no
+        enable_shared_with_static_runtimes_CXX=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    cp $export_symbols $output_objdir/$soname.def;
+          else
+	    echo EXPORTS > $output_objdir/$soname.def;
+	    cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          ld_shlibs_CXX=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc_CXX=no
+  hardcode_direct_CXX=no
+  hardcode_automatic_CXX=yes
+  hardcode_shlibpath_var_CXX=unsupported
+  whole_archive_flag_spec_CXX=''
+  link_all_deplibs_CXX=yes
+  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+       if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+
+  else
+  ld_shlibs_CXX=no
+  fi
+
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      freebsd[12]*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        ld_shlibs_CXX=no
+        ;;
+
+      freebsd-elf*)
+        archive_cmds_need_lc_CXX=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        ld_shlibs_CXX=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        export_dynamic_flag_spec_CXX='${wl}-E'
+        hardcode_direct_CXX=yes
+        hardcode_minus_L_CXX=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            ld_shlibs_CXX=no
+            ;;
+          aCC*)
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              ld_shlibs_CXX=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+	  hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      export_dynamic_flag_spec_CXX='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct_CXX=no
+            hardcode_shlibpath_var_CXX=no
+            ;;
+          *)
+            hardcode_direct_CXX=yes
+            hardcode_direct_absolute_CXX=yes
+            hardcode_minus_L_CXX=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test $with_gnu_ld = no; then
+	        case $host_cpu in
+	          hppa*64*)
+	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[3-9]*)
+	hardcode_direct_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test "$with_gnu_ld" = no; then
+	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	      else
+	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+	      fi
+	    fi
+	    link_all_deplibs_CXX=yes
+	    ;;
+        esac
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        inherit_rpath_CXX=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    archive_cmds_need_lc_CXX=no
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [1-5]* | *pgcpp\ [1-5]*)
+	      prelink_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+	      old_archive_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+		$RANLIB $oldlib'
+	      archive_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      archive_expsym_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 will use weak symbols
+	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+	  xl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    if test "x$supports_anon_versioning" = xyes; then
+	      archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+		echo "local: *; };" >> $output_objdir/$libname.ver~
+		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      no_undefined_flag_CXX=' -zdefs'
+	      archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      hardcode_libdir_flag_spec_CXX='-R$libdir'
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	      compiler_needs_object_CXX=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='echo'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  hardcode_libdir_flag_spec_CXX='-R$libdir'
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        ld_shlibs_CXX=yes
+	;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+	ld_shlibs_CXX=no
+	;;
+
+      openbsd*)
+	if test -f /usr/libexec/ld.so; then
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	  hardcode_direct_absolute_CXX=yes
+	  archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	    archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	    export_dynamic_flag_spec_CXX='${wl}-E'
+	    whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=echo
+	else
+	  ld_shlibs_CXX=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    hardcode_libdir_separator_CXX=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+		;;
+	      *)
+	        allow_undefined_flag_CXX=' -expect_unresolved \*'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	          echo "-hidden">> $lib.exp~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $RM $lib.exp'
+	        hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+		;;
+	    esac
+
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+	  *)
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	      case $host in
+	        osf3*)
+	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	        *)
+	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	      hardcode_libdir_separator_CXX=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            archive_cmds_need_lc_CXX=yes
+	    no_undefined_flag_CXX=' -zdefs'
+	    archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    hardcode_libdir_flag_spec_CXX='-R$libdir'
+	    hardcode_shlibpath_var_CXX=no
+	    case $host_os in
+	      solaris2.[0-5] | solaris2.[0-5].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands `-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    link_all_deplibs_CXX=yes
+
+	    output_verbose_link_cmd='echo'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # platform.
+	        archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      fi
+
+	      hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+	      case $host_os in
+		solaris2.[0-5] | solaris2.[0-5].*) ;;
+		*)
+		  whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_CXX='${wl}-z,text'
+      archive_cmds_need_lc_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We can NOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	no_undefined_flag_CXX='${wl}-z,text'
+	allow_undefined_flag_CXX='${wl}-z,nodefs'
+	archive_cmds_need_lc_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
+	hardcode_libdir_separator_CXX=':'
+	link_all_deplibs_CXX=yes
+	export_dynamic_flag_spec_CXX='${wl}-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	  *)
+	    archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+    esac
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+    test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+    GCC_CXX="$GXX"
+    LD_CXX="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$compiler_lib_search_path_CXX"; then
+	     compiler_lib_search_path_CXX="${prev}${p}"
+	   else
+	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$postdeps_CXX"; then
+	   postdeps_CXX="${prev}${p}"
+	 else
+	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$predep_objects_CXX"; then
+	   predep_objects_CXX="$p"
+	 else
+	   predep_objects_CXX="$predep_objects_CXX $p"
+	 fi
+       else
+	 if test -z "$postdep_objects_CXX"; then
+	   postdep_objects_CXX="$p"
+	 else
+	   postdep_objects_CXX="$postdep_objects_CXX $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_CXX='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	lt_prog_compiler_pic_CXX='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_CXX='-fPIC -shared'
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[4-9]*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  lt_prog_compiler_static_CXX='-Bstatic'
+	else
+	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      lt_prog_compiler_pic_CXX='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      lt_prog_compiler_pic_CXX='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fpic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  xlc* | xlC*)
+	    # IBM XL 8.0 on PPC
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-qpic'
+	    lt_prog_compiler_static_CXX='-qstaticlink'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      lt_prog_compiler_pic_CXX='-KPIC'
+	      lt_prog_compiler_static_CXX='-Bstatic'
+	      lt_prog_compiler_wl_CXX='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    lt_prog_compiler_pic_CXX='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd* | netbsdelf*-gnu)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        lt_prog_compiler_pic_CXX='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    lt_prog_compiler_wl_CXX='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    lt_prog_compiler_pic_CXX='-pic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	lt_prog_compiler_can_build_shared_CXX=no
+	;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
+if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works_CXX=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:14507: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:14511: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works_CXX=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:14606: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:14610: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:14658: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:14662: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[4-9]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+  ;;
+  cygwin* | mingw* | cegcc*)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  linux* | k*bsd*-gnu)
+    link_all_deplibs_CXX=no
+  ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_CXX
+	pic_flag=$lt_prog_compiler_pic_CXX
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+        allow_undefined_flag_CXX=
+        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+        then
+	  archive_cmds_need_lc_CXX=no
+        else
+	  archive_cmds_need_lc_CXX=yes
+        fi
+        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5
+$as_echo "$archive_cmds_need_lc_CXX" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
+
+if test "$hardcode_action_CXX" = relink ||
+   test "$inherit_rpath_CXX" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Extract the first word of "ld", so it can be a program name with args.
+set dummy ld; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LD"; then
+  ac_cv_prog_LD="$LD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_LD="ld"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LD=$ac_cv_prog_LD
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+test "$LD" || as_fn_error $? "ld not found" "$LINENO" 5
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kernel OProfile support" >&5
+$as_echo_n "checking for kernel OProfile support... " >&6; }
+
+# Check whether --with-kernel-support was given.
+if test "${with_kernel_support+set}" = set; then :
+  withval=$with_kernel_support; if test "$withval" = "yes"; then
+	OPROFILE_26=yes
+fi
+
+fi
+
+
+if test "$OPROFILE_26" != "yes"; then
+
+
+	KSRC=/lib/modules/`uname -r`/build
+
+# Check whether --with-linux was given.
+if test "${with_linux+set}" = set; then :
+  withval=$with_linux; KSRC=$withval
+fi
+
+	KINC=$KSRC/include
+
+
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-I$KINC -O2 -D__KERNEL__"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <linux/autoconf.h>
+int
+main ()
+{
+
+#ifndef CONFIG_OPROFILE
+break_me_hard(\\\);
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  OPROFILE_26=yes
+else
+  OPROFILE_26=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-I$KINC -O2 -D__KERNEL__"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <linux/autoconf.h>
+int
+main ()
+{
+
+#ifndef CONFIG_OPROFILE_MODULE
+break_me_hard(\\\);
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  OPROFILE_26=yes
+else
+  OPROFILE_26=$OPROFILE_26
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OPROFILE_26" >&5
+$as_echo "$OPROFILE_26" >&6; }
+
+ if test "$OPROFILE_26" = yes; then
+  kernel_support_TRUE=
+  kernel_support_FALSE='#'
+else
+  kernel_support_TRUE='#'
+  kernel_support_FALSE=
+fi
+
+
+
+
+if test "$OPROFILE_26" = "no"; then
+
+if test ! -f $KINC/linux/autoconf.h; then
+	as_fn_error $? "no suitably configured kernel include tree found" "$LINENO" 5
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kernel version" >&5
+$as_echo_n "checking for kernel version... " >&6; }
+eval KVERS=`gcc -I$KINC -E -dM $KINC/linux/version.h | grep -w UTS_RELEASE | awk '{print $3}'`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $KVERS" >&5
+$as_echo "$KVERS" >&6; }
+case "$KVERS" in
+2.2.*|2.4.*) ;;
+*) as_fn_error $? "Unsupported kernel version" "$LINENO" 5
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel version" >&5
+$as_echo_n "checking kernel version... " >&6; }
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-I$KINC -D__KERNEL__ -Werror"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  #include <linux/version.h>
+
+int
+main ()
+{
+
+  #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 2, 10)
+  break_me_hard(\\\);
+  #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+else
+  as_fn_error $? "check html documentation install section" "$LINENO" 5
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $KINC/linux/spinlock.h" >&5
+$as_echo_n "checking for $KINC/linux/spinlock.h... " >&6; }
+if test -f $KINC/linux/spinlock.h; then
+	EXTRA_CFLAGS_MODULE="$EXTRA_CFLAGS_MODULE -DHAVE_LINUX_SPINLOCK_HEADER"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rtc_lock" >&5
+$as_echo_n "checking for rtc_lock... " >&6; }
+gcc -I$KINC -E $KINC/linux/mc146818rtc.h | grep rtc_lock >/dev/null
+if test "$?" -eq 0; then
+	EXTRA_CFLAGS_MODULE="$EXTRA_CFLAGS_MODULE -DRTC_LOCK"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+arch="unknown"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 architecture" >&5
+$as_echo_n "checking for x86 architecture... " >&6; }
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-I$KINC -O2 -D__KERNEL__"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <linux/autoconf.h>
+int
+main ()
+{
+
+#ifndef CONFIG_X86
+break_me_hard(\\\);
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  x86=1
+else
+  x86=0
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-I$KINC -O2 -D__KERNEL__"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <linux/autoconf.h>
+int
+main ()
+{
+
+#ifndef CONFIG_X86_WP_WORKS_OK
+break_me_hard(\\\);
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  x86=1
+else
+  x86=$x86
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+
+x=no
+test "x$x86" = "x1" && x=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $x" >&5
+$as_echo "$x" >&6; }
+test "$x86" = 1 && arch="x86"
+
+if test "$arch" = "unknown"; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ia64 architecture" >&5
+$as_echo_n "checking for ia64 architecture... " >&6; }
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-I$KINC -O2 -D__KERNEL__"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <linux/autoconf.h>
+int
+main ()
+{
+
+#ifndef CONFIG_IA64
+break_me_hard(\\\);
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ia64=1
+else
+  ia64=0
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+
+ 	x=no
+test "x$ia64" = "x1" && x=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $x" >&5
+$as_echo "$x" >&6; }
+ 	test "$ia64" = 1 && arch="ia64"
+fi
+
+test "$arch" = "unknown" && as_fn_error $? "Unsupported architecture" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking arch/kernel version combination" >&5
+$as_echo_n "checking arch/kernel version combination... " >&6; }
+case "$arch" in
+ia64)
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-I$KINC -D__KERNEL__ -Werror"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  #include <linux/version.h>
+
+int
+main ()
+{
+
+  #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 18)
+  break_me_hard(\\\);
+  #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+else
+  as_fn_error $? "unsupported arch/kernel" "$LINENO" 5
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+ ;;
+*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for preempt patch" >&5
+$as_echo_n "checking for preempt patch... " >&6; }
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-I$KINC -O2 -D__KERNEL__"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <linux/autoconf.h>
+int
+main ()
+{
+
+#ifndef CONFIG_PREEMPT
+break_me_hard(\\\);
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  preempt=1
+else
+  preempt=0
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+
+x=no
+test "x$preempt" = "x1" && x=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $x" >&5
+$as_echo "$x" >&6; }
+test "$preempt" = 0 || as_fn_error $? "unsupported kernel configuration : CONFIG_PREEMPT" "$LINENO" 5
+
+
+
+MODINSTALLDIR=/lib/modules/$KVERS
+
+OPROFILE_MODULE_ARCH=$arch
+
+
+
+fi
+
+
+# Check whether --with-module-dir was given.
+if test "${with_module_dir+set}" = set; then :
+  withval=$with_module_dir; MODINSTALLDIR=$withval
+fi
+
+
+
+
+# Check whether --with-java was given.
+if test "${with_java+set}" = set; then :
+  withval=$with_java; JAVA_HOMEDIR=$with_java
+else
+  with_java=no
+fi
+
+
+if test "x$with_java" = "xyes"; then
+	JAVA_HOMEDIR="/usr"
+else if test "x$with_java" = "xno"; then
+	JAVA_HOMEDIR=
+	fi
+fi
+
+
+if test -n "$JAVA_HOMEDIR"; then
+	as_ac_File=`$as_echo "ac_cv_file_"$JAVA_HOMEDIR/include/jvmti.h"" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for \"$JAVA_HOMEDIR/include/jvmti.h\"" >&5
+$as_echo_n "checking for \"$JAVA_HOMEDIR/include/jvmti.h\"... " >&6; }
+if eval "test \"\${$as_ac_File+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r ""$JAVA_HOMEDIR/include/jvmti.h""; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+  JVMTI_H_EXISTS="yes"
+fi
+
+	as_ac_File=`$as_echo "ac_cv_file_"$JAVA_HOMEDIR/include/jvmpi.h"" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for \"$JAVA_HOMEDIR/include/jvmpi.h\"" >&5
+$as_echo_n "checking for \"$JAVA_HOMEDIR/include/jvmpi.h\"... " >&6; }
+if eval "test \"\${$as_ac_File+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r ""$JAVA_HOMEDIR/include/jvmpi.h""; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+  JVMPI_H_EXISTS="yes"
+fi
+
+fi
+
+ if test -n "$JVMTI_H_EXISTS"; then
+  BUILD_JVMTI_AGENT_TRUE=
+  BUILD_JVMTI_AGENT_FALSE='#'
+else
+  BUILD_JVMTI_AGENT_TRUE='#'
+  BUILD_JVMTI_AGENT_FALSE=
+fi
+
+ if test -n "$JVMPI_H_EXISTS"; then
+  BUILD_JVMPI_AGENT_TRUE=
+  BUILD_JVMPI_AGENT_FALSE='#'
+else
+  BUILD_JVMPI_AGENT_TRUE='#'
+  BUILD_JVMPI_AGENT_FALSE=
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc attribute is understood" >&5
+$as_echo_n "checking whether malloc attribute is understood... " >&6; }
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-Werror $CFLAGS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+void monkey() __attribute__((malloc));
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; };
+$as_echo "#define MALLOC_ATTRIBUTE_OK 1" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __builtin_expect is understood" >&5
+$as_echo_n "checking whether __builtin_expect is understood... " >&6; }
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-Werror $CFLAGS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+int i;
+if (__builtin_expect(i, 0)) { }
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; EXTRA_CFLAGS_MODULE="$EXTRA_CFLAGS_MODULE -DEXPECT_OK"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; };
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+
+
+
+
+
+topdir=`pwd`
+
+
+
+
+# Check whether --with-extra-includes was given.
+if test "${with_extra_includes+set}" = set; then :
+  withval=$with_extra_includes; use_extra_includes="$withval"
+else
+  use_extra_includes=NO
+
+fi
+
+if test -n "$use_extra_includes" && \
+        test "$use_extra_includes" != "NO"; then
+  ac_save_ifs=$IFS
+  IFS=':'
+  for dir in $use_extra_includes; do
+    extra_includes="$extra_includes -I$dir"
+  done
+  IFS=$ac_save_ifs
+  CPPFLAGS="$CPPFLAGS $extra_includes"
+fi
+
+
+# Check whether --with-extra-libs was given.
+if test "${with_extra_libs+set}" = set; then :
+  withval=$with_extra_libs; use_extra_libs=$withval
+else
+  use_extra_libs=NO
+
+fi
+
+if test -n "$use_extra_libs" && \
+        test "$use_extra_libs" != "NO"; then
+   ac_save_ifs=$IFS
+   IFS=':'
+   for dir in $use_extra_libs; do
+     extra_libraries="$extra_libraries -L$dir"
+   done
+   IFS=$ac_save_ifs
+   LDFLAGS="$LDFLAGS $extra_libraries"
+fi
+
+
+
+ORIG_SAVE_LIBS="$LIBS"
+
+for ac_func in sched_setaffinity perfmonctl
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for poptGetContext in -lpopt" >&5
+$as_echo_n "checking for poptGetContext in -lpopt... " >&6; }
+if test "${ac_cv_lib_popt_poptGetContext+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpopt  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char poptGetContext ();
+int
+main ()
+{
+return poptGetContext ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_popt_poptGetContext=yes
+else
+  ac_cv_lib_popt_poptGetContext=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_popt_poptGetContext" >&5
+$as_echo "$ac_cv_lib_popt_poptGetContext" >&6; }
+if test "x$ac_cv_lib_popt_poptGetContext" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBPOPT 1
+_ACEOF
+
+  LIBS="-lpopt $LIBS"
+
+else
+  as_fn_error $? "popt library not found" "$LINENO" 5
+fi
+
+
+for ac_header in libiberty.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "libiberty.h" "ac_cv_header_libiberty_h" "$ac_includes_default"
+if test "x$ac_cv_header_libiberty_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBIBERTY_H 1
+_ACEOF
+
+fi
+
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cplus_demangle in -liberty" >&5
+$as_echo_n "checking for cplus_demangle in -liberty... " >&6; }
+if test "${ac_cv_lib_iberty_cplus_demangle+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-liberty  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cplus_demangle ();
+int
+main ()
+{
+return cplus_demangle ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_iberty_cplus_demangle=yes
+else
+  ac_cv_lib_iberty_cplus_demangle=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iberty_cplus_demangle" >&5
+$as_echo "$ac_cv_lib_iberty_cplus_demangle" >&6; }
+if test "x$ac_cv_lib_iberty_cplus_demangle" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBIBERTY 1
+_ACEOF
+
+  LIBS="-liberty $LIBS"
+
+else
+  as_fn_error $? "liberty library not found" "$LINENO" 5
+fi
+
+for ac_func in xcalloc
+do :
+  ac_fn_c_check_func "$LINENO" "xcalloc" "ac_cv_func_xcalloc"
+if test "x$ac_cv_func_xcalloc" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_XCALLOC 1
+_ACEOF
+
+fi
+done
+
+for ac_func in xmemdup
+do :
+  ac_fn_c_check_func "$LINENO" "xmemdup" "ac_cv_func_xmemdup"
+if test "x$ac_cv_func_xmemdup" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_XMEMDUP 1
+_ACEOF
+
+fi
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+  LIBS="$LIBS -ldl"; DL_LIB="-ldl"
+else
+  DL_LIB=""
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lintl" >&5
+$as_echo_n "checking for main in -lintl... " >&6; }
+if test "${ac_cv_lib_intl_main+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_intl_main=yes
+else
+  ac_cv_lib_intl_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_main" >&5
+$as_echo "$ac_cv_lib_intl_main" >&6; }
+if test "x$ac_cv_lib_intl_main" = x""yes; then :
+  LIBS="$LIBS -lintl"; INTL_LIB="-lintl"
+else
+  INTL_LIB=""
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for bfd_openr in -lbfd" >&5
+$as_echo_n "checking for bfd_openr in -lbfd... " >&6; }
+if test "${ac_cv_lib_bfd_bfd_openr+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbfd  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char bfd_openr ();
+int
+main ()
+{
+return bfd_openr ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_bfd_bfd_openr=yes
+else
+  ac_cv_lib_bfd_bfd_openr=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bfd_bfd_openr" >&5
+$as_echo "$ac_cv_lib_bfd_bfd_openr" >&6; }
+if test "x$ac_cv_lib_bfd_bfd_openr" = x""yes; then :
+  LIBS="-lbfd $LIBS"; Z_LIB=""
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compress in -lz" >&5
+$as_echo_n "checking for compress in -lz... " >&6; }
+if test "${ac_cv_lib_z_compress+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char compress ();
+int
+main ()
+{
+return compress ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_z_compress=yes
+else
+  ac_cv_lib_z_compress=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5
+$as_echo "$ac_cv_lib_z_compress" >&6; }
+if test "x$ac_cv_lib_z_compress" = x""yes; then :
+  		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for bfd_fdopenr in -lbfd" >&5
+$as_echo_n "checking for bfd_fdopenr in -lbfd... " >&6; }
+if test "${ac_cv_lib_bfd_bfd_fdopenr+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbfd -lz $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char bfd_fdopenr ();
+int
+main ()
+{
+return bfd_fdopenr ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_bfd_bfd_fdopenr=yes
+else
+  ac_cv_lib_bfd_bfd_fdopenr=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bfd_bfd_fdopenr" >&5
+$as_echo "$ac_cv_lib_bfd_bfd_fdopenr" >&6; }
+if test "x$ac_cv_lib_bfd_bfd_fdopenr" = x""yes; then :
+  LIBS="-lbfd -lz $LIBS"; Z_LIB="-lz"
+else
+  as_fn_error $? "bfd library not found" "$LINENO" 5
+fi
+
+
+else
+  as_fn_error $? "libz library not found; required by libbfd" "$LINENO" 5
+fi
+
+
+
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+# Determine if bfd_get_synthetic_symtab macro is available
+OS="`uname`"
+if test "$OS" = "Linux"; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bfd_get_synthetic_symtab() exists in BFD library" >&5
+$as_echo_n "checking whether bfd_get_synthetic_symtab() exists in BFD library... " >&6; }
+	rm -f test-for-synth
+	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <bfd.h>
+int
+main ()
+{
+asymbol * synthsyms;	bfd * ibfd = 0;
+			long synth_count = bfd_get_synthetic_symtab(ibfd, 0, 0, 0, 0, &synthsyms);
+			extern const bfd_target bfd_elf64_powerpc_vec;
+			extern const bfd_target bfd_elf64_powerpcle_vec;
+			char * ppc_name = bfd_elf64_powerpc_vec.name;
+			char * ppcle_name = bfd_elf64_powerpcle_vec.name;
+			printf("%s %s\n", ppc_name, ppcle_name);
+  ;
+  return 0;
+}
+
+_ACEOF
+	$CC conftest.$ac_ext $CFLAGS $LDFLAGS $LIBS -o  test-for-synth > /dev/null 2>&1
+	if test -f test-for-synth; then
+		echo "yes"
+		SYNTHESIZE_SYMBOLS='1'
+	else
+		echo "no"
+		SYNTHESIZE_SYMBOLS='0'
+	fi
+
+cat >>confdefs.h <<_ACEOF
+#define SYNTHESIZE_SYMBOLS $SYNTHESIZE_SYMBOLS
+_ACEOF
+
+	rm -f test-for-synth*
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+# On Cell BE architecture, OProfile uses bfd_openr_iovec when processing some
+# SPU profiles.  To parse embedded SPU ELF on Cell BE, OProfile requires a
+# version of bfd_openr_iovec that supports the elf32-spu target.
+# This version of the function also has a 7th parameter that's been added.
+# First, we check for existence of the base bfd_openr_iovec.  If it exists,
+# we then use a temporary test program below that passes 7 arguments to
+# bfd_openr_iovec; if it compiles OK, we assume we have the right BFD
+# library to support Cell BE SPU profiling.
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for bfd_openr_iovec in -lbfd" >&5
+$as_echo_n "checking for bfd_openr_iovec in -lbfd... " >&6; }
+if test "${ac_cv_lib_bfd_bfd_openr_iovec+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbfd  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char bfd_openr_iovec ();
+int
+main ()
+{
+return bfd_openr_iovec ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_bfd_bfd_openr_iovec=yes
+else
+  ac_cv_lib_bfd_bfd_openr_iovec=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bfd_bfd_openr_iovec" >&5
+$as_echo "$ac_cv_lib_bfd_bfd_openr_iovec" >&6; }
+if test "x$ac_cv_lib_bfd_bfd_openr_iovec" = x""yes; then :
+  bfd_openr_iovec_exists="yes"
+else
+  bfd_openr_iovec_exists="no"
+
+fi
+
+
+if test "$bfd_openr_iovec_exists" = "yes"; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bfd_openr_iovec has seven parameters" >&5
+$as_echo_n "checking whether bfd_openr_iovec has seven parameters... " >&6; }
+	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <bfd.h>
+	  #include <stdlib.h>
+
+int
+main ()
+{
+struct bfd *nbfd = bfd_openr_iovec("some-file", "elf32-spu",
+			NULL, NULL, NULL, NULL, NULL);
+	  return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_BFD_OPENR_IOVEC_WITH_7PARMS /**/" >>confdefs.h
+
+	bfd_open_iovec_7="yes"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+arch="unknown"
+
+# Check whether --with-target was given.
+if test "${with_target+set}" = set; then :
+  withval=$with_target; arch=$withval
+fi
+
+
+if test "$arch" = "cell-be"; then
+        if test "$bfd_open_iovec_7" = "yes"; then
+	        { $as_echo "$as_me:${as_lineno-$LINENO}: BFD library has support for Cell Broadband Engine SPU profiling" >&5
+$as_echo "$as_me: BFD library has support for Cell Broadband Engine SPU profiling" >&6;}
+	else
+		as_fn_error $? "BFD library does not support elf32-spu target; SPU profiling is unsupported" "$LINENO" 5
+	fi
+fi
+
+
+
+# C++ tests
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking popt prototype" >&5
+$as_echo_n "checking popt prototype... " >&6; }
+SAVE_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-Werror $CXXFLAGS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <popt.h>
+int
+main ()
+{
+
+int c; char **v;
+poptGetContext(0, c, v, 0, 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: takes char **" >&5
+$as_echo "takes char **" >&6; };
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: takes const char **" >&5
+$as_echo "takes const char **" >&6; };
+$as_echo "#define CONST_POPT 1" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CXXFLAGS="$SAVE_CXXFLAGS"
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use included sstream" >&5
+$as_echo_n "checking whether to use included sstream... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sstream>
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; };
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CXXFLAGS="$OP_CXXFLAGS -I\${top_srcdir}/include"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bfd defines bool" >&5
+$as_echo_n "checking whether bfd defines bool... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <bfd.h>
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; };
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; };
+$as_echo "#define TRUE_FALSE_ALREADY_DEFINED 1" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking type of size_t" >&5
+$as_echo_n "checking type of size_t... " >&6; }
+	for f in "unsigned" "unsigned long"; do
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-Werror $CFLAGS"
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  #include <stddef.h>
+
+int
+main ()
+{
+
+  typedef void (*fct1)(size_t);
+  typedef void (*fct2)($f);
+  fct1 f1 = 0;
+  fct2 f2 = 0;
+  if (f1 == f2) {}
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  SIZE_T_TYPE="$f"
+else
+  SIZE_T_TYPE=""
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+CFLAGS=$SAVE_CFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+		if test -n "${SIZE_T_TYPE}"; then
+			break
+		fi
+	done
+	if test -n "${SIZE_T_TYPE}"; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${SIZE_T_TYPE}" >&5
+$as_echo "${SIZE_T_TYPE}" >&6; }
+	else
+		as_fn_error $? "not found" "$LINENO" 5
+	fi
+
+
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking type of ptrdiff_t" >&5
+$as_echo_n "checking type of ptrdiff_t... " >&6; }
+	for f in "int" "long"; do
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS="-Werror $CFLAGS"
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  #include <stddef.h>
+
+int
+main ()
+{
+
+  typedef void (*fct1)(ptrdiff_t);
+  typedef void (*fct2)($f);
+  fct1 f1 = 0;
+  fct2 f2 = 0;
+  if (f1 == f2) {}
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  PTRDIFF_T_TYPE="$f"
+else
+  PTRDIFF_T_TYPE=""
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+CFLAGS=$SAVE_CFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+		if test -n "${PTRDIFF_T_TYPE}"; then
+			break
+		fi
+	done
+	if test -n "${PTRDIFF_T_TYPE}"; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${PTRDIFF_T_TYPE}" >&5
+$as_echo "${PTRDIFF_T_TYPE}" >&6; }
+	else
+		as_fn_error $? "not found" "$LINENO" 5
+	fi
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
+$as_echo_n "checking for X... " >&6; }
+
+
+# Check whether --with-x was given.
+if test "${with_x+set}" = set; then :
+  withval=$with_x;
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+  # The user explicitly disabled X.
+  have_x=disabled
+else
+  case $x_includes,$x_libraries in #(
+    *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5 ;; #(
+    *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+rm -f -r conftest.dir
+if mkdir conftest.dir; then
+  cd conftest.dir
+  cat >Imakefile <<'_ACEOF'
+incroot:
+	@echo incroot='${INCROOT}'
+usrlibdir:
+	@echo usrlibdir='${USRLIBDIR}'
+libdir:
+	@echo libdir='${LIBDIR}'
+_ACEOF
+  if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
+    # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+    for ac_var in incroot usrlibdir libdir; do
+      eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
+    done
+    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+    for ac_extension in a so sl dylib la dll; do
+      if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
+	 test -f "$ac_im_libdir/libX11.$ac_extension"; then
+	ac_im_usrlibdir=$ac_im_libdir; break
+      fi
+    done
+    # Screen out bogus values from the imake configuration.  They are
+    # bogus both because they are the default anyway, and because
+    # using them would break gcc on systems where it needs fixed includes.
+    case $ac_im_incroot in
+	/usr/include) ac_x_includes= ;;
+	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+    esac
+    case $ac_im_usrlibdir in
+	/usr/lib | /usr/lib64 | /lib | /lib64) ;;
+	*) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+    esac
+  fi
+  cd ..
+  rm -f -r conftest.dir
+fi
+
+# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R7/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R7
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R7/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R7
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+  # Guess where to find include files, by looking for Xlib.h.
+  # First, try using that file with no special directory specified.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <X11/Xlib.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+  for ac_dir in $ac_x_header_dirs; do
+  if test -r "$ac_dir/X11/Xlib.h"; then
+    ac_x_includes=$ac_dir
+    break
+  fi
+done
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+  # Check for the libraries.
+  # See if we find them without any special options.
+  # Don't add to $LIBS permanently.
+  ac_save_LIBS=$LIBS
+  LIBS="-lX11 $LIBS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <X11/Xlib.h>
+int
+main ()
+{
+XrmInitialize ()
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+  LIBS=$ac_save_LIBS
+for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+do
+  # Don't even attempt the hair of trying to link an X program!
+  for ac_extension in a so sl dylib la dll; do
+    if test -r "$ac_dir/libX11.$ac_extension"; then
+      ac_x_libraries=$ac_dir
+      break 2
+    fi
+  done
+done
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+case $ac_x_includes,$ac_x_libraries in #(
+  no,* | *,no | *\'*)
+    # Didn't find X, or a directory has "'" in its name.
+    ac_cv_have_x="have_x=no";; #(
+  *)
+    # Record where we found X for the cache.
+    ac_cv_have_x="have_x=yes\
+	ac_x_includes='$ac_x_includes'\
+	ac_x_libraries='$ac_x_libraries'"
+esac
+fi
+;; #(
+    *) have_x=yes;;
+  esac
+  eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5
+$as_echo "$have_x" >&6; }
+  no_x=yes
+else
+  # If each of the values was on the command line, it overrides each guess.
+  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+  # Update the cache value to reflect the command line values.
+  ac_cv_have_x="have_x=yes\
+	ac_x_includes='$x_includes'\
+	ac_x_libraries='$x_libraries'"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5
+$as_echo "libraries $x_libraries, headers $x_includes" >&6; }
+fi
+
+if test "$no_x" = yes; then
+  # Not all programs may use this symbol, but it does not hurt to define it.
+
+$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h
+
+  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+  if test -n "$x_includes"; then
+    X_CFLAGS="$X_CFLAGS -I$x_includes"
+  fi
+
+  # It would also be nice to do this for all -L options, not just this one.
+  if test -n "$x_libraries"; then
+    X_LIBS="$X_LIBS -L$x_libraries"
+    # For Solaris; some versions of Sun CC require a space after -R and
+    # others require no space.  Words are not sufficient . . . .
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
+$as_echo_n "checking whether -R must be followed by a space... " >&6; }
+    ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+    ac_xsave_cxx_werror_flag=$ac_cxx_werror_flag
+    ac_cxx_werror_flag=yes
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       X_LIBS="$X_LIBS -R$x_libraries"
+else
+  LIBS="$ac_xsave_LIBS -R $x_libraries"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	  X_LIBS="$X_LIBS -R $x_libraries"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
+$as_echo "neither works" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    ac_cxx_werror_flag=$ac_xsave_cxx_werror_flag
+    LIBS=$ac_xsave_LIBS
+  fi
+
+  # Check for system-dependent libraries X programs must link with.
+  # Do this before checking for the system-independent R6 libraries
+  # (-lICE), since we may need -lsocket or whatever for X linking.
+
+  if test "$ISC" = yes; then
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+  else
+    # Martyn Johnson says this is needed for Ultrix, if the X
+    # libraries were built with DECnet support.  And Karl Berry says
+    # the Alpha needs dnet_stub (dnet does not exist).
+    ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XOpenDisplay ();
+int
+main ()
+{
+return XOpenDisplay ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
+if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_dnet_dnet_ntoa=yes
+else
+  ac_cv_lib_dnet_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+fi
+
+    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
+if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_dnet_stub_dnet_ntoa=yes
+else
+  ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+fi
+
+    fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LIBS="$ac_xsave_LIBS"
+
+    # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+    # to get the SysV transport functions.
+    # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+    # needs -lnsl.
+    # The nsl library prevents programs from opening the X display
+    # on Irix 5.2, according to T.E. Dickey.
+    # The functions gethostbyname, getservbyname, and inet_addr are
+    # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+    ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+if test "x$ac_cv_func_gethostbyname" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_gethostbyname = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_nsl_gethostbyname=yes
+else
+  ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
+if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+fi
+
+      if test $ac_cv_lib_nsl_gethostbyname = no; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
+$as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
+if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_bsd_gethostbyname=yes
+else
+  ac_cv_lib_bsd_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
+$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
+if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+
+      fi
+    fi
+
+    # lieder@skyler.mavd.honeywell.com says without -lsocket,
+    # socket/setsockopt and other routines are undefined under SCO ODT
+    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
+    # on later versions), says Simon Leinen: it contains gethostby*
+    # variants that don't use the name server (or something).  -lsocket
+    # must be given before -lnsl if both are needed.  We assume that
+    # if connect needs -lnsl, so does gethostbyname.
+    ac_fn_cxx_check_func "$LINENO" "connect" "ac_cv_func_connect"
+if test "x$ac_cv_func_connect" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_connect = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
+$as_echo_n "checking for connect in -lsocket... " >&6; }
+if test "${ac_cv_lib_socket_connect+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_socket_connect=yes
+else
+  ac_cv_lib_socket_connect=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
+$as_echo "$ac_cv_lib_socket_connect" >&6; }
+if test "x$ac_cv_lib_socket_connect" = x""yes; then :
+  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+fi
+
+    fi
+
+    # Guillermo Gomez says -lposix is necessary on A/UX.
+    ac_fn_cxx_check_func "$LINENO" "remove" "ac_cv_func_remove"
+if test "x$ac_cv_func_remove" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_remove = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
+$as_echo_n "checking for remove in -lposix... " >&6; }
+if test "${ac_cv_lib_posix_remove+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char remove ();
+int
+main ()
+{
+return remove ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_posix_remove=yes
+else
+  ac_cv_lib_posix_remove=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
+$as_echo "$ac_cv_lib_posix_remove" >&6; }
+if test "x$ac_cv_lib_posix_remove" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+fi
+
+    fi
+
+    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+    ac_fn_cxx_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
+if test "x$ac_cv_func_shmat" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_shmat = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
+$as_echo_n "checking for shmat in -lipc... " >&6; }
+if test "${ac_cv_lib_ipc_shmat+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shmat ();
+int
+main ()
+{
+return shmat ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_ipc_shmat=yes
+else
+  ac_cv_lib_ipc_shmat=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
+$as_echo "$ac_cv_lib_ipc_shmat" >&6; }
+if test "x$ac_cv_lib_ipc_shmat" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+    fi
+  fi
+
+  # Check for libraries that X11R6 Xt/Xaw programs need.
+  ac_save_LDFLAGS=$LDFLAGS
+  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+  # check for ICE first), but we must link in the order -lSM -lICE or
+  # we get undefined symbols.  So assume we have SM if we have ICE.
+  # These have to be linked with before -lX11, unlike the other
+  # libraries we check for below, so use a different variable.
+  # John Interrante, Karl Berry
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
+$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
+if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char IceConnectionNumber ();
+int
+main ()
+{
+return IceConnectionNumber ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_ICE_IceConnectionNumber=yes
+else
+  ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
+if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then :
+  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+fi
+
+  LDFLAGS=$ac_save_LDFLAGS
+
+fi
+
+ORIG_X_SAVE_LIBS="$LIBS"
+LIBS="$X_PRE_LIBS $LIBS $X_LIBS -lX11 $X_EXTRA_LIBS"
+X_LIBS="$LIBS"
+
+
+# Check whether --enable-gui was given.
+if test "${enable_gui+set}" = set; then :
+  enableval=$enable_gui;
+else
+  enable_gui=qt3
+fi
+
+
+if test "x$enable_gui"  = "xqt3"  || test "x$enable_gui"  = "xyes"; then
+	QT_VERSION=3
+
+			FATAL=0
+
+
+# Check whether --with-qt-dir was given.
+if test "${with_qt_dir+set}" = set; then :
+  withval=$with_qt_dir;  qt_cv_dir=`eval echo "$withval"/`
+fi
+
+
+
+# Check whether --with-qt-includes was given.
+if test "${with_qt_includes+set}" = set; then :
+  withval=$with_qt_includes;  qt_cv_includes=`eval echo "$withval"`
+fi
+
+
+
+# Check whether --with-qt-libraries was given.
+if test "${with_qt_libraries+set}" = set; then :
+  withval=$with_qt_libraries;   qt_cv_libraries=`eval echo "$withval"`
+fi
+
+
+		if test -z "$qt_cv_dir"; then
+		qt_cv_dir=$QTDIR
+	fi
+
+		if test -n "$qt_cv_dir"; then
+		if test -z "$qt_cv_includes"; then
+			qt_cv_includes=$qt_cv_dir/include
+		fi
+		if test -z "$qt_cv_libraries"; then
+			qt_cv_libraries=$qt_cv_dir/lib
+		fi
+	fi
+
+		QT_INCLUDES=
+	QT_LDFLAGS=
+	if test -n "$qt_cv_includes"; then
+		QT_INCLUDES="-isystem $qt_cv_includes"
+	fi
+	if test -n "$qt_cv_libraries"; then
+		QT_LDFLAGS="-L$qt_cv_libraries"
+	fi
+
+
+
+
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for moc2" >&5
+$as_echo_n "checking for moc2... " >&6; }
+	if test "${qt_cv_path_moc2+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+		qt_cv_path_moc2="NONE"
+		if test -n "$ac_moc2"; then
+			qt_cv_path_moc2="$ac_moc2";
+		else
+			dirs="$qt_cv_dir/bin"
+			qt_save_IFS=$IFS
+			IFS=':'
+			for dir in $PATH; do
+				dirs="$dirs $dir"
+			done
+			IFS=$qt_save_IFS
+
+			for dir in $dirs; do
+				if test -x "$dir/moc2"; then
+					if test -n ""; then
+						evalstr="$dir/moc2  2>&1 "
+						if eval $evalstr; then
+							qt_cv_path_moc2="$dir/moc2"
+							break
+						fi
+					else
+						qt_cv_path_moc2="$dir/moc2"
+						break
+					fi
+				fi
+			done
+		fi
+
+fi
+
+
+	if test -z "$qt_cv_path_moc2" || test "$qt_cv_path_moc2" = "NONE"; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+$as_echo "not found" >&6; }
+
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $qt_cv_path_moc2" >&5
+$as_echo "$qt_cv_path_moc2" >&6; }
+		ac_moc2=$qt_cv_path_moc2
+	fi
+
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for moc" >&5
+$as_echo_n "checking for moc... " >&6; }
+	if test "${qt_cv_path_moc+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+		qt_cv_path_moc="NONE"
+		if test -n "$ac_moc1"; then
+			qt_cv_path_moc="$ac_moc1";
+		else
+			dirs="$qt_cv_dir/bin"
+			qt_save_IFS=$IFS
+			IFS=':'
+			for dir in $PATH; do
+				dirs="$dirs $dir"
+			done
+			IFS=$qt_save_IFS
+
+			for dir in $dirs; do
+				if test -x "$dir/moc"; then
+					if test -n ""; then
+						evalstr="$dir/moc  2>&1 "
+						if eval $evalstr; then
+							qt_cv_path_moc="$dir/moc"
+							break
+						fi
+					else
+						qt_cv_path_moc="$dir/moc"
+						break
+					fi
+				fi
+			done
+		fi
+
+fi
+
+
+	if test -z "$qt_cv_path_moc" || test "$qt_cv_path_moc" = "NONE"; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+$as_echo "not found" >&6; }
+
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $qt_cv_path_moc" >&5
+$as_echo "$qt_cv_path_moc" >&6; }
+		ac_moc1=$qt_cv_path_moc
+	fi
+
+
+	if test -n "$ac_moc1" -a -n "$ac_moc2"; then
+				$ac_moc1 -v 2>&1 | grep "Qt 3" >/dev/null
+		if test "$?" = 0; then
+			ac_moc=$ac_moc1;
+		else
+			ac_moc=$ac_moc2;
+		fi
+	else
+		if test -n "$ac_moc1"; then
+			ac_moc=$ac_moc1;
+		else
+			ac_moc=$ac_moc2;
+		fi
+	fi
+
+	if test -z "$ac_moc"  -a "$FATAL" = 1; then
+		as_fn_error $? "moc binary not found in \$PATH or $qt_cv_dir/bin !" "$LINENO" 5
+	fi
+
+	MOC=$ac_moc
+
+
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uic" >&5
+$as_echo_n "checking for uic... " >&6; }
+	if test "${qt_cv_path_uic+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+		qt_cv_path_uic="NONE"
+		if test -n "$ac_uic"; then
+			qt_cv_path_uic="$ac_uic";
+		else
+			dirs="$qt_cv_dir/bin"
+			qt_save_IFS=$IFS
+			IFS=':'
+			for dir in $PATH; do
+				dirs="$dirs $dir"
+			done
+			IFS=$qt_save_IFS
+
+			for dir in $dirs; do
+				if test -x "$dir/uic"; then
+					if test -n ""; then
+						evalstr="$dir/uic  2>&1 "
+						if eval $evalstr; then
+							qt_cv_path_uic="$dir/uic"
+							break
+						fi
+					else
+						qt_cv_path_uic="$dir/uic"
+						break
+					fi
+				fi
+			done
+		fi
+
+fi
+
+
+	if test -z "$qt_cv_path_uic" || test "$qt_cv_path_uic" = "NONE"; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+$as_echo "not found" >&6; }
+
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $qt_cv_path_uic" >&5
+$as_echo "$qt_cv_path_uic" >&6; }
+		ac_uic=$qt_cv_path_uic
+	fi
+
+	if test -z "$ac_uic" -a "$FATAL" = 1; then
+		as_fn_error $? "uic binary not found in \$PATH or $qt_cv_dir/bin !" "$LINENO" 5
+	fi
+
+	UIC=$ac_uic
+
+
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking in lib for Qt library name" >&5
+$as_echo_n "checking in lib for Qt library name... " >&6; }
+
+	if test "${qt_cv_libname+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+		ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+		SAVE_CXXFLAGS=$CXXFLAGS
+		CXXFLAGS="$CXXFLAGS $QT_INCLUDES $QT_LDFLAGS"
+
+		for libname in -lqt-mt -lqt3 -lqt2 -lqt;
+		do
+
+	SAVE_LIBS="$LIBS"
+	LIBS="$LIBS $libname"
+	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+	#include <qglobal.h>
+	#include <qstring.h>
+
+int
+main ()
+{
+
+	QString s("mangle_failure");
+	#if (QT_VERSION < 221)
+	break_me_(\\\);
+	#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  qt_cv_libname=$libname
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+	LIBS="$SAVE_LIBS"
+
+			if test -n "$qt_cv_libname"; then
+				break;
+			fi
+		done
+
+		CXXFLAGS=$SAVE_CXXFLAGS
+
+fi
+
+
+	if test -z "$qt_cv_libname"; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+		if test "$FATAL" = 1 ; then
+			as_fn_error $? "Cannot compile a simple Qt executable. Check you have the right \$QTDIR !" "$LINENO" 5
+		fi
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $qt_cv_libname" >&5
+$as_echo "$qt_cv_libname" >&6; }
+	fi
+
+	if test -z "$qt_cv_libname"; then
+		if test -n "$qt_cv_dir"; then
+					qt_cv_libraries=$qt_cv_dir/lib64
+			QT_LDFLAGS="-L$qt_cv_libraries"
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking in lib64 for Qt library name" >&5
+$as_echo_n "checking in lib64 for Qt library name... " >&6; }
+
+	if test "${qt_cv_libname+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+		ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+		SAVE_CXXFLAGS=$CXXFLAGS
+		CXXFLAGS="$CXXFLAGS $QT_INCLUDES $QT_LDFLAGS"
+
+		for libname in -lqt-mt -lqt3 -lqt2 -lqt;
+		do
+
+	SAVE_LIBS="$LIBS"
+	LIBS="$LIBS $libname"
+	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+	#include <qglobal.h>
+	#include <qstring.h>
+
+int
+main ()
+{
+
+	QString s("mangle_failure");
+	#if (QT_VERSION < 221)
+	break_me_(\\\);
+	#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  qt_cv_libname=$libname
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+	LIBS="$SAVE_LIBS"
+
+			if test -n "$qt_cv_libname"; then
+				break;
+			fi
+		done
+
+		CXXFLAGS=$SAVE_CXXFLAGS
+
+fi
+
+
+	if test -z "$qt_cv_libname"; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+		if test "$FATAL" = 1 ; then
+			as_fn_error $? "Cannot compile a simple Qt executable. Check you have the right \$QTDIR !" "$LINENO" 5
+		fi
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $qt_cv_libname" >&5
+$as_echo "$qt_cv_libname" >&6; }
+	fi
+
+		fi
+	fi
+
+	QT_LIB=$qt_cv_libname;
+
+
+	if test -n "$qt_cv_libname"; then
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Qt version" >&5
+$as_echo_n "checking Qt version... " >&6; }
+if test "${lyx_cv_qtversion+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+		ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+		SAVE_CPPFLAGS=$CPPFLAGS
+		CPPFLAGS="$CPPFLAGS $QT_INCLUDES"
+
+		cat > conftest.$ac_ext <<EOF
+#line 18016 "configure"
+#include "confdefs.h"
+#include <qglobal.h>
+"%%%"QT_VERSION_STR"%%%"
+EOF
+		lyx_cv_qtversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
+			grep '^"%%%"'  2>/dev/null | \
+			sed -e 's/"%%%"//g' -e 's/"//g'`
+		rm -f conftest.$ac_ext
+		CPPFLAGS=$SAVE_CPPFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lyx_cv_qtversion" >&5
+$as_echo "$lyx_cv_qtversion" >&6; }
+
+	QT_VERSION=$lyx_cv_qtversion
+
+
+	fi
+
+	if test -n "$QT_LIB"; then
+		QT_LIBS="$QT_LIB $QT_LDFLAGS"
+	fi
+	QT_CFLAGS="$QT_INCLUDES"
+fi
+
+if test "x$enable_gui"  = "xqt4"; then
+	QT_VERSION=4
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT" >&5
+$as_echo_n "checking for QT... " >&6; }
+
+if test -n "$QT_CFLAGS"; then
+    pkg_cv_QT_CFLAGS="$QT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt3Support QtGui QtCore \""; } >&5
+  ($PKG_CONFIG --exists --print-errors "Qt3Support QtGui QtCore ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_QT_CFLAGS=`$PKG_CONFIG --cflags "Qt3Support QtGui QtCore " 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$QT_LIBS"; then
+    pkg_cv_QT_LIBS="$QT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt3Support QtGui QtCore \""; } >&5
+  ($PKG_CONFIG --exists --print-errors "Qt3Support QtGui QtCore ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_QT_LIBS=`$PKG_CONFIG --libs "Qt3Support QtGui QtCore " 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        QT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "Qt3Support QtGui QtCore " 2>&1`
+        else
+	        QT_PKG_ERRORS=`$PKG_CONFIG --print-errors "Qt3Support QtGui QtCore " 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$QT_PKG_ERRORS" >&5
+
+
+	echo "You requested QT4 but its build files are not available. Exiting now."
+	exit
+
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+	echo "You requested QT4 but its build files are not available. Exiting now."
+	exit
+
+else
+	QT_CFLAGS=$pkg_cv_QT_CFLAGS
+	QT_LIBS=$pkg_cv_QT_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+	MOC=$(pkg-config --variable=moc_location QtCore)
+	UIC=$(pkg-config --variable=uic_location QtCore)3
+	QT_VERSION=$(pkg-config --modversion QtCore)
+
+	if test "x$MOC" = "x"; then
+		echo "WARNING: Your QtCore.pc file is buggy, it doesn't provide the variable 'moc_location'"
+		echo "WARNING: I will try to find it in your PATH ..."
+		# Extract the first word of "moc", so it can be a program name with args.
+set dummy moc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_MOC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MOC"; then
+  ac_cv_prog_MOC="$MOC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_MOC="moc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+MOC=$ac_cv_prog_MOC
+if test -n "$MOC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOC" >&5
+$as_echo "$MOC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+		if test "x$MOC" = "x"; then
+			echo "WARNING: You can fix this by adding the location of moc to your path."
+			echo "WARNING: Exiting now."
+			exit
+		fi
+	fi
+
+	if test "x$UIC" = "x3"; then
+		echo "WARNING: Your QtCore.pc file is buggy, it doesn't provide the variable 'uic_location'"
+		echo "WARNING: I will try to find it in your PATH ..."
+		# Extract the first word of "uic3", so it can be a program name with args.
+set dummy uic3; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_UIChelp+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$UIChelp"; then
+  ac_cv_prog_UIChelp="$UIChelp" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_UIChelp="uic3"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+UIChelp=$ac_cv_prog_UIChelp
+if test -n "$UIChelp"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UIChelp" >&5
+$as_echo "$UIChelp" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+		if test "x$UIChelp" = "x"; then
+			echo "WARNING: You can fix this by adding the location of uic3 to your path."
+			echo "WARNING: Exiting now."
+			exit
+		else
+			UIC="$UIChelp"
+		fi
+	fi
+
+	flags_has_qt3support=$(echo $QT_CFLAGS | grep QT3_SUPPORT)
+	if test "x$flags_has_qt3support" = "x" ; then
+		echo "WARNING: Your Qt3Support package is buggy; it dosn't include the 'QT3_SUPPORT' flag"
+		echo "WARNING: adding it manually"
+		QT_CFLAGS="$QT_CFLAGS -DQT3_SUPPORT"
+	fi
+fi
+ if test -n "$QT_LIBS"; then
+  have_qt_TRUE=
+  have_qt_FALSE='#'
+else
+  have_qt_TRUE='#'
+  have_qt_FALSE=
+fi
+
+
+LIBS="$ORIG_X_SAVE_LIBS"
+
+# Check whether --enable-pch was given.
+if test "${enable_pch+set}" = set; then :
+  enableval=$enable_pch; enable_pch=$enableval
+else
+  enable_pch=no
+fi
+
+if test "$enable_pch" = yes; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CXX} support precompiled header" >&5
+$as_echo_n "checking whether ${CXX} support precompiled header... " >&6; }
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+SAVE_CXXFLAGS=$CXXFLAGS
+CXXFLAGS=-Winvalid-pch
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CXXFLAGS="${OP_CXXFLAGS} -include bits/stdc++.h"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CXXFLAGS=$SAVE_CXXFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+fi
+
+
+# It's just rude to go over the net to build
+XSLTPROC_FLAGS=--nonet
+DOCBOOK_ROOT=
+if test ! -f /etc/xml/catalog; then
+	for i in /usr/share/sgml/docbook/stylesheet/xsl/nwalsh /usr/share/sgml/docbook/xsl-stylesheets/;
+	do
+		if test -d "$i"; then
+			DOCBOOK_ROOT=$i
+		fi
+	done
+
+	# Last resort - try net
+	if test -z "$DOCBOOK_ROOT"; then
+		XSLTPROC_FLAGS=
+	fi
+else
+	XML_CATALOG=/etc/xml/catalog
+	CAT_ENTRY_START='<!--'
+	CAT_ENTRY_END='-->'
+fi
+
+# Extract the first word of "xsltproc", so it can be a program name with args.
+set dummy xsltproc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_XSLTPROC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$XSLTPROC"; then
+  ac_cv_prog_XSLTPROC="$XSLTPROC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_XSLTPROC="xsltproc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+XSLTPROC=$ac_cv_prog_XSLTPROC
+if test -n "$XSLTPROC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5
+$as_echo "$XSLTPROC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+XSLTPROC_WORKS=no
+if test -n "$XSLTPROC"; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xsltproc works" >&5
+$as_echo_n "checking whether xsltproc works... " >&6; }
+
+	if test -n "$XML_CATALOG"; then
+		DB_FILE="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"
+	else
+		DB_FILE="$DOCBOOK_ROOT/docbook.xsl"
+	fi
+
+	$XSLTPROC $XSLTPROC_FLAGS $DB_FILE >/dev/null 2>&1 << END
+<?xml version="1.0" encoding='ISO-8859-1'?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book id="test">
+</book>
+END
+	if test "$?" = 0; then
+		XSLTPROC_WORKS=yes
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC_WORKS" >&5
+$as_echo "$XSLTPROC_WORKS" >&6; }
+fi
+ if test "$XSLTPROC_WORKS" = "yes"; then
+  have_xsltproc_TRUE=
+  have_xsltproc_FALSE='#'
+else
+  have_xsltproc_TRUE='#'
+  have_xsltproc_FALSE=
+fi
+
+
+
+
+
+
+
+
+
+LIBS="$ORIG_SAVE_LIBS"
+LIBERTY_LIBS="-liberty $DL_LIB $INTL_LIB"
+BFD_LIBS="-lbfd -liberty $DL_LIB $INTL_LIB $Z_LIB"
+POPT_LIBS="-lpopt"
+
+
+
+
+# do NOT put tests here, they will fail in the case X is not installed !
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} -W is understood" >&5
+$as_echo_n "checking whether ${CC} -W is understood... " >&6; }
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS=-W
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CFLAGS="${OP_CFLAGS} -W"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CXX} -W is understood" >&5
+$as_echo_n "checking whether ${CXX} -W is understood... " >&6; }
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+SAVE_CXXFLAGS=$CXXFLAGS
+CXXFLAGS=-W
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CXXFLAGS="${OP_CXXFLAGS} -W"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CXXFLAGS=$SAVE_CXXFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} -Wall is understood" >&5
+$as_echo_n "checking whether ${CC} -Wall is understood... " >&6; }
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS=-Wall
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CFLAGS="${OP_CFLAGS} -Wall"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CXX} -Wall is understood" >&5
+$as_echo_n "checking whether ${CXX} -Wall is understood... " >&6; }
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+SAVE_CXXFLAGS=$CXXFLAGS
+CXXFLAGS=-Wall
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CXXFLAGS="${OP_CXXFLAGS} -Wall"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CXXFLAGS=$SAVE_CXXFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} -fno-common is understood" >&5
+$as_echo_n "checking whether ${CC} -fno-common is understood... " >&6; }
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS=-fno-common
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CFLAGS="${OP_CFLAGS} -fno-common"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CXX} -fno-common is understood" >&5
+$as_echo_n "checking whether ${CXX} -fno-common is understood... " >&6; }
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+SAVE_CXXFLAGS=$CXXFLAGS
+CXXFLAGS=-fno-common
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CXXFLAGS="${OP_CXXFLAGS} -fno-common"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CXXFLAGS=$SAVE_CXXFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CXX} -ftemplate-depth-50 is understood" >&5
+$as_echo_n "checking whether ${CXX} -ftemplate-depth-50 is understood... " >&6; }
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+SAVE_CXXFLAGS=$CXXFLAGS
+CXXFLAGS=-ftemplate-depth-50
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CXXFLAGS="${OP_CXXFLAGS} -ftemplate-depth-50"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CXXFLAGS=$SAVE_CXXFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} -Wdeclaration-after-statement is understood" >&5
+$as_echo_n "checking whether ${CC} -Wdeclaration-after-statement is understood... " >&6; }
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS=-Wdeclaration-after-statement
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CFLAGS="${OP_CFLAGS} -Wdeclaration-after-statement"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+# Check whether --enable-gcov was given.
+if test "${enable_gcov+set}" = set; then :
+  enableval=$enable_gcov; enable_gcov=$enableval
+else
+  enable_gcov=no
+fi
+
+if test "$enable_gcov" = yes; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} -fprofile-arcs is understood" >&5
+$as_echo_n "checking whether ${CC} -fprofile-arcs is understood... " >&6; }
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS=-fprofile-arcs
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CFLAGS="${OP_CFLAGS} -fprofile-arcs"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CXX} -fprofile-arcs is understood" >&5
+$as_echo_n "checking whether ${CXX} -fprofile-arcs is understood... " >&6; }
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+SAVE_CXXFLAGS=$CXXFLAGS
+CXXFLAGS=-fprofile-arcs
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CXXFLAGS="${OP_CXXFLAGS} -fprofile-arcs"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CXXFLAGS=$SAVE_CXXFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} -ftest-coverage is understood" >&5
+$as_echo_n "checking whether ${CC} -ftest-coverage is understood... " >&6; }
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS=-ftest-coverage
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CFLAGS="${OP_CFLAGS} -ftest-coverage"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CXX} -ftest-coverage is understood" >&5
+$as_echo_n "checking whether ${CXX} -ftest-coverage is understood... " >&6; }
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+SAVE_CXXFLAGS=$CXXFLAGS
+CXXFLAGS=-ftest-coverage
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CXXFLAGS="${OP_CXXFLAGS} -ftest-coverage"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CXXFLAGS=$SAVE_CXXFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+fi
+
+# Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+  enableval=$enable_werror; enable_werror=$enableval
+else
+  enable_werror=yes
+fi
+
+if test "$enable_werror" = yes; then
+	# enable -Werror for non-release versions.
+	if echo "$VERSION" | grep git >/dev/null; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC} -Werror is understood" >&5
+$as_echo_n "checking whether ${CC} -Werror is understood... " >&6; }
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+SAVE_CFLAGS=$CFLAGS
+CFLAGS=-Werror
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CFLAGS="${OP_CFLAGS} -Werror"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$SAVE_CFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CXX} -Werror is understood" >&5
+$as_echo_n "checking whether ${CXX} -Werror is understood... " >&6; }
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+SAVE_CXXFLAGS=$CXXFLAGS
+CXXFLAGS=-Werror
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; OP_CXXFLAGS="${OP_CXXFLAGS} -Werror"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CXXFLAGS=$SAVE_CXXFLAGS
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+	fi
+fi
+
+# Check whether --enable-optimization was given.
+if test "${enable_optimization+set}" = set; then :
+  enableval=$enable_optimization; enable_optimization=$enableval
+else
+  enable_optimisation=yes
+fi
+
+if test "$enable_optimization" = "no"; then
+	CFLAGS=`echo $CFLAGS | sed 's/-O2//g'`
+	CXXFLAGS=`echo $CXXFLAGS | sed 's/-O2//g'`
+fi
+
+# Check whether --enable-account-check was given.
+if test "${enable_account_check+set}" = set; then :
+  enableval=$enable_account_check; enable_account_check=$enableval
+else
+  enable_account_check=yes
+fi
+
+
+ if test "x$enable_account_check" = "xyes"; then
+  CHECK_ACCOUNT_TRUE=
+  CHECK_ACCOUNT_FALSE='#'
+else
+  CHECK_ACCOUNT_TRUE='#'
+  CHECK_ACCOUNT_FALSE=
+fi
+
+
+
+
+
+# fixups for config.h
+if test "$prefix" = "NONE"; then
+	my_op_prefix="$ac_default_prefix"
+else
+	my_op_prefix="$prefix"
+fi
+my_op_datadir="$my_op_prefix/share"
+
+if test "$exec_prefix" = "NONE"; then
+	my_op_exec_prefix="$my_op_prefix"
+else
+	my_op_exec_prefix="$exec_prefix"
+fi
+my_op_bindir="$my_op_exec_prefix/bin"
+
+OP_DATADIR=`eval echo "$my_op_datadir/$PACKAGE/"`
+
+cat >>confdefs.h <<_ACEOF
+#define OP_DATADIR "$OP_DATADIR"
+_ACEOF
+
+OP_BINDIR=`eval echo "$my_op_bindir/"`
+
+cat >>confdefs.h <<_ACEOF
+#define OP_BINDIR "$OP_BINDIR"
+_ACEOF
+
+OP_DOCDIR=`eval echo "${my_op_prefix}/share/doc/$PACKAGE/"`
+
+
+ac_config_files="$ac_config_files Makefile m4/Makefile libutil/Makefile libutil/tests/Makefile libutil++/Makefile libutil++/tests/Makefile libop/Makefile libop/tests/Makefile libopagent/Makefile libopt++/Makefile libdb/Makefile libdb/tests/Makefile libabi/Makefile libabi/tests/Makefile libregex/Makefile libregex/tests/Makefile libregex/stl.pat libregex/tests/mangled-name daemon/Makefile daemon/liblegacy/Makefile events/Makefile utils/Makefile doc/Makefile doc/xsl/catalog-1.xml doc/oprofile.1 doc/opcontrol.1 doc/ophelp.1 doc/opreport.1 doc/opannotate.1 doc/opgprof.1 doc/oparchive.1 doc/opimport.1 doc/srcdoc/Doxyfile libpp/Makefile opjitconv/Makefile pp/Makefile gui/Makefile gui/ui/Makefile module/Makefile module/x86/Makefile module/ia64/Makefile agents/Makefile agents/jvmti/Makefile agents/jvmpi/Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${kernel_support_TRUE}" && test -z "${kernel_support_FALSE}"; then
+  as_fn_error $? "conditional \"kernel_support\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_JVMTI_AGENT_TRUE}" && test -z "${BUILD_JVMTI_AGENT_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_JVMTI_AGENT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_JVMPI_AGENT_TRUE}" && test -z "${BUILD_JVMPI_AGENT_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_JVMPI_AGENT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${have_qt_TRUE}" && test -z "${have_qt_FALSE}"; then
+  as_fn_error $? "conditional \"have_qt\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${have_xsltproc_TRUE}" && test -z "${have_xsltproc_FALSE}"; then
+  as_fn_error $? "conditional \"have_xsltproc\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CHECK_ACCOUNT_TRUE}" && test -z "${CHECK_ACCOUNT_FALSE}"; then
+  as_fn_error $? "conditional \"CHECK_ACCOUNT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.67.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.67,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_flag_spec_ld_CXX \
+hardcode_libdir_separator_CXX \
+fix_srcfile_path_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+  ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
+    "libutil/Makefile") CONFIG_FILES="$CONFIG_FILES libutil/Makefile" ;;
+    "libutil/tests/Makefile") CONFIG_FILES="$CONFIG_FILES libutil/tests/Makefile" ;;
+    "libutil++/Makefile") CONFIG_FILES="$CONFIG_FILES libutil++/Makefile" ;;
+    "libutil++/tests/Makefile") CONFIG_FILES="$CONFIG_FILES libutil++/tests/Makefile" ;;
+    "libop/Makefile") CONFIG_FILES="$CONFIG_FILES libop/Makefile" ;;
+    "libop/tests/Makefile") CONFIG_FILES="$CONFIG_FILES libop/tests/Makefile" ;;
+    "libopagent/Makefile") CONFIG_FILES="$CONFIG_FILES libopagent/Makefile" ;;
+    "libopt++/Makefile") CONFIG_FILES="$CONFIG_FILES libopt++/Makefile" ;;
+    "libdb/Makefile") CONFIG_FILES="$CONFIG_FILES libdb/Makefile" ;;
+    "libdb/tests/Makefile") CONFIG_FILES="$CONFIG_FILES libdb/tests/Makefile" ;;
+    "libabi/Makefile") CONFIG_FILES="$CONFIG_FILES libabi/Makefile" ;;
+    "libabi/tests/Makefile") CONFIG_FILES="$CONFIG_FILES libabi/tests/Makefile" ;;
+    "libregex/Makefile") CONFIG_FILES="$CONFIG_FILES libregex/Makefile" ;;
+    "libregex/tests/Makefile") CONFIG_FILES="$CONFIG_FILES libregex/tests/Makefile" ;;
+    "libregex/stl.pat") CONFIG_FILES="$CONFIG_FILES libregex/stl.pat" ;;
+    "libregex/tests/mangled-name") CONFIG_FILES="$CONFIG_FILES libregex/tests/mangled-name" ;;
+    "daemon/Makefile") CONFIG_FILES="$CONFIG_FILES daemon/Makefile" ;;
+    "daemon/liblegacy/Makefile") CONFIG_FILES="$CONFIG_FILES daemon/liblegacy/Makefile" ;;
+    "events/Makefile") CONFIG_FILES="$CONFIG_FILES events/Makefile" ;;
+    "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "doc/xsl/catalog-1.xml") CONFIG_FILES="$CONFIG_FILES doc/xsl/catalog-1.xml" ;;
+    "doc/oprofile.1") CONFIG_FILES="$CONFIG_FILES doc/oprofile.1" ;;
+    "doc/opcontrol.1") CONFIG_FILES="$CONFIG_FILES doc/opcontrol.1" ;;
+    "doc/ophelp.1") CONFIG_FILES="$CONFIG_FILES doc/ophelp.1" ;;
+    "doc/opreport.1") CONFIG_FILES="$CONFIG_FILES doc/opreport.1" ;;
+    "doc/opannotate.1") CONFIG_FILES="$CONFIG_FILES doc/opannotate.1" ;;
+    "doc/opgprof.1") CONFIG_FILES="$CONFIG_FILES doc/opgprof.1" ;;
+    "doc/oparchive.1") CONFIG_FILES="$CONFIG_FILES doc/oparchive.1" ;;
+    "doc/opimport.1") CONFIG_FILES="$CONFIG_FILES doc/opimport.1" ;;
+    "doc/srcdoc/Doxyfile") CONFIG_FILES="$CONFIG_FILES doc/srcdoc/Doxyfile" ;;
+    "libpp/Makefile") CONFIG_FILES="$CONFIG_FILES libpp/Makefile" ;;
+    "opjitconv/Makefile") CONFIG_FILES="$CONFIG_FILES opjitconv/Makefile" ;;
+    "pp/Makefile") CONFIG_FILES="$CONFIG_FILES pp/Makefile" ;;
+    "gui/Makefile") CONFIG_FILES="$CONFIG_FILES gui/Makefile" ;;
+    "gui/ui/Makefile") CONFIG_FILES="$CONFIG_FILES gui/ui/Makefile" ;;
+    "module/Makefile") CONFIG_FILES="$CONFIG_FILES module/Makefile" ;;
+    "module/x86/Makefile") CONFIG_FILES="$CONFIG_FILES module/x86/Makefile" ;;
+    "module/ia64/Makefile") CONFIG_FILES="$CONFIG_FILES module/ia64/Makefile" ;;
+    "agents/Makefile") CONFIG_FILES="$CONFIG_FILES agents/Makefile" ;;
+    "agents/jvmti/Makefile") CONFIG_FILES="$CONFIG_FILES agents/jvmti/Makefile" ;;
+    "agents/jvmpi/Makefile") CONFIG_FILES="$CONFIG_FILES agents/jvmpi/Makefile" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_t"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out" && rm -f "$tmp/out";;
+  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+    } >"$tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$_am_arg" : 'X\(//\)[^/]' \| \
+	 X"$_am_arg" : 'X\(//\)$' \| \
+	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1+=\$2"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+    ;;
+  esac
+
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
+
+  esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+
+if test -r doc/xsl/catalog.xml; then
+	if cmp doc/xsl/catalog-1.xml doc/xsl/catalog.xml > /dev/null; then
+		echo doc/xsl/catalog.xml is unchanged
+	else
+		cp -f doc/xsl/catalog-1.xml doc/xsl/catalog.xml
+	fi
+else
+	cp -f doc/xsl/catalog-1.xml doc/xsl/catalog.xml
+fi
+
+
+if test "x$enable_gui" = "xno" ; then
+	echo "No GUI will be built as it was explicitly disabled."
+else
+	if test -z "$QT_LIBS"; then
+		echo "Warning: QT version $QT_VERSION was requested but not found. No GUI will be built."
+	else
+		echo "Building GUI with QT $QT_VERSION"
+	 fi
+fi
+
+if ! test "x$enable_account_check" = "xyes"; then
+	:
+elif test "`getent passwd oprofile 2>/dev/null`" == "" || \
+     test "`getent group oprofile 2>/dev/null`" == ""; then
+	if test `id -u` != "0"; then
+		echo "Warning: The user account 'oprofile:oprofile' does not exist on the system."
+		echo "         To profile JITed code, this special user account must exist."
+		echo "         Please ask your system administrator to add the following user and group:"
+		echo "             user name : 'oprofile'"
+		echo "             group name: 'oprofile'"
+		echo "         The 'oprofile' group must be the default group for the 'oprofile' user."
+	else
+		echo "Warning: The user account 'oprofile:oprofile' does not exist on the system."
+		echo "         To profile JITed code, this special user account must exist."
+		echo "         Please add the following user and group:"
+		echo "             user name : 'oprofile'"
+		echo "             group name: 'oprofile'"
+		echo "         The 'oprofile' group must be the default group for the 'oprofile' user."
+	fi
+fi
+
diff --git a/oprofile-0.9.7/configure.in b/oprofile-0.9.7/configure.in
new file mode 100644
index 0000000..d23c6c6
--- /dev/null
+++ b/oprofile-0.9.7/configure.in
@@ -0,0 +1,371 @@
+#   Autoconf script for oprofile
+#
+#   Copyright 1999 Olaf Titz <olaf@bigred.inka.de>
+#   Adapted for oprofile
+#
+#   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.
+#
+
+AC_PREREQ(2.13)
+
+AC_INIT(libop/op_config.h)
+AM_INIT_AUTOMAKE(oprofile, 0.9.7)
+AM_CONFIG_HEADER(config.h)
+
+AC_CHECK_DECLS([basename], [], [], [[#include <libgen.h>]])
+AC_PROG_RANLIB
+AC_PROG_LIBTOOL
+PKG_PROG_PKG_CONFIG
+
+dnl for the man page
+DATE="`date '+%a %d %B %Y'`"
+AC_SUBST(DATE)
+
+dnl needed for module build
+OPROFILE_DIR=`pwd`
+AC_SUBST(OPROFILE_DIR)
+ 
+# this needs to come before --with-gcc so we link with binutil's version
+# of libiberty ... sigh
+AC_ARG_WITH(binutils,
+[  --with-binutils=dir		Path to binutils installation to use], BINUTILSDIR=$withval)
+
+if test "$BINUTILSDIR" != ""; then
+	LD="$BINUTILSDIR/ld"
+	if test "$CFLAGS" = ""; then
+		CFLAGS="-g -O2"
+	fi
+	if test "$CXXFLAGS" = ""; then
+		CXXFLAGS="-g -O2"
+	fi
+	CFLAGS="$CFLAGS -I$BINUTILSDIR/include"
+	CXXFLAGS="$CXXFLAGS -I$BINUTILSDIR/include"
+	AC_ARG_WITH(binutils-libname,
+		[  --with-binutils-libname       Lib dir name under binutils installation; @<:@lib@:>@]],
+		BINUTILSLIB=$withval)
+	if test "$BINUTILSLIB" = ""; then
+		BINUTILSLIB="lib"
+	fi
+	LDFLAGS="$LDFLAGS -L$BINUTILSDIR/$BINUTILSLIB -Xlinker -R -Xlinker $BINUTILSDIR/$BINUTILSLIB"
+fi
+
+AC_ARG_WITH(gcc,
+[  --with-gcc=dir		Path to GCC installation to use], GCCDIR=$withval)
+
+if test "$GCCDIR" != ""; then
+	CC="$GCCDIR/bin/gcc"
+	CXX="$GCCDIR/bin/g++"
+	LDFLAGS="$LDFLAGS -L$GCCDIR/lib -Xlinker -R -Xlinker $GCCDIR/lib"
+fi
+
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_CXX
+AC_CHECK_PROG(LD,ld,ld,)
+test "$LD" || AC_ERROR(ld not found)
+
+AX_FIND_KERNEL
+
+if test "$OPROFILE_26" = "no"; then
+	AX_CONFIG_MODULE
+fi
+
+AC_ARG_WITH(module-dir,
+[  --with-module-dir=dir        Path to module installation directory], MODINSTALLDIR=$withval)
+AC_SUBST(MODINSTALLDIR)
+
+AC_ARG_WITH(java,
+[  --with-java=java-home        Path to Java home directory (default is "no"; "yes" will use /usr as Java home)],
+JAVA_HOMEDIR=$with_java, [with_java=no])
+
+if test "x$with_java" = "xyes"; then
+	JAVA_HOMEDIR="/usr"
+else if test "x$with_java" = "xno"; then
+	JAVA_HOMEDIR=
+	fi
+fi
+AC_SUBST(JAVA_HOMEDIR)
+
+if test -n "$JAVA_HOMEDIR"; then
+	AC_CHECK_FILE("$JAVA_HOMEDIR/include/jvmti.h",JVMTI_H_EXISTS="yes",)
+	AC_CHECK_FILE("$JAVA_HOMEDIR/include/jvmpi.h",JVMPI_H_EXISTS="yes",)
+fi
+
+AM_CONDITIONAL(BUILD_JVMTI_AGENT, test -n "$JVMTI_H_EXISTS")
+AM_CONDITIONAL(BUILD_JVMPI_AGENT, test -n "$JVMPI_H_EXISTS")
+
+AX_MALLOC_ATTRIBUTE
+AX_BUILTIN_EXPECT
+
+AC_SUBST(EXTRA_CFLAGS_MODULE)
+
+topdir=`pwd`
+AC_SUBST(topdir)
+ 
+AX_EXTRA_DIRS
+
+ORIG_SAVE_LIBS="$LIBS"
+
+dnl advanced glibc features which we need but may not be present
+AC_CHECK_FUNCS(sched_setaffinity perfmonctl)
+
+AC_CHECK_LIB(popt, poptGetContext,, AC_MSG_ERROR([popt library not found]))
+AX_BINUTILS
+AX_CELL_SPU
+
+# C++ tests
+ 
+AC_LANG_CPLUSPLUS
+
+AX_POPT_CONST
+AX_CHECK_SSTREAM
+
+dnl bfd.h pre 1998 check only for gnu 2.xx series, so gcc 3.0 can't compile it
+AC_MSG_CHECKING([whether bfd defines bool])
+AC_TRY_COMPILE([#include <bfd.h>], [], 
+AC_MSG_RESULT([no]);,
+AC_MSG_RESULT([yes]); AC_DEFINE(TRUE_FALSE_ALREADY_DEFINED, 1, [whether bfd.h defines bool values]))
+
+dnl smart demangler need to know what are the underlined type for some typedef
+AX_TYPEDEFED_NAME(size_t, "unsigned" "unsigned long", SIZE_T_TYPE)
+AC_SUBST(SIZE_T_TYPE)
+AX_TYPEDEFED_NAME(ptrdiff_t, "int" "long", PTRDIFF_T_TYPE)
+AC_SUBST(PTRDIFF_T_TYPE)
+
+AC_PATH_XTRA
+ORIG_X_SAVE_LIBS="$LIBS"
+LIBS="$X_PRE_LIBS $LIBS $X_LIBS -lX11 $X_EXTRA_LIBS"
+X_LIBS="$LIBS"
+AC_SUBST(X_LIBS)
+
+AC_ARG_ENABLE(gui,[  --enable-gui  compile with gui component (qt3|qt4|yes|no),
+		     if not given or set to yes, gui defaults to qt3],, enable_gui=qt3)
+
+if test "x$enable_gui"  = "xqt3"  || test "x$enable_gui"  = "xyes"; then
+	QT_VERSION=3
+	QT_DO_IT_ALL
+	if test -n "$QT_LIB"; then
+		QT_LIBS="$QT_LIB $QT_LDFLAGS"
+	fi
+	QT_CFLAGS="$QT_INCLUDES"
+fi
+
+if test "x$enable_gui"  = "xqt4"; then
+	QT_VERSION=4
+	PKG_CHECK_MODULES(QT, Qt3Support QtGui QtCore ,,[
+	echo "You requested QT4 but its build files are not available. Exiting now."
+	exit
+	])
+	MOC=$(pkg-config --variable=moc_location QtCore)
+	UIC=$(pkg-config --variable=uic_location QtCore)3
+	QT_VERSION=$(pkg-config --modversion QtCore)
+
+dnl following are some sanity tests and workarounds for buggy QtCore.pc files
+	if test "x$MOC" = "x"; then
+		echo "WARNING: Your QtCore.pc file is buggy, it doesn't provide the variable 'moc_location'"
+		echo "WARNING: I will try to find it in your PATH ..."
+		AC_CHECK_PROG(MOC, moc, moc)
+		if test "x$MOC" = "x"; then
+			echo "WARNING: You can fix this by adding the location of moc to your path."
+			echo "WARNING: Exiting now."
+			exit
+		fi
+	fi
+
+	if test "x$UIC" = "x3"; then
+		echo "WARNING: Your QtCore.pc file is buggy, it doesn't provide the variable 'uic_location'"
+		echo "WARNING: I will try to find it in your PATH ..."
+		AC_CHECK_PROG(UIChelp, uic3, uic3)
+		if test "x$UIChelp" = "x"; then
+			echo "WARNING: You can fix this by adding the location of uic3 to your path."
+			echo "WARNING: Exiting now."
+			exit
+		else
+			UIC="$UIChelp"
+		fi
+	fi
+
+	flags_has_qt3support=$(echo $QT_CFLAGS | grep QT3_SUPPORT)
+	if test "x$flags_has_qt3support" = "x" ; then
+		echo "WARNING: Your Qt3Support package is buggy; it dosn't include the 'QT3_SUPPORT' flag"
+		echo "WARNING: adding it manually"
+		QT_CFLAGS="$QT_CFLAGS -DQT3_SUPPORT"
+	fi
+fi
+AM_CONDITIONAL(have_qt, test -n "$QT_LIBS")
+
+LIBS="$ORIG_X_SAVE_LIBS"
+
+dnl enable pch for c++
+AC_ARG_ENABLE(pch,
+	[  --enable-pch                 enable precompiled header (default is disabled)],
+	enable_pch=$enableval, enable_pch=no)
+if test "$enable_pch" = yes; then
+	AX_CHECK_PRECOMPILED_HEADER(OP_CXXFLAGS)
+fi
+
+AX_CHECK_DOCBOOK
+
+dnl finally restore the original libs setting
+LIBS="$ORIG_SAVE_LIBS"
+LIBERTY_LIBS="-liberty $DL_LIB $INTL_LIB"
+BFD_LIBS="-lbfd -liberty $DL_LIB $INTL_LIB $Z_LIB"
+POPT_LIBS="-lpopt"
+AC_SUBST(LIBERTY_LIBS)
+AC_SUBST(BFD_LIBS)
+AC_SUBST(POPT_LIBS)
+
+# do NOT put tests here, they will fail in the case X is not installed !
+ 
+
+AX_CFLAGS_OPTION(OP_CFLAGS,[-W])
+AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-W])
+AX_CFLAGS_OPTION(OP_CFLAGS,[-Wall])
+AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-Wall])
+AX_CFLAGS_OPTION(OP_CFLAGS,[-fno-common])
+AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-fno-common])
+AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-ftemplate-depth-50])
+AX_CFLAGS_OPTION(OP_CFLAGS,[-Wdeclaration-after-statement])
+
+dnl enable option to use GCC test coverage
+AC_ARG_ENABLE(gcov,
+	[  --enable-gcov                enable option for gcov coverage testing (default is disabled)],
+	enable_gcov=$enableval, enable_gcov=no)
+if test "$enable_gcov" = yes; then
+	AX_CFLAGS_OPTION(OP_CFLAGS,[-fprofile-arcs])
+	AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-fprofile-arcs])
+	AX_CFLAGS_OPTION(OP_CFLAGS,[-ftest-coverage])
+	AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-ftest-coverage])
+fi
+
+AC_ARG_ENABLE(werror,
+	[  --disable-werror            disable -Werror flag (default is enabled for non-release)],
+        enable_werror=$enableval, enable_werror=yes)
+if test "$enable_werror" = yes; then
+	# enable -Werror for non-release versions.
+	if echo "$VERSION" | grep git >/dev/null; then
+		AX_CFLAGS_OPTION(OP_CFLAGS,[-Werror])
+		AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-Werror])
+	fi
+fi
+
+AC_ARG_ENABLE(optimization,
+	[  --disable-optimization      disable optimization flags (default is enabled)],
+	enable_optimization=$enableval, enable_optimisation=yes)
+if test "$enable_optimization" = "no"; then
+	CFLAGS=`echo $CFLAGS | sed 's/-O2//g'`
+	CXXFLAGS=`echo $CXXFLAGS | sed 's/-O2//g'`
+fi
+
+AC_ARG_ENABLE(account-check,
+	[  --disable-account-check     disable account check (default is enabled)],
+	enable_account_check=$enableval, enable_account_check=yes)
+
+AM_CONDITIONAL(CHECK_ACCOUNT, test "x$enable_account_check" = "xyes")
+
+AC_SUBST(OP_CFLAGS)
+AC_SUBST(OP_CXXFLAGS)
+
+# fixups for config.h
+if test "$prefix" = "NONE"; then
+	my_op_prefix="$ac_default_prefix"
+else
+	my_op_prefix="$prefix"
+fi
+my_op_datadir="$my_op_prefix/share"
+
+if test "$exec_prefix" = "NONE"; then
+	my_op_exec_prefix="$my_op_prefix"
+else
+	my_op_exec_prefix="$exec_prefix"
+fi
+my_op_bindir="$my_op_exec_prefix/bin"
+
+OP_DATADIR=`eval echo "$my_op_datadir/$PACKAGE/"`
+AC_DEFINE_UNQUOTED(OP_DATADIR, "$OP_DATADIR", [package data directory])
+OP_BINDIR=`eval echo "$my_op_bindir/"`
+AC_DEFINE_UNQUOTED(OP_BINDIR, "$OP_BINDIR", [package binary directory])
+OP_DOCDIR=`eval echo "${my_op_prefix}/share/doc/$PACKAGE/"`
+AC_SUBST(OP_DOCDIR)
+
+AC_OUTPUT(Makefile \
+	m4/Makefile \
+	libutil/Makefile \
+	libutil/tests/Makefile \
+	libutil++/Makefile \
+	libutil++/tests/Makefile \
+	libop/Makefile \
+	libop/tests/Makefile \
+	libopagent/Makefile \
+	libopt++/Makefile \
+	libdb/Makefile \
+	libdb/tests/Makefile \
+	libabi/Makefile \
+	libabi/tests/Makefile \
+	libregex/Makefile \
+	libregex/tests/Makefile \
+	libregex/stl.pat \
+	libregex/tests/mangled-name \
+	daemon/Makefile \
+	daemon/liblegacy/Makefile \
+	events/Makefile \
+	utils/Makefile \
+	doc/Makefile \
+	doc/xsl/catalog-1.xml \
+	doc/oprofile.1 \
+	doc/opcontrol.1 \
+	doc/ophelp.1 \
+	doc/opreport.1 \
+	doc/opannotate.1 \
+	doc/opgprof.1 \
+	doc/oparchive.1 \
+	doc/opimport.1 \
+	doc/srcdoc/Doxyfile \
+	libpp/Makefile \
+	opjitconv/Makefile \
+	pp/Makefile \
+	gui/Makefile \
+	gui/ui/Makefile \
+	module/Makefile \
+	module/x86/Makefile \
+	module/ia64/Makefile \
+	agents/Makefile \
+	agents/jvmti/Makefile \
+	agents/jvmpi/Makefile)
+
+AX_COPY_IF_CHANGE(doc/xsl/catalog-1.xml, doc/xsl/catalog.xml)
+
+if test "x$enable_gui" = "xno" ; then
+	echo "No GUI will be built as it was explicitly disabled."
+else
+	if test -z "$QT_LIBS"; then
+		echo "Warning: QT version $QT_VERSION was requested but not found. No GUI will be built."
+	else
+		echo "Building GUI with QT $QT_VERSION"
+	 fi
+fi
+
+if ! test "x$enable_account_check" = "xyes"; then
+	:
+elif test "`getent passwd oprofile 2>/dev/null`" == "" || \
+     test "`getent group oprofile 2>/dev/null`" == ""; then
+	if test `id -u` != "0"; then
+		echo "Warning: The user account 'oprofile:oprofile' does not exist on the system."
+		echo "         To profile JITed code, this special user account must exist."
+		echo "         Please ask your system administrator to add the following user and group:"
+		echo "             user name : 'oprofile'"
+		echo "             group name: 'oprofile'"
+		echo "         The 'oprofile' group must be the default group for the 'oprofile' user."
+	else
+		echo "Warning: The user account 'oprofile:oprofile' does not exist on the system."
+		echo "         To profile JITed code, this special user account must exist."
+		echo "         Please add the following user and group:"
+		echo "             user name : 'oprofile'"
+		echo "             group name: 'oprofile'"
+		echo "         The 'oprofile' group must be the default group for the 'oprofile' user."
+	fi
+fi
+
diff --git a/oprofile-0.9.7/daemon/Makefile.am b/oprofile-0.9.7/daemon/Makefile.am
new file mode 100644
index 0000000..043cfd6
--- /dev/null
+++ b/oprofile-0.9.7/daemon/Makefile.am
@@ -0,0 +1,58 @@
+SUBDIRS = liblegacy .
+
+oprofiled_SOURCES = \
+	init.c \
+	oprofiled.c \
+	oprofiled.h \
+	opd_stats.c \
+	opd_pipe.c \
+	opd_pipe.h \
+	opd_sfile.c \
+	opd_sfile.h \
+	opd_kernel.c \
+	opd_kernel.h \
+	opd_trans.c \
+	opd_trans.h \
+	opd_printf.h \
+	opd_stats.h \
+	opd_cookie.c \
+	opd_cookie.h \
+	opd_events.c \
+	opd_events.h \
+	opd_interface.h \
+	opd_mangling.c \
+	opd_mangling.h \
+	opd_perfmon.h \
+	opd_perfmon.c \
+	opd_anon.h \
+	opd_anon.c \
+	opd_spu.c \
+	opd_extended.h \
+	opd_extended.c \
+	opd_ibs.h \
+	opd_ibs.c \
+	opd_ibs_macro.h \
+	opd_ibs_trans.h \
+	opd_ibs_trans.c
+
+LIBS=@POPT_LIBS@ @LIBERTY_LIBS@
+
+AM_CPPFLAGS = \
+	-I ${top_srcdir}/libabi \
+	-I ${top_srcdir}/libutil \
+	-I ${top_srcdir}/libop \
+	-I ${top_srcdir}/libdb
+
+# -fno-omit-frame-pointer needed for daemon build: see ChangeLog-2004 02-23
+AM_CFLAGS = @OP_CFLAGS@ -fno-omit-frame-pointer
+
+bin_PROGRAMS = oprofiled
+
+oprofiled_LDADD = \
+	liblegacy/liblegacy.a \
+	../libabi/libabi.a \
+	../libdb/libodb.a \
+	../libop/libop.a \
+	../libutil/libutil.a
+
+oprofiled_LINK = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
diff --git a/oprofile-0.9.7/daemon/Makefile.in b/oprofile-0.9.7/daemon/Makefile.in
new file mode 100644
index 0000000..e16d906
--- /dev/null
+++ b/oprofile-0.9.7/daemon/Makefile.in
@@ -0,0 +1,790 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = oprofiled$(EXEEXT)
+subdir = daemon
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/binutils.m4 \
+	$(top_srcdir)/m4/builtinexpect.m4 \
+	$(top_srcdir)/m4/cellspubfdsupport.m4 \
+	$(top_srcdir)/m4/compileroption.m4 \
+	$(top_srcdir)/m4/configmodule.m4 \
+	$(top_srcdir)/m4/copyifchange.m4 $(top_srcdir)/m4/docbook.m4 \
+	$(top_srcdir)/m4/extradirs.m4 $(top_srcdir)/m4/findkernel.m4 \
+	$(top_srcdir)/m4/kerneloption.m4 \
+	$(top_srcdir)/m4/kernelversion.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/mallocattribute.m4 \
+	$(top_srcdir)/m4/poptconst.m4 \
+	$(top_srcdir)/m4/precompiledheader.m4 $(top_srcdir)/m4/qt.m4 \
+	$(top_srcdir)/m4/resultyn.m4 $(top_srcdir)/m4/sstream.m4 \
+	$(top_srcdir)/m4/typedef.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_oprofiled_OBJECTS = init.$(OBJEXT) oprofiled.$(OBJEXT) \
+	opd_stats.$(OBJEXT) opd_pipe.$(OBJEXT) opd_sfile.$(OBJEXT) \
+	opd_kernel.$(OBJEXT) opd_trans.$(OBJEXT) opd_cookie.$(OBJEXT) \
+	opd_events.$(OBJEXT) opd_mangling.$(OBJEXT) \
+	opd_perfmon.$(OBJEXT) opd_anon.$(OBJEXT) opd_spu.$(OBJEXT) \
+	opd_extended.$(OBJEXT) opd_ibs.$(OBJEXT) \
+	opd_ibs_trans.$(OBJEXT)
+oprofiled_OBJECTS = $(am_oprofiled_OBJECTS)
+oprofiled_DEPENDENCIES = liblegacy/liblegacy.a ../libabi/libabi.a \
+	../libdb/libodb.a ../libop/libop.a ../libutil/libutil.a
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(oprofiled_SOURCES)
+DIST_SOURCES = $(oprofiled_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_LIBS = @BFD_LIBS@
+CAT_ENTRY_END = @CAT_ENTRY_END@
+CAT_ENTRY_START = @CAT_ENTRY_START@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOCBOOK_ROOT = @DOCBOOK_ROOT@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTRA_CFLAGS_MODULE = @EXTRA_CFLAGS_MODULE@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVA_HOMEDIR = @JAVA_HOMEDIR@
+KINC = @KINC@
+KSRC = @KSRC@
+KVERS = @KVERS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBERTY_LIBS = @LIBERTY_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @POPT_LIBS@ @LIBERTY_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MODINSTALLDIR = @MODINSTALLDIR@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPROFILE_DIR = @OPROFILE_DIR@
+OPROFILE_MODULE_ARCH = @OPROFILE_MODULE_ARCH@
+OP_CFLAGS = @OP_CFLAGS@
+OP_CXXFLAGS = @OP_CXXFLAGS@
+OP_DOCDIR = @OP_DOCDIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POPT_LIBS = @POPT_LIBS@
+PTRDIFF_T_TYPE = @PTRDIFF_T_TYPE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_INCLUDES = @QT_INCLUDES@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LIB = @QT_LIB@
+QT_LIBS = @QT_LIBS@
+QT_VERSION = @QT_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T_TYPE = @SIZE_T_TYPE@
+STRIP = @STRIP@
+UIC = @UIC@
+UIChelp = @UIChelp@
+VERSION = @VERSION@
+XMKMF = @XMKMF@
+XML_CATALOG = @XML_CATALOG@
+XSLTPROC = @XSLTPROC@
+XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+topdir = @topdir@
+SUBDIRS = liblegacy .
+oprofiled_SOURCES = \
+	init.c \
+	oprofiled.c \
+	oprofiled.h \
+	opd_stats.c \
+	opd_pipe.c \
+	opd_pipe.h \
+	opd_sfile.c \
+	opd_sfile.h \
+	opd_kernel.c \
+	opd_kernel.h \
+	opd_trans.c \
+	opd_trans.h \
+	opd_printf.h \
+	opd_stats.h \
+	opd_cookie.c \
+	opd_cookie.h \
+	opd_events.c \
+	opd_events.h \
+	opd_interface.h \
+	opd_mangling.c \
+	opd_mangling.h \
+	opd_perfmon.h \
+	opd_perfmon.c \
+	opd_anon.h \
+	opd_anon.c \
+	opd_spu.c \
+	opd_extended.h \
+	opd_extended.c \
+	opd_ibs.h \
+	opd_ibs.c \
+	opd_ibs_macro.h \
+	opd_ibs_trans.h \
+	opd_ibs_trans.c
+
+AM_CPPFLAGS = \
+	-I ${top_srcdir}/libabi \
+	-I ${top_srcdir}/libutil \
+	-I ${top_srcdir}/libop \
+	-I ${top_srcdir}/libdb
+
+
+# -fno-omit-frame-pointer needed for daemon build: see ChangeLog-2004 02-23
+AM_CFLAGS = @OP_CFLAGS@ -fno-omit-frame-pointer
+oprofiled_LDADD = \
+	liblegacy/liblegacy.a \
+	../libabi/libabi.a \
+	../libdb/libodb.a \
+	../libop/libop.a \
+	../libutil/libutil.a
+
+oprofiled_LINK = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign daemon/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign daemon/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p || test -f $$p1; \
+	  then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' `; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+oprofiled$(EXEEXT): $(oprofiled_OBJECTS) $(oprofiled_DEPENDENCIES) 
+	@rm -f oprofiled$(EXEEXT)
+	$(oprofiled_LINK) $(oprofiled_OBJECTS) $(oprofiled_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_anon.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_cookie.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_events.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_extended.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_ibs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_ibs_trans.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_kernel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_mangling.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_perfmon.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_pipe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_sfile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_spu.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_stats.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_trans.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oprofiled.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-libtool ctags ctags-recursive distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-binPROGRAMS install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am \
+	uninstall-binPROGRAMS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/oprofile-0.9.7/daemon/init.c b/oprofile-0.9.7/daemon/init.c
new file mode 100644
index 0000000..a79e36e
--- /dev/null
+++ b/oprofile-0.9.7/daemon/init.c
@@ -0,0 +1,372 @@
+/**
+ * @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 "opd_extended.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>
+#include <wait.h>
+#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";
+			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_path, 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());
+	opd_ext_deinitialize();
+
+	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/oprofile-0.9.7/daemon/liblegacy/Makefile.am b/oprofile-0.9.7/daemon/liblegacy/Makefile.am
new file mode 100644
index 0000000..51078a6
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/Makefile.am
@@ -0,0 +1,28 @@
+noinst_LIBRARIES = liblegacy.a
+
+# -fno-omit-frame-pointer needed for daemon build: see ChangeLog-2004 02-23
+AM_CFLAGS = @OP_CFLAGS@ -fno-omit-frame-pointer
+
+AM_CPPFLAGS = \
+	-I ${top_srcdir}/libutil \
+	-I ${top_srcdir}/libop \
+	-I ${top_srcdir}/libdb \
+	-I ${top_srcdir}/daemon
+
+liblegacy_a_SOURCES = \
+	opd_24_stats.c \
+	opd_24_stats.h \
+	opd_kernel.c \
+	opd_proc.c \
+	opd_image.c \
+	opd_mapping.c \
+	opd_parse_proc.c \
+	opd_image.h \
+	opd_mapping.h \
+	p_module.h \
+	opd_kernel.h \
+	opd_parse_proc.h \
+	opd_proc.h \
+	opd_sample_files.c \
+	opd_sample_files.h \
+	init.c
diff --git a/oprofile-0.9.7/daemon/liblegacy/Makefile.in b/oprofile-0.9.7/daemon/liblegacy/Makefile.in
new file mode 100644
index 0000000..974560d
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/Makefile.in
@@ -0,0 +1,558 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = daemon/liblegacy
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/binutils.m4 \
+	$(top_srcdir)/m4/builtinexpect.m4 \
+	$(top_srcdir)/m4/cellspubfdsupport.m4 \
+	$(top_srcdir)/m4/compileroption.m4 \
+	$(top_srcdir)/m4/configmodule.m4 \
+	$(top_srcdir)/m4/copyifchange.m4 $(top_srcdir)/m4/docbook.m4 \
+	$(top_srcdir)/m4/extradirs.m4 $(top_srcdir)/m4/findkernel.m4 \
+	$(top_srcdir)/m4/kerneloption.m4 \
+	$(top_srcdir)/m4/kernelversion.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/mallocattribute.m4 \
+	$(top_srcdir)/m4/poptconst.m4 \
+	$(top_srcdir)/m4/precompiledheader.m4 $(top_srcdir)/m4/qt.m4 \
+	$(top_srcdir)/m4/resultyn.m4 $(top_srcdir)/m4/sstream.m4 \
+	$(top_srcdir)/m4/typedef.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+liblegacy_a_AR = $(AR) $(ARFLAGS)
+liblegacy_a_LIBADD =
+am_liblegacy_a_OBJECTS = opd_24_stats.$(OBJEXT) opd_kernel.$(OBJEXT) \
+	opd_proc.$(OBJEXT) opd_image.$(OBJEXT) opd_mapping.$(OBJEXT) \
+	opd_parse_proc.$(OBJEXT) opd_sample_files.$(OBJEXT) \
+	init.$(OBJEXT)
+liblegacy_a_OBJECTS = $(am_liblegacy_a_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(liblegacy_a_SOURCES)
+DIST_SOURCES = $(liblegacy_a_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_LIBS = @BFD_LIBS@
+CAT_ENTRY_END = @CAT_ENTRY_END@
+CAT_ENTRY_START = @CAT_ENTRY_START@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOCBOOK_ROOT = @DOCBOOK_ROOT@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTRA_CFLAGS_MODULE = @EXTRA_CFLAGS_MODULE@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVA_HOMEDIR = @JAVA_HOMEDIR@
+KINC = @KINC@
+KSRC = @KSRC@
+KVERS = @KVERS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBERTY_LIBS = @LIBERTY_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MODINSTALLDIR = @MODINSTALLDIR@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPROFILE_DIR = @OPROFILE_DIR@
+OPROFILE_MODULE_ARCH = @OPROFILE_MODULE_ARCH@
+OP_CFLAGS = @OP_CFLAGS@
+OP_CXXFLAGS = @OP_CXXFLAGS@
+OP_DOCDIR = @OP_DOCDIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POPT_LIBS = @POPT_LIBS@
+PTRDIFF_T_TYPE = @PTRDIFF_T_TYPE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_INCLUDES = @QT_INCLUDES@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LIB = @QT_LIB@
+QT_LIBS = @QT_LIBS@
+QT_VERSION = @QT_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T_TYPE = @SIZE_T_TYPE@
+STRIP = @STRIP@
+UIC = @UIC@
+UIChelp = @UIChelp@
+VERSION = @VERSION@
+XMKMF = @XMKMF@
+XML_CATALOG = @XML_CATALOG@
+XSLTPROC = @XSLTPROC@
+XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+topdir = @topdir@
+noinst_LIBRARIES = liblegacy.a
+
+# -fno-omit-frame-pointer needed for daemon build: see ChangeLog-2004 02-23
+AM_CFLAGS = @OP_CFLAGS@ -fno-omit-frame-pointer
+AM_CPPFLAGS = \
+	-I ${top_srcdir}/libutil \
+	-I ${top_srcdir}/libop \
+	-I ${top_srcdir}/libdb \
+	-I ${top_srcdir}/daemon
+
+liblegacy_a_SOURCES = \
+	opd_24_stats.c \
+	opd_24_stats.h \
+	opd_kernel.c \
+	opd_proc.c \
+	opd_image.c \
+	opd_mapping.c \
+	opd_parse_proc.c \
+	opd_image.h \
+	opd_mapping.h \
+	p_module.h \
+	opd_kernel.h \
+	opd_parse_proc.h \
+	opd_proc.h \
+	opd_sample_files.c \
+	opd_sample_files.h \
+	init.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign daemon/liblegacy/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign daemon/liblegacy/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+liblegacy.a: $(liblegacy_a_OBJECTS) $(liblegacy_a_DEPENDENCIES) 
+	-rm -f liblegacy.a
+	$(liblegacy_a_AR) liblegacy.a $(liblegacy_a_OBJECTS) $(liblegacy_a_LIBADD)
+	$(RANLIB) liblegacy.a
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_24_stats.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_image.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_kernel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_mapping.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_parse_proc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_proc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opd_sample_files.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/oprofile-0.9.7/daemon/liblegacy/init.c b/oprofile-0.9.7/daemon/liblegacy/init.c
new file mode 100644
index 0000000..b2cd013
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/init.c
@@ -0,0 +1,387 @@
+/**
+ * @file daemon/liblegacy/init.c
+ * Daemon set up and main loop for 2.4
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#include "config.h"
+ 
+#include "opd_proc.h"
+#include "opd_mapping.h"
+#include "opd_24_stats.h"
+#include "opd_sample_files.h"
+#include "opd_image.h"
+#include "opd_parse_proc.h"
+#include "opd_kernel.h"
+#include "opd_printf.h"
+#include "oprofiled.h"
+
+#include "op_sample_file.h"
+#include "op_config_24.h"
+#include "op_interface.h"
+#include "op_libiberty.h"
+#include "op_deviceio.h"
+#include "op_events.h"
+#include "op_get_time.h"
+#include "op_fileio.h"
+
+#include <stdio.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+fd_t hashmapdevfd;
+
+int cpu_number;
+
+static fd_t devfd;
+static fd_t notedevfd;
+static struct op_buffer_head * sbuf;
+static size_t s_buf_bytesize;
+static struct op_note * nbuf;
+static size_t n_buf_bytesize;
+
+static void opd_sighup(void);
+static void opd_alarm(void);
+static void opd_sigterm(void);
+
+
+/**
+ * op_open_files - open necessary files
+ *
+ * Open the device files and the log file,
+ * and mmap() the hash map.
+ */
+static void op_open_files(void)
+{
+	hashmapdevfd = op_open_device(op_hash_device);
+	if (hashmapdevfd == -1) {
+		perror("Failed to open hash map device");
+		exit(EXIT_FAILURE);
+	}
+
+	notedevfd = op_open_device(op_note_device);
+	if (notedevfd == -1) {
+		if (errno == EINVAL)
+			fprintf(stderr, "Failed to open note device. Possibly you have passed incorrect\n"
+				"parameters. Check /var/log/messages.");
+		else
+			perror("Failed to open note device");
+		exit(EXIT_FAILURE);
+	}
+
+	devfd = op_open_device(op_device);
+	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);
+	}
+
+	opd_init_hash_map();
+
+	/* 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();
+
+	printf("oprofiled started %s", op_get_time());
+	fflush(stdout);
+}
+ 
+
+static void opd_do_samples(struct op_buffer_head const * buf);
+static void opd_do_notes(struct op_note const * opd_buf, size_t count);
+
+/**
+ * do_shutdown - shutdown cleanly, reading as much remaining data as possible.
+ * @param buf  sample buffer area
+ * @param size  size of sample buffer
+ * @param nbuf  note buffer area
+ * @param nsize  size of note buffer
+ */
+static void opd_shutdown(struct op_buffer_head * buf, size_t size, struct op_note * nbuf, size_t nsize)
+{
+	ssize_t count = -1;
+	ssize_t ncount = -1;
+
+	/* the dump may have added no samples, so we must set
+	 * non-blocking */
+	if (fcntl(devfd, F_SETFL, fcntl(devfd, F_GETFL) | O_NONBLOCK) < 0) {
+		perror("Failed to set non-blocking read for device: ");
+		exit(EXIT_FAILURE);
+	}
+
+	/* it's always OK to read the note device */
+	while (ncount < 0)
+		ncount = op_read_device(notedevfd, nbuf, nsize);
+
+	if (ncount > 0)
+		opd_do_notes(nbuf, ncount);
+
+	/* read as much as we can until we have exhausted the data
+	 * (EAGAIN is returned).
+	 *
+	 * This will not livelock as the profiler has been partially
+	 * shut down by now.
+	 */
+	while (1) {
+		count = op_read_device(devfd, buf, size);
+		if (count < 0 && errno == EAGAIN)
+			break;
+		verbprintf(vmisc, "Shutting down, state %d\n", buf->state);
+		opd_do_samples(buf);
+	}
+}
+ 
+
+/**
+ * opd_do_read - enter processing loop
+ * @param buf  buffer to read into
+ * @param size  size of buffer
+ * @param nbuf  note buffer
+ * @param nsize  size of note buffer
+ *
+ * Read some of a buffer from the device and process
+ * the contents.
+ */
+static void opd_do_read(struct op_buffer_head * buf, size_t size, struct op_note * nbuf, size_t nsize)
+{
+	while (1) {
+		ssize_t count = -1;
+		ssize_t ncount = -1;
+
+		/* loop to handle EINTR */
+		while (count < 0)
+			count = op_read_device(devfd, buf, size);
+
+		while (ncount < 0)
+			ncount = op_read_device(notedevfd, nbuf, nsize);
+
+		opd_do_notes(nbuf, ncount);
+		opd_do_samples(buf);
+
+		// we can lost a signal alarm or a signal hup but we don't
+		// take care.
+		if (signal_alarm) {
+			signal_alarm = 0;
+			opd_alarm();
+		}
+
+		if (signal_hup) {
+			signal_hup = 0;
+			opd_sighup();
+		}
+
+		if (signal_term)
+			opd_sigterm();
+ 
+		/* request to stop arrived */
+		if (buf->state == STOPPING) {
+			verbprintf(vmisc, "Shutting down by request.\n");
+			opd_shutdown(buf, size, nbuf, nsize);
+			return;
+		}
+	}
+}
+
+/**
+ * opd_do_notes - process a notes buffer
+ * @param opd_buf  buffer to process
+ * @param count  number of bytes in buffer
+ *
+ * Process a buffer of notes.
+ */
+static void opd_do_notes(struct op_note const * opd_buf, size_t count)
+{
+	uint i;
+	struct op_note const * note;
+
+	for (i = 0; i < count/sizeof(struct op_note); i++) {
+		note = &opd_buf[i];
+
+		opd_24_stats[OPD_NOTIFICATIONS]++;
+
+		switch (note->type) {
+			case OP_MAP:
+			case OP_EXEC:
+				if (note->type == OP_EXEC)
+					opd_handle_exec(note->pid, note->tgid);
+				opd_handle_mapping(note);
+				break;
+
+			case OP_FORK:
+				opd_handle_fork(note);
+				break;
+
+			case OP_DROP_MODULES:
+				opd_clear_module_info();
+				break;
+
+			case OP_EXIT:
+				opd_handle_exit(note);
+				break;
+
+			default:
+				fprintf(stderr, "Received unknown notification type %u\n", note->type);
+				abort();
+				break;
+		}
+	}
+}
+
+/**
+ * opd_do_samples - process a sample buffer
+ * @param opd_buf  buffer to process
+ *
+ * Process a buffer of samples.
+ * The signals specified by the global variable maskset are
+ * masked.
+ *
+ * If the sample could be processed correctly, it is written
+ * to the relevant sample file. Additionally mapping and
+ * process notifications are handled here.
+ */
+static void opd_do_samples(struct op_buffer_head const * opd_buf)
+{
+	uint i;
+	struct op_sample const * buffer = opd_buf->buffer; 
+
+	opd_24_stats[OPD_DUMP_COUNT]++;
+
+	verbprintf(vmisc, "Read buffer of %d entries for cpu %d.\n",
+		   (unsigned int)opd_buf->count, opd_buf->cpu_nr);
+ 
+	if (separate_cpu)
+		cpu_number = opd_buf->cpu_nr;
+	for (i = 0; i < opd_buf->count; i++) {
+		verbprintf(vsamples, "%.6u: EIP: 0x%.8lx pid: %.6d\n",
+			i, buffer[i].eip, buffer[i].pid);
+		opd_put_sample(&buffer[i]);
+	}
+}
+
+
+/**
+ * opd_alarm - clean up old procs, msync, and report stats
+ */
+static void opd_alarm(void)
+{
+	opd_sync_samples_files();
+
+	opd_age_procs();
+
+	opd_print_24_stats();
+
+	alarm(60 * 10);
+}
+ 
+
+/* re-open logfile for logrotate */
+static void opd_sighup(void)
+{
+	printf("Received SIGHUP.\n");
+	close(1);
+	close(2);
+	opd_open_logfile();
+	/* We just close them, and re-open them lazily as usual. */
+	opd_for_each_image(opd_close_image_samples_files);
+}
+
+
+static void clean_exit(void)
+{
+	opd_cleanup_hash_name();
+	op_free_events();
+	unlink(op_lock_file);
+}
+
+
+static void opd_sigterm(void)
+{
+	opd_print_24_stats();
+	printf("oprofiled stopped %s", op_get_time());
+	exit(EXIT_FAILURE);
+}
+ 
+
+static void opd_24_init(void)
+{
+	size_t i;
+	int opd_buf_size = OP_DEFAULT_BUF_SIZE;
+	int opd_note_buf_size = OP_DEFAULT_NOTE_SIZE;
+
+	if (!no_vmlinux)
+		opd_parse_kernel_range(kernel_range);
+	opd_buf_size = opd_read_fs_int(OP_MOUNT, "bufsize", 1);
+	opd_note_buf_size = opd_read_fs_int(OP_MOUNT, "notesize", 1);
+
+	s_buf_bytesize = sizeof(struct op_buffer_head) + opd_buf_size * sizeof(struct op_sample);
+
+	sbuf = xmalloc(s_buf_bytesize);
+
+	n_buf_bytesize = opd_note_buf_size * sizeof(struct op_note);
+	nbuf = xmalloc(n_buf_bytesize);
+
+	opd_init_images();
+	opd_init_procs();
+	opd_init_kernel_image();
+
+	for (i = 0; i < OPD_MAX_STATS; i++)
+		opd_24_stats[i] = 0;
+
+	if (atexit(clean_exit)) {
+		perror("oprofiled: couldn't set exit cleanup: ");
+		exit(EXIT_FAILURE);
+	}
+}
+
+
+static void opd_24_start(void)
+{
+	op_open_files();
+
+	/* yes, this is racey. */
+	opd_get_ascii_procs();
+
+	/* simple sleep-then-process loop */
+	opd_do_read(sbuf, s_buf_bytesize, nbuf, n_buf_bytesize);
+}
+
+
+static void opd_24_exit(void)
+{
+	opd_print_24_stats();
+	printf("oprofiled stopped %s", op_get_time());
+
+	free(sbuf);
+	free(nbuf);
+	opd_clear_module_info();
+	opd_proc_cleanup();
+	/* kernel/module image are not owned by a proc, we must cleanup them */
+	opd_for_each_image(opd_delete_image);
+}
+
+
+struct oprofiled_ops opd_24_ops = {
+	.init = opd_24_init,
+	.start = opd_24_start,
+	.exit = opd_24_exit
+};
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_24_stats.c b/oprofile-0.9.7/daemon/liblegacy/opd_24_stats.c
new file mode 100644
index 0000000..52425c4
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_24_stats.c
@@ -0,0 +1,62 @@
+/**
+ * @file opd_24_stats.c
+ * Management of daemon statistics
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#include "opd_24_stats.h"
+#include "opd_proc.h"
+#include "opd_image.h"
+#include "oprofiled.h"
+
+#include "op_get_time.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+
+unsigned long opd_24_stats[OPD_MAX_STATS];
+
+void opd_print_24_stats(void)
+{
+	printf("\n%s\n", op_get_time());
+	printf("Nr. proc struct: %d\n", opd_get_nr_procs());
+	printf("Nr. image struct: %d\n", opd_get_nr_images());
+	printf("Nr. kernel samples: %lu\n", opd_24_stats[OPD_KERNEL]);
+	printf("Nr. modules samples: %lu\n", opd_24_stats[OPD_MODULE]);
+	printf("Nr. modules samples lost: %lu\n", opd_24_stats[OPD_LOST_MODULE]);
+	printf("Nr. samples lost due to no process information: %lu\n",
+		opd_24_stats[OPD_LOST_PROCESS]);
+	printf("Nr. samples lost due to sample file open failure: %lu\n",
+		opd_24_stats[OPD_LOST_SAMPLEFILE]);
+	printf("Nr. process samples in user-space: %lu\n", opd_24_stats[OPD_PROCESS]);
+	printf("Nr. samples lost due to no map information: %lu\n",
+		opd_24_stats[OPD_LOST_MAP_PROCESS]);
+	if (opd_24_stats[OPD_PROC_QUEUE_ACCESS]) {
+		printf("Average depth of search of proc queue: %f\n",
+			(double)opd_24_stats[OPD_PROC_QUEUE_DEPTH]
+			/ (double)opd_24_stats[OPD_PROC_QUEUE_ACCESS]);
+	}
+	if (opd_24_stats[OPD_MAP_ARRAY_ACCESS]) {
+		printf("Average depth of iteration through mapping array: %f\n",
+			(double)opd_24_stats[OPD_MAP_ARRAY_DEPTH]
+			/ (double)opd_24_stats[OPD_MAP_ARRAY_ACCESS]);
+	}
+	if (opd_24_stats[OPD_IMAGE_HASH_ACCESS]) {
+		printf("Average depth of iteration through image hash array: %f\n",
+			(double)opd_24_stats[OPD_IMAGE_HASH_DEPTH]
+			/ (double)opd_24_stats[OPD_IMAGE_HASH_ACCESS]);
+	}
+	printf("Nr. sample dumps: %lu\n", opd_24_stats[OPD_DUMP_COUNT]);
+	printf("Nr. samples total: %lu\n", opd_24_stats[OPD_SAMPLES]);
+	printf("Nr. notifications: %lu\n", opd_24_stats[OPD_NOTIFICATIONS]);
+	printf("Nr. kernel note buffer overflow: %u\n",
+	       opd_read_fs_int(OP_MOUNT, "note_buffer_overflow", 0));
+	printf("Nr. kernel samples buffer overflow: %u\n",
+	       opd_read_fs_int(OP_MOUNT, "buffer_overflow", 0));
+	fflush(stdout);
+}
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_24_stats.h b/oprofile-0.9.7/daemon/liblegacy/opd_24_stats.h
new file mode 100644
index 0000000..4acd860
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_24_stats.h
@@ -0,0 +1,39 @@
+/**
+ * @file opd_24_stats.h
+ * Management of daemon statistics
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#ifndef OPD_24_STATS_H
+#define OPD_24_STATS_H
+
+extern unsigned long opd_24_stats[];
+
+enum {  OPD_KERNEL, /**< nr kernel samples */
+	OPD_MODULE, /**< nr module samples */
+	OPD_LOST_MODULE, /**< nr samples in module for which modules can not be located */
+	OPD_LOST_PROCESS, /**< nr samples for which process info couldn't be accessed */
+	OPD_PROCESS, /**< nr userspace samples */
+	OPD_LOST_MAP_PROCESS, /**< nr samples for which map info couldn't be accessed */
+	OPD_LOST_SAMPLEFILE, /**< nr samples for which sample file can't be opened */
+	OPD_PROC_QUEUE_ACCESS, /**< nr accesses of proc queue */
+	OPD_PROC_QUEUE_DEPTH, /**< cumulative depth of proc queue accesses */
+	OPD_DUMP_COUNT, /**< nr of times buffer is read */
+	OPD_MAP_ARRAY_ACCESS, /**< nr accesses of map array */
+	OPD_MAP_ARRAY_DEPTH, /**< cumulative depth of map array accesses */
+	OPD_IMAGE_HASH_ACCESS,  /**< nr opd_find_image() */
+	OPD_IMAGE_HASH_DEPTH,  /**< cumulative depth of image search */
+	OPD_SAMPLES, /**< nr distinct samples */
+	OPD_NOTIFICATIONS, /**< nr notifications */
+	OPD_MAX_STATS /**< end of stats */
+	};
+
+/** opd_print_24_stats - print out latest statistics */
+void opd_print_24_stats(void);
+
+#endif /* OPD_24_STATS_H */
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_image.c b/oprofile-0.9.7/daemon/liblegacy/opd_image.c
new file mode 100644
index 0000000..ac6b5a2
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_image.c
@@ -0,0 +1,264 @@
+/**
+ * @file opd_image.c
+ * Management of binary images
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#include "opd_image.h"
+#include "opd_printf.h"
+#include "opd_sample_files.h"
+#include "opd_24_stats.h"
+#include "oprofiled.h"
+
+#include "op_file.h"
+#include "op_config_24.h"
+#include "op_libiberty.h"
+#include "op_string.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+/* maintained for statistics purpose only */
+static int nr_images;
+
+/* list of images */
+#define OPD_IMAGE_HASH_SIZE 2048
+static struct list_head opd_images[OPD_IMAGE_HASH_SIZE];
+
+
+void opd_init_images(void)
+{
+	int i;
+	for (i = 0; i < OPD_IMAGE_HASH_SIZE; ++i)
+		list_init(&opd_images[i]);
+}
+
+
+int opd_get_nr_images(void)
+{
+	return nr_images;
+}
+
+
+void opd_delete_image(struct opd_image * image)
+{
+	verbprintf(vmisc, "Deleting image: name %s app_name %s, kernel %d, "
+	           "tid %d, tgid %d ref count %u\n",
+	           image->name, image->app_name, image->kernel,
+	           image->tid, image->tgid, (int)image->ref_count);
+
+	if (image->ref_count <= 0) {
+		printf("image->ref_count < 0 for image: name %s app_name %s, "
+		       "kernel %d, tid %d, tgid %d ref count %u\n",
+		       image->name, image->app_name, image->kernel,
+		       image->tid, image->tgid, image->ref_count);
+		abort();
+	}
+
+	if (--image->ref_count != 0)
+		return;
+
+	if (image->name)
+		free(image->name);
+	if (image->app_name)
+		free(image->app_name);
+	list_del(&image->hash_next);
+	opd_close_image_samples_files(image);
+	free(image);
+
+	nr_images--;
+}
+
+
+void opd_for_each_image(opd_image_cb image_cb)
+{
+	struct list_head * pos;
+	struct list_head * pos2;
+	int i;
+
+	for (i = 0; i < OPD_IMAGE_HASH_SIZE; ++i) {
+		list_for_each_safe(pos, pos2, &opd_images[i]) {
+			struct opd_image * image =
+				list_entry(pos, struct opd_image, hash_next);
+			image_cb(image);
+		}
+	}
+}
+ 
+
+/**
+ * opd_hash_image - hash an image
+ * @param hash  hash of image name
+ * @param tid  thread id
+ * @param tgid  thread group id
+ *
+ * return the hash code for the passed parameters
+ */
+static size_t opd_hash_image(char const * name, pid_t tid, pid_t tgid)
+{
+	size_t hash = op_hash_string(name);
+	if (separate_thread)
+		hash += tid + tgid;
+	return  hash % OPD_IMAGE_HASH_SIZE;
+}
+
+
+/**
+ * opd_new_image - create an image sample file
+ * @param app_name  the application name where belongs this image
+ * @param name  name of the image to add
+ * @param kernel  is the image a kernel/module image
+ * @param tid  thread id
+ * @param tgid  thread group id
+ *
+ * image at funtion entry is uninitialised
+ * name is copied i.e. should be GC'd separately from the
+ * image structure if appropriate.
+ *
+ * Initialise an opd_image struct for the image image
+ * without opening the associated samples files. At return
+ * the image is fully initialized.
+ */
+static struct opd_image *
+opd_new_image(char const * name, char const * app_name, int kernel,
+              pid_t tid, pid_t tgid)
+{
+	size_t hash_image;
+	struct opd_image * image;
+
+	verbprintf(vmisc, "Creating image: %s %s, kernel %d, tid %d, "
+	           "tgid %d\n", name, app_name, kernel, tid, tgid);
+
+	image = xmalloc(sizeof(struct opd_image));
+
+	list_init(&image->hash_next);
+	image->name = xstrdup(name);
+	image->kernel = kernel;
+	image->tid = tid;
+	image->tgid = tgid;
+	image->ref_count = 0;
+	image->app_name = app_name ? xstrdup(app_name) : NULL;
+	image->mtime = op_get_mtime(image->name);
+
+	image->ignored = 1;
+	if (separate_lib && app_name)
+		image->ignored = is_image_ignored(app_name);
+	if (image->ignored)
+		image->ignored = is_image_ignored(name);
+
+	memset(image->sfiles, '\0', NR_CPUS * sizeof(struct opd_24_sfile **));
+
+	hash_image = opd_hash_image(name, tid, tgid);
+	list_add(&image->hash_next, &opd_images[hash_image]);
+
+	nr_images++;
+
+	return image;
+}
+
+
+/**
+ * is_same_image - check for identical image
+ * @param image  image to compare
+ * @param name  name of image
+ * @param app_name image must belong to this application name
+ * @param tid  thread id
+ * @param tgid  thread group id
+ *
+ * on entry caller have checked than strcmp(image->name, name) == 0
+ * return 0 if the couple (name, app_name) refers to same image
+ */
+static int is_same_image(struct opd_image const * image, char const * app_name,
+                         pid_t tid, pid_t tgid)
+{
+	/* correctness is really important here, if we fail to recognize
+	 * identical image we will open/mmap multiple time the same samples
+	 * files which is not supported by the kernel, strange assertion
+	 * failure in libfd is a typical symptom of that */
+
+	if (separate_thread) {
+		if (image->tid != tid || image->tgid != tgid)
+			return 1;
+	}
+
+	/* if !separate_lib, the comparison made by caller is enough */
+	if (!separate_lib)
+		return 0;
+
+	if (image->app_name == NULL && app_name == NULL)
+		return 0;
+
+	if (image->app_name != NULL && app_name != NULL &&
+	    !strcmp(image->app_name, app_name))
+		return 0;
+
+	/* /proc parsed image come with a non null app_name but notification
+	 * for application itself come with a null app_name, in this case
+	 * the test above fail so check for this case. */
+	if (image->app_name && !app_name && !strcmp(image->app_name, image->name))
+		return 0;
+
+	return 1;
+}
+
+
+/**
+ * opd_find_image - find an image
+ * @param name  name of image to find
+ * @param hash  hash of image to find
+ * @param app_name  the application name where belongs this image
+ * @param tid  thread id
+ * @param tgid  thread group id
+ *
+ * Returns the image pointer for the file specified by name, or %NULL.
+ */
+static struct opd_image * opd_find_image(char const * name, 
+                                char const * app_name, pid_t tid, pid_t tgid)
+{
+	/* suppress uninitialized use warning */
+	struct opd_image * image = 0;
+	struct list_head * pos;
+	size_t bucket;
+
+	opd_24_stats[OPD_IMAGE_HASH_ACCESS]++;
+	bucket = opd_hash_image(name, tid, tgid);
+	list_for_each(pos, &opd_images[bucket]) {
+		opd_24_stats[OPD_IMAGE_HASH_DEPTH]++;
+		image = list_entry(pos, struct opd_image, hash_next);
+
+		if (!strcmp(image->name, name)) {
+			if (!is_same_image(image, app_name, tid, tgid))
+				break;
+		}
+	}
+
+	if (pos == &opd_images[bucket])
+		return NULL;
+
+	/* The app_name field is always valid */
+	return image;
+}
+
+ 
+struct opd_image * opd_get_image(char const * name, char const * app_name,
+                                 int kernel, pid_t tid, pid_t tgid)
+{
+	struct opd_image * image;
+	if ((image = opd_find_image(name, app_name, tid, tgid)) == NULL)
+		image = opd_new_image(name, app_name, kernel, tid, tgid);
+
+	return image;
+}
+
+
+struct opd_image * opd_get_kernel_image(char const * name,
+                               char const * app_name, pid_t tid, pid_t tgid)
+{
+	return opd_get_image(name, app_name, 1, tid, tgid);
+}
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_image.h b/oprofile-0.9.7/daemon/liblegacy/opd_image.h
new file mode 100644
index 0000000..5d55270
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_image.h
@@ -0,0 +1,111 @@
+/**
+ * @file opd_image.h
+ * Management of binary images
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#ifndef OPD_IMAGE_H
+#define OPD_IMAGE_H
+
+#include "op_list.h"
+#include "op_config_24.h"
+#include "op_types.h"
+
+#include <time.h>
+
+struct opd_24_sfile;
+
+/**
+ * A binary (library, application, kernel or module)
+ * is represented by a struct opd_image.
+ */
+struct opd_image {
+	/** used by container of opd_images */
+	struct list_head hash_next;
+	/** how many time this opd_image is referenced */
+	int ref_count;
+	/** all samples files belonging to this image */
+	struct opd_24_sfile ** sfiles[NR_CPUS];
+	/** name of this image */
+	char * name;
+	/** the application name where belongs this image, NULL if image has
+	 * no owner (such as vmlinux or module) */
+	char * app_name;
+	/** thread id, on 2.2 kernel always == to tgid */
+	pid_t tid;
+	/** thread group id  */
+	pid_t tgid;
+	/** time of last modification */
+	time_t mtime;
+	/** kernel image or not */
+	int kernel;
+	/** non zero if this image must be profiled */
+	int ignored;
+};
+
+/** callback function passed to opd_for_each_image() */
+typedef void (*opd_image_cb)(struct opd_image *);
+
+/**
+ * @param imagecb callback to apply onto each existing image struct
+ *
+ * the callback receive a struct opd_image * (not a const struct) and is
+ * allowed to freeze the image struct itself.
+ */
+void opd_for_each_image(opd_image_cb imagecb);
+
+/**
+ * initialize opd_image container
+ */
+void opd_init_images(void);
+
+/**
+ * @param image  the image pointer
+ *
+ * Decrement reference count of image, if reference count is zero flush and
+ * close the samples files then freeze all memory belonging to this image.
+ */
+void opd_delete_image(struct opd_image * image);
+
+/**
+ * opd_get_kernel_image - get a kernel image
+ * @param name of image
+ * @param app_name application owner of this kernel image. non-null only
+ *  when separate_kernel_sample != 0
+ * @param tid  thread id
+ * @param tgid  thread group id
+ *
+ * Create and initialise an image adding it to the image lists and to image
+ * hash list. Note than at creation reference count is zero, it's caller
+ * responsabilities to incr this count.
+ */
+struct opd_image * opd_get_kernel_image(char const * name,
+     char const * app_name, pid_t tid, pid_t tgid);
+
+/**
+ * opd_get_image - get an image from the image structure
+ * @param name  name of image
+ * @param app_name  the application name where belongs this image
+ * @param kernel  is the image a kernel/module image
+ * @param tid  thread id
+ * @param tgid  thread group id
+ *
+ * Get the image specified by the file name name from the
+ * image structure. If it is not present, the image is
+ * added to the structure. In either case, the image number
+ * is returned.
+ */
+struct opd_image * opd_get_image(char const * name, char const * app_name,
+                                 int kernel, pid_t tid, pid_t tgid);
+
+/**
+ * opd_get_nr_images - return number of images
+ */
+int opd_get_nr_images(void);
+
+#endif /* OPD_IMAGE_H */
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_kernel.c b/oprofile-0.9.7/daemon/liblegacy/opd_kernel.c
new file mode 100644
index 0000000..1131aa7
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_kernel.c
@@ -0,0 +1,464 @@
+/**
+ * @file daemon/liblegacy/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
+ */
+
+#include "opd_kernel.h"
+#include "opd_proc.h"
+#include "opd_image.h"
+#include "opd_mapping.h"
+#include "opd_printf.h"
+#include "opd_24_stats.h"
+#include "oprofiled.h"
+
+#include "op_fileio.h"
+#include "op_config_24.h"
+#include "op_libiberty.h"
+
+#include "p_module.h"
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+
+/* kernel module */
+struct opd_module {
+	char * name;
+	struct opd_image * image;
+	unsigned long start;
+	unsigned long end;
+	struct list_head module_list;
+};
+
+static struct opd_image * kernel_image;
+
+/* kernel and module support */
+static unsigned long kernel_start;
+static unsigned long kernel_end;
+static struct list_head opd_modules = { &opd_modules, &opd_modules };
+static unsigned int nr_modules=0;
+
+void opd_init_kernel_image(void)
+{
+	/* for no vmlinux */
+	if (!vmlinux)
+		vmlinux = "no-vmlinux";
+	kernel_image = opd_get_kernel_image(vmlinux, NULL, 0, 0);
+	kernel_image->ref_count++;
+}
+
+
+void opd_parse_kernel_range(char const * arg)
+{
+	sscanf(arg, "%lx,%lx", &kernel_start, &kernel_end);
+
+	verbprintf(vmisc, "OPD_PARSE_KERNEL_RANGE: kernel_start = %lx, kernel_end = %lx\n",
+		   kernel_start, kernel_end);
+
+	if (!kernel_start && !kernel_end) {
+		fprintf(stderr,
+			"Warning: mis-parsed kernel range: %lx-%lx\n",
+			kernel_start, kernel_end);
+		fprintf(stderr, "kernel profiles will be wrong.\n");
+	}
+}
+
+
+/**
+ * opd_create_module - allocate and initialise a module description
+ * @param name module name
+ * @param start start address
+ * @param end end address
+ */
+static struct opd_module *
+opd_create_module(char * name, unsigned long start, unsigned long end)
+{
+	struct opd_module * module = xmalloc(sizeof(struct opd_module));
+
+	module->name = xstrdup(name);
+	module->image = NULL;
+	module->start = start;
+	module->end = end;
+	list_add(&module->module_list, &opd_modules);
+
+	return module;
+}
+
+
+/**
+ * opd_find_module_by_name - find a module by name, ccreating a new once if
+ * search fail
+ * @param name module name
+ */
+static struct opd_module * opd_find_module_by_name(char * name)
+{
+	struct list_head * pos;
+	struct opd_module * module;
+
+	list_for_each(pos, &opd_modules) {
+		module = list_entry(pos, struct opd_module, module_list);
+		if (!strcmp(name, module->name))
+			return module;
+	}
+
+	return opd_create_module(name, 0, 0);
+}
+
+
+void opd_clear_module_info(void)
+{
+	struct list_head * pos;
+	struct list_head * pos2;
+	struct opd_module * module;
+
+	verbprintf(vmodule, "Removing module list\n");
+	list_for_each_safe(pos, pos2, &opd_modules) {
+		module = list_entry(pos, struct opd_module, module_list);
+		free(module->name);
+		free(module);
+	}
+
+	list_init(&opd_modules);
+
+	opd_clear_kernel_mapping();
+}
+
+
+/**
+ * opd_get_module_info - parse mapping information for kernel modules
+ *
+ * Parse the file /proc/ksyms to read in mapping information for
+ * all kernel modules. The modutils package adds special symbols
+ * to this file which allows determination of the module image
+ * and mapping addresses of the form :
+ *
+ * __insmod_modulename_Oobjectfile_Mmtime_Vversion
+ * __insmod_modulename_Ssectionname_Llength
+ *
+ * Currently the image file "objectfile" is stored, and details of
+ * ".text" sections.
+ *
+ * There is no query_module API that allow to get directly the pathname
+ * of a module so we need to parse all the /proc/ksyms.
+ */
+static void opd_get_module_info(void)
+{
+	char * line;
+	char * cp, * cp2, * cp3;
+	FILE * fp;
+	struct opd_module * mod;
+	char * modname;
+	char * filename;
+
+	nr_modules=0;
+
+	fp = op_try_open_file("/proc/ksyms", "r");
+
+	if (!fp) {
+		printf("oprofiled: /proc/ksyms not readable, can't process module samples.\n");
+		return;
+	}
+
+	verbprintf(vmodule, "Read module info.\n");
+
+	while (1) {
+		line = op_get_line(fp);
+
+		if (!line)
+			break;
+
+		if (!strcmp("", line)) {
+			free(line);
+			continue;
+		}
+
+		if (strlen(line) < 9) {
+			printf("oprofiled: corrupt /proc/ksyms line \"%s\"\n", line);
+			break;
+		}
+
+		if (strncmp("__insmod_", line + 9, 9)) {
+			free(line);
+			continue;
+		}
+
+		cp = line + 18;
+		cp2 = cp;
+		while ((*cp2) && !!strncmp("_S", cp2+1, 2) && !!strncmp("_O", cp2+1, 2))
+			cp2++;
+
+		if (!*cp2) {
+			printf("oprofiled: corrupt /proc/ksyms line \"%s\"\n", line);
+			break;
+		}
+
+		cp2++;
+
+		modname = xmalloc((size_t)((cp2-cp) + 1));
+		strncpy(modname, cp, (size_t)((cp2-cp)));
+		modname[cp2-cp] = '\0';
+
+		mod = opd_find_module_by_name(modname);
+
+		free(modname);
+
+		switch (*(++cp2)) {
+			case 'O':
+				/* get filename */
+				cp2++;
+				cp3 = cp2;
+
+				while ((*cp3) && !!strncmp("_M", cp3+1, 2))
+					cp3++;
+
+				if (!*cp3) {
+					free(line);
+					continue;
+				}
+
+				cp3++;
+				filename = xmalloc((size_t)(cp3 - cp2 + 1));
+				strncpy(filename, cp2, (size_t)(cp3 - cp2));
+				filename[cp3-cp2] = '\0';
+
+				mod->image = opd_get_kernel_image(filename, NULL, 0, 0);
+				mod->image->ref_count++;
+				free(filename);
+				break;
+
+			case 'S':
+				/* get extent of .text section */
+				cp2++;
+				if (strncmp(".text_L", cp2, 7)) {
+					free(line);
+					continue;
+				}
+
+				cp2 += 7;
+				sscanf(line, "%lx", &mod->start);
+				sscanf(cp2, "%lu", &mod->end);
+				mod->end += mod->start;
+				break;
+		}
+
+		free(line);
+	}
+
+	if (line)
+		free(line);
+	op_close_file(fp);
+}
+ 
+
+/**
+ * opd_drop_module_sample - drop a module sample efficiently
+ * @param eip  eip of sample
+ *
+ * This function is called to recover from failing to put a samples even
+ * after re-reading /proc/ksyms. It's either a rogue sample, or from a module
+ * that didn't create symbols (like in some initrd setups). So we check with
+ * query_module() if we can place it in a symbol-less module, and if so create
+ * a negative entry for it, to quickly ignore future samples.
+ *
+ * Problem uncovered by Bob Montgomery <bobm@fc.hp.com>
+ *
+ */
+static void opd_drop_module_sample(unsigned long eip)
+{
+	char * module_names;
+	char * name;
+	size_t size = 1024;
+	size_t ret;
+	uint nr_mods;
+	uint mod = 0;
+
+	opd_24_stats[OPD_LOST_MODULE]++;
+
+	module_names = xmalloc(size);
+	while (query_module(NULL, QM_MODULES, module_names, size, &ret)) {
+		if (errno != ENOSPC) {
+			verbprintf(vmodule, "query_module failed: %s\n", strerror(errno));
+			return;
+		}
+		size = ret;
+		module_names = xrealloc(module_names, size);
+	}
+
+	nr_mods = ret;
+	name = module_names;
+
+	while (mod < nr_mods) {
+		struct module_info info;
+		if (!query_module(name, QM_INFO, &info, sizeof(info), &ret)) {
+			if (eip >= info.addr && eip < info.addr + info.size) {
+				verbprintf(vmodule, "Sample from unprofilable module %s\n", name);
+				opd_create_module(name, info.addr, info.addr + info.size);
+				break;
+			}
+		}
+		mod++;
+		name += strlen(name) + 1;
+	}
+
+	if (module_names)
+		free(module_names);
+}
+
+
+/**
+ * opd_find_module_by_eip - find a module by its eip
+ * @param eip  EIP value
+ *
+ * find in the modules container the module which
+ * contain this eip return %NULL if not found.
+ * caller must check than the module image is valid
+ */
+static struct opd_module * opd_find_module_by_eip(unsigned long eip)
+{
+	struct list_head * pos;
+	struct opd_module * module;
+
+	list_for_each(pos, &opd_modules) {
+		module = list_entry(pos, struct opd_module, module_list);
+		if (module->start <= eip && module->end > eip)
+			return module;
+	}
+
+	return NULL;
+}
+
+
+/**
+ * opd_handle_module_sample - process a module sample
+ * @param eip  EIP value
+ * @param counter  counter number
+ *
+ * Process a sample in module address space. The sample eip
+ * is matched against module information. If the search was
+ * successful, the sample is output to the relevant file.
+ *
+ * Note that for modules and the kernel, the offset will be
+ * wrong in the file, as it is not a file offset, but the offset
+ * from the text section. This is fixed up in pp.
+ *
+ * If the sample could not be located in a module, it is treated
+ * as a kernel sample.
+ */
+static void opd_handle_module_sample(unsigned long eip, u32 counter)
+{
+	struct opd_module * module;
+
+	module = opd_find_module_by_eip(eip);
+	if (!module) {
+		/* not found in known modules, re-read our info and retry */
+		opd_clear_module_info();
+		opd_get_module_info();
+
+		module = opd_find_module_by_eip(eip);
+	}
+
+	if (module) {
+		if (module->image != NULL) {
+			opd_24_stats[OPD_MODULE]++;
+			opd_put_image_sample(module->image,
+					     eip - module->start, counter);
+		} else {
+			opd_24_stats[OPD_LOST_MODULE]++;
+			verbprintf(vmodule, "No image for sampled module %s\n",
+				   module->name);
+		}
+	} else {
+		opd_drop_module_sample(eip);
+	}
+}
+
+
+void opd_handle_kernel_sample(unsigned long eip, u32 counter)
+{
+	if (no_vmlinux || eip < kernel_end) {
+		opd_24_stats[OPD_KERNEL]++;
+		opd_put_image_sample(kernel_image, eip - kernel_start, counter);
+		return;
+	}
+
+	/* in a module */
+	opd_handle_module_sample(eip, counter);
+}
+ 
+
+int opd_eip_is_kernel(unsigned long eip)
+{
+#ifdef __i386
+#define KERNEL_OFFSET 0xC0000000
+	/*
+	 * kernel_start == 0 when using --no-vmlinux.
+	 * This is wrong, wrong, wrong, wrong, but we don't have much
+	 * choice. It obviously breaks for IA64.
+	 */
+	if (!kernel_start)
+		return eip >= KERNEL_OFFSET;
+#endif
+
+	return eip >= kernel_start;
+}
+
+
+void opd_add_kernel_map(struct opd_proc * proc, unsigned long eip)
+{
+	struct opd_module * module;
+	struct opd_image * image;
+	char const * app_name;
+
+	app_name = proc->name;
+	if (!app_name) {
+		verbprintf(vmisc, "un-named proc for tid %d\n", proc->tid);
+		return;
+	}
+
+
+	if (eip < kernel_end) {
+		image = opd_get_kernel_image(vmlinux, app_name, proc->tid, proc->tgid);
+		if (!image) {
+			verbprintf(vmisc, "Can't create image for %s %s\n", vmlinux, app_name);
+			return;
+		}
+
+		opd_add_mapping(proc, image, kernel_start, 0, kernel_end);
+		return;
+	}
+
+	module = opd_find_module_by_eip(eip);
+	if (!module) {
+		/* not found in known modules, re-read our info and retry */
+		opd_clear_module_info();
+		opd_get_module_info();
+
+		module = opd_find_module_by_eip(eip);
+	}
+
+	if (module) {
+		/* module->name is only the module name not the full path */
+		char const * module_name = 0;
+		if (module->image)
+			module_name = module->image->name;
+		if (!module_name) {
+			verbprintf(vmodule, "unable to get path name for module %s\n",
+			       module->name);
+			module_name = module->name;
+		}
+		image = opd_get_kernel_image(module_name, app_name, proc->tid, proc->tgid);
+		if (!image) {
+			verbprintf(vmodule, "Can't create image for %s %s\n",
+			       module->name, app_name);
+			return;
+		}
+		opd_add_mapping(proc, image, module->start, 0, module->end);
+	} else {
+		opd_drop_module_sample(eip);
+	}
+}
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_kernel.h b/oprofile-0.9.7/daemon/liblegacy/opd_kernel.h
new file mode 100644
index 0000000..f854ae0
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_kernel.h
@@ -0,0 +1,67 @@
+/**
+ * @file daemon/liblegacy/opd_kernel.h
+ * Dealing with the kernel and kernel module samples
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#ifndef OPD_KERNEL_H
+#define OPD_KERNEL_H
+
+#include "op_types.h"
+
+struct opd_proc;
+
+/**
+ * opd_init_kernel_image - initialise the kernel image
+ */
+void opd_init_kernel_image(void);
+
+/**
+ * opd_parse_kernel_range - parse the kernel range values
+ */
+void opd_parse_kernel_range(char const * arg);
+
+/**
+ * opd_clear_module_info - clear kernel module information
+ *
+ * Clear and free all kernel module information and reset
+ * values.
+ */
+void opd_clear_module_info(void);
+
+/**
+ * opd_handle_kernel_sample - process a kernel sample
+ * @param eip  EIP value of sample
+ * @param counter  counter number
+ *
+ * Handle a sample in kernel address space or in a module. The sample is
+ * output to the relevant image file.
+ */
+void opd_handle_kernel_sample(unsigned long eip, u32 counter);
+
+/**
+ * opd_eip_is_kernel - is the sample from kernel/module space
+ * @param eip  EIP value
+ *
+ * Returns %1 if eip is in the address space starting at
+ * kernel_start, %0 otherwise.
+ */
+int opd_eip_is_kernel(unsigned long eip);
+
+/**
+ * opd_add_kernel_map - add a module or kernel maps to a proc struct
+ *
+ * @param proc owning proc of the new mapping
+ * @param eip eip inside the new mapping
+ *
+ * We assume than eip >= kernel_start
+ *
+ */
+void opd_add_kernel_map(struct opd_proc * proc, unsigned long eip);
+
+#endif /* OPD_KERNEL_H */
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_mapping.c b/oprofile-0.9.7/daemon/liblegacy/opd_mapping.c
new file mode 100644
index 0000000..699c475
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_mapping.c
@@ -0,0 +1,170 @@
+/**
+ * @file opd_mapping.c
+ * Management of process mappings
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#include "opd_mapping.h"
+#include "opd_proc.h"
+#include "opd_image.h"
+#include "opd_printf.h"
+
+#include "op_interface.h"
+#include "op_config_24.h"
+#include "op_libiberty.h"
+
+#include <sys/mman.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+/* hash map device mmap */
+static struct op_hash_index * hashmap;
+/* already seen mapping name */
+static char const * hash_name[OP_HASH_MAP_NR];
+
+
+void opd_cleanup_hash_name(void)
+{
+	int i;
+	for (i = 0; i < OP_HASH_MAP_NR; ++i)
+		free((char *)hash_name[i]);
+	
+}
+
+
+void opd_init_hash_map(void)
+{
+	extern fd_t hashmapdevfd;
+
+	hashmap = mmap(0, OP_HASH_MAP_SIZE, PROT_READ, MAP_SHARED, hashmapdevfd, 0);
+	if ((long)hashmap == -1) {
+		perror("oprofiled: couldn't mmap hash map");
+		exit(EXIT_FAILURE);
+	}
+
+}
+
+
+void opd_kill_maps(struct opd_proc * proc)
+{
+	struct list_head * pos, * pos2;
+
+	list_for_each_safe(pos, pos2, &proc->maps) {
+		struct opd_map * map = list_entry(pos, struct opd_map, next);
+		list_del(pos);
+		opd_delete_image(map->image);
+		free(map);
+	}
+}
+
+
+void opd_add_mapping(struct opd_proc * proc, struct opd_image * image,
+		unsigned long start, unsigned long offset, unsigned long end)
+{
+	struct opd_map * map;
+
+	verbprintf(vmisc, "Adding mapping for process %d: 0x%.8lx-0x%.8lx, off 0x%.8lx, \"%s\"\n",
+		proc->tid, start, end, offset, image->name);
+
+	map = malloc(sizeof(struct opd_map));
+
+	/* first map is the primary image */
+	if (list_empty(&proc->maps)) {
+		if (proc->name)
+			free((char *)proc->name);
+		proc->name = xstrdup(image->name);
+	}
+
+	image->ref_count++;
+
+	map->image = image;
+	map->start = start;
+	map->offset = offset;
+	map->end = end;
+	list_add_tail(&map->next, &proc->maps);
+}
+
+
+/**
+ * get_from_pool - retrieve string from hash map pool
+ * @param ind index into pool
+ */
+inline static char * get_from_pool(uint ind)
+{
+	return ((char *)(hashmap + OP_HASH_MAP_NR) + ind);
+}
+
+
+/**
+ * opg_get_hash_name - find a mapping name from a hash
+ * @param hash hash value for this name
+ */
+static char const * opd_get_hash_name(int hash)
+{
+	char file[PATH_MAX];
+	char * c = &file[PATH_MAX-1];
+	int orighash = hash;
+
+	if (hash_name[hash])
+		return hash_name[hash];
+
+	*c = '\0';
+	while (hash) {
+		char * name = get_from_pool(hashmap[hash].name);
+
+		if (strlen(name) + 1 + strlen(c) >= PATH_MAX) {
+			fprintf(stderr, "String \"%s\" too large.\n", c);
+			exit(EXIT_FAILURE);
+		}
+
+		c -= strlen(name) + 1;
+		*c = '/';
+		strncpy(c + 1, name, strlen(name));
+
+		/* move onto parent */
+		hash = hashmap[hash].parent;
+	}
+
+	return hash_name[orighash] = xstrdup(c);
+}
+
+
+void opd_handle_mapping(struct op_note const * note)
+{
+	struct opd_proc * proc;
+	struct opd_image * image;
+	int hash;
+	char const * name;
+
+	proc = opd_get_proc(note->pid, note->tgid);
+
+	if (!proc) {
+		verbprintf(vmisc, "Told about mapping for non-existent process %u.\n", note->pid);
+		proc = opd_new_proc(note->pid, note->tgid);
+	}
+
+	hash = note->hash;
+
+	if (hash == -1) {
+		/* possibly deleted file */
+		return;
+	}
+
+	if (hash < 0 || hash >= OP_HASH_MAP_NR) {
+		fprintf(stderr, "hash value %u out of range.\n", hash);
+		return;
+	}
+
+	name = opd_get_hash_name(hash);
+	image = opd_get_image(name, proc->name, 0, note->pid, note->tgid);
+
+	opd_add_mapping(proc, image, note->addr, note->offset,
+	                note->addr + note->len);
+}
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_mapping.h b/oprofile-0.9.7/daemon/liblegacy/opd_mapping.h
new file mode 100644
index 0000000..f10b0c8
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_mapping.h
@@ -0,0 +1,111 @@
+/**
+ * @file opd_mapping.h
+ * Management of process mappings
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#ifndef OPD_MAPPING_H
+#define OPD_MAPPING_H
+
+#include "op_list.h"
+
+struct opd_image;
+struct opd_proc;
+struct op_note;
+
+/**
+ * represent a mmap'ed area, we create such area only for vma area with exec
+ * access right
+ */
+struct opd_map {
+	/** next mapping for this image */
+	struct list_head next;
+	/** owning image */
+	struct opd_image * image;
+	/** mapping start vma */
+	unsigned long start;
+	/** mapping offset */
+	unsigned long offset;
+	/** mapping end vma */
+	unsigned long end;
+};
+
+/**
+ * opd_init_hash_map - initialise the hashmap
+ */
+void opd_init_hash_map(void);
+
+/**
+ * op_cleanup_hash_name
+ *
+ * release resource owned by hash_name array
+ */
+void opd_cleanup_hash_name(void);
+
+/**
+ * opd_handle_mapping - deal with mapping notification
+ * @param note  mapping notification
+ *
+ * Deal with one notification that a process has mapped
+ * in a new executable file. The mapping information is
+ * added to the process structure.
+ */
+void opd_handle_mapping(struct op_note const * note);
+
+/**
+ * opd_put_mapping - add a mapping to a process
+ * @param proc  process to add map to
+ * @param image  mapped image pointer
+ * @param start  start of mapping
+ * @param offset  file offset of mapping
+ * @param end  end of mapping
+ *
+ * Add the mapping specified to the process proc growing the maps array
+ * if necessary.
+ */
+void opd_add_mapping(struct opd_proc * proc, struct opd_image * image,
+		unsigned long start, unsigned long offset, unsigned long end);
+
+/**
+ * opd_kill_maps - delete mapping information for a process
+ * @param proc  process to work on
+ *
+ * Frees structures holding mapping information
+ */
+void opd_kill_maps(struct opd_proc * proc);
+
+/**
+ * opd_is_in_map - check whether an EIP is within a mapping
+ * @param map  map to check
+ * @param eip  EIP value
+ *
+ * Return %1 if the EIP value @eip is within the boundaries
+ * of the map @map, %0 otherwise.
+ */
+inline static int opd_is_in_map(struct opd_map * map, unsigned long eip)
+{
+	return (eip >= map->start && eip < map->end);
+}
+
+
+/*
+ * opd_map_offset - return offset of sample against map
+ * @param map  map to use
+ * @param eip  EIP value to use
+ *
+ * Returns the offset of the EIP value @eip into
+ * the map @map, which is the same as the file offset
+ * for the relevant binary image.
+ */
+inline static unsigned long opd_map_offset(struct opd_map * map,
+					   unsigned long eip)
+{
+	return (eip - map->start) + map->offset;
+}
+
+#endif /* OPD_MAPPING_H */
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_parse_proc.c b/oprofile-0.9.7/daemon/liblegacy/opd_parse_proc.c
new file mode 100644
index 0000000..8a2d4e8
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_parse_proc.c
@@ -0,0 +1,223 @@
+/**
+ * @file opd_parse_proc.c
+ * Parsing of /proc/#pid
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#include "op_libiberty.h"
+
+#include "opd_parse_proc.h"
+#include "opd_proc.h"
+#include "opd_mapping.h"
+#include "opd_image.h"
+#include "opd_printf.h"
+
+#include "op_file.h"
+#include "op_fileio.h"
+
+#include <dirent.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/**
+ * opd_add_ascii_map - parse an ASCII map string for a process
+ * @param proc  process to add map to
+ * @param line  0-terminated ASCII string
+ * @param image_name the binary application name
+ *
+ * Attempt to parse the string @line for map information
+ * and add the info to the process @proc. Returns %1
+ * on success, %0 otherwise.
+ *
+ * The parsing is based on Linux 2.4 format, which looks like this :
+ *
+ * 4001e000-400fc000 r-xp 00000000 03:04 31011      /lib/libc-2.1.2.so
+ */
+/* FIXME: handle (deleted) */
+static int opd_add_ascii_map(struct opd_proc * proc, char const * line,
+			     char * const image_name)
+{
+	unsigned long offset, start, end;
+	struct opd_image * image;
+	char const * cp = line;
+
+	/* skip to protection field */
+	while (*cp && *cp != ' ')
+		cp++;
+
+	/* handle rwx */
+	if (!*cp || (!*(++cp)) || (!*(++cp)) || (*(++cp) != 'x'))
+		return 0;
+
+	/* get start and end from "40000000-4001f000" */
+	if (sscanf(line, "%lx-%lx", &start, &end) != 2)
+		return 0;
+
+	/* "p " */
+	cp += 2;
+
+	/* read offset */
+	if (sscanf(cp, "%lx", &offset) != 1)
+		return 0;
+
+	while (*cp && *cp != '/')
+		cp++;
+
+	if (!*cp)
+		return 0;
+
+	image = opd_get_image(cp, image_name, 0, proc->tid, proc->tgid);
+	if (!image)
+		return 0;
+
+	opd_add_mapping(proc, image, start, offset, end);
+
+	return 1;
+}
+
+
+/**
+ * opd_get_ascii_maps - read all maps for a process
+ * @param proc  process to work on
+ *
+ * Read the /proc/<pid>/maps file and add all
+ * mapping information found to the process @proc.
+ */
+static void opd_get_ascii_maps(struct opd_proc * proc)
+{
+	FILE * fp;
+	char mapsfile[20] = "/proc/";
+	char * line;
+	char exe_name[20];
+	char * image_name;
+	struct list_head * pos;
+
+	snprintf(mapsfile + 6, 6, "%hu", proc->tid);
+
+	strcpy(exe_name, mapsfile);
+
+	strcat(mapsfile, "/maps");
+
+	fp = op_try_open_file(mapsfile, "r");
+	if (!fp)
+		return;
+
+	strcat(exe_name, "/exe");
+	image_name = xmalloc(PATH_MAX);
+	if (!realpath(exe_name, image_name))
+		/* kernel thread are invalid symlink */
+		strcpy(image_name, exe_name);
+
+	verbprintf(vmisc, "image name %s for pid %u %u\n", image_name, proc->tid, proc->tgid);
+
+	while (1) {
+		line = op_get_line(fp);
+		if (!line)
+			break;
+
+		opd_add_ascii_map(proc, line, image_name);
+		free(line);
+	}
+
+	/* dae assume than the first map added is the primary image name, this
+	 * is always true at exec time but not for /proc/pid so restore
+	 * the primary image name
+	 */
+	list_for_each(pos, &proc->maps) {
+		struct opd_map * map = list_entry(pos, struct opd_map, next);
+		if (!strcmp(map->image->name, image_name)) {
+			if (pos != proc->maps.next) {
+				fprintf(stderr, "swap map for image %s from %s to %s\n", image_name, proc->name, map->image->name);
+				free((char *)proc->name);
+				proc->name = xstrdup(map->image->name);
+			}
+			break;
+		}
+	}
+
+	if (list_empty(&proc->maps)) {
+		/* we always need a valid proc->maps[0], we artificially give
+		 * a map of length zero so on no samples will never go to this
+		 * map. This is used only with --separate-samples and kernel
+		 * thread when adding vmlinux and module maps to proc->maps[]
+		 */
+		/* FIXME: use the first field of /proc/pid/status as proc name
+		 * for now we use /proc/%pid/exe as name */
+		struct opd_image * image = opd_get_image(image_name,
+                                       image_name, 0, proc->tid, proc->tgid);
+		if (image)
+			opd_add_mapping(proc, image, 0, 0, 0);
+	}
+
+	if (image_name)
+		free(image_name);
+
+	op_close_file(fp);
+}
+
+
+static u32 read_tgid(u32 tid)
+{
+	char status_file[30] = "/proc/";
+	char * line;
+	FILE * fp;
+	u32 tgid;
+
+	snprintf(status_file + 6, 6, "%hu", tid);
+
+	strcat(status_file, "/status");
+
+	fp = op_try_open_file(status_file, "r");
+	if (!fp)
+		return 0;
+
+	while (1) {
+		line = op_get_line(fp);
+		if (!line)
+			break;
+
+		if (sscanf(line, "Tgid: %u", &tgid) == 1) {
+			free(line);
+			op_close_file(fp);
+			return tgid;
+		}
+		free(line);
+	}
+
+	op_close_file(fp);
+
+	return 0;
+}
+
+
+void opd_get_ascii_procs(void)
+{
+	DIR * dir;
+	struct dirent * dirent;
+	struct opd_proc * proc;
+	u32 pid;
+
+	if (!(dir = opendir("/proc"))) {
+		perror("oprofiled: /proc directory could not be opened. ");
+		exit(EXIT_FAILURE);
+	}
+
+	while ((dirent = readdir(dir))) {
+		if (sscanf(dirent->d_name, "%u", &pid) == 1) {
+			u32 tgid = read_tgid(pid);
+			verbprintf(vmisc, "ASCII added %u %u\n", pid, tgid);
+			proc = opd_get_proc(pid, tgid);
+			if (!proc)
+				proc = opd_new_proc(pid, tgid);
+			opd_get_ascii_maps(proc);
+		}
+	}
+
+	closedir(dir);
+}
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_parse_proc.h b/oprofile-0.9.7/daemon/liblegacy/opd_parse_proc.h
new file mode 100644
index 0000000..a224be4
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_parse_proc.h
@@ -0,0 +1,23 @@
+/**
+ * @file opd_parse_proc.h
+ * Parsing of /proc/#pid
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#ifndef OPD_PARSE_PROC_H
+#define OPD_PARSE_PROC_H
+
+/**
+ * opd_get_ascii_procs - read process and mapping information from /proc
+ *
+ * Read information on each process and its mappings from the /proc
+ * filesystem.
+ */
+void opd_get_ascii_procs(void);
+
+#endif /* OPD_PARSE_PROC_H */
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_proc.c b/oprofile-0.9.7/daemon/liblegacy/opd_proc.c
new file mode 100644
index 0000000..2f9b38c
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_proc.c
@@ -0,0 +1,432 @@
+/**
+ * @file opd_proc.c
+ * Management of processes
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#include "op_hw_config.h"
+#include "opd_proc.h"
+#include "opd_image.h"
+#include "opd_mapping.h"
+#include "opd_sample_files.h"
+#include "opd_kernel.h"
+#include "opd_24_stats.h"
+#include "opd_printf.h"
+#include "oprofiled.h"
+
+#include "op_interface.h"
+#include "op_libiberty.h"
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* size of process hash table */
+#define OPD_MAX_PROC_HASH 1024
+
+extern int cpu_number;
+
+/* hash of process lists */
+static struct list_head opd_procs[OPD_MAX_PROC_HASH];
+
+/* statistics purpose */
+static int nr_procs;
+
+
+void opd_init_procs(void)
+{
+	int i;
+	for (i = 0; i < OPD_MAX_PROC_HASH; i++)
+		list_init(&opd_procs[i]);
+}
+
+
+int opd_get_nr_procs(void)
+{
+	return nr_procs;
+}
+
+
+/**
+ * proc_hash - hash pid value
+ * @param tid  pid value to hash
+ *
+ */
+inline static uint proc_hash(pid_t tid)
+{
+	/* FIXME: hash tgid too! */
+	return ((tid >> 4) ^ (tid)) % OPD_MAX_PROC_HASH;
+}
+
+
+struct opd_proc * opd_new_proc(pid_t tid, pid_t tgid)
+{
+	struct opd_proc * proc;
+
+	nr_procs++;
+	proc = xmalloc(sizeof(struct opd_proc));
+	list_init(&proc->maps);
+	proc->name = NULL;
+	proc->tid = tid;
+	proc->tgid = tgid;
+	proc->dead = 0;
+	proc->accessed = 0;
+	list_add(&proc->next, &opd_procs[proc_hash(tid)]);
+	return proc;
+}
+
+
+struct opd_proc * opd_get_proc(pid_t tid, pid_t tgid)
+{
+	struct opd_proc * proc;
+	uint hash = proc_hash(tid);
+	struct list_head * pos, *pos2;
+
+	opd_24_stats[OPD_PROC_QUEUE_ACCESS]++;
+	list_for_each_safe(pos, pos2, &opd_procs[hash]) {
+		opd_24_stats[OPD_PROC_QUEUE_DEPTH]++;
+		proc = list_entry(pos, struct opd_proc, next);
+		if (tid == proc->tid && tgid == proc->tgid) {
+			/* LRU to head */
+			list_del(&proc->next);
+			list_add(&proc->next, &opd_procs[hash]);
+			return proc;
+		}
+	}
+
+	return NULL;
+}
+
+
+/**
+ * verb_show_sample - print the sample out to the log
+ * @param offset  the offset value
+ * @param map  map to print
+ */
+inline static void
+verb_show_sample(unsigned long offset, struct opd_map * map)
+{
+	verbprintf(vsamples, "DO_PUT_SAMPLE : calc offset 0x%.8lx, "
+		"map start 0x%.8lx, end 0x%.8lx, offset 0x%.8lx, name \"%s\"\n",
+		offset, map->start, map->end, map->offset, 
+		map->image->name);
+}
+
+
+void opd_put_image_sample(struct opd_image * image, unsigned long offset,
+                          u32 counter)
+{
+	struct opd_24_sfile * sfile;
+	int err;
+
+	if (image->ignored)
+		return;
+
+	if (!image->sfiles[cpu_number]) {
+		image->sfiles[cpu_number] =
+			xcalloc(OP_MAX_COUNTERS, sizeof(struct op_24_sfile *));
+	}
+	sfile = image->sfiles[cpu_number][counter];
+
+	if (!sfile || !odb_open_count(&sfile->sample_file)) {
+		if (opd_open_24_sample_file(image, counter, cpu_number)) {
+			/* opd_open_24_sample_file output an error message */
+			opd_24_stats[OPD_LOST_SAMPLEFILE]++;
+			return;
+		}
+		sfile = image->sfiles[cpu_number][counter];
+	}
+
+	err = odb_update_node(&sfile->sample_file, offset);
+	if (err) {
+		fprintf(stderr, "%s\n", strerror(err));
+		abort();
+	}
+
+	opd_24_sfile_lru(sfile);
+}
+
+
+/**
+ * opd_lookup_maps - lookup a proc mappings for a sample
+ * @param proc proc to lookup
+ * @param sample sample to lookup
+ *
+ * iterate through the proc maps searching the mapping which owns sample
+ * if sucessful sample count will be updated and we return non-zero
+ */
+static int opd_lookup_maps(struct opd_proc * proc,
+			struct op_sample const * sample)
+{
+	struct list_head * pos;
+
+	proc->accessed = 1;
+
+	opd_24_stats[OPD_MAP_ARRAY_ACCESS]++;
+	list_for_each(pos, &proc->maps) {
+		struct opd_map * map = list_entry(pos, struct opd_map, next);
+		if (opd_is_in_map(map, sample->eip)) {
+			unsigned long offset = opd_map_offset(map, sample->eip);
+			if (map->image != NULL) {
+				verb_show_sample(offset, map);
+				opd_put_image_sample(map->image, offset, sample->counter);
+			}
+			opd_24_stats[OPD_PROCESS]++;
+			return 1;
+		}
+		opd_24_stats[OPD_MAP_ARRAY_DEPTH]++;
+	}
+
+	return 0;
+}
+
+
+void opd_put_sample(struct op_sample const * sample)
+{
+	struct opd_proc * proc;
+	int in_kernel_eip = opd_eip_is_kernel(sample->eip);
+
+	opd_24_stats[OPD_SAMPLES]++;
+
+	verbprintf(vsamples, "DO_PUT_SAMPLE: c%d, EIP 0x%.8lx, tgid %.6d pid %.6d\n",
+		sample->counter, sample->eip, sample->tgid, sample->pid);
+
+	if (!separate_kernel && in_kernel_eip) {
+		opd_handle_kernel_sample(sample->eip, sample->counter);
+		return;
+	}
+
+	if (!(proc = opd_get_proc(sample->pid, sample->tgid))) {
+		if (in_kernel_eip || no_vmlinux) {
+			/* idle task get a 0 pid and is hidden we can never get
+			 * a proc so on we fall back to put sample in vmlinux
+			 * or module samples files. Here we will catch also
+			 * sample for newly created kernel thread, currently 
+			 * we can handle properly only kenel thread created
+			 * at daemon startup time */
+			opd_handle_kernel_sample(sample->eip, sample->counter);
+		} else {
+			verbprintf(vmisc, "No proc info for tgid %.6d pid %.6d.\n",
+                                   sample->tgid, sample->pid);
+			opd_24_stats[OPD_LOST_PROCESS]++;
+		}
+		return;
+	}
+
+	if (opd_lookup_maps(proc, sample))
+		return;
+
+	if (in_kernel_eip) {
+		opd_add_kernel_map(proc, sample->eip);
+		if (opd_lookup_maps(proc, sample))
+			return;
+	}
+
+	/* couldn't locate it */
+	verbprintf(vsamples, "Couldn't find map for pid %.6d, EIP 0x%.8lx.\n",
+		   sample->pid, sample->eip);
+	opd_24_stats[OPD_LOST_MAP_PROCESS]++;
+}
+
+
+void opd_handle_fork(struct op_note const * note)
+{
+	struct opd_proc * old;
+	struct opd_proc * proc;
+	struct list_head * pos;
+
+	verbprintf(vmisc, "DO_FORK: from %d, %d to %ld, %ld\n", note->pid, note->tgid,
+	           note->addr, note->len);
+
+	old = opd_get_proc(note->pid, note->tgid);
+
+	/* we can quite easily get a fork() after the execve() because the
+	 * notifications are racy. In particular, the fork notification is
+	 * done on parent return (so we know the pid), but this will often be
+	 * after the execve is done by the child.
+	 *
+	 * So we only create a new setup if it doesn't exist already, allowing
+	 * both the clone() and the execve() cases to work.
+	 */
+	if (opd_get_proc(note->addr, note->len))
+		return;
+
+	/* eip/len is actually tid/tgid of new process */
+	proc = opd_new_proc(note->addr, note->len);
+
+	if (!old)
+		return;
+
+	/* copy the maps */
+	list_for_each(pos, &old->maps) {
+		struct opd_map * map = list_entry(pos, struct opd_map, next);
+		if (!separate_thread) {
+			opd_add_mapping(proc, map->image, map->start,
+			                map->offset, map->end);
+		} else {
+			/* when separating thread we can't create blindly a new
+			 * image e.g. pid re-use, multiple mapping with the
+			 * same mapping name etc. */
+			struct opd_image * image = 
+				opd_get_image(map->image->name, old->name,
+				map->image->kernel, note->addr, note->len);
+			opd_add_mapping(proc, image, map->start, map->offset,
+			                map->end);
+		}
+	}
+}
+
+
+void opd_handle_exec(pid_t tid, pid_t tgid)
+{
+	struct opd_proc * proc;
+
+	verbprintf(vmisc, "DO_EXEC: pid %u %u\n", tid, tgid);
+
+	/* There is a race for samples received between fork/exec sequence.
+	 * These samples belong to the old mapping but we can not say if
+	 * samples has been received before the exec or after. This explains
+	 * the message "Couldn't find map for ..." in verbose mode.
+	 *
+	 * Unhappily, it is difficult to get an estimation of these misplaced
+	 * samples, the error message can count only out of mapping samples but
+	 * not samples between the race and inside the mapping of the exec'ed
+	 * process :/.
+	 *
+	 * Trying to save old mapping is not correct due the above reason. The
+	 * only manner to handle this is to flush the module samples hash table
+	 * after each fork which is unacceptable for performance reasons */
+	proc = opd_get_proc(tid, tgid);
+	if (proc) {
+		opd_kill_maps(proc);
+		/* proc->name will be set when the next mapping occurs */
+		free((char *)proc->name);
+		proc->name = NULL;
+	} else {
+		opd_new_proc(tid, tgid);
+	}
+}
+
+
+void opd_handle_exit(struct op_note const * note)
+{
+	struct opd_proc * proc;
+
+	verbprintf(vmisc, "DO_EXIT: process %d\n", note->pid);
+
+	proc = opd_get_proc(note->pid, note->tgid);
+	if (proc) {
+		proc->dead = 1;
+		proc->accessed = 1;
+	} else {
+		verbprintf(vmisc, "unknown proc %u just exited.\n", note->pid);
+	}
+}
+
+
+typedef void (*opd_proc_cb)(struct opd_proc *);
+
+/**
+ * @param proc_cb callback to apply onto each existing proc struct
+ *
+ * the callback receive a struct opd_proc * (not a const struct) and is
+ * allowed to freeze the proc struct itself.
+ */
+static void opd_for_each_proc(opd_proc_cb proc_cb)
+{
+	struct list_head * pos;
+	struct list_head * pos2;
+	int i;
+
+	for (i = 0; i < OPD_MAX_PROC_HASH; ++i) {
+		list_for_each_safe(pos, pos2, &opd_procs[i]) {
+			struct opd_proc * proc =
+				list_entry(pos, struct opd_proc, next);
+			proc_cb(proc);
+		}
+	}
+}
+
+
+/**
+ * opd_delete_proc - delete a process
+ * @param proc  process to delete
+ *
+ * Remove the process proc from the process list and free
+ * the associated structures.
+ */
+static void opd_delete_proc(struct opd_proc * proc)
+{
+	--nr_procs;
+	list_del(&proc->next);
+	opd_kill_maps(proc);
+	if (proc->name)
+		free((char *)proc->name);
+	free(proc);
+}
+
+
+void opd_proc_cleanup(void)
+{
+	opd_for_each_proc(opd_delete_proc);
+}
+
+
+/**
+ * opd_age_proc - age a struct opd_proc
+ * @param  proc proc to age
+ *
+ * age dead proc in such way if a proc doesn't receive any samples
+ * between two age_proc the opd_proc struct is deleted
+ */
+static void opd_age_proc(struct opd_proc * proc)
+{
+	// delay death whilst its still being accessed
+	if (proc->dead) {
+		proc->dead += proc->accessed;
+		proc->accessed = 0;
+		if (--proc->dead == 0)
+			opd_delete_proc(proc);
+	}
+}
+
+
+void opd_age_procs(void)
+{
+	opd_for_each_proc(opd_age_proc);
+}
+
+
+/**
+ * opd_remove_kernel_mapping - remove all kernel mapping for an opd_proc
+ * @param proc  proc where mappings must be updated.
+ *
+ * invalidate (by removing them) all kernel mapping. This function do nothing
+ * when separate_kernel == 0 because we don't add mapping for kernel
+ * sample in proc struct.
+ */
+static void opd_remove_kernel_mapping(struct opd_proc * proc)
+{
+	struct list_head * pos, * pos2;
+
+	list_for_each_safe(pos, pos2, &proc->maps) {
+		struct opd_map * map = list_entry(pos, struct opd_map, next);
+		if (opd_eip_is_kernel(map->start + map->offset)) {
+			list_del(pos);
+			opd_delete_image(map->image);
+			free(map);
+		}
+	}
+}
+
+
+void opd_clear_kernel_mapping(void)
+{
+	opd_for_each_proc(opd_remove_kernel_mapping);
+}
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_proc.h b/oprofile-0.9.7/daemon/liblegacy/opd_proc.h
new file mode 100644
index 0000000..8140a46
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_proc.h
@@ -0,0 +1,151 @@
+/**
+ * @file opd_proc.h
+ * Management of processes
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#ifndef OPD_PROC_H
+#define OPD_PROC_H
+
+#include "op_types.h"
+#include "op_list.h"
+
+struct opd_map;
+struct opd_image;
+struct op_note;
+struct op_sample;
+
+/**
+ * track process, created either by a fork or an exec notification.
+ */
+struct opd_proc {
+	/** maps are always added to the end of head, so search will be done
+	 * from the newest map to the oldest which mean we don't care about
+	 * munmap. First added map must be the primary image */
+	struct list_head maps;
+	/** process name */
+	char const * name;
+	/** thread id for this process, always equal to tgid for 2.2 kernel */
+	pid_t tid;
+	/** thread group id for this process */
+	pid_t tgid;
+	/** non-zero if this process receive any samples, this field
+	 * is used with dead field to defer opd_proc deletion */
+	int accessed;
+	/** Set to non-zero when an exit notification occur for this process */
+	int dead;
+	/** used by container of opd_proc */
+	struct list_head next;
+};
+
+/**
+ * initialize opd_proc container
+ */
+void opd_init_procs(void);
+
+/**
+ * opd_put_sample - process a sample
+ * @param sample  sample to process
+ *
+ * Write out the sample to the appropriate sample file. This
+ * routine handles kernel and module samples as well as ordinary ones.
+ */
+void opd_put_sample(struct op_sample const * sample);
+
+/**
+ * opd_put_image_sample - write sample to file
+ * @param image  image for sample
+ * @param offset  (file) offset to write to
+ * @param counter  counter number
+ *
+ * Add to the count stored at position offset in the
+ * image file. Overflow pins the count at the maximum
+ * value.
+ */
+void opd_put_image_sample(struct opd_image * image, unsigned long offset, u32 counter);
+
+/**
+ * opd_handle_fork - deal with fork notification
+ * @param note  note to handle
+ *
+ * Deal with a fork() notification by creating a new process
+ * structure, and copying mapping information from the old process.
+ *
+ * sample->pid contains the process id of the old process.
+ * sample->eip contains the process id of the new process.
+ */
+void opd_handle_fork(struct op_note const * note);
+
+/**
+ * opd_handle_exec - deal with notification of execve()
+ * @param tid  tid for this process
+ * @param tgid  tgid for this process
+ *
+ * Drop all mapping information for the process.
+ */
+void opd_handle_exec(pid_t tid, pid_t tgid);
+
+/**
+ * opd_handle_exit - deal with exit notification
+ * @param note  note to handle
+ *
+ * Deal with an exit() notification by setting the flag "dead"
+ * on a process. These will be later cleaned up by the %SIGALRM
+ * handler.
+ *
+ * sample->pid contains the process id of the exited process.
+ */
+void opd_handle_exit(struct op_note const * note);
+
+/**
+ * opd_get_proc - get process from process list
+ * @param tid  tid for this process
+ * @param tgid  tgid for this process
+ *
+ * A process with pid tid is searched on the process list,
+ * maintaining LRU order. If it is not found, %NULL is returned,
+ * otherwise the process structure is returned.
+ */
+struct opd_proc * opd_get_proc(pid_t tid, pid_t tgid);
+
+/**
+ * opd_new_proc - create a new process structure
+ * @param tid  tid for this process
+ * @param tgid  tgid for this process
+ *
+ * Allocate and initialise a process structure and insert
+ * it into the procs hash table.
+ */
+struct opd_proc * opd_new_proc(pid_t tid, pid_t tgid);
+
+/**
+ * opd_get_nr_procs - return number of processes tracked
+ */
+int opd_get_nr_procs(void);
+
+/**
+ * opd_age_procs - age all dead process preparing them for a deletion
+ */
+void opd_age_procs(void);
+
+/**
+ * freeze all resource used by opd_procs managment
+ */
+void opd_proc_cleanup(void);
+
+/**
+ * opd_clear_kernel_mapping - remove all kernel mapping for all opd_proc
+ *
+ * invalidate (by removing them) all kernel mapping. This function do nothing
+ * when separate_kernel == 0 because we don't add mapping for kernel
+ * sample in proc struct. As side effect decrease reference count of
+ * associated with these mapping which eventually close this image
+ */
+void opd_clear_kernel_mapping(void);
+
+#endif /* OPD_PROC_H */
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_sample_files.c b/oprofile-0.9.7/daemon/liblegacy/opd_sample_files.c
new file mode 100644
index 0000000..126ba99
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_sample_files.c
@@ -0,0 +1,179 @@
+/**
+ * @file opd_sample_files.c
+ * Management 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_sample_files.h"
+#include "opd_image.h"
+#include "opd_printf.h"
+#include "opd_events.h"
+#include "oprofiled.h"
+
+#include "op_sample_file.h"
+#include "op_file.h"
+#include "op_config.h"
+#include "op_mangle.h"
+#include "op_events.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+/** All sfiles are on this list. */
+static LIST_HEAD(lru_list);
+
+/* this value probably doesn't matter too much */
+#define LRU_AMOUNT 1000
+static int opd_24_sfile_lru_clear(void)
+{
+	struct list_head * pos;
+	struct list_head * pos2;
+	struct opd_24_sfile * sfile;
+	int amount = LRU_AMOUNT;
+
+	verbprintf(vsfile, "image lru clear\n");
+
+	if (list_empty(&lru_list))
+		return 1;
+
+	list_for_each_safe(pos, pos2, &lru_list) {
+		if (!--amount)
+			break;
+		sfile = list_entry(pos, struct opd_24_sfile, lru_next);
+		odb_close(&sfile->sample_file);
+		list_del_init(&sfile->lru_next);
+	}
+
+	return 0;
+}
+
+
+void opd_24_sfile_lru(struct opd_24_sfile * sfile)
+{
+	list_del(&sfile->lru_next);
+	list_add_tail(&sfile->lru_next, &lru_list);
+}
+
+
+static char * opd_mangle_filename(struct opd_image const * image, int counter,
+                                  int cpu_nr)
+{
+	char * mangled;
+	struct mangle_values values;
+	struct opd_event * event = find_counter_event(counter);
+
+	values.flags = 0;
+	if (image->kernel)
+		values.flags |= MANGLE_KERNEL;
+
+	if (separate_thread) {
+		values.flags |= MANGLE_TGID | MANGLE_TID;
+		values.tid = image->tid;
+		values.tgid = image->tgid;
+	}
+
+	if (separate_cpu) {
+		values.flags |= MANGLE_CPU;
+		values.cpu = cpu_nr;
+	}
+
+	values.event_name = event->name;
+	values.count = event->count;
+	values.unit_mask = event->um;
+
+	values.image_name = image->name;
+	values.dep_name = separate_lib && image->app_name
+		? image->app_name : image->name;
+
+	mangled = op_mangle_filename(&values);
+
+	return mangled;
+}
+
+
+int opd_open_24_sample_file(struct opd_image * image, int counter, int cpu_nr)
+{
+	char * mangled;
+	struct opd_24_sfile * sfile;
+	int err;
+
+	mangled = opd_mangle_filename(image, counter, cpu_nr);
+
+	verbprintf(vsfile, "Opening \"%s\"\n", mangled);
+
+	create_path(mangled);
+
+	sfile = image->sfiles[cpu_nr][counter];
+	if (!sfile) {
+		sfile = malloc(sizeof(struct opd_24_sfile));
+		list_init(&sfile->lru_next);
+		odb_init(&sfile->sample_file);
+		image->sfiles[cpu_nr][counter] = sfile;
+	}
+
+	list_del(&sfile->lru_next);
+	list_add_tail(&sfile->lru_next, &lru_list);
+
+retry:
+	err = odb_open(&sfile->sample_file, mangled, ODB_RDWR,
+                       sizeof(struct opd_header));
+
+	/* This can naturally happen when racing against opcontrol --reset. */
+	if (err) {
+		if (err == EMFILE) {
+			if (opd_24_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;
+	}
+
+	fill_header(odb_get_data(&sfile->sample_file), counter, 0, 0,
+		    image->kernel, 0, 0, 0, image->mtime);
+
+out:
+	free(mangled);
+	return err;
+}
+
+
+void opd_sync_samples_files(void)
+{
+	struct list_head * pos;
+	struct opd_24_sfile * sfile;
+
+	list_for_each(pos, &lru_list) {
+		sfile = list_entry(pos, struct opd_24_sfile, lru_next);
+		odb_sync(&sfile->sample_file);
+	}
+}
+
+
+void opd_close_image_samples_files(struct opd_image * image)
+{
+	uint i, j;
+	for (i = 0 ; i < op_nr_counters ; ++i) {
+		for (j = 0; j < NR_CPUS; ++j) {
+			if (image->sfiles[j] && image->sfiles[j][i]) {
+				odb_close(&image->sfiles[j][i]->sample_file);
+				list_del(&image->sfiles[j][i]->lru_next);
+				free(image->sfiles[j][i]);
+				image->sfiles[j][i] = 0;
+			}
+		}
+	}
+}
diff --git a/oprofile-0.9.7/daemon/liblegacy/opd_sample_files.h b/oprofile-0.9.7/daemon/liblegacy/opd_sample_files.h
new file mode 100644
index 0000000..20555a9
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/opd_sample_files.h
@@ -0,0 +1,63 @@
+/**
+ * @file opd_sample_files.h
+ * Management of sample files
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#ifndef OPD_SAMPLE_FILES_H
+#define OPD_SAMPLE_FILES_H
+
+#include "op_list.h"
+#include "odb.h"
+
+struct opd_image;
+
+/** one samples file when profiling on a 2.2/2.4 kernel */
+struct opd_24_sfile {
+	/** lru list of sample file */
+	struct list_head lru_next;
+	/** the sample file itself */
+	odb_t sample_file;
+};
+
+/**
+ * sync all samples files
+ */
+void opd_sync_samples_files(void);
+
+/**
+ * @param image  the image pointer to work on
+ *
+ * close all samples files belonging to this image
+ */
+void opd_close_image_samples_files(struct opd_image * image);
+
+/**
+ * opd_open_24_sample_file - open an image sample file
+ * @param image  image to open file for
+ * @param counter  counter number
+ * @param cpu_nr  cpu number
+ *
+ * Open image sample file for the image, counter
+ * counter and set up memory mappings for it.
+ * image->kernel and image->name must have meaningful
+ * values.
+ *
+ * Returns 0 on success.
+ */
+int opd_open_24_sample_file(struct opd_image * image, int counter, int cpu_nr);
+
+/**
+ * @param sfile  sample file to act on
+ *
+ * put sfile at the head of samples files lru list
+ */
+void opd_24_sfile_lru(struct opd_24_sfile * sfile);
+
+
+#endif /* OPD_SAMPLE_FILES_H */
diff --git a/oprofile-0.9.7/daemon/liblegacy/p_module.h b/oprofile-0.9.7/daemon/liblegacy/p_module.h
new file mode 100644
index 0000000..9367508
--- /dev/null
+++ b/oprofile-0.9.7/daemon/liblegacy/p_module.h
@@ -0,0 +1,207 @@
+/* Definitions for the Linux module syscall interface.
+   Copyright 1996, 1997 Linux International.
+
+   Contributed by Richard Henderson <rth@tamu.edu>
+
+   This file is part of the Linux modutils.
+
+   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.  */
+
+#ifndef MODUTILS_MODULE_H
+#define MODUTILS_MODULE_H 1
+
+/* This file contains the structures used by the 2.0 and 2.1 kernels.
+   We do not use the kernel headers directly because we do not wish
+   to be dependant on a particular kernel version to compile insmod.  */
+
+
+/*======================================================================*/
+/* The structures used by Linux 2.0.  */
+
+/* The symbol format used by get_kernel_syms(2).  */
+struct old_kernel_sym
+{
+  unsigned long value;
+  char name[60];
+};
+
+struct old_module_ref
+{
+  unsigned long module;		/* kernel addresses */
+  unsigned long next;
+};
+
+struct old_module_symbol
+{
+  unsigned long addr;
+  unsigned long name;
+};
+
+struct old_symbol_table
+{
+  int size;			/* total, including string table!!! */
+  int n_symbols;
+  int n_refs;
+  struct old_module_symbol symbol[0]; /* actual size defined by n_symbols */
+  struct old_module_ref ref[0];	/* actual size defined by n_refs */
+};
+
+struct old_mod_routines
+{
+  unsigned long init;
+  unsigned long cleanup;
+};
+
+struct old_module
+{
+  unsigned long next;
+  unsigned long ref;		/* the list of modules that refer to me */
+  unsigned long symtab;
+  unsigned long name;
+  int size;			/* size of module in pages */
+  unsigned long addr;		/* address of module */
+  int state;
+  unsigned long cleanup;	/* cleanup routine */
+};
+
+/* Sent to init_module(2) or'ed into the code size parameter.  */
+#define OLD_MOD_AUTOCLEAN 0x40000000 /* big enough, but no sign problems... */
+
+int get_kernel_syms(struct old_kernel_sym *);
+int old_sys_init_module(char const * name, char *code, unsigned codesize,
+			struct old_mod_routines *, struct old_symbol_table *);
+
+/*======================================================================*/
+/* For sizeof() which are related to the module platform and not to the
+   environment isnmod is running in, use sizeof_xx instead of sizeof(xx).  */
+
+#define tgt_sizeof_char		sizeof(char)
+#define tgt_sizeof_short	sizeof(short)
+#define tgt_sizeof_int		sizeof(int)
+#define tgt_sizeof_long		sizeof(long)
+#define tgt_sizeof_char_p	sizeof(char *)
+#define tgt_sizeof_void_p	sizeof(void *)
+#define tgt_long		long
+#define tgt_long_fmt		"l"
+
+/* This assumes that long long on a 32 bit system is equivalent to long on the
+ * equivalent 64 bit system.  Also that void and char pointers are 8 bytes on
+ * all 64 bit systems.  Add per system tweaks if it ever becomes necessary.
+ */
+#if defined(COMMON_3264) && defined(ONLY_64)
+#undef tgt_long
+#undef tgt_long_fmt
+#undef tgt_sizeof_long
+#undef tgt_sizeof_char_p
+#undef tgt_sizeof_void_p
+#define tgt_long                long long
+#define tgt_long_fmt		"ll"
+#define tgt_sizeof_long         8
+#define tgt_sizeof_char_p       8
+#define tgt_sizeof_void_p       8
+#endif
+
+/*======================================================================*/
+/* The structures used in Linux 2.1 onwards.  */
+
+/* Note: module_symbol does not use tgt_long intentionally */
+struct module_symbol
+{
+  unsigned long value;
+  unsigned long name;
+};
+
+struct module_ref
+{
+  unsigned tgt_long dep;		/* kernel addresses */
+  unsigned tgt_long ref;
+  unsigned tgt_long next_ref;
+};
+
+struct module
+{
+  unsigned tgt_long size_of_struct;	/* == sizeof(module) */
+  unsigned tgt_long next;
+  unsigned tgt_long name;
+  unsigned tgt_long size;
+
+  tgt_long usecount;
+  unsigned tgt_long flags;		/* AUTOCLEAN et al */
+
+  unsigned nsyms;
+  unsigned ndeps;
+
+  unsigned tgt_long syms;
+  unsigned tgt_long deps;
+  unsigned tgt_long refs;
+  unsigned tgt_long init;
+  unsigned tgt_long cleanup;
+  unsigned tgt_long ex_table_start;
+  unsigned tgt_long ex_table_end;
+#ifdef __alpha__
+  unsigned tgt_long gp;
+#endif
+  /* Everything after here is extension.  */
+  unsigned tgt_long read_start;		/* Read data from existing module */
+  unsigned tgt_long read_end;
+  unsigned tgt_long can_unload;
+  unsigned tgt_long runsize;
+  unsigned tgt_long kallsyms_start;
+  unsigned tgt_long kallsyms_end;
+  unsigned tgt_long archdata_start;
+  unsigned tgt_long archdata_end;
+  unsigned tgt_long kernel_data;
+};
+
+struct module_info
+{
+  unsigned long addr;
+  unsigned long size;
+  unsigned long flags;
+	   long usecount;
+};
+
+/* Bits of module.flags.  */
+#define NEW_MOD_RUNNING		1
+#define NEW_MOD_DELETED		2
+#define NEW_MOD_AUTOCLEAN	4
+#define NEW_MOD_VISITED		8
+#define NEW_MOD_USED_ONCE	16
+#define NEW_MOD_INITIALIZING	64
+
+int sys_init_module(char const * name, const struct module *);
+int query_module(char const * name, int which, void *buf, size_t bufsize,
+		 size_t *ret);
+
+/* Values for query_module's which.  */
+
+#define QM_MODULES	1
+#define QM_DEPS		2
+#define QM_REFS		3
+#define QM_SYMBOLS	4
+#define QM_INFO		5
+
+/*======================================================================*/
+/* The system calls unchanged between 2.0 and 2.1.  */
+
+unsigned long create_module(const char *, size_t);
+int delete_module(const char *);
+
+/* In safe mode the last parameter is forced to be a module name and meta
+ * expansion is not allowed on that name.
+ */
+extern unsigned int safemode;
+
+#endif /* module.h */
diff --git a/oprofile-0.9.7/daemon/opd_anon.c b/oprofile-0.9.7/daemon/opd_anon.c
new file mode 100644
index 0000000..9caea3d
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_anon.c
@@ -0,0 +1,228 @@
+/**
+ * @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/oprofile-0.9.7/daemon/opd_anon.h b/oprofile-0.9.7/daemon/opd_anon.h
new file mode 100644
index 0000000..3f66b55
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_anon.h
@@ -0,0 +1,54 @@
+/**
+ * @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/oprofile-0.9.7/daemon/opd_cookie.c b/oprofile-0.9.7/daemon/opd_cookie.c
new file mode 100644
index 0000000..3578e48
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_cookie.c
@@ -0,0 +1,209 @@
+/**
+ * @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/oprofile-0.9.7/daemon/opd_cookie.h b/oprofile-0.9.7/daemon/opd_cookie.h
new file mode 100644
index 0000000..a9f13b1
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_cookie.h
@@ -0,0 +1,39 @@
+/**
+ * @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/oprofile-0.9.7/daemon/opd_events.c b/oprofile-0.9.7/daemon/opd_events.c
new file mode 100644
index 0000000..b544fb3
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_events.c
@@ -0,0 +1,172 @@
+/**
+ * @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 "opd_extended.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;
+	struct opd_event * ret = NULL;
+
+	if (counter >= OP_MAX_COUNTERS) {
+		if((ret = opd_ext_find_counter_event(counter)) != NULL)
+			return ret;
+	}
+
+	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/oprofile-0.9.7/daemon/opd_events.h b/oprofile-0.9.7/daemon/opd_events.h
new file mode 100644
index 0000000..1e8b801
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_events.h
@@ -0,0 +1,47 @@
+/**
+ * @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/oprofile-0.9.7/daemon/opd_extended.c b/oprofile-0.9.7/daemon/opd_extended.c
new file mode 100644
index 0000000..d4c8872
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_extended.c
@@ -0,0 +1,195 @@
+/**
+ * @file opd_extended.c
+ * OProfile Extended Feature
+ *
+ * @remark Copyright 2007-2009 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+ * Copyright (c) 2009 Advanced Micro Devices, Inc.
+ */
+
+#include "opd_extended.h"
+#include "op_string.h"
+
+#include <string.h>
+#include <stdio.h>
+
+/* This global variable is >= 0
+ * if extended feature is enabled */
+static int opd_ext_feat_index;
+
+extern struct opd_ext_handlers ibs_handlers;
+
+/**
+ * OProfile Extended Feature Table
+ *
+ * This table contains a list of extended features.
+ */
+static struct opd_ext_feature ext_feature_table[] = {
+	{"ibs", &ibs_handlers },
+	{ NULL, NULL }
+};
+
+
+static int get_index_for_feature(char const * name)
+{
+	int ret = -1;
+	unsigned int i;
+
+	if(!name)
+		return ret;
+
+	for (i = 0 ; ext_feature_table[i].feature != NULL ; i++ ) {
+		if(!strncmp(name, ext_feature_table[i].feature,
+			strlen(ext_feature_table[i].feature))) {
+			ret = i;
+			break;
+		}
+	}
+
+	return ret;
+}
+
+
+static inline int is_ext_enabled()
+{
+	if (opd_ext_feat_index >= 0
+	&& ext_feature_table[opd_ext_feat_index].handlers != NULL)
+		return 1;
+	else
+		return 0;
+}
+
+
+static inline int is_ext_sfile_enabled()
+{
+	if (opd_ext_feat_index >= 0
+	&& ext_feature_table[opd_ext_feat_index].handlers != NULL
+	&& ext_feature_table[opd_ext_feat_index].handlers->ext_sfile != NULL)
+		return 1;
+	else
+		return 0;
+}
+
+
+/**
+ * Param "value" is the input from CML option with the format:
+ *
+ * <feature name>:<param1>:<param2>:<param3>:.....
+ *
+ * where param1,2.3,..n are optional.
+ */
+int opd_ext_initialize(char const * value)
+{
+	int ret = EXIT_FAILURE;
+	char * tmp = NULL, * name = NULL, * args = NULL;
+
+	if(!value) {
+		opd_ext_feat_index = -1;
+		return 0;
+	}
+
+	tmp = op_xstrndup(value, strlen(value));
+
+	/* Parse feature name*/
+	if((name = strtok_r(tmp, ":", &args)) == NULL)
+		goto err_out;
+
+	if((opd_ext_feat_index = get_index_for_feature(name)) < 0)
+		goto err_out;
+
+	ret = ext_feature_table[opd_ext_feat_index].handlers->ext_init(args);
+
+	return ret;
+
+err_out:
+	fprintf(stderr,"opd_ext_initialize: Invalid extended feature option: %s\n", value);
+	return ret;
+}
+
+
+int opd_ext_deinitialize()
+{
+	int ret = EXIT_FAILURE;
+
+	if(opd_ext_feat_index == -1) {
+		return 0;
+	}
+
+	ret = ext_feature_table[opd_ext_feat_index].handlers->ext_deinit();
+
+	return ret;
+}
+
+
+void opd_ext_print_stats()
+{
+	if (is_ext_enabled()
+	&& ext_feature_table[opd_ext_feat_index].handlers->ext_print_stats != NULL) {
+		printf("\n-- OProfile Extended-Feature Statistics --\n");
+		ext_feature_table[opd_ext_feat_index].handlers->ext_print_stats();
+	}
+}
+
+
+/**
+ * opd_sfile extended APIs
+ */
+void opd_ext_sfile_create(struct sfile * sf)
+{
+	/* Creating ext sfile only if extended feature is enable*/
+	if (is_ext_sfile_enabled()
+	&& ext_feature_table[opd_ext_feat_index].handlers->ext_sfile->create != NULL)
+		ext_feature_table[opd_ext_feat_index].handlers->ext_sfile->create(sf);
+}
+
+
+void opd_ext_sfile_dup (struct sfile * to, struct sfile * from)
+{
+	/* Duplicate ext sfile only if extended feature is enable*/
+	if (is_ext_sfile_enabled()
+	&& ext_feature_table[opd_ext_feat_index].handlers->ext_sfile->dup != NULL)
+		ext_feature_table[opd_ext_feat_index].handlers->ext_sfile->dup(to, from);
+}
+
+
+void opd_ext_sfile_close (struct sfile * sf)
+{
+	/* Close ext sfile only if extended feature is enable*/
+	if (is_ext_sfile_enabled()
+	&& ext_feature_table[opd_ext_feat_index].handlers->ext_sfile->close != NULL)
+		ext_feature_table[opd_ext_feat_index].handlers->ext_sfile->close(sf);
+}
+
+
+void opd_ext_sfile_sync(struct sfile * sf)
+{
+	/* Sync ext sfile only if extended feature is enable*/
+	if (is_ext_sfile_enabled()
+	&& ext_feature_table[opd_ext_feat_index].handlers->ext_sfile->sync != NULL)
+		ext_feature_table[opd_ext_feat_index].handlers->ext_sfile->sync(sf);
+}
+
+
+odb_t * opd_ext_sfile_get(struct transient const * trans, int is_cg)
+{
+	/* Get ext sfile only if extended feature is enable*/
+	if (is_ext_sfile_enabled()
+	&& ext_feature_table[opd_ext_feat_index].handlers->ext_sfile->get != NULL)
+		return	ext_feature_table[opd_ext_feat_index].handlers->ext_sfile->get(trans, is_cg);
+
+	return NULL;
+}
+
+
+struct opd_event * opd_ext_find_counter_event(unsigned long counter)
+{
+	/* Only if extended feature is enable*/
+	if (is_ext_sfile_enabled()
+	&& ext_feature_table[opd_ext_feat_index].handlers->ext_sfile->find_counter_event != NULL)
+		return	ext_feature_table[opd_ext_feat_index].handlers->ext_sfile->find_counter_event(counter);
+
+	return NULL;
+}
+
diff --git a/oprofile-0.9.7/daemon/opd_extended.h b/oprofile-0.9.7/daemon/opd_extended.h
new file mode 100644
index 0000000..d7682a4
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_extended.h
@@ -0,0 +1,94 @@
+/**
+ * @file opd_extended.h
+ * OProfile Extended Feature
+ *
+ * @remark Copyright 2007-2009 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+ * Copyright (c) 2009 Advanced Micro Devices, Inc.
+ */
+
+#ifndef OPD_EXTENDED_H
+#define OPD_EXTENDED_H
+
+#include "opd_trans.h"
+#include "odb.h"
+
+#include <stdlib.h>
+#include <stdint.h>
+
+
+/**
+ * OProfile Extended Feature Table Entry
+ */
+struct opd_ext_feature {
+	// Feature name
+	const char* feature;
+	// Feature handlers
+	struct opd_ext_handlers * handlers;
+};
+
+/**
+ * OProfile Extended handlers
+ */
+struct opd_ext_handlers {
+	// Extended init
+	int (*ext_init)(char const *);
+	// Extended deinit 
+	int (*ext_deinit)();
+	// Extended statistics
+	int (*ext_print_stats)();
+	// Extended sfile handlers
+	struct opd_ext_sfile_handlers * ext_sfile;
+};
+
+/**
+ * OProfile Extended sub-handlers (sfile)
+ */
+struct opd_ext_sfile_handlers {
+	int (*create)(struct sfile *);
+	int (*dup)(struct sfile *, struct sfile *);
+	int (*close)(struct sfile *);
+	int (*sync)(struct sfile *);
+	odb_t * (*get)(struct transient const *, int);
+	struct opd_event * (*find_counter_event)(unsigned long);
+};
+
+/**
+ * @param value: commandline input option string
+ *
+ * Parse the specified extended feature
+ */
+extern int opd_ext_initialize(char const * value);
+
+/**
+ * @param value: commandline input option string
+ *
+ * Deinitialize
+ */
+extern int opd_ext_deinitialize();
+
+/**
+ * Print out extended feature statistics in oprofiled.log file
+ */
+extern void opd_ext_print_stats();
+
+/**
+ * opd_sfile extended sfile handling functions
+ */
+extern void opd_ext_sfile_create(struct sfile * sf);
+extern void opd_ext_sfile_dup (struct sfile * to, struct sfile * from);
+extern void opd_ext_sfile_close(struct sfile * sf);
+extern void opd_ext_sfile_sync(struct sfile * sf);
+extern odb_t * opd_ext_sfile_get(struct transient const * trans, int is_cg);
+
+/**
+ * @param counter: counter index
+ *
+ * Get event struct opd_event from the counter index value.
+ */
+extern struct opd_event * opd_ext_find_counter_event(unsigned long counter);
+
+
+#endif
diff --git a/oprofile-0.9.7/daemon/opd_ibs.c b/oprofile-0.9.7/daemon/opd_ibs.c
new file mode 100644
index 0000000..6a886bb
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_ibs.c
@@ -0,0 +1,832 @@
+/**
+ * @file daemon/opd_ibs.c
+ * AMD Family10h Instruction Based Sampling (IBS) handling.
+ *
+ * @remark Copyright 2007-2010 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author Jason Yeh <jason.yeh@amd.com>
+ * @author Paul Drongowski <paul.drongowski@amd.com>
+ * @author Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+ * Copyright (c) 2008 Advanced Micro Devices, Inc.
+ */
+
+#include "op_hw_config.h"
+#include "op_events.h"
+#include "op_string.h"
+#include "op_hw_specific.h"
+#include "op_libiberty.h"
+#include "opd_printf.h"
+#include "opd_trans.h"
+#include "opd_events.h"
+#include "opd_kernel.h"
+#include "opd_anon.h"
+#include "opd_sfile.h"
+#include "opd_interface.h"
+#include "opd_mangling.h"
+#include "opd_extended.h"
+#include "opd_ibs.h"
+#include "opd_ibs_trans.h"
+#include "opd_ibs_macro.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <limits.h>
+
+extern op_cpu cpu_type;
+extern int no_event_ok;
+extern int sfile_equal(struct sfile const * sf, struct sfile const * sf2);
+extern void sfile_dup(struct sfile * to, struct sfile * from);
+extern char * session_dir;
+
+/* IBS Select Counters */
+static unsigned int ibs_selected_size;
+
+/* These flags store the IBS-derived events selection. */
+static unsigned int ibs_fetch_selected_flag;
+static unsigned int ibs_op_selected_flag;
+static unsigned int ibs_op_ls_selected_flag;
+static unsigned int ibs_op_nb_selected_flag;
+
+/* IBS Statistics */
+static unsigned long ibs_fetch_sample_stats;
+static unsigned long ibs_fetch_incomplete_stats;
+static unsigned long ibs_op_sample_stats;
+static unsigned long ibs_op_incomplete_stats;
+static unsigned long ibs_derived_event_stats;
+
+/*
+ * IBS Virtual Counter
+ */
+struct opd_event ibs_vc[OP_MAX_IBS_COUNTERS];
+
+/* IBS Virtual Counter Index(VCI) Map*/
+unsigned int ibs_vci_map[OP_MAX_IBS_COUNTERS];
+
+/* CPUID information */
+unsigned int ibs_family;
+unsigned int ibs_model;
+unsigned int ibs_stepping;
+
+/* IBS Extended MSRs */
+static unsigned long ibs_bta_enabled;
+
+/* IBS log files */
+FILE * memaccess_log;
+FILE * bta_log;
+
+/**
+ * This function converts IBS fetch event flags and values into
+ * derived events. If the tagged (sampled) fetched caused a derived
+ * event, the derived event is tallied.
+ */
+static void opd_log_ibs_fetch(struct transient * trans)
+{
+	struct ibs_fetch_sample * trans_fetch = ((struct ibs_sample*)(trans->ext))->fetch;
+	if (!trans_fetch)
+		return;
+
+	trans_ibs_fetch(trans, ibs_fetch_selected_flag);
+}
+
+
+/**
+ * This function translates the IBS op event flags and values into
+ * IBS op derived events. If an op derived event occured, it's tallied.
+ */
+static void opd_log_ibs_op(struct transient * trans)
+{
+	struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op;
+	if (!trans_op)
+		return;
+
+	trans_ibs_op_mask_reserved(ibs_family, trans);
+
+	if (trans_ibs_op_rip_invalid(trans) != 0)
+		return;
+
+	trans_ibs_op(trans, ibs_op_selected_flag);
+	trans_ibs_op_ls(trans, ibs_op_ls_selected_flag);
+	trans_ibs_op_nb(trans, ibs_op_nb_selected_flag);
+	trans_ibs_op_ls_memaccess(trans);
+	trans_ibs_op_bta(trans);
+}
+
+
+static void opd_put_ibs_sample(struct transient * trans)
+{
+	unsigned long long event = 0;
+	struct kernel_image * k_image = NULL;
+	struct ibs_fetch_sample * trans_fetch = ((struct ibs_sample*)(trans->ext))->fetch;
+
+	if (!enough_remaining(trans, 1)) {
+		trans->remaining = 0;
+		return;
+	}
+
+	/* IBS can generate samples with invalid dcookie and
+	 * in kernel address range. Map such samples to vmlinux
+	 * only if the user either specifies a range, or vmlinux.
+	 */
+	if (trans->cookie == INVALID_COOKIE
+	    && (k_image = find_kernel_image(trans)) != NULL
+	    && (k_image->start != 0 && k_image->end != 0)
+	    && trans->in_kernel == 0)
+		trans->in_kernel = 1;
+
+	if (trans->tracing != TRACING_ON)
+		trans->event = event;
+
+	/* 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;
+
+	if (trans_fetch)
+		opd_log_ibs_fetch(trans);
+	else
+		opd_log_ibs_op(trans);
+out:
+	/* switch to trace mode */
+	if (trans->tracing == TRACING_START)
+		trans->tracing = TRACING_ON;
+
+	update_trans_last(trans);
+}
+
+
+static void get_ibs_bta_status()
+{
+	FILE * fp = NULL;
+	char buf[PATH_MAX];
+
+	/* Default to disable */
+	ibs_bta_enabled = 0;
+
+	snprintf(buf, PATH_MAX, "/dev/oprofile/ibs_op/branch_target");
+	fp = fopen(buf, "r");
+	if (!fp)
+		return;
+
+	while (fgets(buf, PATH_MAX, fp) != NULL)
+		ibs_bta_enabled = strtoul(buf, NULL, 10);	
+
+	fclose(fp);
+}
+
+
+void code_ibs_fetch_sample(struct transient * trans)
+{
+	struct ibs_fetch_sample * trans_fetch = NULL;
+
+	if (!enough_remaining(trans, 7)) {
+		verbprintf(vext, "not enough remaining\n");
+		trans->remaining = 0;
+		ibs_fetch_incomplete_stats++;
+		return;
+	}
+
+	ibs_fetch_sample_stats++;
+
+	trans->ext = xmalloc(sizeof(struct ibs_sample));
+	((struct ibs_sample*)(trans->ext))->fetch = xmalloc(sizeof(struct ibs_fetch_sample));
+	trans_fetch = ((struct ibs_sample*)(trans->ext))->fetch;
+
+	trans_fetch->rip = pop_buffer_value(trans);
+
+	trans_fetch->ibs_fetch_lin_addr_low   = pop_buffer_value(trans);
+	trans_fetch->ibs_fetch_lin_addr_high  = pop_buffer_value(trans);
+
+	trans_fetch->ibs_fetch_ctl_low        = pop_buffer_value(trans);
+	trans_fetch->ibs_fetch_ctl_high       = pop_buffer_value(trans);
+	trans_fetch->ibs_fetch_phys_addr_low  = pop_buffer_value(trans);
+	trans_fetch->ibs_fetch_phys_addr_high = pop_buffer_value(trans);
+
+	verbprintf(vsamples,
+		"FETCH_X CPU:%ld PID:%ld RIP:%lx CTL_H:%x LAT:%d P_HI:%x P_LO:%x L_HI:%x L_LO:%x\n",
+		trans->cpu,
+		(long)trans->tgid,
+		trans_fetch->rip,
+		(trans_fetch->ibs_fetch_ctl_high >> 16) & 0x3ff,
+		(trans_fetch->ibs_fetch_ctl_high) & 0xffff,
+		trans_fetch->ibs_fetch_phys_addr_high,
+		trans_fetch->ibs_fetch_phys_addr_low,
+		trans_fetch->ibs_fetch_lin_addr_high,
+		trans_fetch->ibs_fetch_lin_addr_low) ;
+
+	/* Overwrite the trans->pc with the more accurate trans_fetch->rip */
+	trans->pc = trans_fetch->rip;
+
+	opd_put_ibs_sample(trans);
+
+	free(trans_fetch);
+	free(trans->ext);
+	trans->ext = NULL;
+}
+
+
+static void get_ibs_op_bta_sample(struct transient * trans,
+				    struct ibs_op_sample * trans_op)
+{
+	// Check remaining
+	if (!enough_remaining(trans, 2)) {
+		verbprintf(vext, "not enough remaining\n");
+		trans->remaining = 0;
+		ibs_op_incomplete_stats++;
+		return;
+	}
+
+	if (ibs_bta_enabled == 1) {
+		trans_op->ibs_op_brtgt_addr = pop_buffer_value(trans);
+	
+		// Check if branch target address is valid (MSRC001_1035[37] == 1]
+		if ((trans_op->ibs_op_data1_high & (0x00000001 << 5)) == 0) {
+			trans_op->ibs_op_brtgt_addr = 0;
+		}
+	} else {
+		trans_op->ibs_op_brtgt_addr = 0;
+	}
+}
+
+
+void code_ibs_op_sample(struct transient * trans)
+{
+	struct ibs_op_sample * trans_op= NULL;
+
+	if (!enough_remaining(trans, 13)) {
+		verbprintf(vext, "not enough remaining\n");
+		trans->remaining = 0;
+		ibs_op_incomplete_stats++;
+		return;
+	}
+
+	ibs_op_sample_stats++;
+
+	trans->ext = xmalloc(sizeof(struct ibs_sample));
+	((struct ibs_sample*)(trans->ext))->op = xmalloc(sizeof(struct ibs_op_sample));
+	trans_op = ((struct ibs_sample*)(trans->ext))->op;
+
+	trans_op->rip = pop_buffer_value(trans);
+
+	trans_op->ibs_op_lin_addr_low = pop_buffer_value(trans);
+	trans_op->ibs_op_lin_addr_high = pop_buffer_value(trans);
+
+	trans_op->ibs_op_data1_low         = pop_buffer_value(trans);
+	trans_op->ibs_op_data1_high        = pop_buffer_value(trans);
+	trans_op->ibs_op_data2_low         = pop_buffer_value(trans);
+	trans_op->ibs_op_data2_high        = pop_buffer_value(trans);
+	trans_op->ibs_op_data3_low         = pop_buffer_value(trans);
+	trans_op->ibs_op_data3_high        = pop_buffer_value(trans);
+	trans_op->ibs_op_ldst_linaddr_low  = pop_buffer_value(trans);
+	trans_op->ibs_op_ldst_linaddr_high = pop_buffer_value(trans);
+	trans_op->ibs_op_phys_addr_low     = pop_buffer_value(trans);
+	trans_op->ibs_op_phys_addr_high    = pop_buffer_value(trans);
+
+	get_ibs_op_bta_sample(trans, trans_op);
+
+	verbprintf(vsamples,
+	   "IBS_OP_X CPU:%ld PID:%d RIP:%lx D1HI:%x D1LO:%x D2LO:%x D3HI:%x D3LO:%x L_LO:%x P_LO:%x\n",
+		   trans->cpu,
+		   trans->tgid,
+		   trans_op->rip,
+		   trans_op->ibs_op_data1_high,
+		   trans_op->ibs_op_data1_low,
+		   trans_op->ibs_op_data2_low,
+		   trans_op->ibs_op_data3_high,
+		   trans_op->ibs_op_data3_low,
+		   trans_op->ibs_op_ldst_linaddr_low,
+		   trans_op->ibs_op_phys_addr_low);
+
+	/* Overwrite the trans->pc with the more accurate trans_op->rip */
+	trans->pc = trans_op->rip;
+
+	opd_put_ibs_sample(trans);
+
+	free(trans_op);
+	free(trans->ext);
+	trans->ext = NULL;
+}
+
+
+/** Convert IBS event to value used for data structure indexing */
+static unsigned long ibs_event_to_counter(unsigned long x)
+{
+	unsigned long ret = ~0UL;
+
+	if (IS_IBS_FETCH(x))
+		ret = (x - IBS_FETCH_BASE);
+	else if (IS_IBS_OP(x))
+		ret = (x - IBS_OP_BASE + IBS_FETCH_MAX);
+	else if (IS_IBS_OP_LS(x))
+		ret = (x - IBS_OP_LS_BASE + IBS_OP_MAX + IBS_FETCH_MAX);
+	else if (IS_IBS_OP_NB(x))
+		ret = (x - IBS_OP_NB_BASE + IBS_OP_LS_MAX + IBS_OP_MAX + IBS_FETCH_MAX);
+
+	return (ret != ~0UL) ? ret + OP_MAX_COUNTERS : ret;
+}
+
+
+void opd_log_ibs_event(unsigned int event,
+	struct transient * trans)
+{
+	ibs_derived_event_stats++;
+	trans->event = event;
+	sfile_log_sample_count(trans, 1);
+}
+
+
+void opd_log_ibs_count(unsigned int event,
+			struct transient * trans,
+			unsigned int count)
+{
+	ibs_derived_event_stats++;
+	trans->event = event;
+	sfile_log_sample_count(trans, count);
+}
+
+
+static unsigned long get_ibs_vci_key(unsigned int event)
+{
+	unsigned long key = ibs_event_to_counter(event);
+	if (key == ~0UL || key < OP_MAX_COUNTERS)
+		return ~0UL;
+
+	key = key - OP_MAX_COUNTERS;
+
+	return key;
+}
+
+
+static int ibs_parse_and_set_events(char * str)
+{
+	char * tmp, * ptr, * tok1, * tok2 = NULL;
+	int is_done = 0;
+	struct op_event * event = NULL;
+	op_cpu cpu_type = CPU_NO_GOOD;
+	unsigned long key;
+
+	if (!str)
+		return -1;
+
+	cpu_type = op_get_cpu_type();
+	op_events(cpu_type);
+
+	tmp = op_xstrndup(str, strlen(str));
+	ptr = tmp;
+
+	while (is_done != 1
+		&& (tok1 = strtok_r(ptr, ",", &tok2)) != NULL) {
+
+		if ((ptr = strstr(tok1, ":")) != NULL) {
+			*ptr = '\0';
+			is_done = 1;
+		}
+
+		// Resove event number
+		event = find_event_by_name(tok1, 0, 0);
+		if (!event)
+			return -1;
+
+		// Grouping
+		if (IS_IBS_FETCH(event->val)) {
+			ibs_fetch_selected_flag |= 1 << IBS_FETCH_OFFSET(event->val);
+		} else if (IS_IBS_OP(event->val)) {
+			ibs_op_selected_flag |= 1 << IBS_OP_OFFSET(event->val);
+		} else if (IS_IBS_OP_LS(event->val)) {
+			ibs_op_ls_selected_flag |= 1 << IBS_OP_LS_OFFSET(event->val);
+		} else if (IS_IBS_OP_NB(event->val)) {
+			ibs_op_nb_selected_flag |= 1 << IBS_OP_NB_OFFSET(event->val);
+		} else {
+			return -1;
+		}
+
+		key = get_ibs_vci_key(event->val);
+		if (key == ~0UL)
+			return -1;
+
+		ibs_vci_map[key] = ibs_selected_size;
+
+		/* Initialize part of ibs_vc */
+		ibs_vc[ibs_selected_size].name    = tok1;
+		ibs_vc[ibs_selected_size].value   = event->val;
+		ibs_vc[ibs_selected_size].counter = ibs_selected_size + OP_MAX_COUNTERS;
+		ibs_vc[ibs_selected_size].kernel  = 1;
+		ibs_vc[ibs_selected_size].user    = 1;
+
+		ibs_selected_size++;
+
+		ptr = NULL;
+	}
+
+	return 0;
+}
+
+
+static int ibs_parse_counts(char * str, unsigned long int * count)
+{
+	char * tmp, * tok1, * tok2 = NULL, *end = NULL;
+	if (!str)
+		return -1;
+
+	tmp = op_xstrndup(str, strlen(str));
+	tok1 = strtok_r(tmp, ":", &tok2);
+	*count = strtoul(tok1, &end, 10);
+	if ((end && *end) || *count == 0
+	    || errno == EINVAL || errno == ERANGE) {
+		fprintf(stderr,"Invalid count (%s)\n", str);
+		return -1;
+	}
+
+	return 0;
+}
+
+
+static int ibs_parse_and_set_um_fetch(char const * str)
+{
+	if (!str)
+		return -1;
+	return 0;
+}
+
+
+static int ibs_parse_and_set_um_op(char const * str, unsigned long int * ibs_op_um)
+{
+	char * end = NULL;
+	if (!str)
+		return -1;
+
+	*ibs_op_um = strtoul(str, &end, 16);
+	if ((end && *end) || errno == EINVAL || errno == ERANGE) {
+		fprintf(stderr,"Invalid unitmaks (%s)\n", str);
+		return -1;
+	}
+	return 0;
+}
+
+
+static void check_cpuid_family_model_stepping()
+{
+#if defined(__i386__) || defined(__x86_64__) 
+	unsigned eax = cpuid_signature();
+
+	ibs_family   = cpu_family(eax);
+	ibs_model    = cpu_model(eax);
+	ibs_stepping = cpu_stepping(eax);
+#else
+	ibs_family   = 0;
+	ibs_model    = 0;
+	ibs_stepping = 0;
+#endif
+}
+
+
+static int ibs_init(char const * argv)
+{
+	char * tmp, * ptr, * tok1, * tok2 = NULL;
+	unsigned int i = 0;
+	unsigned long int ibs_fetch_count = 0;
+	unsigned long int ibs_op_count = 0;
+	unsigned long int ibs_op_um = 0;
+
+	if (!argv)
+		return -1;
+
+	if (empty_line(argv) != 0)
+		return -1;
+
+	tmp = op_xstrndup(argv, strlen(argv));
+	ptr = (char *) skip_ws(tmp);
+
+	// "fetch:event1,event2,....:count:um|op:event1,event2,.....:count:um"
+	tok1 = strtok_r(ptr, "|", &tok2);
+
+	while (tok1 != NULL) {
+
+		if (!strncmp("fetch:", tok1, strlen("fetch:"))) {
+			// Get to event section
+			tok1 = tok1 + strlen("fetch:");
+			if (ibs_parse_and_set_events(tok1) == -1)
+				return -1;
+
+			// Get to count section
+			while (tok1) {
+				if (*tok1 == '\0')
+					return -1;
+				if (*tok1 != ':') {
+					tok1++;
+				} else {
+					tok1++;
+					break;
+				}
+			}
+
+			if (ibs_parse_counts(tok1, &ibs_fetch_count) == -1)
+				return -1;
+
+			// Get to um section
+			while (tok1) {
+				if (*tok1 == '\0')
+					return -1;
+				if (*tok1 != ':') {
+					tok1++;
+				} else {
+					tok1++;
+					break;
+				}
+			}
+
+			if (ibs_parse_and_set_um_fetch(tok1) == -1)
+				return -1;
+
+		} else if (!strncmp("op:", tok1, strlen("op:"))) {
+			// Get to event section
+			tok1 = tok1 + strlen("op:");
+			if (ibs_parse_and_set_events(tok1) == -1)
+				return -1;
+
+			// Get to count section
+			while (tok1) {
+				if (*tok1 == '\0')
+					return -1;
+				if (*tok1 != ':') {
+					tok1++;
+				} else {
+					tok1++;
+					break;
+				}
+			}
+
+			if (ibs_parse_counts(tok1, &ibs_op_count) == -1)
+				return -1;
+
+			// Get to um section
+			while (tok1) {
+				if (*tok1 == '\0')
+					return -1;
+				if (*tok1 != ':') {
+					tok1++;
+				} else {
+					tok1++;
+					break;
+				}
+			}
+
+			if (ibs_parse_and_set_um_op(tok1, &ibs_op_um))
+				return -1;
+
+		} else
+			return -1;
+
+		tok1 = strtok_r(NULL, "|", &tok2);
+	}
+
+	/* Initialize ibs_vc */
+	for (i = 0 ; i < ibs_selected_size ; i++)
+	{
+		if (IS_IBS_FETCH(ibs_vc[i].value)) {
+			ibs_vc[i].count   = ibs_fetch_count;
+			ibs_vc[i].um      = 0;
+		} else {
+			ibs_vc[i].count   = ibs_op_count;
+			ibs_vc[i].um      = ibs_op_um;
+		}
+	}
+
+	// Allow no event
+	no_event_ok = 1;
+
+	check_cpuid_family_model_stepping();
+
+	get_ibs_bta_status();
+
+	/* Create IBS memory access log */
+	memaccess_log = NULL;
+	if (ibs_op_um & 0x2) {
+		char filename[PATH_MAX];
+		char * log_file = "/samples/ibs_memaccess.log";
+		size_t path_len = strlen(session_dir) + strlen(log_file);
+		if (path_len < PATH_MAX) {
+			strcpy(filename, session_dir);
+			strcat(filename, log_file);
+			memaccess_log = fopen(filename, "w");
+		}
+		if ( memaccess_log == NULL) {
+			verbprintf(vext, "Warning: Cannot create ibs_memaccess.log\n");
+			
+		} else {
+			fprintf (memaccess_log, "# IBS Memory Access Log\n\n");
+			fprintf (memaccess_log, "# Format: app_cookie,cookie,cpu,tgid,tid,pc,branch-target-address,\n");
+			fprintf (memaccess_log, "#         phy-hi:phy-low,lin-hi:lin-low,accese-type,latency\n\n");
+		}
+	}
+
+	// Create IBS Branch Target Address (BTA) log	
+	bta_log = NULL;
+	if (ibs_bta_enabled) {
+		char filename[PATH_MAX];
+		char * log_file = "/samples/ibs_bta.log";
+		size_t path_len = strlen(session_dir) + strlen(log_file);
+		if (path_len < PATH_MAX) {
+			strcpy(filename, session_dir);
+			strcat(filename, log_file);
+			bta_log = fopen(filename, "w");
+		}
+		if ( bta_log == NULL) {
+			verbprintf(vext, "Warning: Cannot create ibs_bta.log\n");
+		} else {
+			fprintf (bta_log, "# IBS Memory Access Log\n\n");
+			fprintf (bta_log, "# Format: app_cookie,cookie,cpu,tgid,tid,pc,branch-target-address\n\n");
+		}
+	}
+
+	return 0;
+}
+
+
+static int ibs_deinit()
+{
+	if (memaccess_log) {
+		fclose (memaccess_log);
+		memaccess_log = NULL;
+	}
+	
+	if (bta_log) {
+		fclose (bta_log);
+		bta_log = NULL;
+	}
+	return 0;
+}
+
+
+static int ibs_print_stats()
+{
+	printf("Nr. IBS Fetch samples     : %lu (%lu entries)\n", 
+		ibs_fetch_sample_stats, (ibs_fetch_sample_stats * 7));
+	printf("Nr. IBS Fetch incompletes : %lu\n", ibs_fetch_incomplete_stats);
+	printf("Nr. IBS Op samples        : %lu (%lu entries)\n", 
+		ibs_op_sample_stats, (ibs_op_sample_stats * 13));
+	printf("Nr. IBS Op incompletes    : %lu\n", ibs_op_incomplete_stats);
+	printf("Nr. IBS derived events    : %lu\n", ibs_derived_event_stats);
+	return 0;
+}
+
+
+static int ibs_sfile_create(struct sfile * sf)
+{
+	unsigned int i;
+	sf->ext_files = xmalloc(ibs_selected_size * sizeof(odb_t));
+	for (i = 0 ; i < ibs_selected_size ; ++i)
+		odb_init(&sf->ext_files[i]);
+
+	return 0;
+}
+
+
+static int ibs_sfile_dup (struct sfile * to, struct sfile * from)
+{
+	unsigned int i;
+	if (from->ext_files != NULL) {
+		to->ext_files = xmalloc(ibs_selected_size * sizeof(odb_t));
+		for (i = 0 ; i < ibs_selected_size ; ++i)
+			odb_init(&to->ext_files[i]);
+	} else {
+		to->ext_files = NULL;
+	}
+	return 0;
+}
+
+static int ibs_sfile_close(struct sfile * sf)
+{
+	unsigned int i;
+	if (sf->ext_files != NULL) {
+		for (i = 0; i < ibs_selected_size ; ++i)
+			odb_close(&sf->ext_files[i]);
+
+		free(sf->ext_files);
+		sf->ext_files= NULL;
+	}
+	return 0;
+}
+
+static int ibs_sfile_sync(struct sfile * sf)
+{
+	unsigned int i;
+	if (sf->ext_files != NULL) {
+		for (i = 0; i < ibs_selected_size ; ++i)
+			odb_sync(&sf->ext_files[i]);
+	}
+	return 0;
+}
+
+static odb_t * ibs_sfile_get(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;
+	unsigned long counter, ibs_vci, key;
+
+	/* Note: "trans->event" for IBS is not the same as traditional
+ 	 * events.  Here, it has the actual event (0xfxxx), while the
+ 	 * traditional event has the event index.
+ 	 */
+	key = get_ibs_vci_key(trans->event);
+	if (key == ~0UL) {
+		fprintf(stderr, "%s: Invalid IBS event %lu\n", __func__, trans->event);
+		abort();
+	}
+	ibs_vci = ibs_vci_map[key];
+	counter = ibs_vci + OP_MAX_COUNTERS;
+
+	/* Creating IBS sfile if it not already exists */
+	if (sf->ext_files == NULL)
+		ibs_sfile_create(sf);
+
+	file = &(sf->ext_files[ibs_vci]);
+	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.ext_files[ibs_vci]);
+			goto open;
+		}
+	}
+
+	cg = xmalloc(sizeof(struct cg_entry));
+	sfile_dup(&cg->to, last);
+	list_add(&cg->hash, &sf->cg_hash[hash]);
+	file = &(cg->to.ext_files[ibs_vci]);
+
+open:
+	if (!odb_open_count(file))
+		opd_open_sample_file(file, last, sf, counter, is_cg);
+
+	/* Error is logged by opd_open_sample_file */
+	if (!odb_open_count(file))
+		return NULL;
+
+	return file;
+}
+
+
+/** Filled opd_event structure with IBS derived event information
+ *  from the given counter value.
+ */
+static struct opd_event * ibs_sfile_find_counter_event(unsigned long counter)
+{
+	unsigned long ibs_vci;
+
+	if (counter >= OP_MAX_COUNTERS + OP_MAX_IBS_COUNTERS
+	    || counter < OP_MAX_COUNTERS) {
+		fprintf(stderr,"Error: find_ibs_counter_event : "
+				"invalid counter value %lu.\n", counter);
+		abort();
+	}
+
+	ibs_vci = counter - OP_MAX_COUNTERS;
+	return &ibs_vc[ibs_vci];
+}
+
+
+struct opd_ext_sfile_handlers ibs_sfile_handlers =
+{
+	.create = &ibs_sfile_create,
+	.dup    = &ibs_sfile_dup,
+	.close  = &ibs_sfile_close,
+	.sync   = &ibs_sfile_sync,
+	.get    = &ibs_sfile_get,
+	.find_counter_event = &ibs_sfile_find_counter_event
+};
+
+
+struct opd_ext_handlers ibs_handlers =
+{
+	.ext_init        = &ibs_init,
+	.ext_deinit      = &ibs_deinit,
+	.ext_print_stats = &ibs_print_stats,
+	.ext_sfile       = &ibs_sfile_handlers
+};
diff --git a/oprofile-0.9.7/daemon/opd_ibs.h b/oprofile-0.9.7/daemon/opd_ibs.h
new file mode 100644
index 0000000..6f0fd64
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_ibs.h
@@ -0,0 +1,133 @@
+/**
+ * @file daemon/opd_ibs.h
+ * AMD Family10h Instruction Based Sampling (IBS) handling.
+ *
+ * @remark Copyright 2008-2010 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author Jason Yeh <jason.yeh@amd.com>
+ * @author Paul Drongowski <paul.drongowski@amd.com>
+ * @author Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+ * Copyright (c) 2008 Advanced Micro Devices, Inc.
+ */
+
+#ifndef OPD_IBS_H
+#define OPD_IBS_H
+
+#include <stdint.h>
+
+#include "opd_ibs_macro.h"
+
+struct transient;
+struct opd_event;
+
+/**
+ * IBS information is processed in two steps. The first step decodes
+ * hardware-level IBS information and saves it in decoded form. The
+ * second step translates the decoded IBS information into IBS derived
+ * events. IBS information is tallied and is reported as derived events.
+ */
+
+struct ibs_sample {
+	struct ibs_fetch_sample * fetch;
+	struct ibs_op_sample * op;
+};
+
+/**
+ * This struct represents the hardware-level IBS fetch information.
+ * Each field corresponds to a model-specific register (MSR.) See the
+ * BIOS and Kernel Developer's Guide for AMD Model Family 10h Processors
+ * for further details.
+ */
+struct ibs_fetch_sample {
+	unsigned long int rip;
+	/* MSRC001_1030 IBS Fetch Control Register */
+	unsigned int ibs_fetch_ctl_low;
+	unsigned int ibs_fetch_ctl_high;
+	/* MSRC001_1031 IBS Fetch Linear Address Register */
+	unsigned int ibs_fetch_lin_addr_low;
+	unsigned int ibs_fetch_lin_addr_high;
+	/* MSRC001_1032 IBS Fetch Physical Address Register */
+	unsigned int ibs_fetch_phys_addr_low;
+	unsigned int ibs_fetch_phys_addr_high;
+	unsigned int dummy_event;
+};
+
+
+
+/** This struct represents the hardware-level IBS op information. */
+struct ibs_op_sample {
+	unsigned long int rip;
+	/* MSRC001_1034 IBS Op Logical Address Register */
+	unsigned int ibs_op_lin_addr_low;
+	unsigned int ibs_op_lin_addr_high;
+	/* MSRC001_1035 IBS Op Data Register */
+	unsigned int ibs_op_data1_low;
+	unsigned int ibs_op_data1_high;
+	/* MSRC001_1036 IBS Op Data 2 Register */
+	unsigned int ibs_op_data2_low;
+	unsigned int ibs_op_data2_high;
+	/* MSRC001_1037 IBS Op Data 3 Register */
+	unsigned int ibs_op_data3_low;
+	unsigned int ibs_op_data3_high;
+	/* MSRC001_1038 IBS DC Linear Address */
+	unsigned int ibs_op_ldst_linaddr_low;
+	unsigned int ibs_op_ldst_linaddr_high;
+	/* MSRC001_1039 IBS DC Physical Address */
+	unsigned int ibs_op_phys_addr_low;
+	unsigned int ibs_op_phys_addr_high;
+	/* MSRC001_103B IBS Branch Target Address */
+	unsigned long ibs_op_brtgt_addr;
+};
+
+
+/**
+ * Handle an IBS fetch sample escape code sequence. An IBS fetch sample
+ * is represented as an escape code sequence. (See the comment for the
+ * function code_ibs_op_sample() for the sequence of entries in the event
+ * buffer.) When this function is called, the ESCAPE_CODE and IBS_FETCH_CODE
+ * have already been removed from the event buffer. Thus, 7 more event buffer
+ * entries are needed in order to process a complete IBS fetch sample.
+ */
+extern void code_ibs_fetch_sample(struct transient * trans);
+
+/**
+ * Handle an IBS op sample escape code sequence. An IBS op sample
+ * is represented as an escape code sequence:
+ *
+ *    IBS fetch              IBS op
+ *    ---------------        ----------------
+ *    ESCAPE_CODE            ESCAPE_CODE
+ *    IBS_FETCH_CODE         IBS_OP_CODE
+ *    Offset                 Offset
+ *    IbsFetchLinAd low      IbsOpRip low        <-- Logical (virtual) RIP
+ *    IbsFetchLinAd high     IbsOpRip high       <-- Logical (virtual) RIP
+ *    IbsFetchCtl low        IbsOpData low
+ *    IbsFetchCtl high       IbsOpData high
+ *    IbsFetchPhysAd low     IbsOpData2 low
+ *    IbsFetchPhysAd high    IbsOpData2 high
+ *                           IbsOpData3 low
+ *                           IbsOpData3 high
+ *                           IbsDcLinAd low
+ *                           IbsDcLinAd high
+ *                           IbsDcPhysAd low
+ *                           IbsDcPhysAd high
+ *
+ * When this function is called, the ESCAPE_CODE and IBS_OP_CODE have
+ * already been removed from the event buffer. Thus, 13 more event buffer
+ * entries are needed to process a complete IBS op sample.
+ *
+ * The IbsFetchLinAd and IbsOpRip are the linear (virtual) addresses
+ * that were generated by the IBS hardware. These addresses are mapped
+ * into the offset.
+ */
+extern void code_ibs_op_sample(struct transient * trans);
+
+/** Log the specified IBS derived event. */
+extern void opd_log_ibs_event(unsigned int event, struct transient * trans);
+
+/** Log the specified IBS cycle count. */
+extern void opd_log_ibs_count(unsigned int event, struct transient * trans, unsigned int count);
+
+
+#endif /*OPD_IBS_H*/
diff --git a/oprofile-0.9.7/daemon/opd_ibs_macro.h b/oprofile-0.9.7/daemon/opd_ibs_macro.h
new file mode 100644
index 0000000..0bfcf17
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_ibs_macro.h
@@ -0,0 +1,397 @@
+/**
+ * @file daemon/opd_ibs_macro.h
+ * AMD Instruction Based Sampling (IBS) related macro.
+ *
+ * @remark Copyright 2008-2010 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author Jason Yeh <jason.yeh@amd.com>
+ * @author Paul Drongowski <paul.drongowski@amd.com>
+ * @author Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+ * Copyright (c) 2008 Advanced Micro Devices, Inc.
+ */
+
+#ifndef OPD_IBS_MACRO_H
+#define OPD_IBS_MACRO_H
+
+/**
+ * The following defines are bit masks that are used to select
+ * IBS fetch event flags and values at the
+ * MSRC001_1030 IBS Fetch Control Register (IbsFetchCtl)
+ */
+#define FETCH_MASK_LATENCY  0x0000ffff
+#define FETCH_MASK_COMPLETE 0x00040000
+#define FETCH_MASK_IC_MISS  0x00080000
+#define FETCH_MASK_PHY_ADDR 0x00100000
+#define FETCH_MASK_PG_SIZE  0x00600000
+#define FETCH_MASK_L1_MISS  0x00800000
+#define FETCH_MASK_L2_MISS  0x01000000
+#define FETCH_MASK_KILLED   \
+		(FETCH_MASK_L1_MISS|FETCH_MASK_L2_MISS|FETCH_MASK_PHY_ADDR|\
+		FETCH_MASK_COMPLETE|FETCH_MASK_IC_MISS)
+
+
+/**
+ * The following defines are bit masks that are used to select
+ * IBS op event flags and values at the MSR level.
+ */
+
+/* MSRC001_1035 IBS Op Data Register (IbsOpData) */
+#define BR_MASK_RETIRE           0x0000ffff
+#define MASK_RIP_INVALID         0x00000040
+#define BR_MASK_BRN_RET          0x00000020
+#define BR_MASK_BRN_MISP         0x00000010
+#define BR_MASK_BRN_TAKEN        0x00000008
+#define BR_MASK_RETURN           0x00000004
+#define BR_MASK_MISP_RETURN      0x00000002
+#define BR_MASK_BRN_RESYNC       0x00000001
+
+/* MSRC001_1036 IBS Op Data Register (IbsOpData2) */
+#define NB_MASK_L3_STATE         0x00000020
+#define NB_MASK_REQ_DST_PROC     0x00000010
+#define NB_MASK_REQ_DATA_SRC     0x00000007
+
+/* MSRC001_1037 IBS Op Data Register (IbsOpData3) */
+#define DC_MASK_L2_HIT_1G        0x00080000
+#define DC_MASK_PHY_ADDR_VALID   0x00040000
+#define DC_MASK_LIN_ADDR_VALID   0x00020000
+#define DC_MASK_MAB_HIT          0x00010000
+#define DC_MASK_LOCKED_OP        0x00008000
+#define DC_MASK_UC_MEM_ACCESS    0x00004000
+#define DC_MASK_WC_MEM_ACCESS    0x00002000
+#define DC_MASK_ST_TO_LD_CANCEL  0x00001000
+#define DC_MASK_ST_TO_LD_FOR     0x00000800
+#define DC_MASK_ST_BANK_CONFLICT 0x00000400
+#define DC_MASK_LD_BANK_CONFLICT 0x00000200
+#define DC_MASK_MISALIGN_ACCESS  0x00000100
+#define DC_MASK_DC_MISS          0x00000080
+#define DC_MASK_L2_HIT_2M        0x00000040
+#define DC_MASK_L1_HIT_1G        0x00000020
+#define DC_MASK_L1_HIT_2M        0x00000010
+#define DC_MASK_L2_TLB_MISS      0x00000008
+#define DC_MASK_L1_TLB_MISS      0x00000004
+#define DC_MASK_STORE_OP         0x00000002
+#define DC_MASK_LOAD_OP          0x00000001
+
+
+/**
+ * IBS derived events:
+ *
+ * IBS derived events are identified by event select values which are
+ * similar to the event select values that identify performance monitoring
+ * counter (PMC) events. Event select values for IBS derived events begin
+ * at 0xf000.
+ *
+ * The definitions in this file *must* match definitions
+ * of IBS derived events. More information
+ * about IBS derived events is given in the Software Oprimization
+ * Guide.
+ */
+
+/**
+ * The following defines associate a 16-bit select value with an IBS
+ * derived fetch event.
+ */
+#define DE_IBS_FETCH_ALL         0xf000
+#define DE_IBS_FETCH_KILLED      0xf001
+#define DE_IBS_FETCH_ATTEMPTED   0xf002
+#define DE_IBS_FETCH_COMPLETED   0xf003
+#define DE_IBS_FETCH_ABORTED     0xf004
+#define DE_IBS_L1_ITLB_HIT       0xf005
+#define DE_IBS_ITLB_L1M_L2H      0xf006
+#define DE_IBS_ITLB_L1M_L2M      0xf007
+#define DE_IBS_IC_MISS           0xf008
+#define DE_IBS_IC_HIT            0xf009
+#define DE_IBS_FETCH_4K_PAGE     0xf00a
+#define DE_IBS_FETCH_2M_PAGE     0xf00b
+#define DE_IBS_FETCH_1G_PAGE     0xf00c
+#define DE_IBS_FETCH_XX_PAGE     0xf00d
+#define DE_IBS_FETCH_LATENCY     0xf00e
+
+#define IBS_FETCH_BASE           0xf000
+#define IBS_FETCH_END            0xf00e
+#define IBS_FETCH_MAX            (IBS_FETCH_END - IBS_FETCH_BASE + 1)
+#define IS_IBS_FETCH(x)          (IBS_FETCH_BASE <= x && x <= IBS_FETCH_END)
+#define IBS_FETCH_OFFSET(x)      (x - IBS_FETCH_BASE)
+#define CHECK_FETCH_SELECTED_FLAG(x)	if ( selected_flag & (1 << IBS_FETCH_OFFSET(x)))
+
+
+/**
+ * The following defines associate a 16-bit select value with an IBS
+ * derived branch/return macro-op event.
+ */
+#define DE_IBS_OP_ALL             0xf100
+#define DE_IBS_OP_TAG_TO_RETIRE   0xf101
+#define DE_IBS_OP_COMP_TO_RETIRE  0xf102
+#define DE_IBS_BRANCH_RETIRED     0xf103
+#define DE_IBS_BRANCH_MISP        0xf104
+#define DE_IBS_BRANCH_TAKEN       0xf105
+#define DE_IBS_BRANCH_MISP_TAKEN  0xf106
+#define DE_IBS_RETURN             0xf107
+#define DE_IBS_RETURN_MISP        0xf108
+#define DE_IBS_RESYNC             0xf109
+
+#define IBS_OP_BASE               0xf100
+#define IBS_OP_END                0xf109
+#define IBS_OP_MAX                (IBS_OP_END - IBS_OP_BASE + 1)
+#define IS_IBS_OP(x)              (IBS_OP_BASE <= x && x <= IBS_OP_END)
+#define IBS_OP_OFFSET(x)          (x - IBS_OP_BASE)
+#define CHECK_OP_SELECTED_FLAG(x)	if ( selected_flag & (1 << IBS_OP_OFFSET(x)))
+
+
+/**
+ * The following defines associate a 16-bit select value with an IBS
+ * derived load/store event.
+ */
+#define DE_IBS_LS_ALL_OP         0xf200
+#define DE_IBS_LS_LOAD_OP        0xf201
+#define DE_IBS_LS_STORE_OP       0xf202
+#define DE_IBS_LS_DTLB_L1H       0xf203
+#define DE_IBS_LS_DTLB_L1M_L2H   0xf204
+#define DE_IBS_LS_DTLB_L1M_L2M   0xf205
+#define DE_IBS_LS_DC_MISS        0xf206
+#define DE_IBS_LS_DC_HIT         0xf207
+#define DE_IBS_LS_MISALIGNED     0xf208
+#define DE_IBS_LS_BNK_CONF_LOAD  0xf209
+#define DE_IBS_LS_BNK_CONF_STORE 0xf20a
+#define DE_IBS_LS_STL_FORWARDED  0xf20b
+#define DE_IBS_LS_STL_CANCELLED  0xf20c
+#define DE_IBS_LS_UC_MEM_ACCESS  0xf20d
+#define DE_IBS_LS_WC_MEM_ACCESS  0xf20e
+#define DE_IBS_LS_LOCKED_OP      0xf20f
+#define DE_IBS_LS_MAB_HIT        0xf210
+#define DE_IBS_LS_L1_DTLB_4K     0xf211
+#define DE_IBS_LS_L1_DTLB_2M     0xf212
+#define DE_IBS_LS_L1_DTLB_1G     0xf213
+#define DE_IBS_LS_L1_DTLB_RES    0xf214
+#define DE_IBS_LS_L2_DTLB_4K     0xf215
+#define DE_IBS_LS_L2_DTLB_2M     0xf216
+#define DE_IBS_LS_L2_DTLB_1G     0xf217
+#define DE_IBS_LS_L2_DTLB_RES2   0xf218
+#define DE_IBS_LS_DC_LOAD_LAT    0xf219
+
+#define IBS_OP_LS_BASE           0xf200
+#define IBS_OP_LS_END            0xf219
+#define IBS_OP_LS_MAX            (IBS_OP_LS_END - IBS_OP_LS_BASE + 1)
+#define IS_IBS_OP_LS(x)          (IBS_OP_LS_BASE <= x && x <= IBS_OP_LS_END)
+#define IBS_OP_LS_OFFSET(x)      (x - IBS_OP_LS_BASE)
+#define CHECK_OP_LS_SELECTED_FLAG(x)	if ( selected_flag & (1 << IBS_OP_LS_OFFSET(x)))
+
+
+/**
+ * The following defines associate a 16-bit select value with an IBS
+ * derived Northbridge (NB) event.
+ */
+#define DE_IBS_NB_LOCAL          0xf240
+#define DE_IBS_NB_REMOTE         0xf241
+#define DE_IBS_NB_LOCAL_L3       0xf242
+#define DE_IBS_NB_LOCAL_CACHE    0xf243
+#define DE_IBS_NB_REMOTE_CACHE   0xf244
+#define DE_IBS_NB_LOCAL_DRAM     0xf245
+#define DE_IBS_NB_REMOTE_DRAM    0xf246
+#define DE_IBS_NB_LOCAL_OTHER    0xf247
+#define DE_IBS_NB_REMOTE_OTHER   0xf248
+#define DE_IBS_NB_CACHE_STATE_M  0xf249
+#define DE_IBS_NB_CACHE_STATE_O  0xf24a
+#define DE_IBS_NB_LOCAL_LATENCY  0xf24b
+#define DE_IBS_NB_REMOTE_LATENCY 0xf24c
+
+#define IBS_OP_NB_BASE           0xf240
+#define IBS_OP_NB_END            0xf24c
+#define IBS_OP_NB_MAX            (IBS_OP_NB_END - IBS_OP_NB_BASE + 1)
+#define IS_IBS_OP_NB(x)          (IBS_OP_NB_BASE <= x && x <= IBS_OP_NB_END)
+#define IBS_OP_NB_OFFSET(x)      (x - IBS_OP_NB_BASE)
+#define CHECK_OP_NB_SELECTED_FLAG(x)	if ( selected_flag & (1 << IBS_OP_NB_OFFSET(x)))
+
+
+#define OP_MAX_IBS_COUNTERS      (IBS_FETCH_MAX + IBS_OP_MAX + IBS_OP_LS_MAX + IBS_OP_NB_MAX)
+
+
+/**
+ * These macro decodes IBS hardware-level event flags and fields.
+ * Translation results are either zero (false) or non-zero (true), except
+ * the fetch latency, which is a 16-bit cycle count, and the fetch page size
+ * field, which is a 2-bit unsigned integer.
+ */
+
+/** Bits 47:32 IbsFetchLat: instruction fetch latency */
+#define IBS_FETCH_FETCH_LATENCY(x)              ((unsigned short)(x->ibs_fetch_ctl_high & FETCH_MASK_LATENCY))
+
+/** Bit 50 IbsFetchComp: instruction fetch complete. */
+#define IBS_FETCH_FETCH_COMPLETION(x)           ((x->ibs_fetch_ctl_high & FETCH_MASK_COMPLETE) != 0)
+
+/** Bit 51 IbsIcMiss: instruction cache miss. */
+#define IBS_FETCH_INST_CACHE_MISS(x)            ((x->ibs_fetch_ctl_high & FETCH_MASK_IC_MISS) != 0)
+
+/** Bit 52 IbsPhyAddrValid: instruction fetch physical address valid. */
+#define IBS_FETCH_PHYS_ADDR_VALID(x)            ((x->ibs_fetch_ctl_high & FETCH_MASK_PHY_ADDR) != 0)
+
+enum IBSL1PAGESIZE {
+	L1TLB4K = 0,
+	L1TLB2M,
+	L1TLB1G,
+	L1TLB_INVALID
+};
+
+/** Bits 54:53 IbsL1TlbPgSz: instruction cache L1TLB page size. */
+#define IBS_FETCH_TLB_PAGE_SIZE(x)              ((unsigned short)((x->ibs_fetch_ctl_high >> 21) & 0x3))
+#define IBS_FETCH_TLB_PAGE_SIZE_4K(x)           (IBS_FETCH_TLB_PAGE_SIZE(x) == L1TLB4K)
+#define IBS_FETCH_TLB_PAGE_SIZE_2M(x)           (IBS_FETCH_TLB_PAGE_SIZE(x) == L1TLB2M)
+#define IBS_FETCH_TLB_PAGE_SIZE_1G(x)           (IBS_FETCH_TLB_PAGE_SIZE(x) == L1TLB1G)
+
+/** Bit 55 IbsL1TlbMiss: instruction cache L1TLB miss. */
+#define IBS_FETCH_M_L1_TLB_MISS(x)              ((x->ibs_fetch_ctl_high & FETCH_MASK_L1_MISS) != 0)
+
+/** Bit 56 IbsL2TlbMiss: instruction cache L2TLB miss. */
+#define IBS_FETCH_L2_TLB_MISS(x)                ((x->ibs_fetch_ctl_high & FETCH_MASK_L2_MISS) != 0)
+
+/** A fetch is a killed fetch if all the masked bits are clear */
+#define IBS_FETCH_KILLED(x)                     ((x->ibs_fetch_ctl_high & FETCH_MASK_KILLED) == 0)
+
+#define IBS_FETCH_INST_CACHE_HIT(x)             (IBS_FETCH_FETCH_COMPLETION(x) && !IBS_FETCH_INST_CACHE_MISS(x))
+
+#define IBS_FETCH_L1_TLB_HIT(x)                 (!IBS_FETCH_M_L1_TLB_MISS(x) && IBS_FETCH_PHYS_ADDR_VALID(x))
+
+#define IBS_FETCH_ITLB_L1M_L2H(x)               (IBS_FETCH_M_L1_TLB_MISS(x) && !IBS_FETCH_L2_TLB_MISS(x))
+
+#define IBS_FETCH_ITLB_L1M_L2M(x)               (IBS_FETCH_M_L1_TLB_MISS(x) && IBS_FETCH_L2_TLB_MISS(x))
+
+
+/**
+ * These macros translates IBS op event data from its hardware-level
+ * representation .It hides the MSR layout of IBS op data.
+ */
+
+/**
+ * MSRC001_1035 IBS OP Data Register (IbsOpData)
+ *
+ * 15:0 IbsCompToRetCtr: macro-op completion to retire count
+ */
+#define IBS_OP_COM_TO_RETIRE_CYCLES(x)          ((unsigned short)(x->ibs_op_data1_low & BR_MASK_RETIRE))
+
+/** 31:16 tag_to_retire_cycles : macro-op tag to retire count. */
+#define IBS_OP_TAG_TO_RETIRE_CYCLES(x)          ((unsigned short)((x->ibs_op_data1_low >> 16) & BR_MASK_RETIRE))
+
+/** 32 op_branch_resync : resync macro-op. */
+#define IBS_OP_BRANCH_RESYNC(x)                 ((x->ibs_op_data1_high & BR_MASK_BRN_RESYNC) != 0)
+
+/** 33 op_mispredict_return : mispredicted return macro-op. */
+#define IBS_OP_MISPREDICT_RETURN(x)             ((x->ibs_op_data1_high & BR_MASK_MISP_RETURN) != 0)
+
+/** 34 IbsOpReturn: return macro-op. */
+#define IBS_OP_RETURN(x)                        ((x->ibs_op_data1_high & BR_MASK_RETURN) != 0)
+
+/** 35 IbsOpBrnTaken: taken branch macro-op. */
+#define IBS_OP_BRANCH_TAKEN(x)                  ((x->ibs_op_data1_high & BR_MASK_BRN_TAKEN) != 0)
+
+/** 36 IbsOpBrnMisp: mispredicted branch macro-op.  */
+#define IBS_OP_BRANCH_MISPREDICT(x)             ((x->ibs_op_data1_high & BR_MASK_BRN_MISP) != 0)
+
+/** 37 IbsOpBrnRet: branch macro-op retired. */
+#define IBS_OP_BRANCH_RETIRED(x)                ((x->ibs_op_data1_high & BR_MASK_BRN_RET) != 0)
+
+/** 38 IbsRipInvalid: RIP invalid. */
+#define IBS_OP_RIP_INVALID(x)                   ((x->ibs_op_data1_high & MASK_RIP_INVALID) != 0)
+
+/**
+ * MSRC001_1036 IBS Op Data 2 Register (IbsOpData2)
+ *
+ * 5 NbIbsReqCacheHitSt: IBS L3 cache state
+ */
+#define IBS_OP_NB_IBS_CACHE_HIT_ST(x)           ((x->ibs_op_data2_low & NB_MASK_L3_STATE) != 0)
+
+/** 4 NbIbsReqDstProc: IBS request destination processor */
+#define IBS_OP_NB_IBS_REQ_DST_PROC(x)           ((x->ibs_op_data2_low & NB_MASK_REQ_DST_PROC) != 0)
+
+/** 2:0 NbIbsReqSrc: Northbridge IBS request data source */
+#define IBS_OP_NB_IBS_REQ_SRC(x)                ((unsigned char)(x->ibs_op_data2_low & NB_MASK_REQ_DATA_SRC))
+
+#define IBS_OP_NB_IBS_REQ_SRC_01(x)             (IBS_OP_NB_IBS_REQ_SRC(x) == 0x01)
+
+#define IBS_OP_NB_IBS_REQ_SRC_02(x)             (IBS_OP_NB_IBS_REQ_SRC(x) == 0x02)
+
+#define IBS_OP_NB_IBS_REQ_SRC_03(x)             (IBS_OP_NB_IBS_REQ_SRC(x) == 0x03)
+
+#define IBS_OP_NB_IBS_REQ_SRC_07(x)             (IBS_OP_NB_IBS_REQ_SRC(x) == 0x07)
+
+/**
+ * MSRC001_1037 IBS Op Data3 Register
+ *
+ * Bits 47:32   IbsDcMissLat
+ */
+#define IBS_OP_DC_MISS_LATENCY(x)               ((unsigned short)(x->ibs_op_data3_high & 0xffff))
+
+/** 0 IbsLdOp: Load op */
+#define IBS_OP_IBS_LD_OP(x)                     ((x->ibs_op_data3_low & DC_MASK_LOAD_OP) != 0)
+
+/** 1 IbsStOp: Store op */
+#define IBS_OP_IBS_ST_OP(x)                     ((x->ibs_op_data3_low & DC_MASK_STORE_OP) != 0)
+
+/** 2 ibs_dc_l1_tlb_miss: Data cache L1TLB miss */
+#define IBS_OP_IBS_DC_L1_TLB_MISS(x)            ((x->ibs_op_data3_low & DC_MASK_L1_TLB_MISS) != 0)
+
+/** 3 ibs_dc_l2_tlb_miss: Data cache L2TLB miss */
+#define IBS_OP_IBS_DC_L2_TLB_MISS(x)            ((x->ibs_op_data3_low & DC_MASK_L2_TLB_MISS) != 0)
+
+/** 4 IbsDcL1tlbHit2M: Data cache L1TLB hit in 2M page */
+#define IBS_OP_IBS_DC_L1_TLB_HIT_2MB(x)         ((x->ibs_op_data3_low & DC_MASK_L1_HIT_2M) != 0)
+
+/** 5 ibs_dc_l1_tlb_hit_1gb: Data cache L1TLB hit in 1G page */
+#define IBS_OP_IBS_DC_L1_TLB_HIT_1GB(x)         ((x->ibs_op_data3_low & DC_MASK_L1_HIT_1G) != 0)
+
+/** 6 ibs_dc_l2_tlb_hit_2mb: Data cache L2TLB hit in 2M page */
+#define IBS_OP_IBS_DC_L2_TLB_HIT_2MB(x)         ((x->ibs_op_data3_low & DC_MASK_L2_HIT_2M) != 0)
+
+/** 7 ibs_dc_miss: Data cache miss */
+#define IBS_OP_IBS_DC_MISS(x)                   ((x->ibs_op_data3_low & DC_MASK_DC_MISS) != 0)
+
+/** 8 ibs_dc_miss_acc: Misaligned access */
+#define IBS_OP_IBS_DC_MISS_ACC(x)               ((x->ibs_op_data3_low & DC_MASK_MISALIGN_ACCESS) != 0)
+
+/** 9 ibs_dc_ld_bnk_con: Bank conflict on load operation */
+#define IBS_OP_IBS_DC_LD_BNK_CON(x)             ((x->ibs_op_data3_low & DC_MASK_LD_BANK_CONFLICT) != 0)
+
+/** 10 ibs_dc_st_bnk_con: Bank conflict on store operation */
+#define IBS_OP_IBS_DC_ST_BNK_CON(x)             ((x->ibs_op_data3_low & DC_MASK_ST_BANK_CONFLICT) != 0)
+
+/** 11 ibs_dc_st_to_ld_fwd : Data forwarded from store to load operation */
+#define IBS_OP_IBS_DC_ST_TO_LD_FWD(x)           ((x->ibs_op_data3_low & DC_MASK_ST_TO_LD_FOR) != 0)
+
+/** 12 ibs_dc_st_to_ld_can: Data forwarding from store to load operation cancelled */
+#define IBS_OP_IBS_DC_ST_TO_LD_CAN(x)           ((x->ibs_op_data3_low & DC_MASK_ST_TO_LD_CANCEL) != 0)
+
+/** 13 ibs_dc_wc_mem_acc : WC memory access */
+#define IBS_OP_IBS_DC_WC_MEM_ACC(x)             ((x->ibs_op_data3_low & DC_MASK_WC_MEM_ACCESS) != 0)
+
+/** 14 ibs_dc_uc_mem_acc : UC memory access */
+#define IBS_OP_IBS_DC_UC_MEM_ACC(x)             ((x->ibs_op_data3_low & DC_MASK_UC_MEM_ACCESS) != 0)
+
+/** 15 ibs_locked_op: Locked operation */
+#define IBS_OP_IBS_LOCKED_OP(x)                 ((x->ibs_op_data3_low & DC_MASK_LOCKED_OP) != 0)
+
+/** 16 ibs_dc_mab_hit : MAB hit */
+#define IBS_OP_IBS_DC_MAB_HIT(x)                ((x->ibs_op_data3_low & DC_MASK_MAB_HIT) != 0)
+
+/** 17 IbsDcLinAddrValid: Data cache linear address valid */
+#define IBS_OP_IBS_DC_LIN_ADDR_VALID(x)         ((x->ibs_op_data3_low & DC_MASK_LIN_ADDR_VALID) != 0)
+
+/** 18 ibs_dc_phy_addr_valid: Data cache physical address valid */
+#define IBS_OP_IBS_DC_PHY_ADDR_VALID(x)         ((x->ibs_op_data3_low & DC_MASK_PHY_ADDR_VALID) != 0)
+
+/** 19 ibs_dc_l2_tlb_hit_1gb: Data cache L2TLB hit in 1G page */
+#define IBS_OP_IBS_DC_L2_TLB_HIT_1GB(x)         ((x->ibs_op_data3_low & DC_MASK_L2_HIT_1G) != 0)
+
+
+/**
+ * Aggregate the IBS derived event. Increase the
+ * derived event count by one.
+ */
+#define AGG_IBS_EVENT(EV)               opd_log_ibs_event(EV, trans)
+
+/**
+ * Aggregate the IBS latency/cycle counts. Increase the
+ * derived event count by the specified count value.
+ */
+#define AGG_IBS_COUNT(EV, COUNT)        opd_log_ibs_count(EV, trans, COUNT)
+
+#endif /*OPD_IBS_MACRO_H*/
diff --git a/oprofile-0.9.7/daemon/opd_ibs_trans.c b/oprofile-0.9.7/daemon/opd_ibs_trans.c
new file mode 100644
index 0000000..68bee38
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_ibs_trans.c
@@ -0,0 +1,646 @@
+/**
+ * @file daemon/opd_ibs_trans.c
+ * AMD Instruction Based Sampling (IBS) translation.
+ *
+ * @remark Copyright 2008 - 2010 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author Jason Yeh <jason.yeh@amd.com>
+ * @author Paul Drongowski <paul.drongowski@amd.com>
+ * @author Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+ * Copyright (c) 2008 Advanced Micro Devices, Inc.
+ */
+
+#include "opd_ibs.h"
+#include "opd_ibs_macro.h"
+#include "opd_ibs_trans.h"
+#include "opd_trans.h"
+#include "opd_printf.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+
+extern FILE * bta_log;
+extern FILE * memaccess_log;
+
+/*
+ * --------------------- FETCH DERIVED FUNCTION
+ */
+void trans_ibs_fetch (struct transient * trans, unsigned int selected_flag)
+{
+	struct ibs_fetch_sample * trans_fetch = ((struct ibs_sample*)(trans->ext))->fetch;
+
+	if ((selected_flag) == 0)
+		return;
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_ALL) {
+		/* IBS all fetch samples (kills + attempts) */
+		AGG_IBS_EVENT(DE_IBS_FETCH_ALL);
+	}		
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_KILLED) {
+		/* IBS killed fetches ("case 0") -- All interesting event
+		 * flags are clear */
+		if (IBS_FETCH_KILLED(trans_fetch))
+			AGG_IBS_EVENT(DE_IBS_FETCH_KILLED);
+	}
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_ATTEMPTED) {
+		/* Any non-killed fetch is an attempted fetch */
+		AGG_IBS_EVENT(DE_IBS_FETCH_ATTEMPTED);
+	}
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_COMPLETED) {
+		if (IBS_FETCH_FETCH_COMPLETION(trans_fetch))
+			/* IBS Fetch Completed */
+			AGG_IBS_EVENT(DE_IBS_FETCH_COMPLETED);
+	}
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_ABORTED) {
+		if (!IBS_FETCH_FETCH_COMPLETION(trans_fetch))
+			/* IBS Fetch Aborted */
+			AGG_IBS_EVENT(DE_IBS_FETCH_ABORTED);
+	}
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_L1_ITLB_HIT) {
+		/* IBS L1 ITLB hit */
+		if (IBS_FETCH_L1_TLB_HIT(trans_fetch))
+			AGG_IBS_EVENT(DE_IBS_L1_ITLB_HIT);
+	}
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_ITLB_L1M_L2H) {
+		/* IBS L1 ITLB miss and L2 ITLB hit */
+		if (IBS_FETCH_ITLB_L1M_L2H(trans_fetch))
+			AGG_IBS_EVENT(DE_IBS_ITLB_L1M_L2H);
+	}
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_ITLB_L1M_L2M) {
+		/* IBS L1 & L2 ITLB miss; complete ITLB miss */
+		if (IBS_FETCH_ITLB_L1M_L2M(trans_fetch))
+			AGG_IBS_EVENT(DE_IBS_ITLB_L1M_L2M);
+	}
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_IC_MISS) {
+		/* IBS instruction cache miss */
+		if (IBS_FETCH_INST_CACHE_MISS(trans_fetch))
+			AGG_IBS_EVENT(DE_IBS_IC_MISS);
+	}
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_IC_HIT) {
+		/* IBS instruction cache hit */
+		if (IBS_FETCH_INST_CACHE_HIT(trans_fetch))
+			AGG_IBS_EVENT(DE_IBS_IC_HIT);
+	}
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_4K_PAGE) {
+		if (IBS_FETCH_PHYS_ADDR_VALID(trans_fetch)
+		    && IBS_FETCH_TLB_PAGE_SIZE_4K(trans_fetch))
+			AGG_IBS_EVENT(DE_IBS_FETCH_4K_PAGE);
+	}
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_2M_PAGE) {
+		if (IBS_FETCH_PHYS_ADDR_VALID(trans_fetch)
+		    && IBS_FETCH_TLB_PAGE_SIZE_2M(trans_fetch))
+			AGG_IBS_EVENT(DE_IBS_FETCH_2M_PAGE);
+	}
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_1G_PAGE) {
+		if (IBS_FETCH_PHYS_ADDR_VALID(trans_fetch)
+		    && IBS_FETCH_TLB_PAGE_SIZE_1G(trans_fetch))
+			AGG_IBS_EVENT(DE_IBS_FETCH_1G_PAGE);
+	}
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_XX_PAGE) {
+	}
+
+	CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_LATENCY) {
+		if (IBS_FETCH_FETCH_LATENCY(trans_fetch))
+			AGG_IBS_COUNT(DE_IBS_FETCH_LATENCY,
+				      IBS_FETCH_FETCH_LATENCY(trans_fetch));
+	}
+}
+
+
+/*
+ * --------------------- OP DERIVED FUNCTION
+ */
+void trans_ibs_op (struct transient * trans, unsigned int selected_flag)
+{
+	struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op;
+
+	if ((selected_flag) == 0)
+		return;
+
+	CHECK_OP_SELECTED_FLAG(DE_IBS_OP_ALL) {
+		/* All IBS op samples */
+		AGG_IBS_EVENT(DE_IBS_OP_ALL);
+	}
+
+	CHECK_OP_SELECTED_FLAG(DE_IBS_OP_TAG_TO_RETIRE) {
+		/* Tally retire cycle counts for all sampled macro-ops
+		 * IBS tag to retire cycles */
+		if (IBS_OP_TAG_TO_RETIRE_CYCLES(trans_op))
+			AGG_IBS_COUNT(DE_IBS_OP_TAG_TO_RETIRE,
+				IBS_OP_TAG_TO_RETIRE_CYCLES(trans_op));
+	}
+
+	CHECK_OP_SELECTED_FLAG(DE_IBS_OP_COMP_TO_RETIRE) {
+		/* IBS completion to retire cycles */
+		if (IBS_OP_COM_TO_RETIRE_CYCLES(trans_op))
+			AGG_IBS_COUNT(DE_IBS_OP_COMP_TO_RETIRE,
+				IBS_OP_COM_TO_RETIRE_CYCLES(trans_op));
+	}
+
+	CHECK_OP_SELECTED_FLAG(DE_IBS_BRANCH_RETIRED) {
+		if (IBS_OP_BRANCH_RETIRED(trans_op))
+			/* IBS Branch retired op */
+			AGG_IBS_EVENT(DE_IBS_BRANCH_RETIRED) ;
+	}
+
+	CHECK_OP_SELECTED_FLAG(DE_IBS_BRANCH_MISP) {
+		if (IBS_OP_BRANCH_RETIRED(trans_op)
+		    /* Test branch-specific event flags */
+		    /* IBS mispredicted Branch op */
+		    && IBS_OP_BRANCH_MISPREDICT(trans_op))
+			AGG_IBS_EVENT(DE_IBS_BRANCH_MISP) ;
+	}
+
+	CHECK_OP_SELECTED_FLAG(DE_IBS_BRANCH_TAKEN) {
+		if (IBS_OP_BRANCH_RETIRED(trans_op)
+		    /* IBS taken Branch op */
+		    && IBS_OP_BRANCH_TAKEN(trans_op))
+			AGG_IBS_EVENT(DE_IBS_BRANCH_TAKEN);
+	}
+
+	CHECK_OP_SELECTED_FLAG(DE_IBS_BRANCH_MISP_TAKEN) {
+		if (IBS_OP_BRANCH_RETIRED(trans_op)
+		    /* IBS mispredicted taken branch op */
+		    && IBS_OP_BRANCH_TAKEN(trans_op)
+		    && IBS_OP_BRANCH_MISPREDICT(trans_op))
+			AGG_IBS_EVENT(DE_IBS_BRANCH_MISP_TAKEN);
+	}
+
+	CHECK_OP_SELECTED_FLAG(DE_IBS_RETURN) {
+		if (IBS_OP_BRANCH_RETIRED(trans_op)
+		    /* IBS return op */
+		    && IBS_OP_RETURN(trans_op))
+			AGG_IBS_EVENT(DE_IBS_RETURN);
+	}
+
+	CHECK_OP_SELECTED_FLAG(DE_IBS_RETURN_MISP) {
+		if (IBS_OP_BRANCH_RETIRED(trans_op)
+		    /* IBS mispredicted return op */
+		    && IBS_OP_RETURN(trans_op)
+		    && IBS_OP_BRANCH_MISPREDICT(trans_op))
+			AGG_IBS_EVENT(DE_IBS_RETURN_MISP);
+	}
+
+	CHECK_OP_SELECTED_FLAG(DE_IBS_RESYNC) {
+		/* Test for a resync macro-op */
+		if (IBS_OP_BRANCH_RESYNC(trans_op))
+			AGG_IBS_EVENT(DE_IBS_RESYNC);
+	}
+}
+
+
+/*
+ * --------------------- OP LS DERIVED FUNCTION
+ */
+void trans_ibs_op_ls (struct transient * trans, unsigned int selected_flag)
+{
+	struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op;
+
+	/* Preliminary check */
+	if (!IBS_OP_IBS_LD_OP(trans_op) && !IBS_OP_IBS_ST_OP(trans_op))
+		return;
+
+
+	if ((selected_flag) == 0)
+		return;
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_ALL_OP) {
+		/* Count the number of LS op samples */
+		AGG_IBS_EVENT(DE_IBS_LS_ALL_OP) ;
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_LOAD_OP) {
+		if (IBS_OP_IBS_LD_OP(trans_op))
+			/* TALLy an IBS load derived event */
+			AGG_IBS_EVENT(DE_IBS_LS_LOAD_OP) ;
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_STORE_OP) {
+		if (IBS_OP_IBS_ST_OP(trans_op))
+			/* Count and handle store operations */
+			AGG_IBS_EVENT(DE_IBS_LS_STORE_OP);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_DTLB_L1H) {
+		if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
+		    && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op))
+			/* L1 DTLB hit -- This is the most frequent case */
+			AGG_IBS_EVENT(DE_IBS_LS_DTLB_L1H);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_DTLB_L1M_L2H) {
+		/* l2_translation_size = 1 */
+		if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
+		    && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
+		    && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op))
+			/* L1 DTLB miss, L2 DTLB hit */
+			AGG_IBS_EVENT(DE_IBS_LS_DTLB_L1M_L2H);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_DTLB_L1M_L2M) {
+		if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
+		    && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
+		    && IBS_OP_IBS_DC_L2_TLB_MISS(trans_op))
+			/* L1 DTLB miss, L2 DTLB miss */
+			AGG_IBS_EVENT(DE_IBS_LS_DTLB_L1M_L2M);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_DC_MISS) {
+		if (IBS_OP_IBS_DC_MISS(trans_op))
+			AGG_IBS_EVENT(DE_IBS_LS_DC_MISS);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_DC_HIT) {
+		if (!IBS_OP_IBS_DC_MISS(trans_op))
+			AGG_IBS_EVENT(DE_IBS_LS_DC_HIT);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_MISALIGNED) {
+		if (IBS_OP_IBS_DC_MISS_ACC(trans_op))
+			AGG_IBS_EVENT(DE_IBS_LS_MISALIGNED);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_BNK_CONF_LOAD) {
+		if (IBS_OP_IBS_DC_LD_BNK_CON(trans_op))
+			AGG_IBS_EVENT(DE_IBS_LS_BNK_CONF_LOAD);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_BNK_CONF_STORE) {
+		if (IBS_OP_IBS_DC_ST_BNK_CON(trans_op))
+			AGG_IBS_EVENT(DE_IBS_LS_BNK_CONF_STORE);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_STL_FORWARDED) {
+		if (IBS_OP_IBS_LD_OP(trans_op)
+		    /* Data forwarding info are valid only for load ops */
+		    && IBS_OP_IBS_DC_ST_TO_LD_FWD(trans_op))
+			AGG_IBS_EVENT(DE_IBS_LS_STL_FORWARDED) ;
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_STL_CANCELLED) {
+		if (IBS_OP_IBS_LD_OP(trans_op))
+		if (IBS_OP_IBS_DC_ST_TO_LD_CAN(trans_op))
+			AGG_IBS_EVENT(DE_IBS_LS_STL_CANCELLED) ;
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_UC_MEM_ACCESS) {
+		if (IBS_OP_IBS_DC_UC_MEM_ACC(trans_op))
+			AGG_IBS_EVENT(DE_IBS_LS_UC_MEM_ACCESS);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_WC_MEM_ACCESS) {
+		if (IBS_OP_IBS_DC_WC_MEM_ACC(trans_op))
+			AGG_IBS_EVENT(DE_IBS_LS_WC_MEM_ACCESS);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_LOCKED_OP) {
+		if (IBS_OP_IBS_LOCKED_OP(trans_op))
+			AGG_IBS_EVENT(DE_IBS_LS_LOCKED_OP);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_MAB_HIT) {
+		if (IBS_OP_IBS_DC_MAB_HIT(trans_op))
+			AGG_IBS_EVENT(DE_IBS_LS_MAB_HIT);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L1_DTLB_4K) {
+		/* l1_translation */
+		if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
+		    && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
+
+		    && !IBS_OP_IBS_DC_L1_TLB_HIT_2MB(trans_op)
+		    && !IBS_OP_IBS_DC_L1_TLB_HIT_1GB(trans_op))
+			/* This is the most common case, unfortunately */
+			AGG_IBS_EVENT(DE_IBS_LS_L1_DTLB_4K) ;
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L1_DTLB_2M) {
+		/* l1_translation */
+		if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
+		    && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
+
+		    && IBS_OP_IBS_DC_L1_TLB_HIT_2MB(trans_op))
+			/* 2M L1 DTLB page translation */
+			AGG_IBS_EVENT(DE_IBS_LS_L1_DTLB_2M);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L1_DTLB_1G) {
+		/* l1_translation */
+		if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
+		    && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
+
+		    && !IBS_OP_IBS_DC_L1_TLB_HIT_2MB(trans_op)
+		    && IBS_OP_IBS_DC_L1_TLB_HIT_1GB(trans_op))
+			/* 1G L1 DTLB page translation */
+			AGG_IBS_EVENT(DE_IBS_LS_L1_DTLB_1G);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L1_DTLB_RES) {
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L2_DTLB_4K) {
+		/* l2_translation_size = 1 */
+		if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
+		    && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
+		    && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op)
+
+		    /* L2 DTLB page translation */
+		    && !IBS_OP_IBS_DC_L2_TLB_HIT_2MB(trans_op)
+		    && !IBS_OP_IBS_DC_L2_TLB_HIT_1GB(trans_op))
+			/* 4K L2 DTLB page translation */
+			AGG_IBS_EVENT(DE_IBS_LS_L2_DTLB_4K);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L2_DTLB_2M) {
+		/* l2_translation_size = 1 */
+		if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
+		    && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
+		    && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op)
+
+		    /* L2 DTLB page translation */
+		    && IBS_OP_IBS_DC_L2_TLB_HIT_2MB(trans_op)
+		    && !IBS_OP_IBS_DC_L2_TLB_HIT_1GB(trans_op))
+			/* 2M L2 DTLB page translation */
+			AGG_IBS_EVENT(DE_IBS_LS_L2_DTLB_2M);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L2_DTLB_1G) {
+		/* l2_translation_size = 1 */
+		if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
+		    && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
+		    && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op)
+
+		    /* L2 DTLB page translation */
+		    && !IBS_OP_IBS_DC_L2_TLB_HIT_2MB(trans_op)
+		    && IBS_OP_IBS_DC_L2_TLB_HIT_1GB(trans_op))
+			/* 2M L2 DTLB page translation */
+			AGG_IBS_EVENT(DE_IBS_LS_L2_DTLB_1G);
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L2_DTLB_RES2) {
+	}
+
+	CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_DC_LOAD_LAT) {
+		if (IBS_OP_IBS_LD_OP(trans_op)
+		    /* If the load missed in DC, tally the DC load miss latency */
+		    && IBS_OP_IBS_DC_MISS(trans_op))
+			/* DC load miss latency is only reliable for load ops */
+			AGG_IBS_COUNT(DE_IBS_LS_DC_LOAD_LAT,
+				      IBS_OP_DC_MISS_LATENCY(trans_op)) ;
+	}
+}
+
+/*
+ * --------------------- OP NB DERIVED FUNCTION
+ *
+ * NB data is only guaranteed reliable for load operations
+ * that miss in L1 and L2 cache. NB data arrives too late
+ * to be reliable for store operations
+ */
+void trans_ibs_op_nb (struct transient * trans, unsigned int selected_flag)
+{
+	struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op;
+
+	/* Preliminary check */
+	if ((selected_flag) == 0)
+		return;
+
+	if (!IBS_OP_IBS_LD_OP(trans_op))
+		return;
+
+	if (!IBS_OP_IBS_DC_MISS(trans_op))
+		return;
+
+	if (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0)
+		return;
+
+	CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_LOCAL) {
+		if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op))
+			/* Request was serviced by local processor */
+			AGG_IBS_EVENT(DE_IBS_NB_LOCAL) ;
+	}
+
+	CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_REMOTE) {
+		if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op))
+			/* Request was serviced by remote processor */
+			AGG_IBS_EVENT(DE_IBS_NB_REMOTE) ;
+	}
+
+	CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_LOCAL_L3) {
+		if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
+		    &&  IBS_OP_NB_IBS_REQ_SRC_01(trans_op))
+			AGG_IBS_EVENT(DE_IBS_NB_LOCAL_L3);
+	}
+
+	CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_LOCAL_CACHE) {
+		if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
+		    &&  IBS_OP_NB_IBS_REQ_SRC_02(trans_op))
+			AGG_IBS_EVENT(DE_IBS_NB_LOCAL_CACHE);
+	}
+
+	CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_REMOTE_CACHE) {
+		if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
+		    &&  IBS_OP_NB_IBS_REQ_SRC_02(trans_op))
+			AGG_IBS_EVENT(DE_IBS_NB_REMOTE_CACHE) ;
+	}
+
+	CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_LOCAL_DRAM) {
+		if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
+		    &&  IBS_OP_NB_IBS_REQ_SRC_03(trans_op))
+			AGG_IBS_EVENT(DE_IBS_NB_LOCAL_DRAM);
+	}
+
+	CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_REMOTE_DRAM) {
+		if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
+		    &&  IBS_OP_NB_IBS_REQ_SRC_03(trans_op))
+			AGG_IBS_EVENT(DE_IBS_NB_REMOTE_DRAM) ;
+	}
+
+	CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_LOCAL_OTHER) {
+		if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
+		    &&  IBS_OP_NB_IBS_REQ_SRC_07(trans_op))
+			AGG_IBS_EVENT(DE_IBS_NB_LOCAL_OTHER);
+	}
+
+	CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_REMOTE_OTHER) {
+		if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
+		    &&  IBS_OP_NB_IBS_REQ_SRC_07(trans_op))
+			AGG_IBS_EVENT(DE_IBS_NB_REMOTE_OTHER) ;
+	}
+
+	CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_CACHE_STATE_M) {
+		if (IBS_OP_NB_IBS_REQ_SRC_02(trans_op)
+		    && !IBS_OP_NB_IBS_CACHE_HIT_ST(trans_op))
+			AGG_IBS_EVENT(DE_IBS_NB_CACHE_STATE_M) ;
+	}
+
+	CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_CACHE_STATE_O) {
+		if (IBS_OP_NB_IBS_REQ_SRC_02(trans_op)
+		    && IBS_OP_NB_IBS_CACHE_HIT_ST(trans_op))
+			AGG_IBS_EVENT(DE_IBS_NB_CACHE_STATE_O) ;
+	}
+
+	CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_LOCAL_LATENCY) {
+		if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op))
+			/* Request was serviced by local processor */
+			AGG_IBS_COUNT(DE_IBS_NB_LOCAL_LATENCY,
+				      IBS_OP_DC_MISS_LATENCY(trans_op));
+	}
+
+	CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_REMOTE_LATENCY) {
+		if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op))
+			/* Request was serviced by remote processor */
+			AGG_IBS_COUNT(DE_IBS_NB_REMOTE_LATENCY,
+				      IBS_OP_DC_MISS_LATENCY(trans_op));
+	}
+}
+
+
+int trans_ibs_op_rip_invalid (struct transient * trans)
+{
+	struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op;
+
+	if (IBS_OP_RIP_INVALID(trans_op))
+		return 1;	
+
+	return 0;
+}
+
+
+void trans_ibs_op_mask_reserved (unsigned int family, struct transient * trans)
+{
+	struct ibs_op_sample * trans_op    = ((struct ibs_sample*)(trans->ext))->op;
+
+	switch (family) {
+	case 0x10:
+		/* Reserved IbsRipInvalid (MSRC001_1035[38])*/
+		trans_op->ibs_op_data1_high &= ~MASK_RIP_INVALID;
+		break;
+	case 0x12:
+		/* Reserved NbIbsReqDstProc (MSRCC001_1036[4]) */
+		trans_op->ibs_op_data2_low &= ~NB_MASK_REQ_DST_PROC;
+		/* Reserved NbIbsReqCacheHitSt (MSRCC001_1036[5]) */
+		trans_op->ibs_op_data2_low &= ~NB_MASK_L3_STATE;
+		break;
+	case 0x14:
+		/* Reserved NbIbsReqDstProc (MSRCC001_1036[4]) */
+		trans_op->ibs_op_data2_low &= ~NB_MASK_REQ_DST_PROC;
+		/* Reserved NbIbsReqCacheHitSt (MSRCC001_1036[5]) */
+		trans_op->ibs_op_data2_low &= ~NB_MASK_L3_STATE;
+		/* Reserved IbsDcL1tlbHit1G (MSRC001_1037[5]) */
+		trans_op->ibs_op_data3_low &= ~DC_MASK_L1_HIT_1G;
+		/* Reserved IbsDcLdBnkCon (MSRC001_1037[9]) */
+		trans_op->ibs_op_data3_low &= ~DC_MASK_LD_BANK_CONFLICT;
+		/* Reserved IbsDcStBnkCon (MSRC001_1037[10]) */
+		trans_op->ibs_op_data3_low &= ~DC_MASK_ST_BANK_CONFLICT;
+		/* Reserved IbsDcStToLdCan (MSRC001_1037[12]) */
+		trans_op->ibs_op_data3_low &= ~DC_MASK_ST_TO_LD_CANCEL;
+		/* Reserved IbsDcL2tlbHit1G (MSRC001_1037[19]) */
+		trans_op->ibs_op_data3_low &= ~DC_MASK_L2_HIT_1G;
+		
+		break;
+	case 0x15:
+	default:
+		break;
+	
+	}
+}
+
+
+void trans_ibs_op_bta(struct transient * trans)
+{
+	static cookie_t old_cookie     = NO_COOKIE;
+	static cookie_t old_app_cookie = NO_COOKIE;
+	static char const * mod        = NULL;
+	static char const * app        = NULL;
+	const char vmlinux[10]         = "vmlinux";
+	struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op;
+
+	if (!bta_log)
+		return;
+
+	if (!trans_op->ibs_op_brtgt_addr)
+		return;
+
+	if( old_app_cookie == INVALID_COOKIE 
+	||  old_app_cookie == NO_COOKIE 
+	||  old_app_cookie != trans->app_cookie) {
+		app = find_cookie(trans->app_cookie);
+		old_app_cookie = trans->cookie;
+	}
+
+	if (trans->in_kernel == 1) {
+		mod = vmlinux;
+		old_cookie = NO_COOKIE;
+	} else {
+		if( old_cookie == INVALID_COOKIE 
+		||  old_cookie == NO_COOKIE 
+		||  old_cookie != trans->cookie) {
+			mod = find_cookie(trans->cookie);
+			old_cookie = trans->cookie;
+		}
+	}
+
+	fprintf(bta_log, "0x%016llx,0x%016llx,%02lu %08u,%08u,0x%08x,0x%08lx\n",
+                        trans->app_cookie, trans->cookie, trans->cpu, trans->tgid, trans->tid, (unsigned int)trans->pc,
+			trans_op->ibs_op_brtgt_addr);
+}
+
+
+void trans_ibs_op_ls_memaccess(struct transient * trans)
+{
+	static cookie_t old_cookie     = NO_COOKIE;
+	static cookie_t old_app_cookie = NO_COOKIE;
+	static char const * mod        = NULL;
+	static char const * app        = NULL;
+	const char vmlinux[10]         = "vmlinux";
+	struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op;
+
+	if (!memaccess_log)
+		return;
+
+	if( old_app_cookie == INVALID_COOKIE 
+	||  old_app_cookie == NO_COOKIE 
+	||  old_app_cookie != trans->app_cookie) {
+		app = find_cookie(trans->app_cookie);
+		old_app_cookie = trans->cookie;
+	}
+
+	if (trans->in_kernel == 1) {
+		mod = vmlinux;
+		old_cookie = NO_COOKIE;
+	} else {
+		if( old_cookie == INVALID_COOKIE 
+		||  old_cookie == NO_COOKIE 
+		||  old_cookie != trans->cookie) {
+			mod = find_cookie(trans->cookie);
+			old_cookie = trans->cookie;
+		}
+	}
+
+	fprintf(memaccess_log, "0x%016llx,0x%016llx,%02lu,%08u,%08u,0x%08x,0x%08u:%08x,0x%08x:%08x,%s,%08u\n",
+                        trans->app_cookie, 
+trans->cookie, 
+trans->cpu, 
+trans->tgid, 
+trans->tid, 
+(unsigned int)trans->pc, 
+			trans_op->ibs_op_phys_addr_high, trans_op->ibs_op_phys_addr_low, 
+			trans_op->ibs_op_ldst_linaddr_high, trans_op->ibs_op_ldst_linaddr_low, 
+			(IBS_OP_IBS_LD_OP(trans_op))? "LD": "ST", 
+			(unsigned int) IBS_OP_DC_MISS_LATENCY(trans_op));
+}
diff --git a/oprofile-0.9.7/daemon/opd_ibs_trans.h b/oprofile-0.9.7/daemon/opd_ibs_trans.h
new file mode 100644
index 0000000..bf34dfa
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_ibs_trans.h
@@ -0,0 +1,35 @@
+/**
+ * @file daemon/opd_ibs_trans.h
+ * AMD Family10h Instruction Based Sampling (IBS) translation.
+ *
+ * @remark Copyright 2008 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author Jason Yeh <jason.yeh@amd.com>
+ * @author Paul Drongowski <paul.drongowski@amd.com>
+ * @author Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
+ * Copyright (c) 2008 Advanced Micro Devices, Inc.
+ */
+
+#ifndef OPD_IBS_TRANS_H
+#define OPD_IBS_TRANS_H
+
+struct ibs_fetch_sample;
+struct ibs_op_sample;
+struct transient;
+
+struct ibs_translation_table {
+	unsigned int event;
+	void (*translator)(struct transient *);
+};
+
+
+extern void trans_ibs_fetch (struct transient * trans, unsigned int selected_flag);
+extern void trans_ibs_op (struct transient * trans, unsigned int selected_flag);
+extern void trans_ibs_op_ls (struct transient * trans, unsigned int selected_flag);
+extern void trans_ibs_op_nb (struct transient * trans, unsigned int selected_flag);
+extern int  trans_ibs_op_rip_invalid (struct transient * trans);
+extern void trans_ibs_op_mask_reserved (unsigned int family, struct transient * trans);
+extern void trans_ibs_op_ls_memaccess(struct transient * trans);
+extern void trans_ibs_op_bta (struct transient * trans);
+#endif // OPD_IBS_TRANS_H
diff --git a/oprofile-0.9.7/daemon/opd_interface.h b/oprofile-0.9.7/daemon/opd_interface.h
new file mode 100644
index 0000000..ef3b02c
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_interface.h
@@ -0,0 +1,48 @@
+/**
+ * @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
+#else
+#define DOMAIN_SWITCH_CODE		11
+/* Code 12 is now considered an unknown escape code */
+#endif
+
+/* AMD's Instruction-Based Sampling (IBS) escape code */
+#define IBS_FETCH_SAMPLE		13
+#define IBS_OP_SAMPLE			14
+#define LAST_CODE			15
+ 
+#endif /* OPD_INTERFACE_H */
diff --git a/oprofile-0.9.7/daemon/opd_kernel.c b/oprofile-0.9.7/daemon/opd_kernel.c
new file mode 100644
index 0000000..5ebc210
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_kernel.c
@@ -0,0 +1,229 @@
+/**
+ * @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/oprofile-0.9.7/daemon/opd_kernel.h b/oprofile-0.9.7/daemon/opd_kernel.h
new file mode 100644
index 0000000..cb71a30
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_kernel.h
@@ -0,0 +1,43 @@
+/**
+ * @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/oprofile-0.9.7/daemon/opd_mangling.c b/oprofile-0.9.7/daemon/opd_mangling.c
new file mode 100644
index 0000000..b4768a6
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_mangling.c
@@ -0,0 +1,205 @@
+/**
+ * @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/oprofile-0.9.7/daemon/opd_mangling.h b/oprofile-0.9.7/daemon/opd_mangling.h
new file mode 100644
index 0000000..d1b2a78
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_mangling.h
@@ -0,0 +1,33 @@
+/**
+ * @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/oprofile-0.9.7/daemon/opd_perfmon.c b/oprofile-0.9.7/daemon/opd_perfmon.c
new file mode 100644
index 0000000..97f307c
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_perfmon.c
@@ -0,0 +1,522 @@
+/**
+ * @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>
+#include <sys/types.h>
+#include <sys/stat.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) {
+		exit(EXIT_FAILURE);
+	}
+}
+
+
+static void perfmon_stop_child(int ctx_fd)
+{
+	if (perfmonctl(ctx_fd, PFM_STOP, 0, 0) == -1) {
+		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)))
+{
+	kill(getppid(), SIGTERM);
+}
+
+
+static void set_affinity(size_t cpu)
+{
+	cpu_set_t set;
+	int err;
+
+	CPU_ZERO(&set);
+	CPU_SET(cpu, &set);
+
+	err = sched_setaffinity(getpid(), sizeof(set), &set);
+
+	if (err == -1) {
+		perror("Failed to set affinity");
+		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) {
+		perror("CREATE_CONTEXT failed");
+		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) {
+			perror("Failed to write child pipe:");
+			exit(EXIT_FAILURE);
+		}
+	}
+}
+
+static struct child * inner_child;
+void close_pipe(void)
+{
+	close(inner_child->up_pipe[1]);
+}
+
+static void run_child(size_t cpu)
+{
+	struct child * self = &children[cpu];
+
+	self->pid = getpid();
+	self->sigusr1 = 0;
+	self->sigusr2 = 0;
+	self->sigterm = 0;
+
+	inner_child = self;
+	if (atexit(close_pipe)){
+		close_pipe();
+		exit(EXIT_FAILURE);
+	}
+
+	umask(0);
+	/* Change directory to allow directory to be removed */
+	if (chdir("/") < 0) {
+		perror("Unable to chdir to \"/\"");
+		exit(EXIT_FAILURE);
+	}
+
+	setup_signals();
+
+	set_affinity(cpu);
+
+	create_context(self);
+
+	write_pmu(self);
+
+	load_context(self);
+
+	notify_parent(self, cpu);
+
+	/* Redirect standard files to /dev/null */
+	freopen( "/dev/null", "r", stdin);
+	freopen( "/dev/null", "w", stdout);
+	freopen( "/dev/null", "w", stderr);
+
+	for (;;) {
+		sigset_t sigmask;
+		sigfillset(&sigmask);
+		sigdelset(&sigmask, SIGUSR1);
+		sigdelset(&sigmask, SIGUSR2);
+		sigdelset(&sigmask, SIGTERM);
+
+		if (self->sigusr1) {
+			perfmon_start_child(self->ctx_fd);
+			self->sigusr1 = 0;
+		}
+
+		if (self->sigusr2) {
+			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) || ret == 0 ) {
+			perror("Failed to read child pipe");
+			exit(EXIT_FAILURE);
+		}
+	}
+	printf("Perfmon child up on CPU%d\n", (int)tmp);
+	fflush(stdout);
+
+	close(child->up_pipe[0]);
+}
+
+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);
+	bzero(children, 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");
+			exit(EXIT_FAILURE);
+		}
+
+		ret = fork();
+		if (ret == -1) {
+			perror("Couldn't fork perfmon child");
+			exit(EXIT_FAILURE);
+		} else if (ret == 0) {
+			close(children[i].up_pipe[0]);
+			run_child(i);
+		} else {
+			children[i].pid = ret;
+			close(children[i].up_pipe[1]);
+			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) {
+		if (children[i].pid) {
+			int c_pid = children[i].pid;
+			children[i].pid = 0;
+			if (kill(c_pid, SIGKILL)==0)
+				waitpid(c_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) {
+		if (kill(children[i].pid, SIGUSR1)) {
+			perror("Unable to start perfmon");
+			exit(EXIT_FAILURE);
+		}
+	}
+}
+
+
+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)
+		if (kill(children[i].pid, SIGUSR2)) {
+			perror("Unable to stop perfmon");
+			exit(EXIT_FAILURE);
+		}
+}
+
+#endif /* __ia64__ */
diff --git a/oprofile-0.9.7/daemon/opd_perfmon.h b/oprofile-0.9.7/daemon/opd_perfmon.h
new file mode 100644
index 0000000..9b4267f
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_perfmon.h
@@ -0,0 +1,106 @@
+/**
+ * @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/oprofile-0.9.7/daemon/opd_pipe.c b/oprofile-0.9.7/daemon/opd_pipe.c
new file mode 100644
index 0000000..3c81979
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_pipe.c
@@ -0,0 +1,99 @@
+/**
+ * @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;
+static FILE * fifo_fd = NULL;
+
+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)
+{
+	if (fifo_fd)
+		fclose(fifo_fd);
+	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;
+	char line[256];
+	int i, ret = 0;
+
+	/* get a file descriptor to the pipe */
+	if (!fifo_fd)
+		fifo_fd = fdopen(fifo, "r");
+
+	if (fifo_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, fifo_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/oprofile-0.9.7/daemon/opd_pipe.h b/oprofile-0.9.7/daemon/opd_pipe.h
new file mode 100644
index 0000000..7f96b07
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_pipe.h
@@ -0,0 +1,45 @@
+/**
+ * @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/oprofile-0.9.7/daemon/opd_printf.h b/oprofile-0.9.7/daemon/opd_printf.h
new file mode 100644
index 0000000..09df07f
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_printf.h
@@ -0,0 +1,37 @@
+/**
+ * @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;
+/// extended feature
+extern int vext;
+/// 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/oprofile-0.9.7/daemon/opd_sfile.c b/oprofile-0.9.7/daemon/opd_sfile.c
new file mode 100644
index 0000000..c2dea20
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_sfile.c
@@ -0,0 +1,643 @@
+/**
+ * @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 "opd_extended.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);
+}
+
+
+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]);
+
+	if (trans->ext)
+		opd_ext_sfile_create(sf);
+	else
+		sf->ext_files = NULL;
+
+	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;
+}
+
+
+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]);
+
+	opd_ext_sfile_dup(to, from);
+
+	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->ext) != NULL)
+		return opd_ext_sfile_get(trans, is_cg);
+
+	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)
+{
+	sfile_log_sample_count(trans, 1);
+}
+
+
+void sfile_log_sample_count(struct transient const * trans,
+                            unsigned long int count)
+{
+	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_with_offset(file,
+					  (odb_key_t)pc,
+					  count);
+	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]);
+
+	opd_ext_sfile_close(sf);
+
+	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]);
+
+	opd_ext_sfile_sync(sf);
+
+	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/oprofile-0.9.7/daemon/opd_sfile.h b/oprofile-0.9.7/daemon/opd_sfile.h
new file mode 100644
index 0000000..76e5e63
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_sfile.h
@@ -0,0 +1,119 @@
+/**
+ * @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];
+	/** extended sample files */
+	odb_t * ext_files;
+	/** 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);
+
+/** Log the event/cycle count in a previously located sfile */
+void sfile_log_sample_count(struct transient const * trans,
+                            unsigned long int count);
+
+/** initialise hashes */
+void sfile_init(void);
+
+#endif /* OPD_SFILE_H */
diff --git a/oprofile-0.9.7/daemon/opd_spu.c b/oprofile-0.9.7/daemon/opd_spu.c
new file mode 100644
index 0000000..62a2c2b
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_spu.c
@@ -0,0 +1,176 @@
+/**
+ * @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/oprofile-0.9.7/daemon/opd_stats.c b/oprofile-0.9.7/daemon/opd_stats.c
new file mode 100644
index 0000000..e7af72b
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_stats.c
@@ -0,0 +1,90 @@
+/**
+ * @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 "opd_extended.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("\n-- OProfile Statistics --\n");
+	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);
+
+	opd_ext_print_stats();
+
+	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);
+
+		printf("\n---- Statistics for cpu : %d\n", cpu_nr);
+		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/oprofile-0.9.7/daemon/opd_stats.h b/oprofile-0.9.7/daemon/opd_stats.h
new file mode 100644
index 0000000..177b86a
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_stats.h
@@ -0,0 +1,31 @@
+/**
+ * @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/oprofile-0.9.7/daemon/opd_trans.c b/oprofile-0.9.7/daemon/opd_trans.c
new file mode 100644
index 0000000..76296a0
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_trans.c
@@ -0,0 +1,348 @@
+/**
+ * @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);
+
+extern void code_ibs_fetch_sample(struct transient * trans);
+extern void code_ibs_op_sample(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,
+#else
+	&code_unknown,
+	&code_unknown,
+#endif
+	&code_ibs_fetch_sample,
+	&code_ibs_op_sample,
+};
+
+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,
+		.ext = NULL
+	};
+
+	/* 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;
+	}
+
+	while (trans.remaining) {
+		code = pop_buffer_value(&trans);
+
+		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);
+	
+		if (code >= LAST_CODE) {
+			fprintf(stderr, "Unknown code %llu\n", code);
+			abort();
+		}
+
+		handlers[code](&trans);
+	}
+}
diff --git a/oprofile-0.9.7/daemon/opd_trans.h b/oprofile-0.9.7/daemon/opd_trans.h
new file mode 100644
index 0000000..c0a868b
--- /dev/null
+++ b/oprofile-0.9.7/daemon/opd_trans.h
@@ -0,0 +1,86 @@
+/**
+ * @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;
+	void * ext;
+};
+
+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/oprofile-0.9.7/daemon/oprofiled.c b/oprofile-0.9.7/daemon/oprofiled.c
new file mode 100644
index 0000000..fbe63c6
--- /dev/null
+++ b/oprofile-0.9.7/daemon/oprofiled.c
@@ -0,0 +1,532 @@
+/**
+ * @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 "opd_extended.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 no_event_ok;
+int vsfile;
+int vsamples;
+int varcs;
+int vmodule;
+int vmisc;
+int vext;
+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 char * ext_feature;
+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", },
+	{ "ext-feature", 'x', POPT_ARG_STRING, &ext_feature, 1, "enable extended feature", "<extended-feature-name>:[args]", },
+	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;
+		vext= 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 if (!strcmp(name, "ext")) {
+		vext= 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(opd_ext_initialize(ext_feature) != EXIT_SUCCESS)
+		exit(EXIT_FAILURE);
+
+	if (events == NULL && no_event_ok == 0) {
+		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);
+		}
+	}
+
+	if (events != NULL)
+		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()) {
+		case OP_INTERFACE_24:
+			printf("Using 2.4 OProfile kernel interface.\n");
+			return &opd_24_ops;
+		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/oprofile-0.9.7/daemon/oprofiled.h b/oprofile-0.9.7/daemon/oprofiled.h
new file mode 100644
index 0000000..b319df1
--- /dev/null
+++ b/oprofile-0.9.7/daemon/oprofiled.h
@@ -0,0 +1,69 @@
+/**
+ * @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/oprofile-0.9.7/depcomp b/oprofile-0.9.7/depcomp
new file mode 100755
index 0000000..df8eea7
--- /dev/null
+++ b/oprofile-0.9.7/depcomp
@@ -0,0 +1,630 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
+# Software Foundation, Inc.
+
+# 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, 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, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+   # This is just like msvisualcpp but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u="sed s,\\\\\\\\,/,g"
+   depmode=msvisualcpp
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> "$depfile"
+    echo >> "$depfile"
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+    # That's a tab and a space in the [].
+    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${
+	       s/^ *//
+	       s/ \\*$//
+	       s/$/:/
+	       p
+	     }' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mechanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no eat=no
+  for arg
+  do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+	set fnord "$@"
+	shift
+	shift
+	;;
+    *)
+	set fnord "$@" "$arg"
+	shift
+	shift
+	;;
+    esac
+  done
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+  echo "	" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/oprofile-0.9.7/doc/Makefile.am b/oprofile-0.9.7/doc/Makefile.am
new file mode 100644
index 0000000..f84d4a8
--- /dev/null
+++ b/oprofile-0.9.7/doc/Makefile.am
@@ -0,0 +1,92 @@
+RM=rm
+MANDIR=$(DESTDIR)@mandir@/man1
+
+XSLTPROC=xsltproc
+XSLTPROC_FLAGS=@XSLTPROC_FLAGS@
+XHTML_STYLESHEET=$(srcdir)/xsl/xhtml.xsl
+CHUNK_XHTML_STYLESHEET=$(srcdir)/xsl/xhtml-chunk.xsl
+XML_CATALOG_FILES=xsl/catalog.xml
+STYLESHEETS=$(CHUNK_XHTML_STYLESHEET) $(srcdir)/xsl/xhtml-common.xsl
+
+man_MANS = \
+	oprofile.1 \
+	opcontrol.1 \
+	opreport.1 \
+	opannotate.1 \
+	opgprof.1 \
+	ophelp.1 \
+	oparchive.1 \
+	opimport.1
+
+htmldir = $(prefix)/share/doc/oprofile
+dist_html_DATA = oprofile.html internals.html opreport.xsd op-jit-devel.html
+
+if have_xsltproc
+
+oprofile.html: ${top_srcdir}/doc/oprofile.xml
+	XML_CATALOG_FILES=$(XML_CATALOG_FILES) $(XSLTPROC) $(XSLTPROC_FLAGS) -o $@ --stringparam version @VERSION@ $(XHTML_STYLESHEET) $<
+
+op-jit-devel.html: ${top_srcdir}/doc/op-jit-devel.xml
+	XML_CATALOG_FILES=$(XML_CATALOG_FILES) $(XSLTPROC) $(XSLTPROC_FLAGS) -o $@ --stringparam version @VERSION@ $(XHTML_STYLESHEET) $<
+
+internals.html: ${top_srcdir}/doc/internals.xml
+	XML_CATALOG_FILES=$(XML_CATALOG_FILES) $(XSLTPROC) $(XSLTPROC_FLAGS) -o $@ --stringparam version @VERSION@ $(XHTML_STYLESHEET) $<
+
+# rules to generate oprofile.sf.net/doc files
+
+doc/index.html: ${top_srcdir}/doc/oprofile.xml
+	-mkdir doc/
+	$(XSLTPROC) -o doc/ $(XSLTPROC_FLAGS) --stringparam version @VERSION@ $(CHUNK_XHTML_STYLESHEET) $<
+
+doc/devel/index.html: ${top_srcdir}/doc/op-jit-devel.xml
+	-mkdir doc/devel/
+	$(XSLTPROC) -o doc/devel/ $(XSLTPROC_FLAGS) --stringparam version @VERSION@ $(CHUNK_XHTML_STYLESHEET) $<
+
+doc/internals/index.html: ${top_srcdir}/doc/internals.xml
+	-mkdir doc/internals/
+	$(XSLTPROC) -o doc/internals/ $(XSLTPROC_FLAGS) --stringparam version @VERSION@ $(CHUNK_XHTML_STYLESHEET) $<
+
+chunk: doc/index.html doc/internals/index.html doc/devel/index.html
+	cp ${top_srcdir}/doc/buffers.png doc/internals/
+
+else
+
+oprofile.html:
+	touch $@
+
+internals.html:
+	touch $@
+
+op-jit-devel.html:
+	touch $@
+
+chunk:
+
+endif
+
+distclean-local:
+	$(RM) -f xsl/catalog-1.xml xsl/catalog.xml
+
+clean-local:
+	$(RM) -f $(generated_mans)
+
+# these files are not cleaned by make uninstall automake bug ?
+uninstall-local:
+	rm -f @mandir@/cat1/oprofile.1.gz
+	@for f in $(LINK_LIST); do		\
+		rm -f $(CATDIR)/cat1/$$f.gz;	\
+	done
+
+EXTRA_DIST = \
+	oprofile.1 \
+	oprofile.1.in \
+	oprofile.xml \
+	op-jit-devel.xml \
+	internals.xml \
+	buffers.png \
+	xsl/catalog-1.xml.in \
+	xsl/xhtml.xsl \
+	xsl/xhtml-common.xsl \
+	xsl/xhtml-chunk.xsl \
+	srcdoc/Doxyfile.in \
+	srcdoc/Makefile
diff --git a/oprofile-0.9.7/doc/Makefile.in b/oprofile-0.9.7/doc/Makefile.in
new file mode 100644
index 0000000..9ac93be
--- /dev/null
+++ b/oprofile-0.9.7/doc/Makefile.in
@@ -0,0 +1,617 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc
+DIST_COMMON = $(dist_html_DATA) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/opannotate.1.in \
+	$(srcdir)/oparchive.1.in $(srcdir)/opcontrol.1.in \
+	$(srcdir)/opgprof.1.in $(srcdir)/ophelp.1.in \
+	$(srcdir)/opimport.1.in $(srcdir)/opreport.1.in \
+	$(srcdir)/oprofile.1.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/binutils.m4 \
+	$(top_srcdir)/m4/builtinexpect.m4 \
+	$(top_srcdir)/m4/cellspubfdsupport.m4 \
+	$(top_srcdir)/m4/compileroption.m4 \
+	$(top_srcdir)/m4/configmodule.m4 \
+	$(top_srcdir)/m4/copyifchange.m4 $(top_srcdir)/m4/docbook.m4 \
+	$(top_srcdir)/m4/extradirs.m4 $(top_srcdir)/m4/findkernel.m4 \
+	$(top_srcdir)/m4/kerneloption.m4 \
+	$(top_srcdir)/m4/kernelversion.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/mallocattribute.m4 \
+	$(top_srcdir)/m4/poptconst.m4 \
+	$(top_srcdir)/m4/precompiledheader.m4 $(top_srcdir)/m4/qt.m4 \
+	$(top_srcdir)/m4/resultyn.m4 $(top_srcdir)/m4/sstream.m4 \
+	$(top_srcdir)/m4/typedef.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = oprofile.1 opcontrol.1 ophelp.1 opreport.1 \
+	opannotate.1 opgprof.1 oparchive.1 opimport.1
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(htmldir)"
+NROFF = nroff
+MANS = $(man_MANS)
+DATA = $(dist_html_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_LIBS = @BFD_LIBS@
+CAT_ENTRY_END = @CAT_ENTRY_END@
+CAT_ENTRY_START = @CAT_ENTRY_START@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOCBOOK_ROOT = @DOCBOOK_ROOT@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTRA_CFLAGS_MODULE = @EXTRA_CFLAGS_MODULE@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVA_HOMEDIR = @JAVA_HOMEDIR@
+KINC = @KINC@
+KSRC = @KSRC@
+KVERS = @KVERS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBERTY_LIBS = @LIBERTY_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MODINSTALLDIR = @MODINSTALLDIR@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPROFILE_DIR = @OPROFILE_DIR@
+OPROFILE_MODULE_ARCH = @OPROFILE_MODULE_ARCH@
+OP_CFLAGS = @OP_CFLAGS@
+OP_CXXFLAGS = @OP_CXXFLAGS@
+OP_DOCDIR = @OP_DOCDIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POPT_LIBS = @POPT_LIBS@
+PTRDIFF_T_TYPE = @PTRDIFF_T_TYPE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_INCLUDES = @QT_INCLUDES@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LIB = @QT_LIB@
+QT_LIBS = @QT_LIBS@
+QT_VERSION = @QT_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T_TYPE = @SIZE_T_TYPE@
+STRIP = @STRIP@
+UIC = @UIC@
+UIChelp = @UIChelp@
+VERSION = @VERSION@
+XMKMF = @XMKMF@
+XML_CATALOG = @XML_CATALOG@
+XSLTPROC = xsltproc
+XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = $(prefix)/share/doc/oprofile
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+topdir = @topdir@
+RM = rm
+MANDIR = $(DESTDIR)@mandir@/man1
+XHTML_STYLESHEET = $(srcdir)/xsl/xhtml.xsl
+CHUNK_XHTML_STYLESHEET = $(srcdir)/xsl/xhtml-chunk.xsl
+XML_CATALOG_FILES = xsl/catalog.xml
+STYLESHEETS = $(CHUNK_XHTML_STYLESHEET) $(srcdir)/xsl/xhtml-common.xsl
+man_MANS = \
+	oprofile.1 \
+	opcontrol.1 \
+	opreport.1 \
+	opannotate.1 \
+	opgprof.1 \
+	ophelp.1 \
+	oparchive.1 \
+	opimport.1
+
+dist_html_DATA = oprofile.html internals.html opreport.xsd op-jit-devel.html
+EXTRA_DIST = \
+	oprofile.1 \
+	oprofile.1.in \
+	oprofile.xml \
+	op-jit-devel.xml \
+	internals.xml \
+	buffers.png \
+	xsl/catalog-1.xml.in \
+	xsl/xhtml.xsl \
+	xsl/xhtml-common.xsl \
+	xsl/xhtml-chunk.xsl \
+	srcdoc/Doxyfile.in \
+	srcdoc/Makefile
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+oprofile.1: $(top_builddir)/config.status $(srcdir)/oprofile.1.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+opcontrol.1: $(top_builddir)/config.status $(srcdir)/opcontrol.1.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+ophelp.1: $(top_builddir)/config.status $(srcdir)/ophelp.1.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+opreport.1: $(top_builddir)/config.status $(srcdir)/opreport.1.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+opannotate.1: $(top_builddir)/config.status $(srcdir)/opannotate.1.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+opgprof.1: $(top_builddir)/config.status $(srcdir)/opgprof.1.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+oparchive.1: $(top_builddir)/config.status $(srcdir)/oparchive.1.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+opimport.1: $(top_builddir)/config.status $(srcdir)/opimport.1.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-man1: $(man_MANS)
+	@$(NORMAL_INSTALL)
+	test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+	@list=''; test -n "$(man1dir)" || exit 0; \
+	{ for i in $$list; do echo "$$i"; done; \
+	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.1[a-z]*$$/p'; \
+	} | while read p; do \
+	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; echo "$$p"; \
+	done | \
+	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+	sed 'N;N;s,\n, ,g' | { \
+	list=; while read file base inst; do \
+	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+	  fi; \
+	done; \
+	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+	while read files; do \
+	  test -z "$$files" || { \
+	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+	done; }
+
+uninstall-man1:
+	@$(NORMAL_UNINSTALL)
+	@list=''; test -n "$(man1dir)" || exit 0; \
+	files=`{ for i in $$list; do echo "$$i"; done; \
+	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.1[a-z]*$$/p'; \
+	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+	test -z "$$files" || { \
+	  echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
+	  cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
+install-dist_htmlDATA: $(dist_html_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
+	@list='$(dist_html_DATA)'; test -n "$(htmldir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+	done
+
+uninstall-dist_htmlDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_html_DATA)'; test -n "$(htmldir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(htmldir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(htmldir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@list='$(MANS)'; if test -n "$$list"; then \
+	  list=`for p in $$list; do \
+	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	    if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
+	  if test -n "$$list" && \
+	    grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
+	    echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+	    grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
+	    echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
+	    echo "       typically \`make maintainer-clean' will remove them" >&2; \
+	    exit 1; \
+	  else :; fi; \
+	else :; fi
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS) $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(htmldir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_htmlDATA install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_htmlDATA uninstall-local uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	clean-local distclean distclean-generic distclean-libtool \
+	distclean-local distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am \
+	install-dist_htmlDATA install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-man1 install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-dist_htmlDATA uninstall-local uninstall-man \
+	uninstall-man1
+
+
+@have_xsltproc_TRUE@oprofile.html: ${top_srcdir}/doc/oprofile.xml
+@have_xsltproc_TRUE@	XML_CATALOG_FILES=$(XML_CATALOG_FILES) $(XSLTPROC) $(XSLTPROC_FLAGS) -o $@ --stringparam version @VERSION@ $(XHTML_STYLESHEET) $<
+
+@have_xsltproc_TRUE@op-jit-devel.html: ${top_srcdir}/doc/op-jit-devel.xml
+@have_xsltproc_TRUE@	XML_CATALOG_FILES=$(XML_CATALOG_FILES) $(XSLTPROC) $(XSLTPROC_FLAGS) -o $@ --stringparam version @VERSION@ $(XHTML_STYLESHEET) $<
+
+@have_xsltproc_TRUE@internals.html: ${top_srcdir}/doc/internals.xml
+@have_xsltproc_TRUE@	XML_CATALOG_FILES=$(XML_CATALOG_FILES) $(XSLTPROC) $(XSLTPROC_FLAGS) -o $@ --stringparam version @VERSION@ $(XHTML_STYLESHEET) $<
+
+# rules to generate oprofile.sf.net/doc files
+
+@have_xsltproc_TRUE@doc/index.html: ${top_srcdir}/doc/oprofile.xml
+@have_xsltproc_TRUE@	-mkdir doc/
+@have_xsltproc_TRUE@	$(XSLTPROC) -o doc/ $(XSLTPROC_FLAGS) --stringparam version @VERSION@ $(CHUNK_XHTML_STYLESHEET) $<
+
+@have_xsltproc_TRUE@doc/devel/index.html: ${top_srcdir}/doc/op-jit-devel.xml
+@have_xsltproc_TRUE@	-mkdir doc/devel/
+@have_xsltproc_TRUE@	$(XSLTPROC) -o doc/devel/ $(XSLTPROC_FLAGS) --stringparam version @VERSION@ $(CHUNK_XHTML_STYLESHEET) $<
+
+@have_xsltproc_TRUE@doc/internals/index.html: ${top_srcdir}/doc/internals.xml
+@have_xsltproc_TRUE@	-mkdir doc/internals/
+@have_xsltproc_TRUE@	$(XSLTPROC) -o doc/internals/ $(XSLTPROC_FLAGS) --stringparam version @VERSION@ $(CHUNK_XHTML_STYLESHEET) $<
+
+@have_xsltproc_TRUE@chunk: doc/index.html doc/internals/index.html doc/devel/index.html
+@have_xsltproc_TRUE@	cp ${top_srcdir}/doc/buffers.png doc/internals/
+
+@have_xsltproc_FALSE@oprofile.html:
+@have_xsltproc_FALSE@	touch $@
+
+@have_xsltproc_FALSE@internals.html:
+@have_xsltproc_FALSE@	touch $@
+
+@have_xsltproc_FALSE@op-jit-devel.html:
+@have_xsltproc_FALSE@	touch $@
+
+@have_xsltproc_FALSE@chunk:
+
+distclean-local:
+	$(RM) -f xsl/catalog-1.xml xsl/catalog.xml
+
+clean-local:
+	$(RM) -f $(generated_mans)
+
+# these files are not cleaned by make uninstall automake bug ?
+uninstall-local:
+	rm -f @mandir@/cat1/oprofile.1.gz
+	@for f in $(LINK_LIST); do		\
+		rm -f $(CATDIR)/cat1/$$f.gz;	\
+	done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/oprofile-0.9.7/doc/buffers.png b/oprofile-0.9.7/doc/buffers.png
new file mode 100644
index 0000000..25fabf3
--- /dev/null
+++ b/oprofile-0.9.7/doc/buffers.png
Binary files differ
diff --git a/oprofile-0.9.7/doc/internals.html b/oprofile-0.9.7/doc/internals.html
new file mode 100644
index 0000000..543ad46
--- /dev/null
+++ b/oprofile-0.9.7/doc/internals.html
@@ -0,0 +1,2012 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+    <title>OProfile Internals</title>
+    <meta name="generator" content="DocBook XSL Stylesheets V1.75.2" />
+  </head>
+  <body>
+    <div class="book" title="OProfile Internals">
+      <div class="titlepage">
+        <div>
+          <div>
+            <h1 class="title"><a id="oprofile-internals"></a>OProfile Internals</h1>
+          </div>
+          <div>
+            <div class="authorgroup">
+              <div class="author">
+                <h3 class="author"><span class="firstname">John</span> <span class="surname">Levon</span></h3>
+                <div class="affiliation">
+                  <div class="address">
+                    <p>
+                      <code class="email">&lt;<a class="email" href="mailto:levon@movementarian.org">levon@movementarian.org</a>&gt;</code>
+                    </p>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div>
+            <p class="copyright">Copyright © 2003 John Levon</p>
+          </div>
+        </div>
+        <hr />
+      </div>
+      <div class="toc">
+        <p>
+          <b>Table of Contents</b>
+        </p>
+        <dl>
+          <dt>
+            <span class="chapter">
+              <a href="#introduction">1. Introduction</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#overview">1. Overview</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#components">2. Components of the OProfile system</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#arch-specific-components">2.1. Architecture-specific components</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#filesystem">2.2. oprofilefs</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#driver">2.3. Generic kernel driver</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#daemon">2.4. The OProfile daemon</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#post-profiling">2.5. Post-profiling tools</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#performance-counters">2. Performance counter management</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#performance-counters-ui">1. Providing a user interface</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#performance-counters-programming">2. Programming the performance counter registers</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#performance-counters-start">2.1. Starting and stopping the counters</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#id577410">2.2. IA64 and perfmon</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#collecting-samples">3. Collecting and processing samples</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#receiving-interrupts">1. Receiving interrupts</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#core-structure">2. Core data structures</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#logging-sample">3. Logging a sample</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#logging-stack">4. Logging stack traces</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#synchronising-buffers">5. Synchronising the CPU buffers to the event buffer</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#dentry-cookies">6. Identifying binary images</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#finding-dentry">7. Finding a sample's binary image and offset</a>
+                </span>
+              </dt>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#sample-files">4. Generating sample files</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#processing-buffer">1. Processing the buffer</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#handling-kernel-samples">1.1. Handling kernel samples</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#sample-file-generation">2. Locating and creating sample files</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#sample-file-writing">3. Writing data to a sample file</a>
+                </span>
+              </dt>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#output">5. Generating useful output</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#profile-specification">1. Handling the profile specification</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#sample-file-collating">2. Collating the candidate sample files</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#sample-file-classifying">2.1. Classifying sample files</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#sample-file-inverting">2.2. Creating inverted profile lists</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#generating-profile-data">3. Generating profile data</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#bfd">3.1. Processing the binary image</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#processing-sample-files">3.2. Processing the sample files</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#generating-output">4. Generating output</a>
+                </span>
+              </dt>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#ext">6. Extended Feature Interface</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#ext-intro">1. Introduction</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#ext-name-and-handlers">2. Feature Name and Handlers</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#ext-enable">3. Enabling Features</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#ext-types-of-handlers">4. Type of Handlers</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#ext_init">4.1. ext_init Handler</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#ext_print_stats">4.2. ext_print_stats Handler</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#ext_sfile_handlers">4.3. ext_sfile Handler</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#ext-implementation">5. Extended Feature Reference Implementation</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#ext-ibs">5.1. Instruction-Based Sampling (IBS)</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+            </dl>
+          </dd>
+          <dt>
+            <span class="glossary">
+              <a href="#glossary">Glossary of OProfile source concepts and types</a>
+            </span>
+          </dt>
+        </dl>
+      </div>
+      <div class="list-of-figures">
+        <p>
+          <b>List of Figures</b>
+        </p>
+        <dl>
+          <dt>3.1. <a href="#id577538">The OProfile buffers</a></dt>
+        </dl>
+      </div>
+      <div class="chapter" title="Chapter 1. Introduction">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="introduction"></a>Chapter 1. Introduction</h2>
+            </div>
+          </div>
+        </div>
+        <div class="toc">
+          <p>
+            <b>Table of Contents</b>
+          </p>
+          <dl>
+            <dt>
+              <span class="sect1">
+                <a href="#overview">1. Overview</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#components">2. Components of the OProfile system</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#arch-specific-components">2.1. Architecture-specific components</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#filesystem">2.2. oprofilefs</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#driver">2.3. Generic kernel driver</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#daemon">2.4. The OProfile daemon</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#post-profiling">2.5. Post-profiling tools</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+          </dl>
+        </div>
+        <p>
+This document is current for OProfile version 0.9.7-rc2.
+This document provides some details on the internal workings of OProfile for the
+interested hacker. This document assumes strong C, working C++, plus some knowledge of
+kernel internals and CPU hardware.
+</p>
+        <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
+          <h3 class="title">Note</h3>
+          <p>
+Only the "new" implementation associated with kernel 2.6 and above is covered here. 2.4
+uses a very different kernel module implementation and daemon to produce the sample files.
+</p>
+        </div>
+        <div class="sect1" title="1. Overview">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="overview"></a>1. Overview</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+OProfile is a statistical continuous profiler. In other words, profiles are generated by
+regularly sampling the current registers on each CPU (from an interrupt handler, the
+saved PC value at the time of interrupt is stored), and converting that runtime PC
+value into something meaningful to the programmer.
+</p>
+          <p>
+OProfile achieves this by taking the stream of sampled PC values, along with the detail
+of which task was running at the time of the interrupt, and converting into a file offset
+against a particular binary file. Because applications <code class="function">mmap()</code>
+the code they run (be it <code class="filename">/bin/bash</code>, <code class="filename">/lib/libfoo.so</code>
+or whatever), it's possible to find the relevant binary file and offset by walking
+the task's list of mapped memory areas. Each PC value is thus converted into a tuple
+of binary-image,offset. This is something that the userspace tools can use directly
+to reconstruct where the code came from, including the particular assembly instructions,
+symbol, and source line (via the binary's debug information if present).
+</p>
+          <p>
+Regularly sampling the PC value like this approximates what actually was executed and
+how often - more often than not, this statistical approximation is good enough to
+reflect reality. In common operation, the time between each sample interrupt is regulated
+by a fixed number of clock cycles. This implies that the results will reflect where
+the CPU is spending the most time; this is obviously a very useful information source
+for performance analysis.
+</p>
+          <p>
+Sometimes though, an application programmer needs different kinds of information: for example,
+"which of the source routines cause the most cache misses ?". The rise in importance of
+such metrics in recent years has led many CPU manufacturers to provide hardware performance
+counters capable of measuring these events on the hardware level. Typically, these counters
+increment once per each event, and generate an interrupt on reaching some pre-defined
+number of events. OProfile can use these interrupts to generate samples: then, the
+profile results are a statistical approximation of which code caused how many of the
+given event.
+</p>
+          <p>
+Consider a simplified system that only executes two functions A and B. A
+takes one cycle to execute, whereas B takes 99 cycles. Imagine we run at
+100 cycles a second, and we've set the performance counter to create an
+interrupt after a set number of "events" (in this case an event is one
+clock cycle). It should be clear that the chances of the interrupt
+occurring in function A is 1/100, and 99/100 for function B. Thus, we
+statistically approximate the actual relative performance features of
+the two functions over time. This same analysis works for other types of
+events, providing that the interrupt is tied to the number of events
+occurring (that is, after N events, an interrupt is generated).
+</p>
+          <p>
+There are typically more than one of these counters, so it's possible to set up profiling
+for several different event types. Using these counters gives us a powerful, low-overhead
+way of gaining performance metrics. If OProfile, or the CPU, does not support performance
+counters, then a simpler method is used: the kernel timer interrupt feeds samples
+into OProfile itself.
+</p>
+          <p>
+The rest of this document concerns itself with how we get from receiving samples at
+interrupt time to producing user-readable profile information.
+</p>
+        </div>
+        <div class="sect1" title="2. Components of the OProfile system">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="components"></a>2. Components of the OProfile system</h2>
+              </div>
+            </div>
+          </div>
+          <div class="sect2" title="2.1. Architecture-specific components">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="arch-specific-components"></a>2.1. Architecture-specific components</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+If OProfile supports the hardware performance counters found on
+a particular architecture, code for managing the details of setting
+up and managing these counters can be found in the kernel source
+tree in the relevant <code class="filename">arch/<span class="emphasis"><em>arch</em></span>/oprofile/</code>
+directory. The architecture-specific implementation works via
+filling in the oprofile_operations structure at init time. This
+provides a set of operations such as <code class="function">setup()</code>,
+<code class="function">start()</code>, <code class="function">stop()</code>, etc.
+that manage the hardware-specific details of fiddling with the
+performance counter registers.
+</p>
+            <p>
+The other important facility available to the architecture code is
+<code class="function">oprofile_add_sample()</code>.  This is where a particular sample
+taken at interrupt time is fed into the generic OProfile driver code.
+</p>
+          </div>
+          <div class="sect2" title="2.2. oprofilefs">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="filesystem"></a>2.2. oprofilefs</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+OProfile implements a pseudo-filesystem known as "oprofilefs", mounted from
+userspace at <code class="filename">/dev/oprofile</code>. This consists of small
+files for reporting and receiving configuration from userspace, as well
+as the actual character device that the OProfile userspace receives samples
+from. At <code class="function">setup()</code> time, the architecture-specific may
+add further configuration files related to the details of the performance
+counters. For example, on x86, one numbered directory for each hardware
+performance counter is added, with files in each for the event type,
+reset value, etc.
+</p>
+            <p>
+The filesystem also contains a <code class="filename">stats</code> directory with
+a number of useful counters for various OProfile events.
+</p>
+          </div>
+          <div class="sect2" title="2.3. Generic kernel driver">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="driver"></a>2.3. Generic kernel driver</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+This lives in <code class="filename">drivers/oprofile/</code>, and forms the core of
+how OProfile works in the kernel. Its job is to take samples delivered
+from the architecture-specific code (via <code class="function">oprofile_add_sample()</code>),
+and buffer this data, in a transformed form as described later, until releasing
+the data to the userspace daemon via the <code class="filename">/dev/oprofile/buffer</code>
+character device.
+</p>
+          </div>
+          <div class="sect2" title="2.4. The OProfile daemon">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="daemon"></a>2.4. The OProfile daemon</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+The OProfile userspace daemon's job is to take the raw data provided by the
+kernel and write it to the disk. It takes the single data stream from the
+kernel and logs sample data against a number of sample files (found in
+<code class="filename">$SESSION_DIR/samples/current/</code>, by default located at 
+<code class="filename">/var/lib/oprofile/samples/current/</code>. For the benefit
+of the "separate" functionality, the names/paths of these sample files
+are mangled to reflect where the samples were from: this can include
+thread IDs, the binary file path, the event type used, and more.
+</p>
+            <p>
+After this final step from interrupt to disk file, the data is now
+persistent (that is, changes in the running of the system do not invalidate
+stored data). So the post-profiling tools can run on this data at any
+time (assuming the original binary files are still available and unchanged,
+naturally).
+</p>
+          </div>
+          <div class="sect2" title="2.5. Post-profiling tools"><div class="titlepage"><div><div><h3 class="title"><a id="post-profiling"></a>2.5. Post-profiling tools</h3></div></div></div>
+So far, we've collected data, but we've yet to present it in a useful form
+to the user. This is the job of the post-profiling tools. In general form,
+they collate a subset of the available sample files, load and process each one
+correlated against the relevant binary file, and finally produce user-readable
+information.
+</div>
+        </div>
+      </div>
+      <div class="chapter" title="Chapter 2. Performance counter management">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="performance-counters"></a>Chapter 2. Performance counter management</h2>
+            </div>
+          </div>
+        </div>
+        <div class="toc">
+          <p>
+            <b>Table of Contents</b>
+          </p>
+          <dl>
+            <dt>
+              <span class="sect1">
+                <a href="#performance-counters-ui">1. Providing a user interface</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#performance-counters-programming">2. Programming the performance counter registers</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#performance-counters-start">2.1. Starting and stopping the counters</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#id577410">2.2. IA64 and perfmon</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+          </dl>
+        </div>
+        <div class="sect1" title="1. Providing a user interface">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="performance-counters-ui"></a>1. Providing a user interface</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+The performance counter registers need programming in order to set the
+type of event to count, etc. OProfile uses a standard model across all
+CPUs for defining these events as follows :
+</p>
+          <div class="informaltable">
+            <table border="1">
+              <colgroup>
+                <col />
+                <col />
+              </colgroup>
+              <tbody>
+                <tr>
+                  <td>
+                    <code class="option">event</code>
+                  </td>
+                  <td>The event type e.g. DATA_MEM_REFS</td>
+                </tr>
+                <tr>
+                  <td>
+                    <code class="option">unit mask</code>
+                  </td>
+                  <td>The sub-events to count (more detailed specification)</td>
+                </tr>
+                <tr>
+                  <td>
+                    <code class="option">counter</code>
+                  </td>
+                  <td>The hardware counter(s) that can count this event</td>
+                </tr>
+                <tr>
+                  <td>
+                    <code class="option">count</code>
+                  </td>
+                  <td>The reset value (how many events before an interrupt)</td>
+                </tr>
+                <tr>
+                  <td>
+                    <code class="option">kernel</code>
+                  </td>
+                  <td>Whether the counter should increment when in kernel space</td>
+                </tr>
+                <tr>
+                  <td>
+                    <code class="option">user</code>
+                  </td>
+                  <td>Whether the counter should increment when in user space</td>
+                </tr>
+              </tbody>
+            </table>
+          </div>
+          <p>
+The term "unit mask" is borrowed from the Intel architectures, and can
+further specify exactly when a counter is incremented (for example,
+cache-related events can be restricted to particular state transitions
+of the cache lines).
+</p>
+          <p>
+All of the available hardware events and their details are specified in
+the textual files in the <code class="filename">events</code> directory. The
+syntax of these files should be fairly obvious. The user specifies the
+names and configuration details of the chosen counters via
+<span class="command"><strong>opcontrol</strong></span>. These are then written to the kernel
+module (in numerical form) via <code class="filename">/dev/oprofile/N/</code>
+where N is the physical hardware counter (some events can only be used
+on specific counters; OProfile hides these details from the user when
+possible). On IA64, the perfmon-based interface behaves somewhat
+differently, as described later.
+</p>
+        </div>
+        <div class="sect1" title="2. Programming the performance counter registers">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="performance-counters-programming"></a>2. Programming the performance counter registers</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+We have described how the user interface fills in the desired
+configuration of the counters and transmits the information to the
+kernel. It is the job of the <code class="function">-&gt;setup()</code> method
+to actually program the performance counter registers. Clearly, the
+details of how this is done is architecture-specific; it is also
+model-specific on many architectures. For example, i386 provides methods
+for each model type that programs the counter registers correctly
+(see the <code class="filename">op_model_*</code> files in
+<code class="filename">arch/i386/oprofile</code> for the details). The method
+reads the values stored in the virtual oprofilefs files and programs
+the registers appropriately, ready for starting the actual profiling
+session.
+</p>
+          <p>
+The architecture-specific drivers make sure to save the old register
+settings before doing OProfile setup. They are restored when OProfile
+shuts down. This is useful, for example, on i386, where the NMI watchdog
+uses the same performance counter registers as OProfile; they cannot
+run concurrently, but OProfile makes sure to restore the setup it found
+before it was running.
+</p>
+          <p>
+In addition to programming the counter registers themselves, other setup
+is often necessary. For example, on i386, the local APIC needs
+programming in order to make the counter's overflow interrupt appear as
+an NMI (non-maskable interrupt). This allows sampling (and therefore
+profiling) of regions where "normal" interrupts are masked, enabling
+more reliable profiles.
+</p>
+          <div class="sect2" title="2.1. Starting and stopping the counters">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="performance-counters-start"></a>2.1. Starting and stopping the counters</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+Initiating a profiling session is done via writing an ASCII '1'
+to the file <code class="filename">/dev/oprofile/enable</code>. This sets up the
+core, and calls into the architecture-specific driver to actually
+enable each configured counter. Again, the details of how this is
+done is model-specific (for example, the Athlon models can disable
+or enable on a per-counter basis, unlike the PPro models).
+</p>
+          </div>
+          <div class="sect2" title="2.2. IA64 and perfmon">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="id577410"></a>2.2. IA64 and perfmon</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+The IA64 architecture provides a different interface from the other
+architectures, using the existing perfmon driver. Register programming
+is handled entirely in user-space (see
+<code class="filename">daemon/opd_perfmon.c</code> for the details). A process
+is forked for each CPU, which creates a perfmon context and sets the
+counter registers appropriately via the
+<code class="function">sys_perfmonctl</code> interface. In addition, the actual
+initiation and termination of the profiling session is handled via the
+same interface using <code class="constant">PFM_START</code> and
+<code class="constant">PFM_STOP</code>. On IA64, then, there are no oprofilefs
+files for the performance counters, as the kernel driver does not
+program the registers itself.
+</p>
+            <p>
+Instead, the perfmon driver for OProfile simply registers with the
+OProfile core with an OProfile-specific UUID. During a profiling
+session, the perfmon core calls into the OProfile perfmon driver and
+samples are registered with the OProfile core itself as usual (with
+<code class="function">oprofile_add_sample()</code>).
+</p>
+          </div>
+        </div>
+      </div>
+      <div class="chapter" title="Chapter 3. Collecting and processing samples">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="collecting-samples"></a>Chapter 3. Collecting and processing samples</h2>
+            </div>
+          </div>
+        </div>
+        <div class="toc">
+          <p>
+            <b>Table of Contents</b>
+          </p>
+          <dl>
+            <dt>
+              <span class="sect1">
+                <a href="#receiving-interrupts">1. Receiving interrupts</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#core-structure">2. Core data structures</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#logging-sample">3. Logging a sample</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#logging-stack">4. Logging stack traces</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#synchronising-buffers">5. Synchronising the CPU buffers to the event buffer</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#dentry-cookies">6. Identifying binary images</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#finding-dentry">7. Finding a sample's binary image and offset</a>
+              </span>
+            </dt>
+          </dl>
+        </div>
+        <div class="sect1" title="1. Receiving interrupts">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="receiving-interrupts"></a>1. Receiving interrupts</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+Naturally, how the overflow interrupts are received is specific
+to the hardware architecture, unless we are in "timer" mode, where the
+logging routine is called directly from the standard kernel timer
+interrupt handler.
+</p>
+          <p>
+On the i386 architecture, the local APIC is programmed such that when a
+counter overflows (that is, it receives an event that causes an integer
+overflow of the register value to zero), an NMI is generated. This calls
+into the general handler <code class="function">do_nmi()</code>; because OProfile
+has registered itself as capable of handling NMI interrupts, this will
+call into the OProfile driver code in
+<code class="filename">arch/i386/oprofile</code>. Here, the saved PC value (the
+CPU saves the register set at the time of interrupt on the stack
+available for inspection) is extracted, and the counters are examined to
+find out which one generated the interrupt. Also determined is whether
+the system was inside kernel or user space at the time of the interrupt.
+These three pieces of information are then forwarded onto the OProfile
+core via <code class="function">oprofile_add_sample()</code>. Finally, the
+counter values are reset to the chosen count value, to ensure another
+interrupt happens after another N events have occurred. Other
+architectures behave in a similar manner.
+</p>
+        </div>
+        <div class="sect1" title="2. Core data structures">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="core-structure"></a>2. Core data structures</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+Before considering what happens when we log a sample, we shall digress
+for a moment and look at the general structure of the data collection
+system.
+</p>
+          <p>
+OProfile maintains a small buffer for storing the logged samples for
+each CPU on the system. Only this buffer is altered when we actually log
+a sample (remember, we may still be in an NMI context, so no locking is
+possible). The buffer is managed by a two-handed system; the "head"
+iterator dictates where the next sample data should be placed in the
+buffer. Of course, overflow of the buffer is possible, in which case
+the sample is discarded.
+</p>
+          <p>
+It is critical to remember that at this point, the PC value is an
+absolute value, and is therefore only meaningful in the context of which
+task it was logged against. Thus, these per-CPU buffers also maintain
+details of which task each logged sample is for, as described in the
+next section. In addition, we store whether the sample was in kernel
+space or user space (on some architectures and configurations, the address
+space is not sub-divided neatly at a specific PC value, so we must store
+this information).
+</p>
+          <p>
+As well as these small per-CPU buffers, we have a considerably larger
+single buffer. This holds the data that is eventually copied out into
+the OProfile daemon. On certain system events, the per-CPU buffers are
+processed and entered (in mutated form) into the main buffer, known in
+the source as the "event buffer". The "tail" iterator indicates the
+point from which the CPU may be read, up to the position of the "head"
+iterator. This provides an entirely lock-free method for extracting data
+from the CPU buffers. This process is described in detail later in this chapter.
+</p>
+          <div class="figure">
+            <a id="id577538"></a>
+            <p class="title">
+              <b>Figure 3.1. The OProfile buffers</b>
+            </p>
+            <div class="figure-contents">
+              <div>
+                <img src="buffers.png" alt="The OProfile buffers" />
+              </div>
+            </div>
+          </div>
+          <br class="figure-break" />
+        </div>
+        <div class="sect1" title="3. Logging a sample">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="logging-sample"></a>3. Logging a sample</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+As mentioned, the sample is logged into the buffer specific to the
+current CPU. The CPU buffer is a simple array of pairs of unsigned long
+values; for a sample, they hold the PC value and the counter for the
+sample. (The counter value is later used to translate back into the relevant
+event type the counter was programmed to).
+</p>
+          <p>
+In addition to logging the sample itself, we also log task switches.
+This is simply done by storing the address of the last task to log a
+sample on that CPU in a data structure, and writing a task switch entry
+into the buffer if the new value of <code class="function">current()</code> has
+changed. Note that later we will directly de-reference this pointer;
+this imposes certain restrictions on when and how the CPU buffers need
+to be processed.
+</p>
+          <p>
+Finally, as mentioned, we log whether we have changed between kernel and
+userspace using a similar method. Both of these variables
+(<code class="varname">last_task</code> and <code class="varname">last_is_kernel</code>) are
+reset when the CPU buffer is read.
+</p>
+        </div>
+        <div class="sect1" title="4. Logging stack traces">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="logging-stack"></a>4. Logging stack traces</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+OProfile can also provide statistical samples of call chains (on x86). To
+do this, at sample time, the frame pointer chain is traversed, recording
+the return address for each stack frame. This will only work if the code
+was compiled with frame pointers, but we're careful to abort the
+traversal if the frame pointer appears bad. We store the set of return
+addresses straight into the CPU buffer. Note that, since this traversal
+is keyed off the standard sample interrupt, the number of times a
+function appears in a stack trace is not an indicator of how many times
+the call site was executed: rather, it's related to the number of
+samples we took where that call site was involved. Thus, the results for
+stack traces are not necessarily proportional to the call counts:
+typical programs will have many <code class="function">main()</code> samples.
+</p>
+        </div>
+        <div class="sect1" title="5. Synchronising the CPU buffers to the event buffer">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="synchronising-buffers"></a>5. Synchronising the CPU buffers to the event buffer</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+At some point, we have to process the data in each CPU buffer and enter
+it into the main (event) buffer. The file
+<code class="filename">buffer_sync.c</code> contains the relevant code. We
+periodically (currently every <code class="constant">HZ</code>/4 jiffies) start
+the synchronisation process. In addition, we process the buffers on
+certain events, such as an application calling
+<code class="function">munmap()</code>. This is particularly important for
+<code class="function">exit()</code> - because the CPU buffers contain pointers
+to the task structure, if we don't process all the buffers before the
+task is actually destroyed and the task structure freed, then we could
+end up trying to dereference a bogus pointer in one of the CPU buffers.
+</p>
+          <p>
+We also add a notification when a kernel module is loaded; this is so
+that user-space can re-read <code class="filename">/proc/modules</code> to
+determine the load addresses of kernel module text sections. Without
+this notification, samples for a newly-loaded module could get lost or
+be attributed to the wrong module.
+</p>
+          <p>
+The synchronisation itself works in the following manner: first, mutual
+exclusion on the event buffer is taken. Remember, we do not need to do
+that for each CPU buffer, as we only read from the tail iterator (whilst
+interrupts might be arriving at the same buffer, but they will write to
+the position of the head iterator, leaving previously written entries
+intact). Then, we process each CPU buffer in turn. A CPU switch
+notification is added to the buffer first (for
+<code class="option">--separate=cpu</code> support). Then the processing of the
+actual data starts.
+</p>
+          <p>
+As mentioned, the CPU buffer consists of task switch entries and the
+actual samples. When the routine <code class="function">sync_buffer()</code> sees
+a task switch, the process ID and process group ID are recorded into the
+event buffer, along with a dcookie (see below) identifying the
+application binary (e.g. <code class="filename">/bin/bash</code>). The
+<code class="varname">mmap_sem</code> for the task is then taken, to allow safe
+iteration across the tasks' list of mapped areas. Each sample is then
+processed as described in the next section.
+</p>
+          <p>
+After a buffer has been read, the tail iterator is updated to reflect
+how much of the buffer was processed. Note that when we determined how
+much data there was to read in the CPU buffer, we also called
+<code class="function">cpu_buffer_reset()</code> to reset
+<code class="varname">last_task</code> and <code class="varname">last_is_kernel</code>, as
+we've already mentioned. During the processing, more samples may have
+been arriving in the CPU buffer; this is OK because we are careful to
+only update the tail iterator to how much we actually read - on the next
+buffer synchronisation, we will start again from that point.
+</p>
+        </div>
+        <div class="sect1" title="6. Identifying binary images">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="dentry-cookies"></a>6. Identifying binary images</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+In order to produce useful profiles, we need to be able to associate a
+particular PC value sample with an actual ELF binary on the disk. This
+leaves us with the problem of how to export this information to
+user-space. We create unique IDs that identify a particular directory
+entry (dentry), and write those IDs into the event buffer. Later on,
+the user-space daemon can call the <code class="function">lookup_dcookie</code>
+system call, which looks up the ID and fills in the full path of
+the binary image in the buffer user-space passes in. These IDs are
+maintained by the code in <code class="filename">fs/dcookies.c</code>; the
+cache lasts for as long as the daemon has the event buffer open.
+</p>
+        </div>
+        <div class="sect1" title="7. Finding a sample's binary image and offset">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="finding-dentry"></a>7. Finding a sample's binary image and offset</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+We haven't yet described how we process the absolute PC value into
+something usable by the user-space daemon. When we find a sample entered
+into the CPU buffer, we traverse the list of mappings for the task
+(remember, we will have seen a task switch earlier, so we know which
+task's lists to look at). When a mapping is found that contains the PC
+value, we look up the mapped file's dentry in the dcookie cache. This
+gives the dcookie ID that will uniquely identify the mapped file. Then
+we alter the absolute value such that it is an offset from the start of
+the file being mapped (the mapping need not start at the start of the
+actual file, so we have to consider the offset value of the mapping). We
+store this dcookie ID into the event buffer; this identifies which
+binary the samples following it are against.
+In this manner, we have converted a PC value, which has transitory
+meaning only, into a static offset value for later processing by the
+daemon.
+</p>
+          <p>
+We also attempt to avoid the relatively expensive lookup of the dentry
+cookie value by storing the cookie value directly into the dentry
+itself; then we can simply derive the cookie value immediately when we
+find the correct mapping.
+</p>
+        </div>
+      </div>
+      <div class="chapter" title="Chapter 4. Generating sample files">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="sample-files"></a>Chapter 4. Generating sample files</h2>
+            </div>
+          </div>
+        </div>
+        <div class="toc">
+          <p>
+            <b>Table of Contents</b>
+          </p>
+          <dl>
+            <dt>
+              <span class="sect1">
+                <a href="#processing-buffer">1. Processing the buffer</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#handling-kernel-samples">1.1. Handling kernel samples</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#sample-file-generation">2. Locating and creating sample files</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#sample-file-writing">3. Writing data to a sample file</a>
+              </span>
+            </dt>
+          </dl>
+        </div>
+        <div class="sect1" title="1. Processing the buffer">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="processing-buffer"></a>1. Processing the buffer</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+Now we can move onto user-space in our description of how raw interrupt
+samples are processed into useful information. As we described in
+previous sections, the kernel OProfile driver creates a large buffer of
+sample data consisting of offset values, interspersed with
+notification of changes in context. These context changes indicate how
+following samples should be attributed, and include task switches, CPU
+changes, and which dcookie the sample value is against. By processing
+this buffer entry-by-entry, we can determine where the samples should
+be accredited to. This is particularly important when using the 
+<code class="option">--separate</code>.
+</p>
+          <p>
+The file <code class="filename">daemon/opd_trans.c</code> contains the basic routine
+for the buffer processing. The <code class="varname">struct transient</code>
+structure is used to hold changes in context. Its members are modified
+as we process each entry; it is passed into the routines in
+<code class="filename">daemon/opd_sfile.c</code> for actually logging the sample
+to a particular sample file (which will be held in
+<code class="filename">$SESSION_DIR/samples/current</code>).
+</p>
+          <p>
+The buffer format is designed for conciseness, as high sampling rates
+can easily generate a lot of data. Thus, context changes are prefixed
+by an escape code, identified by <code class="function">is_escape_code()</code>.
+If an escape code is found, the next entry in the buffer identifies
+what type of context change is being read. These are handed off to
+various handlers (see the <code class="varname">handlers</code> array), which
+modify the transient structure as appropriate. If it's not an escape
+code, then it must be a PC offset value, and the very next entry will
+be the numeric hardware counter. These values are read and recorded
+in the transient structure; we then do a lookup to find the correct
+sample file, and log the sample, as described in the next section.
+</p>
+          <div class="sect2" title="1.1. Handling kernel samples">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="handling-kernel-samples"></a>1.1. Handling kernel samples</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+Samples from kernel code require a little special handling. Because
+the binary text which the sample is against does not correspond to
+any file that the kernel directly knows about, the OProfile driver
+stores the absolute PC value in the buffer, instead of the file offset.
+Of course, we need an offset against some particular binary. To handle
+this, we keep a list of loaded modules by parsing
+<code class="filename">/proc/modules</code> as needed. When a module is loaded,
+a notification is placed in the OProfile buffer, and this triggers a
+re-read. We store the module name, and the loading address and size.
+This is also done for the main kernel image, as specified by the user.
+The absolute PC value is matched against each address range, and
+modified into an offset when the matching module is found. See 
+<code class="filename">daemon/opd_kernel.c</code> for the details.
+</p>
+          </div>
+        </div>
+        <div class="sect1" title="2. Locating and creating sample files">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="sample-file-generation"></a>2. Locating and creating sample files</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+We have a sample value and its satellite data stored in a
+<code class="varname">struct transient</code>, and we must locate an
+actual sample file to store the sample in, using the context
+information in the transient structure as a key. The transient data to
+sample file lookup is handled in
+<code class="filename">daemon/opd_sfile.c</code>. A hash is taken of the
+transient values that are relevant (depending upon the setting of
+<code class="option">--separate</code>, some values might be irrelevant), and the
+hash value is used to lookup the list of currently open sample files.
+Of course, the sample file might not be found, in which case we need
+to create and open it.
+</p>
+          <p>
+OProfile uses a rather complex scheme for naming sample files, in order
+to make selecting relevant sample files easier for the post-profiling
+utilities. The exact details of the scheme are given in
+<code class="filename">oprofile-tests/pp_interface</code>, but for now it will
+suffice to remember that the filename will include only relevant
+information for the current settings, taken from the transient data. A
+fully-specified filename looks something like :
+</p>
+          <code class="computeroutput">
+/var/lib/oprofile/samples/current/{root}/usr/bin/xmms/{dep}/{root}/lib/tls/libc-2.3.2.so/CPU_CLK_UNHALTED.100000.0.28082.28089.0
+</code>
+          <p>
+It should be clear that this identifies such information as the
+application binary, the dependent (library) binary, the hardware event,
+and the process and thread ID. Typically, not all this information is
+needed, in which cases some values may be replaced with the token
+<code class="filename">all</code>.
+</p>
+          <p>
+The code that generates this filename and opens the file is found in
+<code class="filename">daemon/opd_mangling.c</code>. You may have realised that
+at this point, we do not have the binary image file names, only the
+dcookie values. In order to determine a file name, a dcookie value is
+looked up in the dcookie cache. This is to be found in
+<code class="filename">daemon/opd_cookie.c</code>. Since dcookies are both
+persistent and unique during a sampling session, we can cache the
+values. If the value is not found in the cache, then we ask the kernel
+to do the lookup from value to file name for us by calling
+<code class="function">lookup_dcookie()</code>. This looks up the value in a
+kernel-side cache (see <code class="filename">fs/dcookies.c</code>) and returns
+the fully-qualified file name to userspace.
+</p>
+        </div>
+        <div class="sect1" title="3. Writing data to a sample file">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="sample-file-writing"></a>3. Writing data to a sample file</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+Each specific sample file is a hashed collection, where the key is
+the PC offset from the transient data, and the value is the number of
+samples recorded against that offset. The files are
+<code class="function">mmap()</code>ed into the daemon's memory space. The code
+to actually log the write against the sample file can be found in
+<code class="filename">libdb/</code>.
+</p>
+          <p>
+For recording stack traces, we have a more complicated sample filename
+mangling scheme that allows us to identify cross-binary calls. We use
+the same sample file format, where the key is a 64-bit value composed
+from the from,to pair of offsets.
+</p>
+        </div>
+      </div>
+      <div class="chapter" title="Chapter 5. Generating useful output">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="output"></a>Chapter 5. Generating useful output</h2>
+            </div>
+          </div>
+        </div>
+        <div class="toc">
+          <p>
+            <b>Table of Contents</b>
+          </p>
+          <dl>
+            <dt>
+              <span class="sect1">
+                <a href="#profile-specification">1. Handling the profile specification</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#sample-file-collating">2. Collating the candidate sample files</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#sample-file-classifying">2.1. Classifying sample files</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#sample-file-inverting">2.2. Creating inverted profile lists</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#generating-profile-data">3. Generating profile data</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#bfd">3.1. Processing the binary image</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#processing-sample-files">3.2. Processing the sample files</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#generating-output">4. Generating output</a>
+              </span>
+            </dt>
+          </dl>
+        </div>
+        <p>
+All of the tools used to generate human-readable output have to take
+roughly the same steps to collect the data for processing. First, the
+profile specification given by the user has to be parsed. Next, a list
+of sample files matching the specification has to obtained. Using this
+list, we need to locate the binary file for each sample file, and then
+use them to extract meaningful data, before a final collation and
+presentation to the user.
+</p>
+        <div class="sect1" title="1. Handling the profile specification">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="profile-specification"></a>1. Handling the profile specification</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+The profile specification presented by the user is parsed in
+the function <code class="function">profile_spec::create()</code>. This
+creates an object representing the specification. Then we
+use <code class="function">profile_spec::generate_file_list()</code>
+to search for all sample files and match them against the
+<code class="varname">profile_spec</code>.
+</p>
+          <p>
+To enable this matching process to work, the attributes of
+each sample file is encoded in its filename. This is a low-tech
+approach to matching specifications against candidate sample
+files, but it works reasonably well. A typical sample file
+might look like these:
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+/var/lib/oprofile/samples/current/{root}/bin/ls/{dep}/{root}/bin/ls/{cg}/{root}/bin/ls/CPU_CLK_UNHALTED.100000.0.all.all.all
+/var/lib/oprofile/samples/current/{root}/bin/ls/{dep}/{root}/bin/ls/CPU_CLK_UNHALTED.100000.0.all.all.all
+/var/lib/oprofile/samples/current/{root}/bin/ls/{dep}/{root}/bin/ls/CPU_CLK_UNHALTED.100000.0.7423.7424.0
+/var/lib/oprofile/samples/current/{kern}/r128/{dep}/{kern}/r128/CPU_CLK_UNHALTED.100000.0.all.all.all
+</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+This looks unnecessarily complex, but it's actually fairly simple. First
+we have the session of the sample, by default located here
+<code class="filename">/var/lib/oprofile/samples/current</code>. This location
+can be changed by specifying the --session-dir option at command-line.
+This session could equally well be inside an archive from <span class="command"><strong>oparchive</strong></span>.
+Next we have one of the tokens <code class="filename">{root}</code> or
+<code class="filename">{kern}</code>. <code class="filename">{root}</code> indicates
+that the binary is found on a file system, and we will encode its path
+in the next section (e.g. <code class="filename">/bin/ls</code>).
+<code class="filename">{kern}</code> indicates a kernel module - on 2.6 kernels
+the path information is not available from the kernel, so we have to
+special-case kernel modules like this; we encode merely the name of the
+module as loaded.
+</p>
+          <p>
+Next there is a <code class="filename">{dep}</code> token, indicating another
+token/path which identifies the dependent binary image. This is used even for
+the "primary" binary (i.e. the one that was
+<code class="function">execve()</code>d), as it simplifies processing. Finally,
+if this sample file is a normal flat profile, the actual file is next in
+the path. If it's a call-graph sample file, we need one further
+specification, to allow us to identify cross-binary arcs in the call
+graph.
+</p>
+          <p>
+The actual sample file name is dot-separated, where the fields are, in
+order: event name, event count, unit mask, task group ID, task ID, and
+CPU number.
+</p>
+          <p>
+This sample file can be reliably parsed (with
+<code class="function">parse_filename()</code>) into a
+<code class="varname">filename_spec</code>. Finally, we can check whether to
+include the sample file in the final results by comparing this
+<code class="varname">filename_spec</code> against the
+<code class="varname">profile_spec</code> the user specified (for the interested,
+see <code class="function">valid_candidate()</code> and
+<code class="function">profile_spec::match</code>). Then comes the really
+complicated bit...
+</p>
+        </div>
+        <div class="sect1" title="2. Collating the candidate sample files">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="sample-file-collating"></a>2. Collating the candidate sample files</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+At this point we have a duplicate-free list of sample files we need
+to process. But first we need to do some further arrangement: we
+need to classify each sample file, and we may also need to "invert"
+the profiles.
+</p>
+          <div class="sect2" title="2.1. Classifying sample files">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="sample-file-classifying"></a>2.1. Classifying sample files</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+It's possible for utilities like <span class="command"><strong>opreport</strong></span> to show 
+data in columnar format: for example, we might want to show the results
+of two threads within a process side-by-side. To do this, we need
+to classify each sample file into classes - the classes correspond
+with each <span class="command"><strong>opreport</strong></span> column. The function that handles
+this is <code class="function">arrange_profiles()</code>. Each sample file
+is added to a particular class. If the sample file is the first in
+its class, a template is generated from the sample file. Each template
+describes a particular class (thus, in our example above, each template
+will have a different thread ID, and this uniquely identifies each
+class).
+</p>
+            <p>
+Each class has a list of "profile sets" matching that class's template.
+A profile set is either a profile of the primary binary image, or any of
+its dependent images. After all sample files have been listed in one of
+the profile sets belonging to the classes, we have to name each class and
+perform error-checking. This is done by
+<code class="function">identify_classes()</code>; each class is checked to ensure
+that its "axis" is the same as all the others. This is needed because
+<span class="command"><strong>opreport</strong></span> can't produce results in 3D format: we can
+only differ in one aspect, such as thread ID or event name.
+</p>
+          </div>
+          <div class="sect2" title="2.2. Creating inverted profile lists">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="sample-file-inverting"></a>2.2. Creating inverted profile lists</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+Remember that if we're using certain profile separation options, such as
+"--separate=lib", a single binary could be a dependent image to many
+different binaries. For example, the C library image would be a
+dependent image for most programs that have been profiled. As it
+happens, this can cause severe performance problems: without some
+re-arrangement, these dependent binary images would be opened each
+time we need to process sample files for each program.
+</p>
+            <p>
+The solution is to "invert" the profiles via
+<code class="function">invert_profiles()</code>. We create a new data structure
+where the dependent binary is first, and the primary binary images using
+that dependent binary are listed as sub-images. This helps our
+performance problem, as now we only need to open each dependent image
+once, when we process the list of inverted profiles.
+</p>
+          </div>
+        </div>
+        <div class="sect1" title="3. Generating profile data">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="generating-profile-data"></a>3. Generating profile data</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+Things don't get any simpler at this point, unfortunately. At this point
+we've collected and classified the sample files into the set of inverted
+profiles, as described in the previous section. Now we need to process
+each inverted profile and make something of the data. The entry point
+for this is <code class="function">populate_for_image()</code>.
+</p>
+          <div class="sect2" title="3.1. Processing the binary image">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="bfd"></a>3.1. Processing the binary image</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+The first thing we do with an inverted profile is attempt to open the
+binary image (remember each inverted profile set is only for one binary
+image, but may have many sample files to process). The
+<code class="varname">op_bfd</code> class provides an abstracted interface to
+this; internally it uses <code class="filename">libbfd</code>. The main purpose
+of this class is to process the symbols for the binary image; this is
+also where symbol filtering happens. This is actually quite tricky, but
+should be clear from the source.
+</p>
+          </div>
+          <div class="sect2" title="3.2. Processing the sample files">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="processing-sample-files"></a>3.2. Processing the sample files</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+The class <code class="varname">profile_container</code> is a hold-all that
+contains all the processed results. It is a container of
+<code class="varname">profile_t</code> objects. The
+<code class="function">add_sample_files()</code> method uses
+<code class="filename">libdb</code> to open the given sample file and add the
+key/value types to the <code class="varname">profile_t</code>. Once this has been
+done, <code class="function">profile_container::add()</code> is passed the
+<code class="varname">profile_t</code> plus the <code class="varname">op_bfd</code> for
+processing.
+</p>
+            <p>
+<code class="function">profile_container::add()</code> walks through the symbols
+collected in the <code class="varname">op_bfd</code>.
+<code class="function">op_bfd::get_symbol_range()</code> gives us the start and
+end of the symbol as an offset from the start of the binary image,
+then we interrogate the <code class="varname">profile_t</code> for the relevant samples
+for that offset range. We create a <code class="varname">symbol_entry</code>
+object for this symbol and fill it in. If needed, here we also collect
+debug information from the <code class="varname">op_bfd</code>, and possibly
+record the detailed sample information (as used by <span class="command"><strong>opreport
+-d</strong></span> and <span class="command"><strong>opannotate</strong></span>).
+Finally the <code class="varname">symbol_entry</code> is added to
+a private container of <code class="varname">profile_container</code> - this
+<code class="varname">symbol_container</code> holds all such processed symbols.
+</p>
+          </div>
+        </div>
+        <div class="sect1" title="4. Generating output">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="generating-output"></a>4. Generating output</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+After the processing described in the previous section, we've now got
+full details of what we need to output stored in the
+<code class="varname">profile_container</code> on a symbol-by-symbol basis. To
+produce output, we need to replay that data and format it suitably.
+</p>
+          <p>
+<span class="command"><strong>opreport</strong></span> first asks the
+<code class="varname">profile_container</code> for a
+<code class="varname">symbol_collection</code> (this is also where thresholding
+happens).
+This is sorted, then a
+<code class="varname">opreport_formatter</code> is initialised.
+This object initialises a set of field formatters as requested. Then
+<code class="function">opreport_formatter::output()</code> is called. This
+iterates through the (sorted) <code class="varname">symbol_collection</code>;
+for each entry, the selected fields (as set by the
+<code class="varname">format_flags</code> options) are output by calling the
+field formatters, with the <code class="varname">symbol_entry</code> passed in.
+</p>
+        </div>
+      </div>
+      <div class="chapter" title="Chapter 6. Extended Feature Interface">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="ext"></a>Chapter 6. Extended Feature Interface</h2>
+            </div>
+          </div>
+        </div>
+        <div class="toc">
+          <p>
+            <b>Table of Contents</b>
+          </p>
+          <dl>
+            <dt>
+              <span class="sect1">
+                <a href="#ext-intro">1. Introduction</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#ext-name-and-handlers">2. Feature Name and Handlers</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#ext-enable">3. Enabling Features</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#ext-types-of-handlers">4. Type of Handlers</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#ext_init">4.1. ext_init Handler</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#ext_print_stats">4.2. ext_print_stats Handler</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#ext_sfile_handlers">4.3. ext_sfile Handler</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#ext-implementation">5. Extended Feature Reference Implementation</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#ext-ibs">5.1. Instruction-Based Sampling (IBS)</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+          </dl>
+        </div>
+        <div class="sect1" title="1. Introduction">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="ext-intro"></a>1. Introduction</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+The Extended Feature Interface is a standard callback interface 
+designed to allow extension to the OProfile daemon's sample processing. 
+Each feature defines a set of callback handlers which can be enabled or 
+disabled through the OProfile daemon's command-line option.
+This interface can be used to implement support for architecture-specific
+features or features not commonly used by general OProfile users. 
+</p>
+        </div>
+        <div class="sect1" title="2. Feature Name and Handlers">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="ext-name-and-handlers"></a>2. Feature Name and Handlers</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+Each extended feature has an entry in the <code class="varname">ext_feature_table</code>
+in <code class="filename">opd_extended.cpp</code>. Each entry contains a feature name,
+and a corresponding set of handlers. Feature name is a unique string, which is
+used to identify a feature in the table. Each feature provides a set
+of handlers, which will be executed by the OProfile daemon from pre-determined
+locations to perform certain tasks. At runtime, the OProfile daemon calls a feature
+handler wrapper from one of the predetermined locations to check whether
+an extended feature is enabled, and whether a particular handler exists.
+Only the handlers of the enabled feature will be executed.
+</p>
+        </div>
+        <div class="sect1" title="3. Enabling Features">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="ext-enable"></a>3. Enabling Features</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+Each feature is enabled using the OProfile daemon (oprofiled) command-line
+option "--ext-feature=&lt;extended-feature-name&gt;:[args]". The
+"extended-feature-name" is used to determine the feature to be enabled.
+The optional "args" is passed into the feature-specific initialization handler
+(<code class="function">ext_init</code>). Currently, only one extended feature can be
+enabled at a time.
+</p>
+        </div>
+        <div class="sect1" title="4. Type of Handlers">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="ext-types-of-handlers"></a>4. Type of Handlers</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+Each feature is responsible for providing its own set of handlers.
+Types of handler are:
+</p>
+          <div class="sect2" title="4.1. ext_init Handler">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="ext_init"></a>4.1. ext_init Handler</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+"ext_init" handles initialization of an extended feature. It takes
+"args" parameter which is passed in through the "oprofiled --ext-feature=&lt;
+extended-feature-name&gt;:[args]". This handler is executed in the function
+<code class="function">opd_options()</code> in the file <code class="filename">daemon/oprofiled.c
+</code>.
+</p>
+            <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
+              <h3 class="title">Note</h3>
+              <p>
+The ext_init handler is required for all features.
+</p>
+            </div>
+          </div>
+          <div class="sect2" title="4.2. ext_print_stats Handler">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="ext_print_stats"></a>4.2. ext_print_stats Handler</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+"ext_print_stats" handles the extended feature statistics report. It adds
+a new section in the OProfile daemon statistics report, which is normally
+outputed to the file
+<code class="filename">/var/lib/oprofile/samples/oprofiled.log</code>.
+This handler is executed in the function <code class="function">opd_print_stats()</code>
+in the file <code class="filename">daemon/opd_stats.c</code>.
+</p>
+          </div>
+          <div class="sect2" title="4.3. ext_sfile Handler">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="ext_sfile_handlers"></a>4.3. ext_sfile Handler</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+"ext_sfile" contains a set of handlers related to operations on the extended
+sample files (sample files for events related to extended feature).
+These operations include <code class="function">create_sfile()</code>,
+<code class="function">sfile_dup()</code>, <code class="function">close_sfile()</code>,
+<code class="function">sync_sfile()</code>, and <code class="function">get_file()</code>
+as defined in <code class="filename">daemon/opd_sfile.c</code>.
+An additional field, <code class="varname">odb_t * ext_file</code>, is added to the 
+<code class="varname">struct sfile</code> for storing extended sample files
+information. 
+
+</p>
+          </div>
+        </div>
+        <div class="sect1" title="5. Extended Feature Reference Implementation">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="ext-implementation"></a>5. Extended Feature Reference Implementation</h2>
+              </div>
+            </div>
+          </div>
+          <div class="sect2" title="5.1. Instruction-Based Sampling (IBS)">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="ext-ibs"></a>5.1. Instruction-Based Sampling (IBS)</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+An example of extended feature implementation can be seen by
+examining the AMD Instruction-Based Sampling support.
+</p>
+            <div class="sect3" title="5.1.1. IBS Initialization">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="ibs-init"></a>5.1.1. IBS Initialization</h4>
+                  </div>
+                </div>
+              </div>
+              <p>
+Instruction-Based Sampling (IBS) is a new performance measurement technique
+available on AMD Family 10h processors. Enabling IBS profiling is done simply
+by specifying IBS performance events through the "--event=" options.
+</p>
+              <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+                <tr>
+                  <td>
+                    <pre class="screen">
+opcontrol --event=IBS_FETCH_XXX:&lt;count&gt;:&lt;um&gt;:&lt;kernel&gt;:&lt;user&gt;
+opcontrol --event=IBS_OP_XXX:&lt;count&gt;:&lt;um&gt;:&lt;kernel&gt;:&lt;user&gt;
+
+Note: * Count and unitmask for all IBS fetch events must be the same,
+	as do those for IBS op.
+</pre>
+                  </td>
+                </tr>
+              </table>
+              <p>
+IBS performance events are listed in <code class="function">opcontrol --list-events</code>.
+When users specify these events, opcontrol verifies them using ophelp, which
+checks for the <code class="varname">ext:ibs_fetch</code> or <code class="varname">ext:ibs_op</code>
+tag in <code class="filename">events/x86-64/family10/events</code> file.
+Then, it configures the driver interface (/dev/oprofile/ibs_fetch/... and
+/dev/oprofile/ibs_op/...) and starts the OProfile daemon as follows.
+</p>
+              <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+                <tr>
+                  <td>
+                    <pre class="screen">
+oprofiled \
+    --ext-feature=ibs:\
+	fetch:&lt;IBS_FETCH_EVENT1&gt;,&lt;IBS_FETCH_EVENT2&gt;,...,:&lt;IBS fetch count&gt;:&lt;IBS Fetch um&gt;|\
+	op:&lt;IBS_OP_EVENT1&gt;,&lt;IBS_OP_EVENT2&gt;,...,:&lt;IBS op count&gt;:&lt;IBS op um&gt;
+</pre>
+                  </td>
+                </tr>
+              </table>
+              <p>
+Here, the OProfile daemon parses the <code class="varname">--ext-feature</code>
+option and checks the feature name ("ibs") before calling the 
+the initialization function to handle the string
+containing IBS events, counts, and unitmasks.
+Then, it stores each event in the IBS virtual-counter table
+(<code class="varname">struct opd_event ibs_vc[OP_MAX_IBS_COUNTERS]</code>) and
+stores the event index in the IBS Virtual Counter Index (VCI) map
+(<code class="varname">ibs_vci_map[OP_MAX_IBS_COUNTERS]</code>) with IBS event value
+as the map key.
+</p>
+            </div>
+            <div class="sect3" title="5.1.2. IBS Data Processing">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="ibs-data-processing"></a>5.1.2. IBS Data Processing</h4>
+                  </div>
+                </div>
+              </div>
+              <p>
+During a profile session, the OProfile daemon identifies IBS samples in the 
+event buffer using the <code class="varname">"IBS_FETCH_CODE"</code> or 
+<code class="varname">"IBS_OP_CODE"</code>. These codes trigger the handlers 
+<code class="function">code_ibs_fetch_sample()</code> or 
+<code class="function">code_ibs_op_sample()</code> listed in the
+<code class="varname">handler_t handlers[]</code> vector in 
+<code class="filename">daemon/opd_trans.c </code>. These handlers are responsible for
+processing IBS samples and translate them into IBS performance events.
+</p>
+              <p>
+Unlike traditional performance events, each IBS sample can be derived into 
+multiple IBS performance events. For each event that the user specifies,
+a combination of bits from Model-Specific Registers (MSR) are checked
+against the bitmask defining the event. If the condition is met, the event
+will then be recorded. The derivation logic is in the files
+<code class="filename">daemon/opd_ibs_macro.h</code> and
+<code class="filename">daemon/opd_ibs_trans.[h,c]</code>. 
+</p>
+            </div>
+            <div class="sect3" title="5.1.3. IBS Sample File">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="ibs-sample-file"></a>5.1.3. IBS Sample File</h4>
+                  </div>
+                </div>
+              </div>
+              <p>
+Traditionally, sample file information <code class="varname">(odb_t)</code> is stored
+in the <code class="varname">struct sfile::odb_t file[OP_MAX_COUNTER]</code>.
+Currently, <code class="varname">OP_MAX_COUNTER</code> is 8 on non-alpha, and 20 on
+alpha-based system. Event index (the counter number on which the event
+is configured) is used to access the corresponding entry in the array.
+Unlike the traditional performance event, IBS does not use the actual
+counter registers (i.e. <code class="filename">/dev/oprofile/0,1,2,3</code>).
+Also, the number of performance events generated by IBS could be larger than
+<code class="varname">OP_MAX_COUNTER</code> (currently upto 13 IBS-fetch and 46 IBS-op 
+events). Therefore IBS requires a special data structure and sfile
+handlers (<code class="varname">struct opd_ext_sfile_handlers</code>) for managing
+IBS sample files. IBS-sample-file information is stored in a memory 
+allocated by handler <code class="function">ibs_sfile_create()</code>, which can
+be accessed through <code class="varname">struct sfile::odb_t * ext_files</code>.
+</p>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="glossary" title="Glossary of OProfile source concepts and types">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="glossary"></a>Glossary of OProfile source concepts and types</h2>
+            </div>
+          </div>
+        </div>
+        <dl>
+          <dt>application image</dt>
+          <dd>
+            <p>
+The primary binary image used by an application. This is derived
+from the kernel and corresponds to the binary started upon running
+an application: for example, <code class="filename">/bin/bash</code>.
+</p>
+          </dd>
+          <dt>binary image</dt>
+          <dd>
+            <p>
+An ELF file containing executable code: this includes kernel modules,
+the kernel itself (a.k.a. <code class="filename">vmlinux</code>), shared libraries,
+and application binaries.
+</p>
+          </dd>
+          <dt>dcookie</dt>
+          <dd>
+            <p>
+Short for "dentry cookie". A unique ID that can be looked up to provide
+the full path name of a binary image.
+</p>
+          </dd>
+          <dt>dependent image</dt>
+          <dd>
+            <p>
+A binary image that is dependent upon an application, used with
+per-application separation. Most commonly, shared libraries. For example,
+if <code class="filename">/bin/bash</code> is running and we take
+some samples inside the C library itself due to <span class="command"><strong>bash</strong></span>
+calling library code, then the image <code class="filename">/lib/libc.so</code>
+would be dependent upon <code class="filename">/bin/bash</code>.
+</p>
+          </dd>
+          <dt>merging</dt>
+          <dd>
+            <p>
+This refers to the ability to merge several distinct sample files
+into one set of data at runtime, in the post-profiling tools. For example,
+per-thread sample files can be merged into one set of data, because
+they are compatible (i.e. the aggregation of the data is meaningful),
+but it's not possible to merge sample files for two different events,
+because there would be no useful meaning to the results.
+</p>
+          </dd>
+          <dt>profile class</dt>
+          <dd>
+            <p>
+A collection of profile data that has been collected under the same
+class template. For example, if we're using <span class="command"><strong>opreport</strong></span>
+to show results after profiling with two performance counters enabled
+profiling <code class="constant">DATA_MEM_REFS</code> and <code class="constant">CPU_CLK_UNHALTED</code>,
+there would be two profile classes, one for each event. Or if we're on
+an SMP system and doing per-cpu profiling, and we request
+<span class="command"><strong>opreport</strong></span> to show results for each CPU side-by-side,
+there would be a profile class for each CPU.
+</p>
+          </dd>
+          <dt>profile specification</dt>
+          <dd>
+            <p>
+The parameters the user passes to the post-profiling tools that limit
+what sample files are used. This specification is matched against
+the available sample files to generate a selection of profile data.
+</p>
+          </dd>
+          <dt>profile template</dt>
+          <dd>
+            <p>
+The parameters that define what goes in a particular profile class.
+This includes a symbolic name (e.g. "cpu:1") and the code-usable
+equivalent.
+</p>
+          </dd>
+        </dl>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/oprofile-0.9.7/doc/internals.xml b/oprofile-0.9.7/doc/internals.xml
new file mode 100644
index 0000000..a7feac7
--- /dev/null
+++ b/oprofile-0.9.7/doc/internals.xml
@@ -0,0 +1,1194 @@
+<?xml version="1.0" encoding='ISO-8859-1'?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<book id="oprofile-internals">
+<bookinfo>
+	<title>OProfile Internals</title>
+ 
+	<authorgroup>
+		<author>
+			<firstname>John</firstname>
+			<surname>Levon</surname>
+			<affiliation>
+				<address><email>levon@movementarian.org</email></address>
+			</affiliation>
+		</author>
+	</authorgroup>
+
+	<copyright>
+		<year>2003</year>
+		<holder>John Levon</holder>
+	</copyright>
+</bookinfo>
+
+<toc></toc>
+
+<chapter id="introduction">
+<title>Introduction</title>
+
+<para>
+This document is current for OProfile version <oprofileversion />.
+This document provides some details on the internal workings of OProfile for the
+interested hacker. This document assumes strong C, working C++, plus some knowledge of
+kernel internals and CPU hardware.
+</para>
+<note>
+<para>
+Only the "new" implementation associated with kernel 2.6 and above is covered here. 2.4
+uses a very different kernel module implementation and daemon to produce the sample files.
+</para>
+</note>
+
+<sect1 id="overview">
+<title>Overview</title>
+<para>
+OProfile is a statistical continuous profiler. In other words, profiles are generated by
+regularly sampling the current registers on each CPU (from an interrupt handler, the
+saved PC value at the time of interrupt is stored), and converting that runtime PC
+value into something meaningful to the programmer.
+</para>
+<para>
+OProfile achieves this by taking the stream of sampled PC values, along with the detail
+of which task was running at the time of the interrupt, and converting into a file offset
+against a particular binary file. Because applications <function>mmap()</function>
+the code they run (be it <filename>/bin/bash</filename>, <filename>/lib/libfoo.so</filename>
+or whatever), it's possible to find the relevant binary file and offset by walking
+the task's list of mapped memory areas. Each PC value is thus converted into a tuple
+of binary-image,offset. This is something that the userspace tools can use directly
+to reconstruct where the code came from, including the particular assembly instructions,
+symbol, and source line (via the binary's debug information if present).
+</para>
+<para>
+Regularly sampling the PC value like this approximates what actually was executed and
+how often - more often than not, this statistical approximation is good enough to
+reflect reality. In common operation, the time between each sample interrupt is regulated
+by a fixed number of clock cycles. This implies that the results will reflect where
+the CPU is spending the most time; this is obviously a very useful information source
+for performance analysis.
+</para>
+<para>
+Sometimes though, an application programmer needs different kinds of information: for example,
+"which of the source routines cause the most cache misses ?". The rise in importance of
+such metrics in recent years has led many CPU manufacturers to provide hardware performance
+counters capable of measuring these events on the hardware level. Typically, these counters
+increment once per each event, and generate an interrupt on reaching some pre-defined
+number of events. OProfile can use these interrupts to generate samples: then, the
+profile results are a statistical approximation of which code caused how many of the
+given event.
+</para>
+<para>
+Consider a simplified system that only executes two functions A and B. A
+takes one cycle to execute, whereas B takes 99 cycles. Imagine we run at
+100 cycles a second, and we've set the performance counter to create an
+interrupt after a set number of "events" (in this case an event is one
+clock cycle). It should be clear that the chances of the interrupt
+occurring in function A is 1/100, and 99/100 for function B. Thus, we
+statistically approximate the actual relative performance features of
+the two functions over time. This same analysis works for other types of
+events, providing that the interrupt is tied to the number of events
+occurring (that is, after N events, an interrupt is generated).
+</para>
+<para>
+There are typically more than one of these counters, so it's possible to set up profiling
+for several different event types. Using these counters gives us a powerful, low-overhead
+way of gaining performance metrics. If OProfile, or the CPU, does not support performance
+counters, then a simpler method is used: the kernel timer interrupt feeds samples
+into OProfile itself.
+</para>
+<para>
+The rest of this document concerns itself with how we get from receiving samples at
+interrupt time to producing user-readable profile information.
+</para>
+</sect1>
+
+<sect1 id="components">
+<title>Components of the OProfile system</title>
+
+<sect2 id="arch-specific-components">
+<title>Architecture-specific components</title>
+<para>
+If OProfile supports the hardware performance counters found on
+a particular architecture, code for managing the details of setting
+up and managing these counters can be found in the kernel source
+tree in the relevant <filename>arch/<emphasis>arch</emphasis>/oprofile/</filename>
+directory. The architecture-specific implementation works via
+filling in the oprofile_operations structure at init time. This
+provides a set of operations such as <function>setup()</function>,
+<function>start()</function>, <function>stop()</function>, etc.
+that manage the hardware-specific details of fiddling with the
+performance counter registers.
+</para>
+<para>
+The other important facility available to the architecture code is
+<function>oprofile_add_sample()</function>.  This is where a particular sample
+taken at interrupt time is fed into the generic OProfile driver code.
+</para>
+</sect2>
+
+<sect2 id="filesystem">
+<title>oprofilefs</title>
+<para>
+OProfile implements a pseudo-filesystem known as "oprofilefs", mounted from
+userspace at <filename>/dev/oprofile</filename>. This consists of small
+files for reporting and receiving configuration from userspace, as well
+as the actual character device that the OProfile userspace receives samples
+from. At <function>setup()</function> time, the architecture-specific may
+add further configuration files related to the details of the performance
+counters. For example, on x86, one numbered directory for each hardware
+performance counter is added, with files in each for the event type,
+reset value, etc.
+</para>
+<para>
+The filesystem also contains a <filename>stats</filename> directory with
+a number of useful counters for various OProfile events.
+</para>
+</sect2>
+
+<sect2 id="driver">
+<title>Generic kernel driver</title>
+<para>
+This lives in <filename>drivers/oprofile/</filename>, and forms the core of
+how OProfile works in the kernel. Its job is to take samples delivered
+from the architecture-specific code (via <function>oprofile_add_sample()</function>),
+and buffer this data, in a transformed form as described later, until releasing
+the data to the userspace daemon via the <filename>/dev/oprofile/buffer</filename>
+character device.
+</para>
+</sect2>
+
+<sect2 id="daemon">
+<title>The OProfile daemon</title>
+<para>
+The OProfile userspace daemon's job is to take the raw data provided by the
+kernel and write it to the disk. It takes the single data stream from the
+kernel and logs sample data against a number of sample files (found in
+<filename>$SESSION_DIR/samples/current/</filename>, by default located at 
+<filename>/var/lib/oprofile/samples/current/</filename>. For the benefit
+of the "separate" functionality, the names/paths of these sample files
+are mangled to reflect where the samples were from: this can include
+thread IDs, the binary file path, the event type used, and more.
+</para>
+<para>
+After this final step from interrupt to disk file, the data is now
+persistent (that is, changes in the running of the system do not invalidate
+stored data). So the post-profiling tools can run on this data at any
+time (assuming the original binary files are still available and unchanged,
+naturally).
+</para>
+</sect2>
+
+<sect2 id="post-profiling">
+<title>Post-profiling tools</title>
+So far, we've collected data, but we've yet to present it in a useful form
+to the user. This is the job of the post-profiling tools. In general form,
+they collate a subset of the available sample files, load and process each one
+correlated against the relevant binary file, and finally produce user-readable
+information.
+</sect2>
+
+</sect1>
+
+</chapter>
+
+<chapter id="performance-counters">
+<title>Performance counter management</title>
+
+<sect1 id ="performance-counters-ui">
+<title>Providing a user interface</title>
+
+<para>
+The performance counter registers need programming in order to set the
+type of event to count, etc. OProfile uses a standard model across all
+CPUs for defining these events as follows :
+</para>
+<informaltable frame="all">
+<tgroup cols='2'> 
+<tbody>
+<row><entry><option>event</option></entry><entry>The event type e.g. DATA_MEM_REFS</entry></row>
+<row><entry><option>unit mask</option></entry><entry>The sub-events to count (more detailed specification)</entry></row>
+<row><entry><option>counter</option></entry><entry>The hardware counter(s) that can count this event</entry></row>
+<row><entry><option>count</option></entry><entry>The reset value (how many events before an interrupt)</entry></row>
+<row><entry><option>kernel</option></entry><entry>Whether the counter should increment when in kernel space</entry></row>
+<row><entry><option>user</option></entry><entry>Whether the counter should increment when in user space</entry></row>
+</tbody>
+</tgroup>
+</informaltable>
+<para>
+The term "unit mask" is borrowed from the Intel architectures, and can
+further specify exactly when a counter is incremented (for example,
+cache-related events can be restricted to particular state transitions
+of the cache lines).
+</para>
+<para>
+All of the available hardware events and their details are specified in
+the textual files in the <filename>events</filename> directory. The
+syntax of these files should be fairly obvious. The user specifies the
+names and configuration details of the chosen counters via
+<command>opcontrol</command>. These are then written to the kernel
+module (in numerical form) via <filename>/dev/oprofile/N/</filename>
+where N is the physical hardware counter (some events can only be used
+on specific counters; OProfile hides these details from the user when
+possible). On IA64, the perfmon-based interface behaves somewhat
+differently, as described later.
+</para>
+
+</sect1>
+
+<sect1 id="performance-counters-programming">
+<title>Programming the performance counter registers</title>
+
+<para>
+We have described how the user interface fills in the desired
+configuration of the counters and transmits the information to the
+kernel. It is the job of the <function>-&gt;setup()</function> method
+to actually program the performance counter registers. Clearly, the
+details of how this is done is architecture-specific; it is also
+model-specific on many architectures. For example, i386 provides methods
+for each model type that programs the counter registers correctly
+(see the <filename>op_model_*</filename> files in
+<filename>arch/i386/oprofile</filename> for the details). The method
+reads the values stored in the virtual oprofilefs files and programs
+the registers appropriately, ready for starting the actual profiling
+session.
+</para>
+<para>
+The architecture-specific drivers make sure to save the old register
+settings before doing OProfile setup. They are restored when OProfile
+shuts down. This is useful, for example, on i386, where the NMI watchdog
+uses the same performance counter registers as OProfile; they cannot
+run concurrently, but OProfile makes sure to restore the setup it found
+before it was running.
+</para>
+<para>
+In addition to programming the counter registers themselves, other setup
+is often necessary. For example, on i386, the local APIC needs
+programming in order to make the counter's overflow interrupt appear as
+an NMI (non-maskable interrupt). This allows sampling (and therefore
+profiling) of regions where "normal" interrupts are masked, enabling
+more reliable profiles.
+</para>
+
+<sect2 id="performance-counters-start">
+<title>Starting and stopping the counters</title>
+<para>
+Initiating a profiling session is done via writing an ASCII '1'
+to the file <filename>/dev/oprofile/enable</filename>. This sets up the
+core, and calls into the architecture-specific driver to actually
+enable each configured counter. Again, the details of how this is
+done is model-specific (for example, the Athlon models can disable
+or enable on a per-counter basis, unlike the PPro models).
+</para>
+</sect2>
+
+<sect2>
+<title>IA64 and perfmon</title>
+<para>
+The IA64 architecture provides a different interface from the other
+architectures, using the existing perfmon driver. Register programming
+is handled entirely in user-space (see
+<filename>daemon/opd_perfmon.c</filename> for the details). A process
+is forked for each CPU, which creates a perfmon context and sets the
+counter registers appropriately via the
+<function>sys_perfmonctl</function> interface. In addition, the actual
+initiation and termination of the profiling session is handled via the
+same interface using <constant>PFM_START</constant> and
+<constant>PFM_STOP</constant>. On IA64, then, there are no oprofilefs
+files for the performance counters, as the kernel driver does not
+program the registers itself.
+</para>
+<para>
+Instead, the perfmon driver for OProfile simply registers with the
+OProfile core with an OProfile-specific UUID. During a profiling
+session, the perfmon core calls into the OProfile perfmon driver and
+samples are registered with the OProfile core itself as usual (with
+<function>oprofile_add_sample()</function>).
+</para>
+</sect2>
+
+</sect1>
+
+</chapter>
+
+<chapter id="collecting-samples">
+<title>Collecting and processing samples</title>
+
+<sect1 id="receiving-interrupts">
+<title>Receiving interrupts</title>
+<para>
+Naturally, how the overflow interrupts are received is specific
+to the hardware architecture, unless we are in "timer" mode, where the
+logging routine is called directly from the standard kernel timer
+interrupt handler.
+</para>
+<para>
+On the i386 architecture, the local APIC is programmed such that when a
+counter overflows (that is, it receives an event that causes an integer
+overflow of the register value to zero), an NMI is generated. This calls
+into the general handler <function>do_nmi()</function>; because OProfile
+has registered itself as capable of handling NMI interrupts, this will
+call into the OProfile driver code in
+<filename>arch/i386/oprofile</filename>. Here, the saved PC value (the
+CPU saves the register set at the time of interrupt on the stack
+available for inspection) is extracted, and the counters are examined to
+find out which one generated the interrupt. Also determined is whether
+the system was inside kernel or user space at the time of the interrupt.
+These three pieces of information are then forwarded onto the OProfile
+core via <function>oprofile_add_sample()</function>. Finally, the
+counter values are reset to the chosen count value, to ensure another
+interrupt happens after another N events have occurred. Other
+architectures behave in a similar manner.
+</para>
+</sect1>
+ 
+<sect1 id="core-structure">
+<title>Core data structures</title>
+<para>
+Before considering what happens when we log a sample, we shall digress
+for a moment and look at the general structure of the data collection
+system.
+</para>
+<para>
+OProfile maintains a small buffer for storing the logged samples for
+each CPU on the system. Only this buffer is altered when we actually log
+a sample (remember, we may still be in an NMI context, so no locking is
+possible). The buffer is managed by a two-handed system; the "head"
+iterator dictates where the next sample data should be placed in the
+buffer. Of course, overflow of the buffer is possible, in which case
+the sample is discarded.
+</para>
+<para>
+It is critical to remember that at this point, the PC value is an
+absolute value, and is therefore only meaningful in the context of which
+task it was logged against. Thus, these per-CPU buffers also maintain
+details of which task each logged sample is for, as described in the
+next section. In addition, we store whether the sample was in kernel
+space or user space (on some architectures and configurations, the address
+space is not sub-divided neatly at a specific PC value, so we must store
+this information).
+</para>
+<para>
+As well as these small per-CPU buffers, we have a considerably larger
+single buffer. This holds the data that is eventually copied out into
+the OProfile daemon. On certain system events, the per-CPU buffers are
+processed and entered (in mutated form) into the main buffer, known in
+the source as the "event buffer". The "tail" iterator indicates the
+point from which the CPU may be read, up to the position of the "head"
+iterator. This provides an entirely lock-free method for extracting data
+from the CPU buffers. This process is described in detail later in this chapter.
+</para>
+<figure><title>The OProfile buffers</title>
+<graphic fileref="buffers.png" />
+</figure>
+</sect1>
+
+<sect1 id="logging-sample">
+<title>Logging a sample</title>
+<para>
+As mentioned, the sample is logged into the buffer specific to the
+current CPU. The CPU buffer is a simple array of pairs of unsigned long
+values; for a sample, they hold the PC value and the counter for the
+sample. (The counter value is later used to translate back into the relevant
+event type the counter was programmed to).
+</para>
+<para>
+In addition to logging the sample itself, we also log task switches.
+This is simply done by storing the address of the last task to log a
+sample on that CPU in a data structure, and writing a task switch entry
+into the buffer if the new value of <function>current()</function> has
+changed. Note that later we will directly de-reference this pointer;
+this imposes certain restrictions on when and how the CPU buffers need
+to be processed.
+</para>
+<para>
+Finally, as mentioned, we log whether we have changed between kernel and
+userspace using a similar method. Both of these variables
+(<varname>last_task</varname> and <varname>last_is_kernel</varname>) are
+reset when the CPU buffer is read.
+</para>
+</sect1>
+
+<sect1 id="logging-stack">
+<title>Logging stack traces</title>
+<para>
+OProfile can also provide statistical samples of call chains (on x86). To
+do this, at sample time, the frame pointer chain is traversed, recording
+the return address for each stack frame. This will only work if the code
+was compiled with frame pointers, but we're careful to abort the
+traversal if the frame pointer appears bad. We store the set of return
+addresses straight into the CPU buffer. Note that, since this traversal
+is keyed off the standard sample interrupt, the number of times a
+function appears in a stack trace is not an indicator of how many times
+the call site was executed: rather, it's related to the number of
+samples we took where that call site was involved. Thus, the results for
+stack traces are not necessarily proportional to the call counts:
+typical programs will have many <function>main()</function> samples.
+</para>
+</sect1>
+
+<sect1 id="synchronising-buffers">
+<title>Synchronising the CPU buffers to the event buffer</title>
+<!-- FIXME: update when percpu patch goes in -->
+<para>
+At some point, we have to process the data in each CPU buffer and enter
+it into the main (event) buffer. The file
+<filename>buffer_sync.c</filename> contains the relevant code. We
+periodically (currently every <constant>HZ</constant>/4 jiffies) start
+the synchronisation process. In addition, we process the buffers on
+certain events, such as an application calling
+<function>munmap()</function>. This is particularly important for
+<function>exit()</function> - because the CPU buffers contain pointers
+to the task structure, if we don't process all the buffers before the
+task is actually destroyed and the task structure freed, then we could
+end up trying to dereference a bogus pointer in one of the CPU buffers.
+</para>
+<para>
+We also add a notification when a kernel module is loaded; this is so
+that user-space can re-read <filename>/proc/modules</filename> to
+determine the load addresses of kernel module text sections. Without
+this notification, samples for a newly-loaded module could get lost or
+be attributed to the wrong module.
+</para>
+<para>
+The synchronisation itself works in the following manner: first, mutual
+exclusion on the event buffer is taken. Remember, we do not need to do
+that for each CPU buffer, as we only read from the tail iterator (whilst
+interrupts might be arriving at the same buffer, but they will write to
+the position of the head iterator, leaving previously written entries
+intact). Then, we process each CPU buffer in turn. A CPU switch
+notification is added to the buffer first (for
+<option>--separate=cpu</option> support). Then the processing of the
+actual data starts.
+</para>
+<para>
+As mentioned, the CPU buffer consists of task switch entries and the
+actual samples. When the routine <function>sync_buffer()</function> sees
+a task switch, the process ID and process group ID are recorded into the
+event buffer, along with a dcookie (see below) identifying the
+application binary (e.g. <filename>/bin/bash</filename>). The
+<varname>mmap_sem</varname> for the task is then taken, to allow safe
+iteration across the tasks' list of mapped areas. Each sample is then
+processed as described in the next section.
+</para>
+<para>
+After a buffer has been read, the tail iterator is updated to reflect
+how much of the buffer was processed. Note that when we determined how
+much data there was to read in the CPU buffer, we also called
+<function>cpu_buffer_reset()</function> to reset
+<varname>last_task</varname> and <varname>last_is_kernel</varname>, as
+we've already mentioned. During the processing, more samples may have
+been arriving in the CPU buffer; this is OK because we are careful to
+only update the tail iterator to how much we actually read - on the next
+buffer synchronisation, we will start again from that point.
+</para>
+</sect1>
+
+<sect1 id="dentry-cookies">
+<title>Identifying binary images</title>
+<para>
+In order to produce useful profiles, we need to be able to associate a
+particular PC value sample with an actual ELF binary on the disk. This
+leaves us with the problem of how to export this information to
+user-space. We create unique IDs that identify a particular directory
+entry (dentry), and write those IDs into the event buffer. Later on,
+the user-space daemon can call the <function>lookup_dcookie</function>
+system call, which looks up the ID and fills in the full path of
+the binary image in the buffer user-space passes in. These IDs are
+maintained by the code in <filename>fs/dcookies.c</filename>; the
+cache lasts for as long as the daemon has the event buffer open.
+</para>
+</sect1>
+
+<sect1 id="finding-dentry">
+<title>Finding a sample's binary image and offset</title>
+<para>
+We haven't yet described how we process the absolute PC value into
+something usable by the user-space daemon. When we find a sample entered
+into the CPU buffer, we traverse the list of mappings for the task
+(remember, we will have seen a task switch earlier, so we know which
+task's lists to look at). When a mapping is found that contains the PC
+value, we look up the mapped file's dentry in the dcookie cache. This
+gives the dcookie ID that will uniquely identify the mapped file. Then
+we alter the absolute value such that it is an offset from the start of
+the file being mapped (the mapping need not start at the start of the
+actual file, so we have to consider the offset value of the mapping). We
+store this dcookie ID into the event buffer; this identifies which
+binary the samples following it are against.
+In this manner, we have converted a PC value, which has transitory
+meaning only, into a static offset value for later processing by the
+daemon.
+</para>
+<para>
+We also attempt to avoid the relatively expensive lookup of the dentry
+cookie value by storing the cookie value directly into the dentry
+itself; then we can simply derive the cookie value immediately when we
+find the correct mapping.
+</para>
+</sect1>
+
+</chapter>
+
+<chapter id="sample-files">
+<title>Generating sample files</title>
+
+<sect1 id="processing-buffer">
+<title>Processing the buffer</title>
+
+<para>
+Now we can move onto user-space in our description of how raw interrupt
+samples are processed into useful information. As we described in
+previous sections, the kernel OProfile driver creates a large buffer of
+sample data consisting of offset values, interspersed with
+notification of changes in context. These context changes indicate how
+following samples should be attributed, and include task switches, CPU
+changes, and which dcookie the sample value is against. By processing
+this buffer entry-by-entry, we can determine where the samples should
+be accredited to. This is particularly important when using the 
+<option>--separate</option>.
+</para>
+<para>
+The file <filename>daemon/opd_trans.c</filename> contains the basic routine
+for the buffer processing. The <varname>struct transient</varname>
+structure is used to hold changes in context. Its members are modified
+as we process each entry; it is passed into the routines in
+<filename>daemon/opd_sfile.c</filename> for actually logging the sample
+to a particular sample file (which will be held in
+<filename>$SESSION_DIR/samples/current</filename>).
+</para>
+<para>
+The buffer format is designed for conciseness, as high sampling rates
+can easily generate a lot of data. Thus, context changes are prefixed
+by an escape code, identified by <function>is_escape_code()</function>.
+If an escape code is found, the next entry in the buffer identifies
+what type of context change is being read. These are handed off to
+various handlers (see the <varname>handlers</varname> array), which
+modify the transient structure as appropriate. If it's not an escape
+code, then it must be a PC offset value, and the very next entry will
+be the numeric hardware counter. These values are read and recorded
+in the transient structure; we then do a lookup to find the correct
+sample file, and log the sample, as described in the next section.
+</para>
+
+<sect2 id="handling-kernel-samples">
+<title>Handling kernel samples</title>
+
+<para>
+Samples from kernel code require a little special handling. Because
+the binary text which the sample is against does not correspond to
+any file that the kernel directly knows about, the OProfile driver
+stores the absolute PC value in the buffer, instead of the file offset.
+Of course, we need an offset against some particular binary. To handle
+this, we keep a list of loaded modules by parsing
+<filename>/proc/modules</filename> as needed. When a module is loaded,
+a notification is placed in the OProfile buffer, and this triggers a
+re-read. We store the module name, and the loading address and size.
+This is also done for the main kernel image, as specified by the user.
+The absolute PC value is matched against each address range, and
+modified into an offset when the matching module is found. See 
+<filename>daemon/opd_kernel.c</filename> for the details.
+</para>
+
+</sect2>
+
+
+</sect1>
+
+<sect1 id="sample-file-generation">
+<title>Locating and creating sample files</title>
+
+<para>
+We have a sample value and its satellite data stored in a
+<varname>struct transient</varname>, and we must locate an
+actual sample file to store the sample in, using the context
+information in the transient structure as a key. The transient data to
+sample file lookup is handled in
+<filename>daemon/opd_sfile.c</filename>. A hash is taken of the
+transient values that are relevant (depending upon the setting of
+<option>--separate</option>, some values might be irrelevant), and the
+hash value is used to lookup the list of currently open sample files.
+Of course, the sample file might not be found, in which case we need
+to create and open it.
+</para>
+<para>
+OProfile uses a rather complex scheme for naming sample files, in order
+to make selecting relevant sample files easier for the post-profiling
+utilities. The exact details of the scheme are given in
+<filename>oprofile-tests/pp_interface</filename>, but for now it will
+suffice to remember that the filename will include only relevant
+information for the current settings, taken from the transient data. A
+fully-specified filename looks something like :
+</para>
+<computeroutput>
+/var/lib/oprofile/samples/current/{root}/usr/bin/xmms/{dep}/{root}/lib/tls/libc-2.3.2.so/CPU_CLK_UNHALTED.100000.0.28082.28089.0
+</computeroutput>
+<para>
+It should be clear that this identifies such information as the
+application binary, the dependent (library) binary, the hardware event,
+and the process and thread ID. Typically, not all this information is
+needed, in which cases some values may be replaced with the token
+<filename>all</filename>.
+</para>
+<para>
+The code that generates this filename and opens the file is found in
+<filename>daemon/opd_mangling.c</filename>. You may have realised that
+at this point, we do not have the binary image file names, only the
+dcookie values. In order to determine a file name, a dcookie value is
+looked up in the dcookie cache. This is to be found in
+<filename>daemon/opd_cookie.c</filename>. Since dcookies are both
+persistent and unique during a sampling session, we can cache the
+values. If the value is not found in the cache, then we ask the kernel
+to do the lookup from value to file name for us by calling
+<function>lookup_dcookie()</function>. This looks up the value in a
+kernel-side cache (see <filename>fs/dcookies.c</filename>) and returns
+the fully-qualified file name to userspace.
+</para>
+
+</sect1>
+
+<sect1 id="sample-file-writing">
+<title>Writing data to a sample file</title>
+
+<para>
+Each specific sample file is a hashed collection, where the key is
+the PC offset from the transient data, and the value is the number of
+samples recorded against that offset. The files are
+<function>mmap()</function>ed into the daemon's memory space. The code
+to actually log the write against the sample file can be found in
+<filename>libdb/</filename>.
+</para>
+<para>
+For recording stack traces, we have a more complicated sample filename
+mangling scheme that allows us to identify cross-binary calls. We use
+the same sample file format, where the key is a 64-bit value composed
+from the from,to pair of offsets.
+</para>
+
+</sect1>
+
+</chapter>
+
+<chapter id="output">
+<title>Generating useful output</title>
+
+<para>
+All of the tools used to generate human-readable output have to take
+roughly the same steps to collect the data for processing. First, the
+profile specification given by the user has to be parsed. Next, a list
+of sample files matching the specification has to obtained. Using this
+list, we need to locate the binary file for each sample file, and then
+use them to extract meaningful data, before a final collation and
+presentation to the user.
+</para>
+
+<sect1 id="profile-specification">
+<title>Handling the profile specification</title>
+
+<para>
+The profile specification presented by the user is parsed in
+the function <function>profile_spec::create()</function>. This
+creates an object representing the specification. Then we
+use <function>profile_spec::generate_file_list()</function>
+to search for all sample files and match them against the
+<varname>profile_spec</varname>.
+</para>
+
+<para>
+To enable this matching process to work, the attributes of
+each sample file is encoded in its filename. This is a low-tech
+approach to matching specifications against candidate sample
+files, but it works reasonably well. A typical sample file
+might look like these:
+</para>
+<screen>
+/var/lib/oprofile/samples/current/{root}/bin/ls/{dep}/{root}/bin/ls/{cg}/{root}/bin/ls/CPU_CLK_UNHALTED.100000.0.all.all.all
+/var/lib/oprofile/samples/current/{root}/bin/ls/{dep}/{root}/bin/ls/CPU_CLK_UNHALTED.100000.0.all.all.all
+/var/lib/oprofile/samples/current/{root}/bin/ls/{dep}/{root}/bin/ls/CPU_CLK_UNHALTED.100000.0.7423.7424.0
+/var/lib/oprofile/samples/current/{kern}/r128/{dep}/{kern}/r128/CPU_CLK_UNHALTED.100000.0.all.all.all
+</screen>
+<para>
+This looks unnecessarily complex, but it's actually fairly simple. First
+we have the session of the sample, by default located here
+<filename>/var/lib/oprofile/samples/current</filename>. This location
+can be changed by specifying the --session-dir option at command-line.
+This session could equally well be inside an archive from <command>oparchive</command>.
+Next we have one of the tokens <filename>{root}</filename> or
+<filename>{kern}</filename>. <filename>{root}</filename> indicates
+that the binary is found on a file system, and we will encode its path
+in the next section (e.g. <filename>/bin/ls</filename>).
+<filename>{kern}</filename> indicates a kernel module - on 2.6 kernels
+the path information is not available from the kernel, so we have to
+special-case kernel modules like this; we encode merely the name of the
+module as loaded.
+</para>
+<para>
+Next there is a <filename>{dep}</filename> token, indicating another
+token/path which identifies the dependent binary image. This is used even for
+the "primary" binary (i.e. the one that was
+<function>execve()</function>d), as it simplifies processing. Finally,
+if this sample file is a normal flat profile, the actual file is next in
+the path. If it's a call-graph sample file, we need one further
+specification, to allow us to identify cross-binary arcs in the call
+graph.
+</para>
+<para>
+The actual sample file name is dot-separated, where the fields are, in
+order: event name, event count, unit mask, task group ID, task ID, and
+CPU number.
+</para>
+<para>
+This sample file can be reliably parsed (with
+<function>parse_filename()</function>) into a
+<varname>filename_spec</varname>. Finally, we can check whether to
+include the sample file in the final results by comparing this
+<varname>filename_spec</varname> against the
+<varname>profile_spec</varname> the user specified (for the interested,
+see <function>valid_candidate()</function> and
+<function>profile_spec::match</function>). Then comes the really
+complicated bit...
+</para>
+
+</sect1>
+
+<sect1 id="sample-file-collating">
+<title>Collating the candidate sample files</title>
+
+<para>
+At this point we have a duplicate-free list of sample files we need
+to process. But first we need to do some further arrangement: we
+need to classify each sample file, and we may also need to "invert"
+the profiles.
+</para>
+
+<sect2 id="sample-file-classifying">
+<title>Classifying sample files</title>
+
+<para>
+It's possible for utilities like <command>opreport</command> to show 
+data in columnar format: for example, we might want to show the results
+of two threads within a process side-by-side. To do this, we need
+to classify each sample file into classes - the classes correspond
+with each <command>opreport</command> column. The function that handles
+this is <function>arrange_profiles()</function>. Each sample file
+is added to a particular class. If the sample file is the first in
+its class, a template is generated from the sample file. Each template
+describes a particular class (thus, in our example above, each template
+will have a different thread ID, and this uniquely identifies each
+class).
+</para>
+
+<para>
+Each class has a list of "profile sets" matching that class's template.
+A profile set is either a profile of the primary binary image, or any of
+its dependent images. After all sample files have been listed in one of
+the profile sets belonging to the classes, we have to name each class and
+perform error-checking. This is done by
+<function>identify_classes()</function>; each class is checked to ensure
+that its "axis" is the same as all the others. This is needed because
+<command>opreport</command> can't produce results in 3D format: we can
+only differ in one aspect, such as thread ID or event name.
+</para>
+
+</sect2>
+
+<sect2 id="sample-file-inverting">
+<title>Creating inverted profile lists</title>
+
+<para>
+Remember that if we're using certain profile separation options, such as
+"--separate=lib", a single binary could be a dependent image to many
+different binaries. For example, the C library image would be a
+dependent image for most programs that have been profiled. As it
+happens, this can cause severe performance problems: without some
+re-arrangement, these dependent binary images would be opened each
+time we need to process sample files for each program.
+</para>
+
+<para>
+The solution is to "invert" the profiles via
+<function>invert_profiles()</function>. We create a new data structure
+where the dependent binary is first, and the primary binary images using
+that dependent binary are listed as sub-images. This helps our
+performance problem, as now we only need to open each dependent image
+once, when we process the list of inverted profiles.
+</para>
+
+</sect2>
+
+</sect1>
+
+<sect1 id="generating-profile-data">
+<title>Generating profile data</title>
+
+<para>
+Things don't get any simpler at this point, unfortunately. At this point
+we've collected and classified the sample files into the set of inverted
+profiles, as described in the previous section. Now we need to process
+each inverted profile and make something of the data. The entry point
+for this is <function>populate_for_image()</function>.
+</para>
+
+<sect2 id="bfd">
+<title>Processing the binary image</title>
+<para>
+The first thing we do with an inverted profile is attempt to open the
+binary image (remember each inverted profile set is only for one binary
+image, but may have many sample files to process). The
+<varname>op_bfd</varname> class provides an abstracted interface to
+this; internally it uses <filename>libbfd</filename>. The main purpose
+of this class is to process the symbols for the binary image; this is
+also where symbol filtering happens. This is actually quite tricky, but
+should be clear from the source.
+</para>
+</sect2>
+
+<sect2 id="processing-sample-files">
+<title>Processing the sample files</title>
+<para>
+The class <varname>profile_container</varname> is a hold-all that
+contains all the processed results. It is a container of
+<varname>profile_t</varname> objects. The
+<function>add_sample_files()</function> method uses
+<filename>libdb</filename> to open the given sample file and add the
+key/value types to the <varname>profile_t</varname>. Once this has been
+done, <function>profile_container::add()</function> is passed the
+<varname>profile_t</varname> plus the <varname>op_bfd</varname> for
+processing.
+</para>
+<para>
+<function>profile_container::add()</function> walks through the symbols
+collected in the <varname>op_bfd</varname>.
+<function>op_bfd::get_symbol_range()</function> gives us the start and
+end of the symbol as an offset from the start of the binary image,
+then we interrogate the <varname>profile_t</varname> for the relevant samples
+for that offset range. We create a <varname>symbol_entry</varname>
+object for this symbol and fill it in. If needed, here we also collect
+debug information from the <varname>op_bfd</varname>, and possibly
+record the detailed sample information (as used by <command>opreport
+-d</command> and <command>opannotate</command>).
+Finally the <varname>symbol_entry</varname> is added to
+a private container of <varname>profile_container</varname> - this
+<varname>symbol_container</varname> holds all such processed symbols.
+</para>
+</sect2>
+
+</sect1>
+
+<sect1 id="generating-output">
+<title>Generating output</title>
+
+<para>
+After the processing described in the previous section, we've now got
+full details of what we need to output stored in the
+<varname>profile_container</varname> on a symbol-by-symbol basis. To
+produce output, we need to replay that data and format it suitably.
+</para>
+<para>
+<command>opreport</command> first asks the
+<varname>profile_container</varname> for a
+<varname>symbol_collection</varname> (this is also where thresholding
+happens).
+This is sorted, then a
+<varname>opreport_formatter</varname> is initialised.
+This object initialises a set of field formatters as requested. Then
+<function>opreport_formatter::output()</function> is called. This
+iterates through the (sorted) <varname>symbol_collection</varname>;
+for each entry, the selected fields (as set by the
+<varname>format_flags</varname> options) are output by calling the
+field formatters, with the <varname>symbol_entry</varname> passed in.
+</para>
+
+</sect1>
+
+</chapter>
+
+<chapter id="ext">
+<title>Extended Feature Interface</title>
+
+<sect1 id="ext-intro">
+<title>Introduction</title>
+
+<para>
+The Extended Feature Interface is a standard callback interface 
+designed to allow extension to the OProfile daemon's sample processing. 
+Each feature defines a set of callback handlers which can be enabled or 
+disabled through the OProfile daemon's command-line option.
+This interface can be used to implement support for architecture-specific
+features or features not commonly used by general OProfile users. 
+</para>
+
+</sect1>
+
+<sect1 id="ext-name-and-handlers">
+<title>Feature Name and Handlers</title>
+
+<para>
+Each extended feature has an entry in the <varname>ext_feature_table</varname>
+in <filename>opd_extended.cpp</filename>. Each entry contains a feature name,
+and a corresponding set of handlers. Feature name is a unique string, which is
+used to identify a feature in the table. Each feature provides a set
+of handlers, which will be executed by the OProfile daemon from pre-determined
+locations to perform certain tasks. At runtime, the OProfile daemon calls a feature
+handler wrapper from one of the predetermined locations to check whether
+an extended feature is enabled, and whether a particular handler exists.
+Only the handlers of the enabled feature will be executed.
+</para>
+
+</sect1>
+
+<sect1 id="ext-enable">
+<title>Enabling Features</title>
+
+<para>
+Each feature is enabled using the OProfile daemon (oprofiled) command-line
+option "--ext-feature=&lt;extended-feature-name&gt;:[args]". The
+"extended-feature-name" is used to determine the feature to be enabled.
+The optional "args" is passed into the feature-specific initialization handler
+(<function>ext_init</function>). Currently, only one extended feature can be
+enabled at a time.
+</para>
+
+</sect1>
+
+<sect1 id="ext-types-of-handlers">
+<title>Type of Handlers</title>
+
+<para>
+Each feature is responsible for providing its own set of handlers.
+Types of handler are:
+</para>
+
+<sect2 id="ext_init">
+<title>ext_init Handler</title>
+
+<para>
+"ext_init" handles initialization of an extended feature. It takes
+"args" parameter which is passed in through the "oprofiled --ext-feature=&lt;
+extended-feature-name&gt;:[args]". This handler is executed in the function
+<function>opd_options()</function> in the file <filename>daemon/oprofiled.c
+</filename>.
+</para>
+
+<note>
+<para>
+The ext_init handler is required for all features.
+</para>
+</note>
+
+</sect2>
+
+<sect2 id="ext_print_stats">
+<title>ext_print_stats Handler</title>
+
+<para>
+"ext_print_stats" handles the extended feature statistics report. It adds
+a new section in the OProfile daemon statistics report, which is normally
+outputed to the file
+<filename>/var/lib/oprofile/samples/oprofiled.log</filename>.
+This handler is executed in the function <function>opd_print_stats()</function>
+in the file <filename>daemon/opd_stats.c</filename>.
+</para>
+
+</sect2>
+
+<sect2 id="ext_sfile_handlers">
+<title>ext_sfile Handler</title>
+
+<para>
+"ext_sfile" contains a set of handlers related to operations on the extended
+sample files (sample files for events related to extended feature).
+These operations include <function>create_sfile()</function>,
+<function>sfile_dup()</function>, <function>close_sfile()</function>,
+<function>sync_sfile()</function>, and <function>get_file()</function>
+as defined in <filename>daemon/opd_sfile.c</filename>.
+An additional field, <varname>odb_t * ext_file</varname>, is added to the 
+<varname>struct sfile</varname> for storing extended sample files
+information. 
+
+</para>
+
+</sect2>
+
+</sect1>
+
+<sect1 id="ext-implementation">
+<title>Extended Feature Reference Implementation</title>
+
+<sect2 id="ext-ibs">
+<title>Instruction-Based Sampling (IBS)</title>
+
+<para>
+An example of extended feature implementation can be seen by
+examining the AMD Instruction-Based Sampling support.
+</para>
+
+<sect3 id="ibs-init">
+<title>IBS Initialization</title>
+
+<para>
+Instruction-Based Sampling (IBS) is a new performance measurement technique
+available on AMD Family 10h processors. Enabling IBS profiling is done simply
+by specifying IBS performance events through the "--event=" options.
+</para>
+
+<screen>
+opcontrol --event=IBS_FETCH_XXX:&lt;count&gt;:&lt;um&gt;:&lt;kernel&gt;:&lt;user&gt;
+opcontrol --event=IBS_OP_XXX:&lt;count&gt;:&lt;um&gt;:&lt;kernel&gt;:&lt;user&gt;
+
+Note: * Count and unitmask for all IBS fetch events must be the same,
+	as do those for IBS op.
+</screen>
+
+<para>
+IBS performance events are listed in <function>opcontrol --list-events</function>.
+When users specify these events, opcontrol verifies them using ophelp, which
+checks for the <varname>ext:ibs_fetch</varname> or <varname>ext:ibs_op</varname>
+tag in <filename>events/x86-64/family10/events</filename> file.
+Then, it configures the driver interface (/dev/oprofile/ibs_fetch/... and
+/dev/oprofile/ibs_op/...) and starts the OProfile daemon as follows.
+</para>
+
+<screen>
+oprofiled \
+    --ext-feature=ibs:\
+	fetch:&lt;IBS_FETCH_EVENT1&gt;,&lt;IBS_FETCH_EVENT2&gt;,...,:&lt;IBS fetch count&gt;:&lt;IBS Fetch um&gt;|\
+	op:&lt;IBS_OP_EVENT1&gt;,&lt;IBS_OP_EVENT2&gt;,...,:&lt;IBS op count&gt;:&lt;IBS op um&gt;
+</screen>
+
+<para>
+Here, the OProfile daemon parses the <varname>--ext-feature</varname>
+option and checks the feature name ("ibs") before calling the 
+the initialization function to handle the string
+containing IBS events, counts, and unitmasks.
+Then, it stores each event in the IBS virtual-counter table
+(<varname>struct opd_event ibs_vc[OP_MAX_IBS_COUNTERS]</varname>) and
+stores the event index in the IBS Virtual Counter Index (VCI) map
+(<varname>ibs_vci_map[OP_MAX_IBS_COUNTERS]</varname>) with IBS event value
+as the map key.
+</para>
+</sect3>
+
+<sect3 id="ibs-data-processing">
+<title>IBS Data Processing</title>
+
+<para>
+During a profile session, the OProfile daemon identifies IBS samples in the 
+event buffer using the <varname>"IBS_FETCH_CODE"</varname> or 
+<varname>"IBS_OP_CODE"</varname>. These codes trigger the handlers 
+<function>code_ibs_fetch_sample()</function> or 
+<function>code_ibs_op_sample()</function> listed in the
+<varname>handler_t handlers[]</varname> vector in 
+<filename>daemon/opd_trans.c </filename>. These handlers are responsible for
+processing IBS samples and translate them into IBS performance events.
+</para>
+
+<para>
+Unlike traditional performance events, each IBS sample can be derived into 
+multiple IBS performance events. For each event that the user specifies,
+a combination of bits from Model-Specific Registers (MSR) are checked
+against the bitmask defining the event. If the condition is met, the event
+will then be recorded. The derivation logic is in the files
+<filename>daemon/opd_ibs_macro.h</filename> and
+<filename>daemon/opd_ibs_trans.[h,c]</filename>. 
+</para>
+
+</sect3>
+
+<sect3 id="ibs-sample-file">
+<title>IBS Sample File</title>
+
+<para>
+Traditionally, sample file information <varname>(odb_t)</varname> is stored
+in the <varname>struct sfile::odb_t file[OP_MAX_COUNTER]</varname>.
+Currently, <varname>OP_MAX_COUNTER</varname> is 8 on non-alpha, and 20 on
+alpha-based system. Event index (the counter number on which the event
+is configured) is used to access the corresponding entry in the array.
+Unlike the traditional performance event, IBS does not use the actual
+counter registers (i.e. <filename>/dev/oprofile/0,1,2,3</filename>).
+Also, the number of performance events generated by IBS could be larger than
+<varname>OP_MAX_COUNTER</varname> (currently upto 13 IBS-fetch and 46 IBS-op 
+events). Therefore IBS requires a special data structure and sfile
+handlers (<varname>struct opd_ext_sfile_handlers</varname>) for managing
+IBS sample files. IBS-sample-file information is stored in a memory 
+allocated by handler <function>ibs_sfile_create()</function>, which can
+be accessed through <varname>struct sfile::odb_t * ext_files</varname>.
+</para>
+
+</sect3>
+
+</sect2>
+
+</sect1>
+
+</chapter>
+
+<glossary id="glossary">
+<title>Glossary of OProfile source concepts and types</title>
+
+<glossentry><glossterm>application image</glossterm>
+<glossdef><para>
+The primary binary image used by an application. This is derived
+from the kernel and corresponds to the binary started upon running
+an application: for example, <filename>/bin/bash</filename>.
+</para></glossdef></glossentry>
+
+<glossentry><glossterm>binary image</glossterm>
+<glossdef><para>
+An ELF file containing executable code: this includes kernel modules,
+the kernel itself (a.k.a. <filename>vmlinux</filename>), shared libraries,
+and application binaries.
+</para></glossdef></glossentry>
+
+<glossentry><glossterm>dcookie</glossterm>
+<glossdef><para>
+Short for "dentry cookie". A unique ID that can be looked up to provide
+the full path name of a binary image.
+</para></glossdef></glossentry>
+
+<glossentry><glossterm>dependent image</glossterm>
+<glossdef><para>
+A binary image that is dependent upon an application, used with
+per-application separation. Most commonly, shared libraries. For example,
+if <filename>/bin/bash</filename> is running and we take
+some samples inside the C library itself due to <command>bash</command>
+calling library code, then the image <filename>/lib/libc.so</filename>
+would be dependent upon <filename>/bin/bash</filename>.
+</para></glossdef></glossentry>
+
+<glossentry><glossterm>merging</glossterm>
+<glossdef><para>
+This refers to the ability to merge several distinct sample files
+into one set of data at runtime, in the post-profiling tools. For example,
+per-thread sample files can be merged into one set of data, because
+they are compatible (i.e. the aggregation of the data is meaningful),
+but it's not possible to merge sample files for two different events,
+because there would be no useful meaning to the results.
+</para></glossdef></glossentry>
+
+<glossentry><glossterm>profile class</glossterm>
+<glossdef><para>
+A collection of profile data that has been collected under the same
+class template. For example, if we're using <command>opreport</command>
+to show results after profiling with two performance counters enabled
+profiling <constant>DATA_MEM_REFS</constant> and <constant>CPU_CLK_UNHALTED</constant>,
+there would be two profile classes, one for each event. Or if we're on
+an SMP system and doing per-cpu profiling, and we request
+<command>opreport</command> to show results for each CPU side-by-side,
+there would be a profile class for each CPU.
+</para></glossdef></glossentry>
+
+<glossentry><glossterm>profile specification</glossterm>
+<glossdef><para>
+The parameters the user passes to the post-profiling tools that limit
+what sample files are used. This specification is matched against
+the available sample files to generate a selection of profile data.
+</para></glossdef></glossentry>
+
+<glossentry><glossterm>profile template</glossterm>
+<glossdef><para>
+The parameters that define what goes in a particular profile class.
+This includes a symbolic name (e.g. "cpu:1") and the code-usable
+equivalent.
+</para></glossdef></glossentry>
+
+</glossary>
+
+</book>
diff --git a/oprofile-0.9.7/doc/op-jit-devel.html b/oprofile-0.9.7/doc/op-jit-devel.html
new file mode 100644
index 0000000..9823688
--- /dev/null
+++ b/oprofile-0.9.7/doc/op-jit-devel.html
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+    <title>OProfile JIT agent developer guide</title>
+    <meta name="generator" content="DocBook XSL Stylesheets V1.75.2" />
+  </head>
+  <body>
+    <div class="book" title="OProfile JIT agent developer guide">
+      <div class="titlepage">
+        <div>
+          <div>
+            <h1 class="title"><a id="oprofile-devel-guide"></a>OProfile JIT agent developer guide</h1>
+          </div>
+          <div>
+            <div class="authorgroup">
+              <div class="author">
+                <h3 class="author"><span class="firstname">Maynard</span> <span class="surname">Johnson</span></h3>
+                <div class="affiliation">
+                  <div class="address">
+                    <p>
+                      <code class="email">&lt;<a class="email" href="mailto:maynardj@us.ibm.com">maynardj@us.ibm.com</a>&gt;</code>
+                    </p>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div>
+            <p class="copyright">Copyright © 2007 IBM Corporation</p>
+          </div>
+        </div>
+        <hr />
+      </div>
+      <div class="toc">
+        <p>
+          <b>Table of Contents</b>
+        </p>
+        <dl>
+          <dt>
+            <span class="chapter">
+              <a href="#developing">1. Developing a new JIT agent</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#jit-devel-overview">1. Overview</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#jit-interface">2. Implementing JIT support for a new virtual machine</a>
+                </span>
+              </dt>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#jit-api">2. The JIT support API</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#op_open_agent">1. op_open_agent</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#op_close_agent">2. op_close_agent</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#op_write_native_code">3. op_write_native_code</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#op_write_debug_line_info">4. op_write_debug_line_info</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#op_unload_native_code">5. op_unload_native_code</a>
+                </span>
+              </dt>
+            </dl>
+          </dd>
+        </dl>
+      </div>
+      <div class="chapter" title="Chapter 1. Developing a new JIT agent">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="developing"></a>Chapter 1. Developing a new JIT agent</h2>
+            </div>
+          </div>
+        </div>
+        <div class="toc">
+          <p>
+            <b>Table of Contents</b>
+          </p>
+          <dl>
+            <dt>
+              <span class="sect1">
+                <a href="#jit-devel-overview">1. Overview</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#jit-interface">2. Implementing JIT support for a new virtual machine</a>
+              </span>
+            </dt>
+          </dl>
+        </div>
+        <p>
+	OProfile includes a header file and library that are intended to be used by
+	developers who wish to extend OProfile's JIT support to other non-supported
+	virtual machines.  This developer guide describes these development files and how
+	to use them.
+	</p>
+        <div class="sect1" title="1. Overview">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="jit-devel-overview"></a>1. Overview</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+	OProfile already includes some implementations that use the JIT support,
+	e.g., the Java Virtual Machine Toolkit Interface (JVMTI) library,
+	libjvmti_oprofile.so.  In developing a new implementation, you will
+	likely follow a similar (if not identical) procedure as was used in
+	developing the JVMTI library.  Following are the high level steps to follow:
+	</p>
+          <div class="orderedlist">
+            <ol class="orderedlist" type="1">
+              <li class="listitem">Ensure your virtual machine provides an API that, at minimum,
+	can provide the following information about dynamically compiled code:
+		<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">Notification when compilation occurs</li><li class="listitem">Name of the symbol (i.e., function or class/method, etc.)</li><li class="listitem">Address in anonymous memory where the compiled code was loaded</li><li class="listitem">Length of the compiled code segment</li></ul></div></li>
+              <li class="listitem">Write an agent library that communicates with your VM to obtain
+	compiled code notifications.  Invoke the required functions from opagent.h
+	(<a class="xref" href="#jit-interface" title="2. Implementing JIT support for a new virtual machine">Section 2, &#8220;Implementing JIT support for a new virtual machine&#8221;</a>) and link your library with libopagent.so
+	(installed at <code class="filename">&lt;oprofile_install_dir&gt;/lib/oprofile</code>).
+	</li>
+            </ol>
+          </div>
+          <p>
+
+	</p>
+        </div>
+        <div class="sect1" title="2. Implementing JIT support for a new virtual machine">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="jit-interface"></a>2. Implementing JIT support for a new virtual machine</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+	The JIT support API for OProfile is defined 
+	in <code class="filename">&lt;oprofile-install-dir&gt;/include/opagent.h</code>.
+	Some parts of the API are mandatory for an agent library to use; other
+	parts are optional.  The mandatory functions are shown below.
+	</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+op_agent_t op_open_agent(void);
+
+void op_close_agent(op_agent_t hdl);
+
+int op_write_native_code(op_agent_t hdl, char const * symbol_name,
+                         uint64_t vma, const void * code,
+                         const unsigned int code_size);
+</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+	To implement this part of your library, you must perform the
+	following steps:
+	</p>
+          <div class="orderedlist">
+            <ol class="orderedlist" type="1">
+              <li class="listitem">Implement a function to set up initial communication with the VM.
+	Once communication to the VM is established, your agent library should call
+	<code class="function">op_op_agent()</code> and cache the returned <code class="code">op_agent_t</code> handle for use in
+	future calls.</li>
+              <li class="listitem">Perform any necessary steps to register with the VM to be notified of
+	compiled code load events.  Registration must include a callback function you
+	will implement in the library to handle the compiled code load events.</li>
+              <li class="listitem">The callback function mentioned above must obtain all required
+	information from the VM to pass to libopagent via <code class="function">op_write_native_code()</code>.</li>
+              <li class="listitem">When disconnecting from the VM, your library should call
+	<code class="function">op_agent_close()</code>.</li>
+            </ol>
+          </div>
+          <p>
+	</p>
+          <p>Use of the functions below are optional, depending on the kinds of information your VM
+	can provide to your agent library.  See the JVMTI agent library for an example of how to use
+	these functions.
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+int op_unload_native_code(op_agent_t hdl, uint64_t vma);
+
+int op_write_debug_line_info(op_agent_t hdl, void const * code,
+                             size_t nr_entry,
+                             struct debug_line_info const * compile_map);
+</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+	</p>
+          <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>While the libopagent functions are thread-safe, you should not use them in
+	signal handlers.
+	</div>
+        </div>
+      </div>
+      <div class="chapter" title="Chapter 2. The JIT support API">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="jit-api"></a>Chapter 2. The JIT support API</h2>
+            </div>
+          </div>
+        </div>
+        <div class="toc">
+          <p>
+            <b>Table of Contents</b>
+          </p>
+          <dl>
+            <dt>
+              <span class="sect1">
+                <a href="#op_open_agent">1. op_open_agent</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#op_close_agent">2. op_close_agent</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#op_write_native_code">3. op_write_native_code</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#op_write_debug_line_info">4. op_write_debug_line_info</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#op_unload_native_code">5. op_unload_native_code</a>
+              </span>
+            </dt>
+          </dl>
+        </div>
+        <p>
+	This chapter describes the JIT support API.  See opagent.h for more details.
+        </p>
+        <div class="sect1" title="1. op_open_agent">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="op_open_agent"></a>1. op_open_agent</h2>
+              </div>
+            </div>
+          </div>
+          <div class="funcsynopsis">Initializes the agent library.
+<pre class="funcsynopsisinfo">#include &lt;opagent.h&gt;</pre><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">op_agent_t <b class="fsfunc">op_open_agent</b>(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>void</code>;</div><div class="funcprototype-spacer"> </div></div>
+          <div class="note" title="Description" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Description</h3>
+This function must be called by agents before any other function.
+Creates and opens a JIT dump file in <code class="filename">/var/lib/oprofile/jitdump</code>
+using the naming convention <code class="filename">&lt;process_id&gt;.dump</code>.
+</div>
+          <div class="note" title="Parameters" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Parameters</h3>
+None
+</div>
+          <div class="note" title="Return value" style="margin-left: 0.5in; margin-right: 0.5in;">
+            <h3 class="title">Return value</h3>
+            <p>Returns a valid <code class="code">op_agent_t</code> handle or NULL.
+If NULL is returned, <code class="code">errno</code> is set to indicate the nature of the error. For a list
+of possible <code class="code">errno</code> values, see the man pages for:</p>
+            <code class="code">
+stat, creat, gettimeofday, fdopen, fwrite
+</code>
+          </div>
+        </div>
+        <div class="sect1" title="2. op_close_agent">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="op_close_agent"></a>2. op_close_agent</h2>
+              </div>
+            </div>
+          </div>
+          <div class="funcsynopsis">Uninitialize the agent library.
+<pre class="funcsynopsisinfo">#include &lt;opagent.h&gt;</pre><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">int <b class="fsfunc">op_close_agent</b>(</code></td><td><var class="pdparam">hdl</var><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>op_agent_t <var class="pdparam">hdl</var></code>;</div><div class="funcprototype-spacer"> </div></div>
+          <div class="note" title="Description" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Description</h3>
+Frees all resources and closes open file handles.
+</div>
+          <div class="note" title="Parameters" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Parameters</h3><em class="parameter"><code>hdl : </code></em>Handle returned from an earlier call to
+<code class="function">op_open_agent()</code></div>
+          <div class="note" title="Return value" style="margin-left: 0.5in; margin-right: 0.5in;">
+            <h3 class="title">Return value</h3>
+            <p>Returns 0 on success; -1 otherwise. If -1 is returned, <code class="code">errno</code> is set
+to indicate the nature of the error. 
+<code class="code">errno</code> is set to EINVAL if an invalid <code class="code">op_agent_t</code>
+handle is passed. For a list of other possible <code class="code">errno</code> values, see the man pages for:</p>
+            <code class="code">gettimeofday, fwrite</code>
+          </div>
+        </div>
+        <div class="sect1" title="3. op_write_native_code">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="op_write_native_code"></a>3. op_write_native_code</h2>
+              </div>
+            </div>
+          </div>
+          <div class="funcsynopsis">Write information about compiled code to a JIT dump file.
+<pre class="funcsynopsisinfo">#include &lt;opagent.h&gt;</pre><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">int <b class="fsfunc">op_write_native_code</b>(</code></td><td><var class="pdparam">hdl</var>, </td><td> </td></tr><tr><td> </td><td><var class="pdparam">symbol_name</var>, </td><td> </td></tr><tr><td> </td><td><var class="pdparam">vma</var>, </td><td> </td></tr><tr><td> </td><td><var class="pdparam">code</var>, </td><td> </td></tr><tr><td> </td><td><var class="pdparam">code_size</var><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>op_agent_t<var class="pdparam">hdl</var></code>;<br /><code>char const *<var class="pdparam">symbol_name</var></code>;<br /><code>uint64_t<var class="pdparam">vma</var></code>;<br /><code>void const *<var class="pdparam">code</var></code>;<br /><code>const unsigned int<var class="pdparam">code_size</var></code>;</div><div class="funcprototype-spacer"> </div></div>
+          <div class="note" title="Description" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Description</h3>
+Signal the dynamic generation of native code from a virtual machine.
+Writes a JIT dump record to the open JIT dump file using the passed information.
+</div>
+          <div class="note" title="Parameters" style="margin-left: 0.5in; margin-right: 0.5in;">
+            <h3 class="title">Parameters</h3>
+            <p>
+<em class="parameter"><code>hdl : </code></em>Handle returned from an earlier call to
+<code class="function">op_open_agent()</code>
+</p>
+            <p>
+<em class="parameter"><code>symbol_name : </code></em>The name of the symbol being dynamically compiled.
+ This name can (and should) contain all necessary information to disambiguate it from
+ symbols of the same name; e.g., class, method signature.
+</p>
+            <p>
+<em class="parameter"><code>vma : </code></em>Virtual memory address of the executable code
+</p>
+            <p>
+<em class="parameter"><code>code : </code></em>Pointer to the location of the compiled code.
+	Theoretically, this may be a different location from
+	that given by the vma argument.  For some JIT compilers,
+	obtaining the code may be impractical.  For this (or any other)
+	reason, the agent can choose to pass NULL for this paraemter.
+	If NULL is passed, no code will be copied into the JIT dump
+	file.
+</p>
+            <p>
+<em class="parameter"><code>code_size : </code></em>Size of the compiled code
+</p>
+          </div>
+          <div class="note" title="Return value" style="margin-left: 0.5in; margin-right: 0.5in;">
+            <h3 class="title">Return value</h3>
+            <p>Returns 0 on success; -1 otherwise. If -1 is returned, <code class="code">errno</code> is set
+to indicate the nature of the error. 
+<code class="code">errno</code> is set to EINVAL if an invalid <code class="code">op_agent_t</code>
+handle is passed. For a list of other possible <code class="code">errno</code> values, see the man pages for:</p>
+            <code class="code">gettimeofday, fwrite</code>
+          </div>
+        </div>
+        <div class="sect1" title="4. op_write_debug_line_info">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="op_write_debug_line_info"></a>4. op_write_debug_line_info</h2>
+              </div>
+            </div>
+          </div>
+          <div class="funcsynopsis">Write debug information about compiled code to a JIT dump file.
+<pre class="funcsynopsisinfo">#include &lt;opagent.h&gt;</pre><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">int <b class="fsfunc">op_write_debug_line_info</b>(</code></td><td><var class="pdparam">hdl</var>, </td><td> </td></tr><tr><td> </td><td><var class="pdparam">code</var>, </td><td> </td></tr><tr><td> </td><td><var class="pdparam">nr_entry</var>, </td><td> </td></tr><tr><td> </td><td><var class="pdparam">compile_map</var><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>op_agent_t<var class="pdparam">hdl</var></code>;<br /><code>void const *<var class="pdparam">code</var></code>;<br /><code>size_t<var class="pdparam">nr_entry</var></code>;<br /><code>struct debug_line_info const *<var class="pdparam">compile_map</var></code>;</div><div class="funcprototype-spacer"> </div></div>
+          <div class="note" title="Description" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Description</h3>
+Add debug line information to a piece of code. An <code class="function">op_write_native_code()</code>
+with the same code pointer should have occurred before this call. It's not
+necessary to provide one lineno information entry per machine instruction;
+the array can contain hole.
+</div>
+          <div class="note" title="Parameters" style="margin-left: 0.5in; margin-right: 0.5in;">
+            <h3 class="title">Parameters</h3>
+            <p>
+<em class="parameter"><code>hdl : </code></em>Handle returned from an earlier call to
+<code class="function">op_open_agent()</code>
+</p>
+            <p>
+<em class="parameter"><code>code : </code></em>Pointer to the location of the code with debug info
+</p>
+            <p>
+<em class="parameter"><code>nr_entry : </code></em>Number of entries in compile_map
+</p>
+            <p>
+<em class="parameter"><code>compile_map : </code></em>Array of struct debug_line_info.  See the JVMTI agent
+library implementation for an example of what information should be retrieved
+from a VM to fill out this data structure.
+</p>
+          </div>
+          <div class="note" title="Return value" style="margin-left: 0.5in; margin-right: 0.5in;">
+            <h3 class="title">Return value</h3>
+            <p>Returns 0 on success; -1 otherwise. If -1 is returned, <code class="code">errno</code> is set
+to indicate the nature of the error. 
+<code class="code">errno</code> is set to EINVAL if an invalid <code class="code">op_agent_t</code>
+handle is passed. For a list of other possible <code class="code">errno</code> values, see the man pages for:</p>
+            <code class="code">gettimeofday, ftell, fwrite</code>
+          </div>
+        </div>
+        <div class="sect1" title="5. op_unload_native_code">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="op_unload_native_code"></a>5. op_unload_native_code</h2>
+              </div>
+            </div>
+          </div>
+          <div class="funcsynopsis">Write information to the JIT dump file about invalidated compiled code.
+<pre class="funcsynopsisinfo">#include &lt;opagent.h&gt;</pre><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">int <b class="fsfunc">op_unload_native_code</b>(</code></td><td><var class="pdparam">hdl</var>, </td><td> </td></tr><tr><td> </td><td><var class="pdparam">vma</var><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>op_agent_t<var class="pdparam">hdl</var></code>;<br /><code>uint64_t<var class="pdparam">vma</var></code>;</div><div class="funcprototype-spacer"> </div></div>
+          <div class="note" title="Description" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Description</h3>
+Signal the invalidation of native code from a virtual machine.</div>
+          <div class="note" title="Parameters" style="margin-left: 0.5in; margin-right: 0.5in;">
+            <h3 class="title">Parameters</h3>
+            <p>
+<em class="parameter"><code>hdl : </code></em>Handle returned from an earlier call to
+<code class="function">op_open_agent()</code> 
+</p>
+            <p>
+<em class="parameter"><code>vma : </code></em>Virtual memory address of the compiled code being unloaded.
+An <code class="function">op_write_native_code()</code> with the same vma should have occurred before this call.
+</p>
+          </div>
+          <div class="note" title="Return value" style="margin-left: 0.5in; margin-right: 0.5in;">
+            <h3 class="title">Return value</h3>
+            <p>Returns 0 on success; -1 otherwise. If -1 is returned, <code class="code">errno</code> is set
+to indicate the nature of the error. 
+<code class="code">errno</code> is set to EINVAL if an invalid <code class="code">op_agent_t</code>
+handle is passed. For a list of other possible <code class="code">errno</code> values, see the man pages for:</p>
+            <code class="code">gettimeofday, fwrite</code>
+          </div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/oprofile-0.9.7/doc/op-jit-devel.xml b/oprofile-0.9.7/doc/op-jit-devel.xml
new file mode 100644
index 0000000..9bd9a88
--- /dev/null
+++ b/oprofile-0.9.7/doc/op-jit-devel.xml
@@ -0,0 +1,319 @@
+<?xml version="1.0" encoding='ISO-8859-1'?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<book id="oprofile-devel-guide">
+<bookinfo>
+	<title>OProfile JIT agent developer guide</title>
+ 
+	<authorgroup>
+		<author>
+			<firstname>Maynard</firstname>
+			<surname>Johnson</surname>
+			<affiliation>
+				<address><email>maynardj@us.ibm.com</email></address>
+			</affiliation>
+		</author>
+	</authorgroup>
+
+	<copyright>
+		<year>2007</year>
+		<holder>IBM Corporation</holder>
+	</copyright>
+</bookinfo>
+
+<toc></toc>
+
+<chapter id="developing">
+	<title>Developing a new JIT agent</title>
+	<para>
+	OProfile includes a header file and library that are intended to be used by
+	developers who wish to extend OProfile's JIT support to other non-supported
+	virtual machines.  This developer guide describes these development files and how
+	to use them.
+	</para>
+<sect1 id="jit-devel-overview">
+<title>Overview</title>
+	<para>
+	OProfile already includes some implementations that use the JIT support,
+	e.g., the Java Virtual Machine Toolkit Interface (JVMTI) library,
+	libjvmti_oprofile.so.  In developing a new implementation, you will
+	likely follow a similar (if not identical) procedure as was used in
+	developing the JVMTI library.  Following are the high level steps to follow:
+	<orderedlist>
+	<listitem>Ensure your virtual machine provides an API that, at minimum,
+	can provide the following information about dynamically compiled code:
+		<itemizedlist>
+		<listitem>Notification when compilation occurs</listitem>
+		<listitem>Name of the symbol (i.e., function or class/method, etc.)</listitem>
+		<listitem>Address in anonymous memory where the compiled code was loaded</listitem>
+		<listitem>Length of the compiled code segment</listitem>
+		</itemizedlist>
+	</listitem>
+	<listitem>Write an agent library that communicates with your VM to obtain
+	compiled code notifications.  Invoke the required functions from opagent.h
+	(<xref linkend="jit-interface" />) and link your library with libopagent.so
+	(installed at <filename>&lt;oprofile_install_dir&gt;/lib/oprofile</filename>).
+	</listitem>
+	</orderedlist>
+
+	</para>
+</sect1>
+<sect1 id="jit-interface">
+<title>Implementing JIT support for a new virtual machine</title>
+	<para>
+	The JIT support API for OProfile is defined 
+	in <filename>&lt;oprofile-install-dir&gt;/include/opagent.h</filename>.
+	Some parts of the API are mandatory for an agent library to use; other
+	parts are optional.  The mandatory functions are shown below.
+	</para>
+<screen>
+op_agent_t op_open_agent(void);
+
+void op_close_agent(op_agent_t hdl);
+
+int op_write_native_code(op_agent_t hdl, char const * symbol_name,
+                         uint64_t vma, const void * code,
+                         const unsigned int code_size);
+</screen>
+
+	<para>
+	To implement this part of your library, you must perform the
+	following steps:
+	<orderedlist>
+        <listitem>Implement a function to set up initial communication with the VM.
+	Once communication to the VM is established, your agent library should call
+	<function>op_op_agent()</function> and cache the returned <code>op_agent_t</code> handle for use in
+	future calls.</listitem>
+        <listitem>Perform any necessary steps to register with the VM to be notified of
+	compiled code load events.  Registration must include a callback function you
+	will implement in the library to handle the compiled code load events.</listitem>
+        <listitem>The callback function mentioned above must obtain all required
+	information from the VM to pass to libopagent via <function>op_write_native_code()</function>.</listitem>
+        <listitem>When disconnecting from the VM, your library should call
+	<function>op_agent_close()</function>.</listitem>
+	</orderedlist>
+	</para>
+
+	<para>Use of the functions below are optional, depending on the kinds of information your VM
+	can provide to your agent library.  See the JVMTI agent library for an example of how to use
+	these functions.
+<screen>
+int op_unload_native_code(op_agent_t hdl, uint64_t vma);
+
+int op_write_debug_line_info(op_agent_t hdl, void const * code,
+                             size_t nr_entry,
+                             struct debug_line_info const * compile_map);
+</screen>
+	</para>
+	<note>While the libopagent functions are thread-safe, you should not use them in
+	signal handlers.
+	</note>
+</sect1>
+</chapter>
+
+
+<chapter id="jit-api">
+	<title>The JIT support API</title>
+	<para>
+	This chapter describes the JIT support API.  See opagent.h for more details.
+        </para>
+        
+<sect1 id="op_open_agent">
+<title>op_open_agent</title>
+
+<funcsynopsis>Initializes the agent library.
+<funcsynopsisinfo>#include &lt;opagent.h&gt;</funcsynopsisinfo>
+<funcprototype>
+<funcdef>op_agent_t <function>op_open_agent</function></funcdef>
+<paramdef>void</paramdef>
+</funcprototype>
+</funcsynopsis>
+<note>
+<title>Description</title>
+This function must be called by agents before any other function.
+Creates and opens a JIT dump file in <filename>/var/lib/oprofile/jitdump</filename>
+using the naming convention <filename>&lt;process_id&gt;.dump</filename>.
+</note>
+<note>
+<title>Parameters</title>
+None
+</note>
+<note>
+<title>Return value</title>
+<para>Returns a valid <code>op_agent_t</code> handle or NULL.
+If NULL is returned, <code>errno</code> is set to indicate the nature of the error. For a list
+of possible <code>errno</code> values, see the man pages for:</para>
+<code>
+stat, creat, gettimeofday, fdopen, fwrite
+</code>
+</note>
+</sect1>
+
+<sect1 id="op_close_agent">
+<title>op_close_agent</title>
+<funcsynopsis>Uninitialize the agent library.
+<funcsynopsisinfo>#include &lt;opagent.h&gt;</funcsynopsisinfo>
+<funcprototype>
+<funcdef>int <function>op_close_agent</function></funcdef>
+<paramdef>op_agent_t <parameter>hdl</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<note>
+<title>Description</title>
+Frees all resources and closes open file handles.
+</note>
+<note>
+<title>Parameters</title>
+<parameter>hdl : </parameter>Handle returned from an earlier call to
+<function>op_open_agent()</function>
+</note>
+<note>
+<title>Return value</title>
+<para>Returns 0 on success; -1 otherwise. If -1 is returned, <code>errno</code> is set
+to indicate the nature of the error. 
+<code>errno</code> is set to EINVAL if an invalid <code>op_agent_t</code>
+handle is passed. For a list of other possible <code>errno</code> values, see the man pages for:</para>
+<code>gettimeofday, fwrite</code>
+</note>
+</sect1>
+
+<sect1 id="op_write_native_code">
+<title>op_write_native_code</title>
+<funcsynopsis>Write information about compiled code to a JIT dump file.
+<funcsynopsisinfo>#include &lt;opagent.h&gt;</funcsynopsisinfo>
+<funcprototype>
+<funcdef>int <function>op_write_native_code</function></funcdef>
+<paramdef>op_agent_t<parameter>hdl</parameter></paramdef>
+<paramdef>char const *<parameter>symbol_name</parameter></paramdef>
+<paramdef>uint64_t<parameter>vma</parameter></paramdef>
+<paramdef>void const *<parameter>code</parameter></paramdef>
+<paramdef>const unsigned int<parameter>code_size</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<note>
+<title>Description</title>
+Signal the dynamic generation of native code from a virtual machine.
+Writes a JIT dump record to the open JIT dump file using the passed information.
+</note>
+<note>
+<title>Parameters</title>
+<para>
+<parameter>hdl : </parameter>Handle returned from an earlier call to
+<function>op_open_agent()</function>
+</para>
+<para>
+<parameter>symbol_name : </parameter>The name of the symbol being dynamically compiled.
+ This name can (and should) contain all necessary information to disambiguate it from
+ symbols of the same name; e.g., class, method signature.
+</para>
+<para>
+<parameter>vma : </parameter>Virtual memory address of the executable code
+</para>
+<para>
+<parameter>code : </parameter>Pointer to the location of the compiled code.
+	Theoretically, this may be a different location from
+	that given by the vma argument.  For some JIT compilers,
+	obtaining the code may be impractical.  For this (or any other)
+	reason, the agent can choose to pass NULL for this paraemter.
+	If NULL is passed, no code will be copied into the JIT dump
+	file.
+</para>
+<para>
+<parameter>code_size : </parameter>Size of the compiled code
+</para>
+</note>
+<note>
+<title>Return value</title>
+<para>Returns 0 on success; -1 otherwise. If -1 is returned, <code>errno</code> is set
+to indicate the nature of the error. 
+<code>errno</code> is set to EINVAL if an invalid <code>op_agent_t</code>
+handle is passed. For a list of other possible <code>errno</code> values, see the man pages for:</para>
+<code>gettimeofday, fwrite</code>
+</note>
+</sect1>
+
+
+<sect1 id="op_write_debug_line_info">
+<title>op_write_debug_line_info</title>
+<funcsynopsis>Write debug information about compiled code to a JIT dump file.
+<funcsynopsisinfo>#include &lt;opagent.h&gt;</funcsynopsisinfo>
+<funcprototype>
+<funcdef>int <function>op_write_debug_line_info</function></funcdef>
+<paramdef>op_agent_t<parameter>hdl</parameter></paramdef>
+<paramdef>void const *<parameter>code</parameter></paramdef>
+<paramdef>size_t<parameter>nr_entry</parameter></paramdef>
+<paramdef>struct debug_line_info const *<parameter>compile_map</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<note>
+<title>Description</title>
+Add debug line information to a piece of code. An <function>op_write_native_code()</function>
+with the same code pointer should have occurred before this call. It's not
+necessary to provide one lineno information entry per machine instruction;
+the array can contain hole.
+</note>
+<note>
+<title>Parameters</title>
+<para>
+<parameter>hdl : </parameter>Handle returned from an earlier call to
+<function>op_open_agent()</function>
+</para>
+<para>
+<parameter>code : </parameter>Pointer to the location of the code with debug info
+</para>
+<para>
+<parameter>nr_entry : </parameter>Number of entries in compile_map
+</para>
+<para>
+<parameter>compile_map : </parameter>Array of struct debug_line_info.  See the JVMTI agent
+library implementation for an example of what information should be retrieved
+from a VM to fill out this data structure.
+</para>
+</note>
+<note>
+<title>Return value</title>
+<para>Returns 0 on success; -1 otherwise. If -1 is returned, <code>errno</code> is set
+to indicate the nature of the error. 
+<code>errno</code> is set to EINVAL if an invalid <code>op_agent_t</code>
+handle is passed. For a list of other possible <code>errno</code> values, see the man pages for:</para>
+<code>gettimeofday, ftell, fwrite</code>
+</note>
+</sect1>
+
+<sect1 id="op_unload_native_code">
+<title>op_unload_native_code</title>
+<funcsynopsis>Write information to the JIT dump file about invalidated compiled code.
+<funcsynopsisinfo>#include &lt;opagent.h&gt;</funcsynopsisinfo>
+<funcprototype>
+<funcdef>int <function>op_unload_native_code</function></funcdef>
+<paramdef>op_agent_t<parameter>hdl</parameter></paramdef>
+<paramdef>uint64_t<parameter>vma</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+<note>
+<title>Description</title>
+Signal the invalidation of native code from a virtual machine.</note>
+<note>
+<title>Parameters</title>
+<para>
+<parameter>hdl : </parameter>Handle returned from an earlier call to
+<function>op_open_agent()</function> 
+</para>
+<para>
+<parameter>vma : </parameter>Virtual memory address of the compiled code being unloaded.
+An <function>op_write_native_code()</function> with the same vma should have occurred before this call.
+</para>
+</note>
+<note>
+<title>Return value</title>
+<para>Returns 0 on success; -1 otherwise. If -1 is returned, <code>errno</code> is set
+to indicate the nature of the error. 
+<code>errno</code> is set to EINVAL if an invalid <code>op_agent_t</code>
+handle is passed. For a list of other possible <code>errno</code> values, see the man pages for:</para>
+<code>gettimeofday, fwrite</code>
+</note>
+</sect1>
+
+</chapter>
+
+</book>
diff --git a/oprofile-0.9.7/doc/opannotate.1.in b/oprofile-0.9.7/doc/opannotate.1.in
new file mode 100644
index 0000000..e1a369b
--- /dev/null
+++ b/oprofile-0.9.7/doc/opannotate.1.in
@@ -0,0 +1,119 @@
+.TH OPANNOTATE 1 "@DATE@" "oprofile @VERSION@"
+.UC 4
+.SH NAME
+opannotate \- produce source or assembly annotated with profile data
+.SH SYNOPSIS
+.br
+.B opannotate
+[
+.I options
+]
+[profile specification]
+.SH DESCRIPTION
+
+.B opannotate
+outputs annotated source and/or assembly from profile data of an OProfile
+session. See oprofile(1) for how to write profile specifications.
+
+.SH OPTIONS
+.TP
+.BI "--assembly / -a"
+Output annotated assembly. If this is combined with --source, then mixed
+source / assembly annotations are output.
+.br
+.TP
+.BI "--demangle / -D none|smart|normal"
+none: no demangling. normal: use default demangler (default) smart: use
+pattern-matching to make C++ symbol demangling more readable.
+.br
+.TP
+.BI "--exclude-dependent / -x"
+Do not include application-specific images for libraries, kernel modules
+and the kernel. This option only makes sense if the profile session
+used --separate.
+.br
+.TP
+.BI "--exclude-file [files]"
+Exclude all files in the given comma-separated list of glob patterns.
+.br
+.TP
+.BI "--exclude-symbols / -e [symbols]"
+Exclude all the symbols in the given comma-separated list.
+.br
+.TP
+.BI "--help / -? / --usage"
+Show help message.
+.br
+.TP
+.BI "--image-path / -p [paths]"
+Comma-separated list of additional paths to search for binaries.
+This is needed to find modules in kernels 2.6 and upwards.
+.br
+.TP
+.BI "--root / -R [path]"
+A path to a filesystem to search for additional binaries.
+.br
+.TP
+.BI "--include-file [files]"
+Only include files in the given comma-separated list of glob patterns.
+.br
+.TP
+.BI "--include-symbols / -i [symbols]"
+Only include symbols in the given comma-separated list.
+.br
+.TP
+.BI "--objdump-params [params]"
+Pass the given parameters as extra values when calling objdump.
+.br
+.TP
+.BI "--output-dir / -o [dir]"
+Output directory. This makes opannotate output one annotated file for each
+source file. This option can't be used in conjunction with --assembly.
+.br
+.TP
+.BI "--search-dirs / -d [paths]"
+Comma-separated list of paths to search for source files. You may need to use
+this option when the debug information for an image contains relative paths.
+.br
+.TP
+.BI "--base-dirs / -b [paths]"
+Comma-separated list of paths to strip from debug source files, prior to
+looking for them in --search-dirs.
+.br
+.TP
+.BI "--session-dir="dir_path
+Use sample database out of directory dir_path instead of the default location (/var/lib/oprofile).
+.br
+.TP
+.BI "--source / -s"
+Output annotated source. This requires debugging information to be available
+for the binaries.
+.br
+.TP
+.BI "--threshold / -t [percentage]"
+Only output data for symbols that have more than the given percentage
+of total samples.
+.br
+.TP
+.BI "--verbose / -V [options]"
+Give verbose debugging output.
+.br
+.TP
+.BI "--version / -v"
+Show version.
+
+.SH ENVIRONMENT
+No special environment variables are recognised by opannotate.
+
+.SH FILES
+.TP
+.I /var/lib/oprofile/samples/
+The location of the generated sample files.
+
+.SH VERSION
+.TP
+This man page is current for @PACKAGE@-@VERSION@.
+
+.SH SEE ALSO
+.BR @OP_DOCDIR@,
+.BR oprofile(1)
diff --git a/oprofile-0.9.7/doc/oparchive.1.in b/oprofile-0.9.7/doc/oparchive.1.in
new file mode 100644
index 0000000..6e33634
--- /dev/null
+++ b/oprofile-0.9.7/doc/oparchive.1.in
@@ -0,0 +1,76 @@
+.TH OPARCHIVE 1 "@DATE@" "oprofile @VERSION@"
+.UC 4
+.SH NAME
+oparchive \- produce archive of oprofile data for offline analysis
+.SH SYNOPSIS
+.br
+.B oparchive
+[
+.I options
+]
+[profile specification]
+.B -o
+[directory]
+.SH DESCRIPTION
+
+.B oparchive
+generates a directory populated with executable, debug, and oprofile sample
+files. This directory can be move to another machine via tar and analyzed
+without further use of the data collection machine. See oprofile(1) for how
+to write profile specifications.
+
+.SH OPTIONS
+.TP
+.BI "--help / -? / --usage"
+Show help message.
+.br
+.TP
+.BI "--version / -v"
+Show version.
+.br
+.TP
+.BI "--verbose / -V [options]"
+Give verbose debugging output.
+.br
+.TP
+.BI "--session-dir="dir_path
+Use sample database out of directory dir_path instead of the default location (/var/lib/oprofile).
+.br
+.TP
+.BI "--image-path / -p [paths]"
+Comma-separated list of additional paths to search for binaries.
+This is needed to find modules in kernels 2.6 and upwards.
+.br
+.TP
+.BI "--root / -R [path]"
+A path to a filesystem to search for additional binaries.
+.br
+.TP
+.BI "--output-directory / -o [directory]"
+Output to the given directory. There is no default. This must be specified.
+.br
+.TP
+.BI "--exclude-dependent / -x"
+Do not include application-specific images for libraries, kernel modules
+and the kernel. This option only makes sense if the profile session
+used --separate.
+.br
+.TP
+.BI "--list-files / -l"
+Only list the files that would be archived, don't copy them.
+
+.SH ENVIRONMENT
+No special environment variables are recognised by oparchive.
+
+.SH FILES
+.TP
+.I /var/lib/oprofile/samples/
+The location of the generated sample files.
+
+.SH VERSION
+.TP
+This man page is current for @PACKAGE@-@VERSION@.
+
+.SH SEE ALSO
+.BR @OP_DOCDIR@,
+.BR oprofile(1)
diff --git a/oprofile-0.9.7/doc/opcontrol.1.in b/oprofile-0.9.7/doc/opcontrol.1.in
new file mode 100644
index 0000000..c434704
--- /dev/null
+++ b/oprofile-0.9.7/doc/opcontrol.1.in
@@ -0,0 +1,186 @@
+.TH OPCONTROL 1 "@DATE@" "oprofile @VERSION@"
+.UC 4
+.SH NAME
+opcontrol \- control OProfile profiling
+.SH SYNOPSIS
+.br
+.B opcontrol
+[
+.I options
+]
+.SH DESCRIPTION
+.B opcontrol
+can be used to start profiling, end a profiling session,
+dump profile data, and set up the profiling parameters.
+
+.SH OPTIONS
+.TP
+.BI "--help"
+Show help message.
+.br
+.TP
+.BI "--version"
+Show version.
+.br
+.TP
+.BI "--list-events"
+Shows the monitorable events.
+.br
+.TP
+.BI "--init"
+Load the OProfile module if required and make the OProfile driver
+interface available.
+.br
+.TP
+.BI "--setup"
+Followed by list options for profiling setup. Store setup 
+in ~root/.oprofile/daemonrc. Optional.
+.br
+.TP
+.BI "--status"
+Show configuration information.
+.br
+.TP
+.BI "--start-daemon"
+Start the oprofile daemon without starting profiling. Not available
+in 2.2/2.4 kernels.
+.br
+.TP
+.BI "--start"
+Start data collection with either arguments provided by --setup
+or with information saved in ~root/.oprofile/daemonrc.
+.br
+.TP
+.BI "--dump"
+Force a flush of the collected profiling data to the daemon.
+.br
+.TP
+.BI "--stop"
+Stop data collection. Not available in 2.2/2.4 kernels.
+.br
+.TP
+.BI "--shutdown"
+Stop data collection and kill the daemon.
+.br
+.TP
+.BI "--reset"
+Clear out data from current session, but leaves saved sessions.
+.br
+.TP
+.BI "--save="sessionname
+Save data from current session to sessionname.
+.br
+.TP
+.BI "--deinit"
+Shut down daemon. Unload the oprofile module and oprofilefs.
+.br
+.TP
+.BI "--session-dir="dir_path
+Use sample database out of directory dir_path instead of the default location (/var/lib/oprofile).
+.br
+.TP
+.BI "--buffer-size="num
+Set kernel buffer to num samples. When using a 2.6 kernel, buffer watershed needs
+to be tweaked when changing this value.
+Rules:  A non-zero value goes into effect after a '--shutdown/start' sequence.
+A value of zero sets this parameter back to default value, but does not go into
+effect until after '--deinit/init' sequence.
+.br
+.TP
+.BI "--buffer-watershed="num
+Set kernel buffer watershed to num samples (2.6 only). When
+buffer-size - buffer-watershed free entries remain in the kernel buffer, data will be
+flushed to the daemon.  Most useful values are in the range [0.25 - 0.5] * buffer-size.
+Same rules as defined for buffer-size.
+.br
+.TP
+.BI "--cpu-buffer-size="num
+Set kernel per cpu buffer to num samples (2.6 only). If you profile at high
+rate it can help to increase this if the log file show excessive count of
+sample lost cpu buffer overflow. Same rules as defined for buffer-size.
+.br
+.TP
+.BI "--event="[event|"default"]
+Specify an event to measure for the hardware performance counters,
+or "default" for the default event. The event is of the form
+"CPU_CLK_UNHALTED:30000:0:1:1" where the numeric values are
+count, unit mask, kernel-space counting, user-space counting,
+respectively.  Note that this over-rides all previous events selected;
+if you want two or more counters used simultaneously, you must specify
+them on the same opcontrol invocation. The numerical unit mask
+can also be a string which matches the first word in the unit mask
+description, but only for events with "extra:" parameters shown.
+Unit masks with "extra:" parameters
+.I must
+be specified by first word.
+.br
+.TP
+.BI "--separate="[none,lib,kernel,thread,cpu,all]
+Separate samples based on the given separator. 'lib' separates
+dynamically linked library samples per application. 'kernel' separates
+kernel and kernel module samples per application; 'kernel'
+implies 'library'. 'thread' gives separation for each thread and
+task.  'cpu' separates for each CPU. 'all' implies all of the above
+options and 'none' turns off separation.
+.br
+.TP
+.BI "--callgraph=#depth"
+Enable callgraph sample collection with a maximum depth. Use 0 to disable
+callgraph profiling. This option is available on x86 using a
+2.6+ kernel with callgraph support enabled.  It is also available on PowerPC using a 2.6.17+ kernel.
+.br
+.TP
+.BI "--image="[name,name...|"all"]
+Only profile the given absolute paths to binaries, or "all" to profile
+everything (the default).
+.br
+.TP
+.BI "--vmlinux="file
+vmlinux kernel image.
+.br
+.TP
+.BI "--no-vmlinux"
+Use this when you don't have a kernel vmlinux file, and you don't want to
+profile the kernel.
+.br
+.TP
+.BI "--verbose"
+Be verbose in the daemon log. This has a high overhead.
+.br
+.TP
+.BI "--kernel-range="start,end
+Set kernel range vma address in hexadecimal.
+
+.SH OPTIONS (specific to Xen)
+.TP
+.BI "--xen="file
+Xen image
+.br
+.TP
+.BI "--active-domains="<list>
+List of domain ids participating in a multi-domain profiling session. If 
+more than one domain is specified in <list> they should be separated using 
+commas. This option can only be used in domain 0 which is the only domain 
+that can coordinate a multi-domain profiling session. Including domain 0 in 
+the list of active domains is optional. (e.g. --active-domains=2,5,6 and 
+--active-domains=0,2,5,6 are equivalent)
+.br
+
+.SH ENVIRONMENT
+No special environment variables are recognised by opcontrol.
+
+.SH FILES
+.TP
+.I /root/.oprofile/daemonrc
+Configuration file for opcontrol
+.TP
+.I /var/lib/oprofile/samples/
+The location of the generated sample files.
+
+.SH VERSION
+.TP
+This man page is current for @PACKAGE@-@VERSION@.
+
+.SH SEE ALSO
+.BR @OP_DOCDIR@,
+.BR oprofile(1)
diff --git a/oprofile-0.9.7/doc/opgprof.1.in b/oprofile-0.9.7/doc/opgprof.1.in
new file mode 100644
index 0000000..3e61ba9
--- /dev/null
+++ b/oprofile-0.9.7/doc/opgprof.1.in
@@ -0,0 +1,67 @@
+.TH OPGPROF 1 "@DATE@" "oprofile @VERSION@"
+.UC 4
+.SH NAME
+opgprof \- produce gprof-format profile data
+.SH SYNOPSIS
+.br
+.B opgprof
+[
+.I options
+]
+[profile specification]
+.SH DESCRIPTION
+
+.B opgprof
+outputs gprof-format profile data for a given binary image,
+from an OProfile session. See oprofile(1) for how to write profile specifications.
+
+.SH OPTIONS
+.TP
+.BI "--help / -? / --usage"
+Show help message.
+.br
+.TP
+.BI "--version / -v"
+Show version.
+.br
+.TP
+.BI "--verbose / -V [options]"
+Give verbose debugging output.
+.br
+.TP
+.BI "--session-dir="dir_path
+Use sample database out of directory dir_path instead of the default location (/var/lib/oprofile).
+.br
+.TP
+.BI "--image-path / -p [paths]"
+Comma-separated list of additional paths to search for binaries.
+This is needed to find modules in kernels 2.6 and upwards.
+.br
+.TP
+.BI "--root / -R [path]"
+A path to a filesystem to search for additional binaries.
+.br
+.TP
+.BI "--threshold / -t [percentage]"
+Only output data for symbols that have more than the given percentage
+of total samples.
+.br
+.TP
+.BI "--output-filename / -o [file]"
+Output to the given file instead of the default, gmon.out
+
+.SH ENVIRONMENT
+No special environment variables are recognised by opgprof.
+
+.SH FILES
+.TP
+.I /var/lib/oprofile/samples/
+The location of the generated sample files.
+
+.SH VERSION
+.TP
+This man page is current for @PACKAGE@-@VERSION@.
+
+.SH SEE ALSO
+.BR @OP_DOCDIR@,
+.BR oprofile(1)
diff --git a/oprofile-0.9.7/doc/ophelp.1.in b/oprofile-0.9.7/doc/ophelp.1.in
new file mode 100644
index 0000000..3548d74
--- /dev/null
+++ b/oprofile-0.9.7/doc/ophelp.1.in
@@ -0,0 +1,58 @@
+.TH OPHELP 1 "@DATE@" "oprofile @VERSION@"
+.UC 4
+.SH NAME
+ophelp \- list OProfile events
+.SH SYNOPSIS
+.br
+.B ophelp
+[
+.I options
+]
+[event name]
+.SH DESCRIPTION
+
+By default,
+.B ophelp
+lists the available performance counter options. If you
+give it a symbolic event name, it will return the hardware
+value (e.g. "ophelp DATA_MEM_REFS").
+
+.SH OPTIONS
+.TP
+.BI "--cpu-type / -c"
+Show the events for the given numerical CPU type.
+.br
+.TP
+.BI "--get-cpu-type / -r"
+Show the symbolic CPU name.
+.br
+.TP
+.BI "--xml / -X"
+List events in XML format.
+.br
+.TP
+.BI "--help / -? / --usage"
+Show help message.
+.br
+.TP
+.BI "--version / -v"
+Show version.
+
+.SH ENVIRONMENT
+No special environment variables are recognised by ophelp.
+
+.SH FILES
+.TP
+.I $prefix/share/oprofile/
+Event description files used by OProfile.
+.TP
+.I /var/lib/oprofile/samples/
+The location of the generated sample files.
+
+.SH VERSION
+.TP
+This man page is current for @PACKAGE@-@VERSION@.
+
+.SH SEE ALSO
+.BR @OP_DOCDIR@,
+.BR oprofile(1)
diff --git a/oprofile-0.9.7/doc/opimport.1.in b/oprofile-0.9.7/doc/opimport.1.in
new file mode 100644
index 0000000..ef8ef5c
--- /dev/null
+++ b/oprofile-0.9.7/doc/opimport.1.in
@@ -0,0 +1,59 @@
+.TH OPIMPORT 1 "@DATE@" "oprofile @VERSION@"
+.UC 4
+.SH NAME
+opimport \- converts sample database files
+.SH SYNOPSIS
+.br
+.B opimport
+[
+.I options
+]
+input_file
+.SH DESCRIPTION
+
+.B opimport
+converts sample database files from a foreign binary format (abi) to the native format.
+
+.SH OPTIONS
+.TP
+.BI "--abi / -a"
+Input abi file description location.
+.br
+.TP
+.BI "--force / -f"
+Force conversion even if the input and output abi are identical.
+.br
+.TP
+.BI "--output / -o filename"
+Specify the output filename. If the output file already exists it is not overwritten but data are accumulated in. Sample filename are informative
+for post profile tools and must be kept identical, in other word the pathname
+from the first path component containing a '{' must be kept as it in the
+output filename.
+.br
+.TP
+.BI "--help / -? / --usage"
+Show help message.
+.br
+.TP
+.BI "--verbose / -V"
+Give verbose debugging output.
+.br
+.TP
+.BI "--version / -v"
+Show version.
+
+.SH ENVIRONMENT
+No special environment variables are recognised by opimport
+
+.SH FILES
+.TP
+.I /var/lib/oprofile/abi
+The abi file description of the sample database files
+
+.SH VERSION
+.TP
+This man page is current for @PACKAGE@-@VERSION@.
+
+.SH SEE ALSO
+.BR @OP_DOCDIR@,
+.BR oprofile(1)
diff --git a/oprofile-0.9.7/doc/opreport.1.in b/oprofile-0.9.7/doc/opreport.1.in
new file mode 100644
index 0000000..24fcca9
--- /dev/null
+++ b/oprofile-0.9.7/doc/opreport.1.in
@@ -0,0 +1,140 @@
+.TH OPREPORT 1 "@DATE@" "oprofile @VERSION@"
+.UC 4
+.SH NAME
+opreport \- produce symbol or binary image summaries
+.SH SYNOPSIS
+.br
+.B opreport
+[
+.I options
+]
+[profile specification]
+.SH DESCRIPTION
+
+.B opreport
+outputs binary image summaries, or per-symbol data, from OProfile profiling
+sessions. See oprofile(1) for how to write profile specifications.
+
+.SH OPTIONS
+.TP
+.BI "--accumulated / -a"
+Accumulate sample and percentage counts in the symbol list.
+.br
+.TP
+.BI "--debug-info / -g"
+Show source file and line for each symbol.
+.br
+.TP
+.BI "--demangle / -D none|smart|normal"
+none: no demangling. normal: use default demangler (default) smart: use
+pattern-matching to make C++ symbol demangling more readable.
+.br
+.TP
+.BI "--callgraph / -c"
+Show call graph information if available.
+.br
+.TP
+.BI "--details / -d"
+Show per-instruction details for all selected symbols.
+.br
+.TP
+.BI "--exclude-dependent / -x"
+Do not include application-specific images for libraries, kernel modules
+and the kernel. This option only makes sense if the profile session
+used --separate.
+.br
+.TP
+.BI "--exclude-symbols / -e [symbols]"
+Exclude all the symbols in the given comma-separated list.
+.br
+.TP
+.BI "--global-percent / -%"
+Make all percentages relative to the whole profile.
+.br
+.TP
+.BI "--help / -? / --usage"
+Show help message.
+.br
+.TP
+.BI "--image-path / -p [paths]"
+Comma-separated list of additional paths to search for binaries.
+This is needed to find modules in kernels 2.6 and upwards.
+.br
+.TP
+.BI "--root / -R [path]"
+A path to a filesystem to search for additional binaries.
+.br
+.TP
+.BI "--include-symbols / -i [symbols]"
+Only include symbols in the given comma-separated list.
+.br
+.TP
+.BI "--long-filenames / -f"
+Output full paths instead of basenames.
+.br
+.TP
+.BI "--merge / -m [lib,cpu,tid,tgid,unitmask,all]"
+Merge any profiles separated in a --separate session.
+.br
+.TP
+.BI "--no-header"
+Don't output a header detailing profiling parameters.
+.br
+.TP
+.BI "--output-file / -o [file]"
+Output to the given file instead of stdout.
+.br
+.TP
+.BI "--reverse-sort / -r"
+Reverse the sort from the default.
+.br
+.TP
+.BI "--session-dir="dir_path
+Use sample database out of directory dir_path instead of the default location (/var/lib/oprofile).
+.br
+.TP
+.BI "--show-address / -w"
+Show each symbol's VMA address.
+.br
+.TP
+.BI "--sort / -s [vma,sample,symbol,debug,image]"
+Sort the list of symbols by, respectively, symbol address,
+number of samples, symbol name, debug filename and line number,
+binary image filename.
+.br
+.TP
+.BI "--symbols / -l"
+List per-symbol information instead of a binary image summary.
+.br
+.TP
+.BI "--threshold / -t [percentage]"
+Only output data for symbols that have more than the given percentage
+of total samples.
+.br
+.TP
+.BI "--verbose / -V [options]"
+Give verbose debugging output.
+.br
+.TP
+.BI "--version / -v"
+Show version.
+.br
+.TP
+.BI "--xml / -X"
+Generate XML output.
+
+.SH ENVIRONMENT
+No special environment variables are recognised by opreport.
+
+.SH FILES
+.TP
+.I /var/lib/oprofile/samples/
+The location of the generated sample files.
+
+.SH VERSION
+.TP
+This man page is current for @PACKAGE@-@VERSION@.
+
+.SH SEE ALSO
+.BR @OP_DOCDIR@,
+.BR oprofile(1)
diff --git a/oprofile-0.9.7/doc/opreport.xsd b/oprofile-0.9.7/doc/opreport.xsd
new file mode 100644
index 0000000..682a0bf
--- /dev/null
+++ b/oprofile-0.9.7/doc/opreport.xsd
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="profile">
+    <xs:complexType>
+      <xs:sequence>
+		<xs:element minOccurs="1" maxOccurs="1" ref="options"/>
+		<xs:element minOccurs="1" maxOccurs="1" ref="setup"/>
+		<xs:element minOccurs="0" maxOccurs="1" ref="classes"/>
+		<xs:choice>
+		  <xs:element maxOccurs="unbounded" ref="process"/>
+		  <!-- a binary can be either an application or a library -->
+		  <xs:element maxOccurs="unbounded" ref="binary"/>
+		</xs:choice>
+		<xs:element minOccurs="1" maxOccurs="1" ref="symboltable"/>
+		<!-- put details last to allow parser to gather summary information -->
+		<xs:element minOccurs="0" maxOccurs="unbounded" ref="detailtable"/>
+		<!-- bytestable only present when details option used -->
+		<xs:element minOccurs="0" maxOccurs="1" ref="bytestable"/>
+      </xs:sequence>
+      <xs:attribute name="title" type="xs:string" use="required"/>
+      <!-- integer part of schemaversion should changes for major schema -->
+      <xs:attribute name="schemaversion" use="required">
+        <xs:simpleType>
+          <xs:restriction base = "xs:string">
+            <xs:pattern value = "3\.[0-9]+"/>
+          </xs:restriction>
+        </xs:simpleType>       </xs:attribute>
+
+      <xs:attribute name="cputype" type="xs:NCName" use="required"/>
+      <xs:attribute name="processor" type="xs:NCName" use="required"/>
+      <xs:attribute name="mhz" type="xs:decimal" use="required"/>      
+	  <!-- separatedcpus is only used for profiles with separate=cpu -->
+      <xs:attribute name="separatedcpus" type="xs:nonNegativeInteger" use="optional"/>      
+    </xs:complexType>
+  </xs:element>
+  
+  <xs:element name="options">
+    <xs:complexType>
+      <xs:attribute name="session" type="xs:string" use="optional"/>
+      <xs:attribute name="debuginfo" type="xs:boolean" use="optional"/>
+      <xs:attribute name="details" type="xs:boolean" use="optional"/>
+      <xs:attribute name="excludedependent" type="xs:boolean" use="optional"/>
+      <xs:attribute name="excludesymbols" type="xs:string" use="optional"/>
+      <xs:attribute name="imagepath" type="xs:string" use="optional"/>
+      <xs:attribute name="includesymbols" type="xs:string" use="optional"/>
+      <xs:attribute name="merge" type="xs:string" use="optional"/>
+      <xs:attribute name="reversesort" type="xs:boolean" use="optional"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="setup">
+    <xs:complexType>
+      <xs:choice>
+        <xs:element maxOccurs="1" ref="timersetup"/>
+        <xs:element maxOccurs="unbounded" ref="eventsetup"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  
+  <xs:element name="timersetup">
+    <xs:complexType>
+      <xs:attribute name="rtcinterrupts" type="xs:nonNegativeInteger"/>  
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="eventsetup">
+    <xs:complexType>
+      <xs:attribute name="id" type="xs:nonNegativeInteger" use="required"/>
+      <xs:attribute name="eventname" type="xs:Name" use="required"/>
+      <xs:attribute name="unitmask" type="xs:string" use="optional"/>
+      <xs:attribute name="setupcount" type="xs:nonNegativeInteger" use="required"/>
+    </xs:complexType>
+  </xs:element>
+
+  <!--
+  	the cpu attribute will only be present in profiles with more than one
+	separated cpus.  the event attribute will only appear if there is more
+	than one event in the profile.  the mask attribute will only appear if
+	there is a single non-zero mask, or multiple mask values.
+   -->
+  <xs:element name="class">
+    <xs:complexType>
+      <xs:attribute name="name" type="xs:string" use="required"/>
+      <xs:attribute name="cpu" type="xs:nonNegativeInteger" use="optional"/>
+      <xs:attribute name="event" type="xs:nonNegativeInteger" use="optional"/>
+      <xs:attribute name="mask" type="xs:nonNegativeInteger" use="optional"/>
+    </xs:complexType>
+  </xs:element>
+  
+  <xs:element name="classes">
+    <xs:complexType>
+      <xs:sequence>
+	<xs:element minOccurs="1" maxOccurs="unbounded" ref="class"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="count">
+  <xs:complexType>
+    <xs:simpleContent>
+      <xs:extension base="xs:nonNegativeInteger">
+		<!-- if no separation by cpu and only a single non masked event
+		     the class attribute is unnecessary -->
+        <xs:attribute name="class" type="xs:string" use="optional"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  </xs:element>
+
+  <xs:element name="process">
+    <xs:complexType>
+      <xs:sequence>
+	<xs:element minOccurs="1" maxOccurs="1" ref="count"/>
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="thread"/>
+      </xs:sequence>
+      <xs:attribute name="pid" type="xs:integer" use="required"/>
+      <xs:attribute name="name" type="xs:string" use="required"/>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="thread">
+    <xs:complexType>
+      <xs:sequence>
+		<xs:element minOccurs="1" maxOccurs="1" ref="count"/>
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="module"/>
+      </xs:sequence>
+      <xs:attribute name="tid" type="xs:integer" use="required"/>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="binary">
+    <xs:complexType>
+      <xs:sequence>
+		<xs:element minOccurs="1" maxOccurs="1" ref="count"/>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="symbol"/>
+        <!-- When the separate=lib option is used an binary
+		     can contain a list of library Modules.  -->
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="module"/>
+      </xs:sequence>
+      <xs:attribute name="name" type="xs:string" use="required"/>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="module">
+    <xs:complexType>
+      <xs:sequence>
+		<xs:element minOccurs="0" maxOccurs="1" ref="count"/>
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="symbol"/>
+      </xs:sequence>
+      <xs:attribute name="name" type="xs:string" use="required"/>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="callees">
+    <xs:complexType>
+      <xs:choice>
+		<xs:element minOccurs="0" maxOccurs="unbounded" ref="module"/>
+		<xs:element minOccurs="0" maxOccurs="unbounded" ref="symbol"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="callers">
+    <xs:complexType>
+      <xs:choice>
+		<xs:element minOccurs="0" maxOccurs="unbounded" ref="module"/>
+		<xs:element minOccurs="0" maxOccurs="unbounded" ref="symbol"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+
+
+  <xs:element name="symboltable">
+    <xs:complexType>
+      <xs:sequence>
+		<xs:element minOccurs="1" maxOccurs="unbounded" ref="symboldata"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+
+  <!--
+    The symboldata element contains the symbolic debug information that is
+    made available by the debug-info and details options.  This information
+    is shared across by all module instances that reference it and thus it
+    does not contain any sample dependent data.
+   -->
+  <xs:element name="symboldata">
+    <xs:complexType>
+      <xs:attribute name="name" type="xs:string" use="required"/>
+      <xs:attribute name="id" type="xs:integer" use="required"/>
+      <!-- optional debug-info attributes -->
+      <xs:attribute name="file" type="xs:string" use="optional"/>
+      <xs:attribute name="line" type="xs:nonNegativeInteger" use="optional"/>
+      <!-- startingaddr: optional details or show-address attribute  -->
+      <xs:attribute name="startingaddr" use="optional"/>
+      <!-- codelength: optional details attribute  -->
+      <xs:attribute name="codelength" type="xs:integer" use="optional"/>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="symbol">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="1" ref="callers"/>
+        <xs:element minOccurs="0" maxOccurs="1" ref="callees"/>
+        <xs:element minOccurs="0" maxOccurs="1" ref="count"/>
+      </xs:sequence>
+	  <!-- idref is an index into symboltable table-->
+      <xs:attribute name="idref" type="xs:nonNegativeInteger" use="required"/>
+	  <!-- self is a boolean to mark self referencing callee symbols -->
+      <xs:attribute name="self" type="xs:boolean" use="optional"/>
+	  <!-- detaillo,detailhi lookup ids into corresponding symboldetails -->
+      <xs:attribute name="detaillo" type="xs:nonNegativeInteger" use="optional"/>
+      <xs:attribute name="detailhi" type="xs:nonNegativeInteger" use="optional"/>
+    </xs:complexType>
+  </xs:element>
+
+  <!-- detailtable is a table of symboldetails that are referenced
+       from symboldata. The table is only generated with the details
+	   option is used and appears at the end of the XML file so that
+	   a GUI can process the summary data without having to process
+	   all of the details. -->
+  <xs:element name="detailtable">
+    <xs:complexType>
+      <xs:sequence>
+		<xs:element minOccurs="1" maxOccurs="unbounded" ref="symboldetails"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+
+  <!-- symboldetails is a collection of all of the individual detaildata
+       associated with possibly multiple instances of a symbol. -->
+  <xs:element name="symboldetails">
+    <xs:complexType>
+      <xs:sequence>
+		<xs:element minOccurs="1" maxOccurs="unbounded" ref="detaildata"/>
+      </xs:sequence>
+      <xs:attribute name="id" type="xs:integer" use="required"/>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="detaildata">
+    <xs:complexType>
+      <xs:sequence>
+    	  <xs:element minOccurs="1" maxOccurs="unbounded" ref="count"/>
+      </xs:sequence>
+	  <!-- line only occurs when debug-info option used -->
+	  <xs:attribute name="line" type="xs:nonNegativeInteger" use="optional"/>
+	  <!-- file only occurs when debug-info option used and
+		   the file is different than the symbol associated with
+		   this sample data.  this situation can occur when inline functions
+		   are defined in #include header files.
+	   -->
+	  <xs:attribute name="file" type="xs:string" use="optional"/>
+      <xs:attribute name="vmaoffset" type="xs:hexBinary" use="required"/>
+      <xs:attribute name="id" type="xs:integer" use="required"/>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:element name="bytes">
+  <xs:complexType>
+    <xs:simpleContent>
+      <xs:extension base="xs:hexBinary">
+        <xs:attribute name="id" type="xs:nonNegativeInteger" use="required"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  </xs:element>
+
+  <xs:element name="bytestable">
+    <xs:complexType>
+      <xs:sequence>
+	    <!-- Contains binary data for the machine instructions -->
+		<xs:element minOccurs="1" maxOccurs="unbounded" ref="bytes"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
+
diff --git a/oprofile-0.9.7/doc/oprofile.1 b/oprofile-0.9.7/doc/oprofile.1
new file mode 100644
index 0000000..bae58a6
--- /dev/null
+++ b/oprofile-0.9.7/doc/oprofile.1
@@ -0,0 +1,193 @@
+.TH OPROFILE 1 "Fri 12 August 2011" "oprofile 0.9.7"
+.UC 4
+.SH NAME
+oprofile \- a system-wide profiler
+.SH SYNOPSIS
+.br
+.B opcontrol
+[
+.I options
+]
+.br
+.B opreport
+[
+.I options
+]
+[ profile specification ]
+.br
+.B opannotate
+[
+.I options
+]
+[ profile specification ]
+.br
+.B oparchive
+[
+.I options
+]
+[ profile specification ]
+.br
+.B opgprof
+[
+.I options
+]
+[ profile specification ]
+.br
+.SH DESCRIPTION
+OProfile is a profiling system for systems running Linux
+2.2, 2.4, and 2.6. Profiling runs transparently in the background and profile
+data can be collected at any time. OProfile makes use of the hardware
+performance counters provided on Intel, AMD, and other processors,
+and uses a timer-interrupt based mechanism on CPUs without counters.
+OProfile can profile the whole system in high detail.
+.br
+For a gentle guide to using OProfile, please read the HTML documentation
+listed in SEE ALSO.
+.br
+.SH OPCONTROL
+.B opcontrol
+is used for starting and stopping the OProfile daemon, and providing set-up
+parameters.
+.SH OPREPORT
+.B opreport
+gives image and symbol-based profile summaries for the whole system or
+a subset of binary images.
+.SH OPANNOTATE
+.B opannotate
+can produce annotated source or mixed source and assembly output.
+.SH OPARCHIVE
+.B oparchive
+produces oprofile archive for offline analysis
+.SH OPGPROF
+.B opgprof
+can produce a gprof-format profile for a single binary.
+
+.SH PROFILE SPECIFICATIONS
+All of the post-profiling tools can take profile specifications,
+which is some combination of the following parameters. Enclosing
+part of a profile specification in curly braces { } can be used
+for differential profiles with
+.B opreport
+; the braces
+.B must
+be surrounded by whitespace.
+
+.TP
+.BI "archive:"archive
+Path to the archive to inspect, as generated by
+.B oparchive
+.br
+.TP
+.BI "session:"sessionlist
+A comma-separated list of session names to resolve in. Absence of this
+tag, unlike all others, means "the current session", equivalent to
+specifying "session:current".
+.br
+.TP
+.BI "session-exclude:"sessionlist
+A comma-separated list of sessions to exclude.
+.br
+.TP
+.BI "image:"imagelist
+A comma-separated list of image names to resolve. Each entry may be relative
+path, glob-style name, or full path, e.g.
+opreport 'image:/usr/bin/oprofiled,*op*,./oprofpp'
+.br
+.TP
+.BI "image-exclude:"imagelist
+Same as image:, but the matching images are excluded.
+.br
+.TP
+.BI "lib-image:"imagelist
+Same as image:, but only for images that are for
+a particular primary binary image (namely, an application). This only
+makes sense to use if you're using --separate.
+This includes kernel modules and the kernel when using
+--separate=kernel.
+.br
+.TP
+.BI "lib-image-exclude:"imagelist
+Same as <option>lib-image:</option>, but the matching images
+are excluded.
+.br
+.TP
+.BI "event:"eventname
+The symbolic event name to match on, e.g. event:DATA_MEM_REFS.
+.br
+.TP
+.BI "count:"eventcount
+The event count to match on, e.g. event:DATA_MEM_REFS count:30000.
+.br
+.TP
+.BI "unit-mask:"maskvalue
+The unit mask value of the event to match on, e.g. unit-mask:1.
+.br
+.TP
+.BI "cpu:"cpulist
+Only consider profiles for the given numbered CPU (starting from zero).
+This is only useful when using CPU profile separation.
+.br
+.TP
+.BI "tgid:"pidlist
+Only consider profiles for the given task groups. Unless some program is
+using threads, the task group ID of a process is the same as its process
+ID. This option corresponds to the POSIX notion of a thread group. This
+is only useful when using per-process profile separation.
+.br
+.TP
+.BI "tid:"tidlist
+Only consider profiles for the given threads. When using recent thread
+libraries, all threads in a process share the same task group ID, but
+have different thread IDs. You can use this option in combination with
+tgid: to restrict the results to particular threads within a process.
+This is only useful when using per-process profile separation.
+
+.SH ENVIRONMENT
+No special environment variables are recognised by oprofile.
+
+.SH FILES
+.TP
+.I $HOME/.oprofile/
+Configuration files
+.TP
+.I /root/.oprofile/daemonrc
+Configuration file for opcontrol
+.TP
+.I /opt/oprofile-0.9.7-rc3/share/oprofile/
+Event description files used by OProfile.
+.TP
+.I /var/lib/oprofile/samples/oprofiled.log
+The user-space daemon logfile.
+.TP
+.I /var/lib/oprofile/opdev, /var/lib/oprofile/ophashmapdev, /var/lib/oprofile/opnotedev
+The device files for communication with the Linux 2.4 kernel module. 
+.TP
+.I /dev/oprofile
+The device filesystem for communication with the Linux 2.6 kernel module. 
+.TP
+.I /var/lib/oprofile/samples/
+The location of the generated sample files.
+
+.SH VERSION
+.TP
+This man page is current for oprofile-0.9.7.
+
+.SH SEE ALSO
+.BR /opt/oprofile-0.9.7-rc3/share/doc/oprofile/,
+.BR opcontrol(1),
+.BR opreport(1),
+.BR opannotate(1),
+.BR oparchive(1),
+.BR opgprof(1),
+.BR gprof(1),
+.BR readprofile(1),
+.BR "CPU vendor architecture manuals"
+
+.SH COPYRIGHT
+oprofile is Copyright (C) 1998-2004 University of Manchester, UK, John Levon,
+and others.
+OProfile is released under the GNU General Public License, Version 2,
+or (at your option) any later version.
+.SH AUTHORS
+John Levon <levon@movementarian.org> is the primary author. See the documentation
+for other contributors.
diff --git a/oprofile-0.9.7/doc/oprofile.1.in b/oprofile-0.9.7/doc/oprofile.1.in
new file mode 100644
index 0000000..3d0f0ed
--- /dev/null
+++ b/oprofile-0.9.7/doc/oprofile.1.in
@@ -0,0 +1,193 @@
+.TH OPROFILE 1 "@DATE@" "oprofile @VERSION@"
+.UC 4
+.SH NAME
+oprofile \- a system-wide profiler
+.SH SYNOPSIS
+.br
+.B opcontrol
+[
+.I options
+]
+.br
+.B opreport
+[
+.I options
+]
+[ profile specification ]
+.br
+.B opannotate
+[
+.I options
+]
+[ profile specification ]
+.br
+.B oparchive
+[
+.I options
+]
+[ profile specification ]
+.br
+.B opgprof
+[
+.I options
+]
+[ profile specification ]
+.br
+.SH DESCRIPTION
+OProfile is a profiling system for systems running Linux
+2.2, 2.4, and 2.6. Profiling runs transparently in the background and profile
+data can be collected at any time. OProfile makes use of the hardware
+performance counters provided on Intel, AMD, and other processors,
+and uses a timer-interrupt based mechanism on CPUs without counters.
+OProfile can profile the whole system in high detail.
+.br
+For a gentle guide to using OProfile, please read the HTML documentation
+listed in SEE ALSO.
+.br
+.SH OPCONTROL
+.B opcontrol
+is used for starting and stopping the OProfile daemon, and providing set-up
+parameters.
+.SH OPREPORT
+.B opreport
+gives image and symbol-based profile summaries for the whole system or
+a subset of binary images.
+.SH OPANNOTATE
+.B opannotate
+can produce annotated source or mixed source and assembly output.
+.SH OPARCHIVE
+.B oparchive
+produces oprofile archive for offline analysis
+.SH OPGPROF
+.B opgprof
+can produce a gprof-format profile for a single binary.
+
+.SH PROFILE SPECIFICATIONS
+All of the post-profiling tools can take profile specifications,
+which is some combination of the following parameters. Enclosing
+part of a profile specification in curly braces { } can be used
+for differential profiles with
+.B opreport
+; the braces
+.B must
+be surrounded by whitespace.
+
+.TP
+.BI "archive:"archive
+Path to the archive to inspect, as generated by
+.B oparchive
+.br
+.TP
+.BI "session:"sessionlist
+A comma-separated list of session names to resolve in. Absence of this
+tag, unlike all others, means "the current session", equivalent to
+specifying "session:current".
+.br
+.TP
+.BI "session-exclude:"sessionlist
+A comma-separated list of sessions to exclude.
+.br
+.TP
+.BI "image:"imagelist
+A comma-separated list of image names to resolve. Each entry may be relative
+path, glob-style name, or full path, e.g.
+opreport 'image:/usr/bin/oprofiled,*op*,./oprofpp'
+.br
+.TP
+.BI "image-exclude:"imagelist
+Same as image:, but the matching images are excluded.
+.br
+.TP
+.BI "lib-image:"imagelist
+Same as image:, but only for images that are for
+a particular primary binary image (namely, an application). This only
+makes sense to use if you're using --separate.
+This includes kernel modules and the kernel when using
+--separate=kernel.
+.br
+.TP
+.BI "lib-image-exclude:"imagelist
+Same as <option>lib-image:</option>, but the matching images
+are excluded.
+.br
+.TP
+.BI "event:"eventname
+The symbolic event name to match on, e.g. event:DATA_MEM_REFS.
+.br
+.TP
+.BI "count:"eventcount
+The event count to match on, e.g. event:DATA_MEM_REFS count:30000.
+.br
+.TP
+.BI "unit-mask:"maskvalue
+The unit mask value of the event to match on, e.g. unit-mask:1.
+.br
+.TP
+.BI "cpu:"cpulist
+Only consider profiles for the given numbered CPU (starting from zero).
+This is only useful when using CPU profile separation.
+.br
+.TP
+.BI "tgid:"pidlist
+Only consider profiles for the given task groups. Unless some program is
+using threads, the task group ID of a process is the same as its process
+ID. This option corresponds to the POSIX notion of a thread group. This
+is only useful when using per-process profile separation.
+.br
+.TP
+.BI "tid:"tidlist
+Only consider profiles for the given threads. When using recent thread
+libraries, all threads in a process share the same task group ID, but
+have different thread IDs. You can use this option in combination with
+tgid: to restrict the results to particular threads within a process.
+This is only useful when using per-process profile separation.
+
+.SH ENVIRONMENT
+No special environment variables are recognised by oprofile.
+
+.SH FILES
+.TP
+.I $HOME/.oprofile/
+Configuration files
+.TP
+.I /root/.oprofile/daemonrc
+Configuration file for opcontrol
+.TP
+.I @prefix@/share/oprofile/
+Event description files used by OProfile.
+.TP
+.I /var/lib/oprofile/samples/oprofiled.log
+The user-space daemon logfile.
+.TP
+.I /var/lib/oprofile/opdev, /var/lib/oprofile/ophashmapdev, /var/lib/oprofile/opnotedev
+The device files for communication with the Linux 2.4 kernel module. 
+.TP
+.I /dev/oprofile
+The device filesystem for communication with the Linux 2.6 kernel module. 
+.TP
+.I /var/lib/oprofile/samples/
+The location of the generated sample files.
+
+.SH VERSION
+.TP
+This man page is current for @PACKAGE@-@VERSION@.
+
+.SH SEE ALSO
+.BR @OP_DOCDIR@,
+.BR opcontrol(1),
+.BR opreport(1),
+.BR opannotate(1),
+.BR oparchive(1),
+.BR opgprof(1),
+.BR gprof(1),
+.BR readprofile(1),
+.BR "CPU vendor architecture manuals"
+
+.SH COPYRIGHT
+oprofile is Copyright (C) 1998-2004 University of Manchester, UK, John Levon,
+and others.
+OProfile is released under the GNU General Public License, Version 2,
+or (at your option) any later version.
+.SH AUTHORS
+John Levon <levon@movementarian.org> is the primary author. See the documentation
+for other contributors.
diff --git a/oprofile-0.9.7/doc/oprofile.html b/oprofile-0.9.7/doc/oprofile.html
new file mode 100644
index 0000000..128d9f7
--- /dev/null
+++ b/oprofile-0.9.7/doc/oprofile.html
@@ -0,0 +1,5380 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+    <title>OProfile manual</title>
+    <meta name="generator" content="DocBook XSL Stylesheets V1.75.2" />
+  </head>
+  <body>
+    <div class="book" title="OProfile manual">
+      <div class="titlepage">
+        <div>
+          <div>
+            <h1 class="title"><a id="oprofile-guide"></a>OProfile manual</h1>
+          </div>
+          <div>
+            <div class="authorgroup">
+              <div class="author">
+                <h3 class="author"><span class="firstname">John</span> <span class="surname">Levon</span></h3>
+                <div class="affiliation">
+                  <div class="address">
+                    <p>
+                      <code class="email">&lt;<a class="email" href="mailto:levon@movementarian.org">levon@movementarian.org</a>&gt;</code>
+                    </p>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div>
+            <p class="copyright">Copyright © 2000-2004 Victoria University of Manchester, John Levon and others</p>
+          </div>
+        </div>
+        <hr />
+      </div>
+      <div class="toc">
+        <p>
+          <b>Table of Contents</b>
+        </p>
+        <dl>
+          <dt>
+            <span class="chapter">
+              <a href="#introduction">1. Introduction</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#applications">1. Applications of OProfile</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#jitsupport">1.1. Support for dynamically compiled (JIT) code</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#requirements">2. System requirements</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#resources">3. Internet resources</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#install">4. Installation</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#uninstall">5. Uninstalling OProfile</a>
+                </span>
+              </dt>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#overview">2. Overview</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#getting-started">1. Getting started</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#tools-overview">2. Tools summary</a>
+                </span>
+              </dt>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#controlling">3. Controlling the profiler</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#controlling-daemon">1. Using <span class="command"><strong>opcontrol</strong></span></a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#opcontrolexamples">1.1. Examples</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#eventspec">1.2. Specifying performance counter events</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#setup-jit">2. Setting up the JIT profiling feature</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#setup-jit-jvm">2.1. JVM instrumentation</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#oprofile-gui">3. Using <span class="command"><strong>oprof_start</strong></span></a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#detailed-parameters">4. Configuration details</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#hardware-counters">4.1. Hardware performance counters</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#rtc">4.2. OProfile in RTC mode</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#timer">4.3. OProfile in timer interrupt mode</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#p4">4.4. Pentium 4 support</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#ia64">4.5. Intel Itanium 2 support</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#ppc64">4.6. PowerPC64 support</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#cell-be">4.7. Cell Broadband Engine support</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#amd-ibs-support">4.8. AMD64 (x86_64) Instruction-Based Sampling (IBS) support</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#misuse">4.9. Dangerous counter settings</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#results">4. Obtaining results</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#profile-spec">1. Profile specifications</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#profile-spec-examples">1.1. Examples</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#profile-spec-details">1.2. Profile specification parameters</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#locating-and-managing-binary-images">1.3. Locating and managing binary images</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#no-results">1.4. What to do when you don't get any results</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#opreport">2. Image summaries and symbol summaries (<span class="command"><strong>opreport</strong></span>)</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#opreport-merging">2.1. Merging separate profiles</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#opreport-comparison">2.2. Side-by-side multiple results</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#opreport-callgraph">2.3. Callgraph output</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#opreport-diff">2.4. Differential profiles with <span class="command"><strong>opreport</strong></span></a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#opreport-anon">2.5. Anonymous executable mappings</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#opreport-xml">2.6. XML formatted output</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#opreport-options">2.7. Options for <span class="command"><strong>opreport</strong></span></a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#opannotate">3. Outputting annotated source (<span class="command"><strong>opannotate</strong></span>)</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#opannotate-finding-source">3.1. Locating source files</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#opannotate-details">3.2. Usage of <span class="command"><strong>opannotate</strong></span></a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#getting-jit-reports">4. OProfile results with JIT samples</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#opgprof">5. <span class="command"><strong>gprof</strong></span>-compatible output (<span class="command"><strong>opgprof</strong></span>)</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#opgprof-details">5.1. Usage of <span class="command"><strong>opgprof</strong></span></a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#oparchive">6. Archiving measurements (<span class="command"><strong>oparchive</strong></span>)</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#oparchive-details">6.1. Usage of <span class="command"><strong>oparchive</strong></span></a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#opimport">7. Converting sample database files (<span class="command"><strong>opimport</strong></span>)</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#opimport-details">7.1. Usage of <span class="command"><strong>opimport</strong></span></a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#interpreting">5. Interpreting profiling results</a>
+            </span>
+          </dt>
+          <dd>
+            <dl>
+              <dt>
+                <span class="sect1">
+                  <a href="#irq-latency">1. Profiling interrupt latency</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#kernel-profiling">2. Kernel profiling</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#irq-masking">2.1. Interrupt masking</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#idle">2.2. Idle time</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#kernel-modules">2.3. Profiling kernel modules</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#interpreting-callgraph">3. Interpreting call-graph profiles</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#debug-info">4. Inaccuracies in annotated source</a>
+                </span>
+              </dt>
+              <dd>
+                <dl>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#effect-of-optimizations">4.1. Side effects of optimizations</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#prologues">4.2. Prologues and epilogues</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#inlined-function">4.3. Inlined functions</a>
+                    </span>
+                  </dt>
+                  <dt>
+                    <span class="sect2">
+                      <a href="#wrong-linenr-info">4.4. Inaccuracy in line number information</a>
+                    </span>
+                  </dt>
+                </dl>
+              </dd>
+              <dt>
+                <span class="sect1">
+                  <a href="#symbol-without-debug-info">5. Assembly functions</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#overlapping-symbols">6. Overlapping symbols in JITed code</a>
+                </span>
+              </dt>
+              <dt>
+                <span class="sect1">
+                  <a href="#hidden-cost">7. Other discrepancies</a>
+                </span>
+              </dt>
+            </dl>
+          </dd>
+          <dt>
+            <span class="chapter">
+              <a href="#ack">6. Acknowledgments</a>
+            </span>
+          </dt>
+        </dl>
+      </div>
+      <div class="chapter" title="Chapter 1. Introduction">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="introduction"></a>Chapter 1. Introduction</h2>
+            </div>
+          </div>
+        </div>
+        <div class="toc">
+          <p>
+            <b>Table of Contents</b>
+          </p>
+          <dl>
+            <dt>
+              <span class="sect1">
+                <a href="#applications">1. Applications of OProfile</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#jitsupport">1.1. Support for dynamically compiled (JIT) code</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#requirements">2. System requirements</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#resources">3. Internet resources</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#install">4. Installation</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#uninstall">5. Uninstalling OProfile</a>
+              </span>
+            </dt>
+          </dl>
+        </div>
+        <p>
+This manual applies to OProfile version 0.9.7-rc2.
+OProfile is a profiling system for Linux 2.2/2.4/2.6 systems on a number of architectures. It is capable of profiling
+all parts of a running system, from the kernel (including modules and interrupt handlers) to shared libraries
+to binaries. It runs transparently in the background collecting information at a low overhead. These
+features make it ideal for profiling entire systems to determine bottle necks in real-world systems.
+</p>
+        <p>
+Many CPUs provide "performance counters", hardware registers that can count "events"; for example,
+cache misses, or CPU cycles. OProfile provides profiles of code based on the number of these occurring events:
+repeatedly, every time a certain (configurable) number of events has occurred, the PC value is recorded.
+This information is aggregated into profiles for each binary image.</p>
+        <p>
+Some hardware setups do not allow OProfile to use performance counters: in these cases, no
+events are available, and OProfile operates in timer/RTC mode, as described in later chapters.
+</p>
+        <div class="sect1" title="1. Applications of OProfile">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="applications"></a>1. Applications of OProfile</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+OProfile is useful in a number of situations. You might want to use OProfile when you :
+</p>
+          <div class="itemizedlist">
+            <ul class="itemizedlist" type="disc">
+              <li class="listitem">
+                <p>need low overhead</p>
+              </li>
+              <li class="listitem">
+                <p>cannot use highly intrusive profiling methods</p>
+              </li>
+              <li class="listitem">
+                <p>need to profile interrupt handlers</p>
+              </li>
+              <li class="listitem">
+                <p>need to profile an application and its shared libraries</p>
+              </li>
+              <li class="listitem">
+                <p>need to profile dynamically compiled code of supported virtual machines (see <a class="xref" href="#jitsupport" title="1.1. Support for dynamically compiled (JIT) code">Section 1.1, &#8220;Support for dynamically compiled (JIT) code&#8221;</a>)</p>
+              </li>
+              <li class="listitem">
+                <p>need to capture the performance behaviour of entire system</p>
+              </li>
+              <li class="listitem">
+                <p>want to examine hardware effects such as cache misses</p>
+              </li>
+              <li class="listitem">
+                <p>want detailed source annotation</p>
+              </li>
+              <li class="listitem">
+                <p>want instruction-level profiles</p>
+              </li>
+              <li class="listitem">
+                <p>want call-graph profiles</p>
+              </li>
+            </ul>
+          </div>
+          <p>
+OProfile is not a panacea. OProfile might not be a complete solution when you :
+</p>
+          <div class="itemizedlist">
+            <ul class="itemizedlist" type="disc">
+              <li class="listitem">
+                <p>require call graph profiles on platforms other than 2.6/x86</p>
+              </li>
+              <li class="listitem">
+                <p>don't have root permissions</p>
+              </li>
+              <li class="listitem">
+                <p>require 100% instruction-accurate profiles</p>
+              </li>
+              <li class="listitem">
+                <p>need function call counts or an interstitial profiling API</p>
+              </li>
+              <li class="listitem">
+                <p>cannot tolerate any disturbance to the system whatsoever</p>
+              </li>
+              <li class="listitem">
+                <p>need to profile interpreted or dynamically compiled code of non-supported virtual machines</p>
+              </li>
+            </ul>
+          </div>
+          <div class="sect2" title="1.1. Support for dynamically compiled (JIT) code">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="jitsupport"></a>1.1. Support for dynamically compiled (JIT) code</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+Older versions of OProfile were not capable of attributing samples to symbols from dynamically
+compiled code, i.e. "just-in-time (JIT) code". Typical JIT compilers load the JIT code into
+anonymous memory regions. OProfile reported the samples from such code, but the attribution
+provided was simply:
+        </p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">"anon: &lt;tgid&gt;&lt;address range&gt;" </pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+Due to this limitation, it wasn't possible to profile applications executed by virtual machines (VMs)
+like the Java Virtual Machine. OProfile now contains an infrastructure to support JITed code.
+A development library is provided to allow developers
+to add support for any VM that produces dynamically compiled code (see the <span class="emphasis"><em>OProfile JIT agent
+developer guide</em></span>).
+In addition, built-in support is included for the following:</p>
+            <div class="itemizedlist">
+              <ul class="itemizedlist" type="disc">
+                <li class="listitem">JVMTI agent library for Java (1.5 and higher)</li>
+                <li class="listitem">JVMPI agent library for Java (1.5 and lower)</li>
+              </ul>
+            </div>
+            <p>
+For information on how to use OProfile's JIT support, see <a class="xref" href="#setup-jit" title="2. Setting up the JIT profiling feature">Section 2, &#8220;Setting up the JIT profiling feature&#8221;</a>.
+</p>
+          </div>
+        </div>
+        <div class="sect1" title="2. System requirements">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="requirements"></a>2. System requirements</h2>
+              </div>
+            </div>
+          </div>
+          <div class="variablelist">
+            <dl>
+              <dt>
+                <span class="term">Linux kernel 2.2/2.4/2.6</span>
+              </dt>
+              <dd>
+                <p>
+			OProfile uses a kernel module that can be compiled for
+			2.2.11 or later and 2.4. 2.4.10 or above is required if you use the 
+			boot-time kernel option <code class="option">nosmp</code>.  2.6 kernels are supported with the in-kernel
+			OProfile driver. Note that only 32-bit x86 and IA64 are supported on 2.2/2.4 kernels.
+			</p>
+                <p>
+			2.6 kernels are strongly recommended. Under 2.4, OProfile may cause system crashes if power
+			management is used, or the BIOS does not correctly deal with local APICs.
+			</p>
+                <p>
+			To use OProfile's JIT support, a kernel version 2.6.13 or later is required.
+			In earlier kernel versions, the anonymous memory regions are not reported to OProfile and results
+			in profiling reports without any samples in these regions.
+			</p>
+                <p>
+			PPC64 processors (Power4/Power5/PPC970, etc.) require a recent (&gt; 2.6.5) kernel with the line 
+			<code class="constant">#define PV_970</code> present in <code class="filename">include/asm-ppc64/processor.h</code>.
+
+                       </p>
+                <p>
+                       Profiling the Cell Broadband Engine PowerPC Processing Element (PPE) requires a kernel version
+                       of 2.6.18 or more recent.
+                       Profiling the Cell Broadband Engine Synergistic Processing Element (SPE) requires a kernel version
+                       of 2.6.22 or more recent.  Additionally, full support of SPE profiling requires a BFD library
+                       from binutils code dated January 2007 or later.  To ensure the proper BFD support exists, run
+                       the <code class="code">configure</code> utility with <code class="code">--with-target=cell-be</code>.
+
+		       Profiling the Cell Broadband Engine using SPU events requires a kernel version of 2.6.29-rc1
+		       or  more recent.
+
+                       </p>
+                <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>Attempting to profile SPEs with kernel versions older than 2.6.22 may cause the
+                       system to crash.</div>
+                <p>
+                       </p>
+                <p>
+			Instruction-Based Sampling (IBS) profile on AMD family10h processors requires 
+			kernel version 2.6.28-rc2 or later.
+			</p>
+              </dd>
+              <dt>
+                <span class="term">modutils 2.4.6 or above</span>
+              </dt>
+              <dd>
+                <p>
+			You should have installed modutils 2.4.6 or higher (in fact earlier versions work well in almost all
+			cases).
+		</p>
+              </dd>
+              <dt>
+                <span class="term">Supported architecture</span>
+              </dt>
+              <dd>
+                <p>
+			For Intel IA32, a CPU with either a P6 generation or Pentium 4 core is
+			required. In marketing terms this translates to anything
+			between an Intel Pentium Pro (not Pentium Classics) and
+			a Pentium 4 / Xeon, including all Celerons.  The AMD
+			Athlon, Opteron, Phenom, and Turion CPUs are also supported.  Other IA32
+			CPU types only support the RTC mode of OProfile; please
+			see later in this manual for details.  Hyper-threaded Pentium IVs
+			are not supported in 2.4. For 2.4 kernels, the Intel
+			IA-64 CPUs are also supported. For 2.6 kernels, there is additionally
+			support for Alpha processors, MIPS, ARM, x86-64, sparc64, ppc64, AVR32, and,
+			in timer mode, PA-RISC and s390.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">Uniprocessor or SMP</span>
+              </dt>
+              <dd>
+                <p>
+			SMP machines are fully supported.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">Required libraries</span>
+              </dt>
+              <dd>
+                <p>
+			These libraries are required : <code class="filename">popt</code>, <code class="filename">bfd</code>,
+			<code class="filename">liberty</code> (debian users: libiberty is provided in binutils-dev package), <code class="filename">dl</code>,
+			plus the standard C++ libraries.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">Required user account</span>
+              </dt>
+              <dd>
+                <p>
+			For secure processing of sample data from JIT virtual machines (e.g., Java),
+			the special user account "oprofile" must exist on the system.  The 'configure'
+			and 'make install' operations will print warning messages if this
+			account is not found.  If you intend to profile JITed code, you must create
+			a group account named 'oprofile' and then create the 'oprofile' user account,
+			setting the default group to 'oprofile'.  A runtime error message is printed to
+			the oprofile daemon log when processing JIT samples if this special user
+			account cannot be found.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">OProfile GUI</span>
+              </dt>
+              <dd>
+                <p>
+			The use of the GUI to start the profiler requires the <code class="filename">Qt</code> library.
+			Either <code class="filename">Qt 3</code> or <code class="filename">Qt 4</code> should work.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <acronym class="acronym">ELF</acronym>
+                </span>
+              </dt>
+              <dd>
+                <p>
+			Probably not too strenuous a requirement, but older <acronym class="acronym">A.OUT</acronym> binaries/libraries are not supported.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">K&amp;R coding style</span>
+              </dt>
+              <dd>
+                <p>
+			OK, so it's not really a requirement, but I wish it was...
+		</p>
+              </dd>
+            </dl>
+          </div>
+        </div>
+        <div class="sect1" title="3. Internet resources">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="resources"></a>3. Internet resources</h2>
+              </div>
+            </div>
+          </div>
+          <div class="variablelist">
+            <dl>
+              <dt>
+                <span class="term">Web page</span>
+              </dt>
+              <dd>
+                <p>
+			There is a web page (which you may be reading now) at
+			<a class="ulink" href="http://oprofile.sf.net/">http://oprofile.sf.net/</a>.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">Download</span>
+              </dt>
+              <dd>
+                <p>
+			You can download a source tarball or check out code from
+			the code repository at the sourceforge page,
+			<a class="ulink" href="http://sf.net/projects/oprofile/">http://sf.net/projects/oprofile/</a>.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">Mailing list</span>
+              </dt>
+              <dd>
+                <p>
+			There is a low-traffic OProfile-specific mailing list, details at
+			<a class="ulink" href="http://sf.net/mail/?group_id=16191">http://sf.net/mail/?group_id=16191</a>.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">Bug tracker</span>
+              </dt>
+              <dd>
+                <p>
+			There is a bug tracker for OProfile at SourceForge,
+			<a class="ulink" href="http://sf.net/tracker/?group_id=16191&amp;atid=116191">http://sf.net/tracker/?group_id=16191&amp;atid=116191</a>.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">IRC channel</span>
+              </dt>
+              <dd>
+                <p>
+			Several OProfile developers and users sometimes hang out on channel <span class="command"><strong>#oprofile</strong></span>
+			on the <a class="ulink" href="http://oftc.net">OFTC</a> network. 
+		</p>
+              </dd>
+            </dl>
+          </div>
+        </div>
+        <div class="sect1" title="4. Installation">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="install"></a>4. Installation</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+First you need to build OProfile and install it. <span class="command"><strong>./configure</strong></span>, <span class="command"><strong>make</strong></span>, <span class="command"><strong>make install</strong></span>
+is often all you need, but note these arguments to <span class="command"><strong>./configure</strong></span> :
+</p>
+          <div class="variablelist">
+            <dl>
+              <dt>
+                <span class="term">
+                  <code class="option">--with-linux</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+			Use this option to specify the location of the kernel source tree you wish
+			to compile against. The kernel module is built against this source and
+			will only work with a running kernel built from the same source with
+			exact same options, so it is important you specify this option if you need
+			to.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--with-java</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+			Use this option if you need to profile Java applications.  Also, see
+			<a class="xref" href="#requirements" title="2. System requirements">Section 2, &#8220;System requirements&#8221;</a>, "Required user account".  This option
+			is used to specify the location of the Java Development Kit (JDK)
+			source tree you wish to use. This is necessary to get the interface description
+			of the JVMPI (or JVMTI) interface to compile the JIT support code successfully.
+			</p>
+                <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
+                  <h3 class="title">Note</h3>
+                  <p>
+				The Java Runtime Environment (JRE) does not include the development
+				files that are required to compile the JIT support code, so the full
+				JDK must be installed in order to use this option.
+				</p>
+                </div>
+                <p>
+			By default, the Oprofile JIT support libraries will be installed in
+			<code class="filename">&lt;oprof_install_dir&gt;/lib/oprofile</code>.  To build
+			and install OProfile and the JIT support libraries as 64-bit, you can
+			do something like the following:
+			</p>
+                <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+                  <tr>
+                    <td>
+                      <pre class="screen">
+			# CFLAGS="-m64" CXXFLAGS="-m64" ./configure \
+			--with-kernel-support --with-java={my_jdk_installdir} \
+			--libdir=/usr/local/lib64
+			</pre>
+                    </td>
+                  </tr>
+                </table>
+                <p>
+			</p>
+                <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
+                  <h3 class="title">Note</h3>
+                  <p>
+				If you encounter errors building 64-bit, you should
+				install libtool 1.5.26 or later since that release of
+				libtool fixes known problems for certain platforms.
+				If you install libtool into a non-standard location,
+				you'll need to edit the invocation of 'aclocal' in
+				OProfile's autogen.sh as follows (assume an install
+				location of /usr/local):
+				</p>
+                  <p>
+				<code class="code">aclocal -I m4 -I /usr/local/share/aclocal</code>
+				</p>
+                </div>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--with-kernel-support</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+			Use this option with 2.6 and above kernels to indicate the 
+	    		kernel provides the OProfile device driver.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--with-qt-dir/includes/libraries</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+			Specify the location of Qt headers and libraries. It defaults to searching in
+			<code class="constant">$QTDIR</code> if these are not specified.
+		</p>
+              </dd>
+              <dt>
+                <a id="disable-werror"></a>
+                <span class="term">
+                  <code class="option">--disable-werror</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+			Development versions of OProfile build by
+			default with <code class="option">-Werror</code>. This option turns
+			<code class="option">-Werror</code> off.
+		</p>
+              </dd>
+              <dt>
+                <a id="disable-optimization"></a>
+                <span class="term">
+                  <code class="option">--disable-optimization</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+			Disable the <code class="option">-O2</code> compiler flag
+			(useful if you discover an OProfile bug and want to give a useful
+			back-trace etc.)
+		</p>
+              </dd>
+            </dl>
+          </div>
+          <p>
+You'll need to have a configured kernel source for the current kernel
+to build the module for 2.4 kernels.  Since all distributions provide different kernels it's unlikely the running kernel match the configured source
+you installed. The safest way is to recompile your own kernel, run it and compile oprofile. It is also recommended that if you have a
+uniprocessor machine, you enable the local APIC / IO_APIC support for
+your kernel (this is automatically enabled for SMP kernels). With many BIOS, kernel &gt;= 2.6.9 and UP kernel it's not sufficient to enable the local APIC you must also turn it on explicitly at boot time by providing "lapic" option to the kernel. On
+machines with power management, such as laptops, the power management
+must be turned off when using OProfile with 2.4 kernels. The power management software
+in the BIOS cannot handle the non-maskable interrupts (NMIs) used by
+OProfile for data collection. If you use the NMI watchdog, be aware that
+the watchdog is disabled when profiling starts, and not re-enabled until the
+OProfile module is removed (or, in 2.6, when OProfile is not running). If you compile OProfile for
+a 2.2 kernel you must be root to compile the module. If you are using
+2.6 kernels or higher, you do not need kernel source, as long as the
+OProfile driver is enabled; additionally, you should not need to disable
+power management.
+</p>
+          <p>
+Please note that you must save or have available the <code class="filename">vmlinux</code> file
+generated during a kernel compile, as OProfile needs it (you can use
+<code class="option">--no-vmlinux</code>, but this will prevent kernel profiling).
+</p>
+        </div>
+        <div class="sect1" title="5. Uninstalling OProfile">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="uninstall"></a>5. Uninstalling OProfile</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+You must have the source tree available to uninstall OProfile; a <span class="command"><strong>make uninstall</strong></span> will
+remove all installed files except your configuration file in the directory <code class="filename">~/.oprofile</code>.
+</p>
+        </div>
+      </div>
+      <div class="chapter" title="Chapter 2. Overview">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="overview"></a>Chapter 2. Overview</h2>
+            </div>
+          </div>
+        </div>
+        <div class="toc">
+          <p>
+            <b>Table of Contents</b>
+          </p>
+          <dl>
+            <dt>
+              <span class="sect1">
+                <a href="#getting-started">1. Getting started</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#tools-overview">2. Tools summary</a>
+              </span>
+            </dt>
+          </dl>
+        </div>
+        <div class="sect1" title="1. Getting started">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="getting-started"></a>1. Getting started</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+Before you can use OProfile, you must set it up. The minimum setup required for this
+is to tell OProfile where the <code class="filename">vmlinux</code> file corresponding to the
+running kernel is, for example :
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">opcontrol --vmlinux=/boot/vmlinux-`uname -r`</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+If you don't want to profile the kernel itself,
+you can tell OProfile you don't have a <code class="filename">vmlinux</code> file :
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">opcontrol --no-vmlinux</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+Now we are ready to start the daemon (<span class="command"><strong>oprofiled</strong></span>) which collects
+the profile data :
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">opcontrol --start</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+When I want to stop profiling, I can do so with :
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">opcontrol --shutdown</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+Note that unlike <span class="command"><strong>gprof</strong></span>, no instrumentation (<code class="option">-pg</code>
+and <code class="option">-a</code> options to <span class="command"><strong>gcc</strong></span>)
+is necessary.
+</p>
+          <p>
+Periodically (or on <span class="command"><strong>opcontrol --shutdown</strong></span> or <span class="command"><strong>opcontrol --dump</strong></span>)
+the profile data is written out into the $SESSION_DIR/samples directory (by default at <code class="filename">/var/lib/oprofile/samples</code>).
+These profile files cover shared libraries, applications, the kernel (vmlinux), and kernel modules.
+You can clear the profile data (at any time) with <span class="command"><strong>opcontrol --reset</strong></span>.
+</p>
+          <p>
+To place these sample database files in a specific directory instead of the default location (<code class="filename">/var/lib/oprofile</code>) use the <code class="option">--session-dir=dir</code> option. You must also specify the <code class="option">--session-dir</code> to tell the tools to continue using this directory. (In the future, we should allow this to be specified in an environment variable.) :
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">opcontrol --no-vmlinux --session-dir=/home/me/tmpsession</pre>
+              </td>
+            </tr>
+          </table>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">opcontrol --start --session-dir=/home/me/tmpsession</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+You can get summaries of this data in a number of ways at any time. To get a summary of
+data across the entire system for all of these profiles, you can do :
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">opreport [--session-dir=dir]</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+Or to get a more detailed summary, for a particular image, you can do something like :
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">opreport -l /boot/vmlinux-`uname -r`</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+There are also a number of other ways of presenting the data, as described later in this manual.
+Note that OProfile will choose a default profiling setup for you. However, there are a number
+of options you can pass to <span class="command"><strong>opcontrol</strong></span> if you need to change something,
+also detailed later.
+</p>
+        </div>
+        <div class="sect1" title="2. Tools summary">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="tools-overview"></a>2. Tools summary</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+This section gives a brief description of the available OProfile utilities and their purpose.
+</p>
+          <div class="variablelist">
+            <dl>
+              <dt>
+                <span class="term">
+                  <code class="filename">ophelp</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		This utility lists the available events and short descriptions.
+	</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="filename">opcontrol</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		Used for controlling the OProfile data collection, discussed in <a class="xref" href="#controlling" title="Chapter 3. Controlling the profiler">Chapter 3, <i>Controlling the profiler</i></a>.
+	</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="filename">agent libraries</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+			Used by virtual machines (like the Java VM) to record information about JITed code being profiled. See <a class="xref" href="#setup-jit" title="2. Setting up the JIT profiling feature">Section 2, &#8220;Setting up the JIT profiling feature&#8221;</a>.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="filename">opreport</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		This is the main tool for retrieving useful profile data, described in
+		<a class="xref" href="#opreport" title="2. Image summaries and symbol summaries (opreport)">Section 2, &#8220;Image summaries and symbol summaries (<span class="command"><strong>opreport</strong></span>)&#8221;</a>.
+	</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="filename">opannotate</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		This utility can be used to produce annotated source, assembly or mixed source/assembly.
+		Source level annotation is available only if the application was compiled with 
+		debugging symbols. See <a class="xref" href="#opannotate" title="3. Outputting annotated source (opannotate)">Section 3, &#8220;Outputting annotated source (<span class="command"><strong>opannotate</strong></span>)&#8221;</a>.
+	</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="filename">opgprof</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		This utility can output gprof-style data files for a binary, for use with
+		<span class="command"><strong>gprof -p</strong></span>. See <a class="xref" href="#opgprof" title="5. gprof-compatible output (opgprof)">Section 5, &#8220;<span class="command"><strong>gprof</strong></span>-compatible output (<span class="command"><strong>opgprof</strong></span>)&#8221;</a>.
+	</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="filename">oparchive</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		This utility can be used to collect executables, debuginfo,
+		and sample files and copy the files into an archive.
+		The archive is self-contained and can be moved to another
+		machine for further analysis.
+		See <a class="xref" href="#oparchive" title="6. Archiving measurements (oparchive)">Section 6, &#8220;Archiving measurements (<span class="command"><strong>oparchive</strong></span>)&#8221;</a>.
+	</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="filename">opimport</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		This utility converts sample database files from a foreign binary format (abi) to
+		the native format. This is useful only when moving sample files between hosts,
+		for analysis on platforms other than the one used for collection.
+		See <a class="xref" href="#opimport" title="7. Converting sample database files (opimport)">Section 7, &#8220;Converting sample database files (<span class="command"><strong>opimport</strong></span>)&#8221;</a>.
+	</p>
+              </dd>
+            </dl>
+          </div>
+        </div>
+      </div>
+      <div class="chapter" title="Chapter 3. Controlling the profiler">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="controlling"></a>Chapter 3. Controlling the profiler</h2>
+            </div>
+          </div>
+        </div>
+        <div class="toc">
+          <p>
+            <b>Table of Contents</b>
+          </p>
+          <dl>
+            <dt>
+              <span class="sect1">
+                <a href="#controlling-daemon">1. Using <span class="command"><strong>opcontrol</strong></span></a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#opcontrolexamples">1.1. Examples</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#eventspec">1.2. Specifying performance counter events</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#setup-jit">2. Setting up the JIT profiling feature</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#setup-jit-jvm">2.1. JVM instrumentation</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#oprofile-gui">3. Using <span class="command"><strong>oprof_start</strong></span></a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#detailed-parameters">4. Configuration details</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#hardware-counters">4.1. Hardware performance counters</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#rtc">4.2. OProfile in RTC mode</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#timer">4.3. OProfile in timer interrupt mode</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#p4">4.4. Pentium 4 support</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#ia64">4.5. Intel Itanium 2 support</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#ppc64">4.6. PowerPC64 support</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#cell-be">4.7. Cell Broadband Engine support</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#amd-ibs-support">4.8. AMD64 (x86_64) Instruction-Based Sampling (IBS) support</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#misuse">4.9. Dangerous counter settings</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+          </dl>
+        </div>
+        <div class="sect1" title="1. Using opcontrol">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="controlling-daemon"></a>1. Using <span class="command"><strong>opcontrol</strong></span></h2>
+              </div>
+            </div>
+          </div>
+          <p>
+In this section we describe the configuration and control of the profiling system
+with opcontrol in more depth.
+The <span class="command"><strong>opcontrol</strong></span> script has a default setup, but you
+can alter this with the options given below. In particular,
+if your hardware supports performance counters, you can configure them.
+There are a number of counters (for example, counter 0 and counter 1
+on the Pentium III). Each of these counters can be programmed with
+an event to count, such as cache misses or MMX operations. The event
+chosen for each counter is reflected in the profile data collected
+by OProfile: functions and binaries at the top of the profiles reflect
+that most of the chosen events happened within that code.
+</p>
+          <p>
+Additionally, each counter has a "count" value: this corresponds to how
+detailed the profile is. The lower the value, the more frequently profile
+samples are taken. A counter can choose to sample only kernel code, user-space code,
+or both (both is the default). Finally, some events have a "unit mask"
+- this is a value that further restricts the types of event that are counted. 
+The event types and unit masks for your CPU are listed by <span class="command"><strong>opcontrol
+--list-events</strong></span>.
+</p>
+          <p>
+The <span class="command"><strong>opcontrol</strong></span> script provides the following actions :
+</p>
+          <div class="variablelist">
+            <dl>
+              <dt>
+                <span class="term">
+                  <code class="option">--init</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		Loads the OProfile module if required and makes the OProfile driver
+		interface available.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--setup</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		    Followed by list arguments for profiling set up. List of arguments
+		    saved in <code class="filename">/root/.oprofile/daemonrc</code>.
+		    Giving this option is not necessary; you can just directly pass one
+		    of the setup options, e.g. <span class="command"><strong>opcontrol --no-vmlinux</strong></span>.
+		  </p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--status</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		Show configuration information.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--start-daemon</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		    Start the oprofile daemon without starting actual profiling. The profiling
+		can then be started using <code class="option">--start</code>. This is useful for avoiding
+		measuring the cost of daemon startup, as <code class="option">--start</code> is a simple
+		write to a file in oprofilefs. Not available in 2.2/2.4 kernels.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--start</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		    Start data collection with either arguments provided by <code class="option">--setup</code>
+		or information saved in <code class="filename">/root/.oprofile/daemonrc</code>. Specifying
+		the addition <code class="option">--verbose</code> makes the daemon generate lots of debug data
+		whilst it is running.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--dump</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		    Force a flush of the collected profiling data to the daemon.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--stop</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		    Stop data collection (this separate step is not possible with 2.2 or 2.4 kernels).
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--shutdown</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		    Stop data collection and kill the daemon.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--reset</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		    Clears out data from current session, but leaves saved sessions.
+		</p>
+              </dd>
+              <dt>
+                <span class="term"><code class="option">--save=</code>session_name</span>
+              </dt>
+              <dd>
+                <p>
+		    Save data from current session to session_name.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--deinit</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+                Shuts down daemon. Unload the OProfile module and oprofilefs.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--list-events</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		    List event types and unit masks.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--help</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		    Generate usage messages.
+		</p>
+              </dd>
+            </dl>
+          </div>
+          <p>
+There are a number of possible settings, of which, only
+<code class="option">--vmlinux</code> (or <code class="option">--no-vmlinux</code>)
+is required. These settings are stored in <code class="filename">~/.oprofile/daemonrc</code>.
+</p>
+          <div class="variablelist">
+            <dl>
+              <dt>
+                <span class="term"><code class="option">--buffer-size=</code>num</span>
+              </dt>
+              <dd>
+                <p>
+		Number of samples in kernel buffer. When using a 2.6 kernel
+		buffer watershed need to be tweaked when changing this value.
+		</p>
+              </dd>
+              <dt>
+                <span class="term"><code class="option">--buffer-watershed=</code>num</span>
+              </dt>
+              <dd>
+                <p>
+		Set kernel buffer watershed to num samples (2.6 only). When it'll remain only
+		buffer-size - buffer-watershed free entry in the kernel buffer data will be
+		flushed to daemon, most usefull value are in the range [0.25 - 0.5] * buffer-size.
+		</p>
+              </dd>
+              <dt>
+                <span class="term"><code class="option">--cpu-buffer-size=</code>num</span>
+              </dt>
+              <dd>
+                <p>
+		Number of samples in kernel per-cpu buffer (2.6 only). If you
+		profile at high rate it can help to increase this if the log
+		file show excessive count of sample lost cpu buffer overflow. 
+		</p>
+              </dd>
+              <dt>
+                <span class="term"><code class="option">--event=</code>[eventspec]</span>
+              </dt>
+              <dd>
+                <p>
+		Use the given performance counter event to profile.
+		See <a class="xref" href="#eventspec" title="1.2. Specifying performance counter events">Section 1.2, &#8220;Specifying performance counter events&#8221;</a> below.
+		</p>
+              </dd>
+              <dt>
+                <span class="term"><code class="option">--session-dir=</code>dir_path</span>
+              </dt>
+              <dd>
+                <p>
+		    Create/use sample database out of directory <code class="filename">dir_path</code> instead of
+		the default location (/var/lib/oprofile).
+		</p>
+              </dd>
+              <dt>
+                <span class="term"><code class="option">--separate=</code>[none,lib,kernel,thread,cpu,all]</span>
+              </dt>
+              <dd>
+                <p>
+		By default, every profile is stored in a single file. Thus, for example,
+		samples in the C library are all accredited to the <code class="filename">/lib/libc.o</code>
+		profile. However, you choose to create separate sample files by specifying
+		one of the below options.
+		</p>
+                <div class="informaltable">
+                  <table border="1">
+                    <colgroup>
+                      <col />
+                      <col />
+                    </colgroup>
+                    <tbody>
+                      <tr>
+                        <td>
+                          <code class="option">none</code>
+                        </td>
+                        <td>No profile separation (default)</td>
+                      </tr>
+                      <tr>
+                        <td>
+                          <code class="option">lib</code>
+                        </td>
+                        <td>Create per-application profiles for libraries</td>
+                      </tr>
+                      <tr>
+                        <td>
+                          <code class="option">kernel</code>
+                        </td>
+                        <td>Create per-application profiles for the kernel and kernel modules</td>
+                      </tr>
+                      <tr>
+                        <td>
+                          <code class="option">thread</code>
+                        </td>
+                        <td>Create profiles for each thread and each task</td>
+                      </tr>
+                      <tr>
+                        <td>
+                          <code class="option">cpu</code>
+                        </td>
+                        <td>Create profiles for each CPU</td>
+                      </tr>
+                      <tr>
+                        <td>
+                          <code class="option">all</code>
+                        </td>
+                        <td>All of the above options</td>
+                      </tr>
+                    </tbody>
+                  </table>
+                </div>
+                <p>
+		Note  that <code class="option">--separate=kernel</code> also turns on <code class="option">--separate=lib</code>.
+		
+		When using <code class="option">--separate=kernel</code>, samples in hardware interrupts, soft-irqs, or other
+		asynchronous kernel contexts are credited to the task currently running. This means you will see
+		seemingly nonsense profiles such as <code class="filename">/bin/bash</code> showing samples for the PPP modules,
+		etc.
+		</p>
+                <p>
+		On 2.2/2.4 only kernel threads already started when profiling begins are correctly profiled;
+		newly started kernel thread samples are credited to the vmlinux (kernel) profile.
+		</p>
+                <p>
+		Using <code class="option">--separate=thread</code> creates a lot
+		of sample files if you leave OProfile running for a while; it's most
+		useful when used for short sessions, or when using image filtering.
+		</p>
+              </dd>
+              <dt>
+                <span class="term"><code class="option">--callgraph=</code>#depth</span>
+              </dt>
+              <dd>
+                <p>
+		Enable call-graph sample collection with a maximum depth. Use 0 to disable
+		callgraph profiling.  NOTE: Callgraph support is available on a limited
+		number of platforms at this time; for example:
+		</p>
+                <p>
+		</p>
+                <div class="itemizedlist">
+                  <ul class="itemizedlist" type="disc">
+                    <li class="listitem">
+                      <p>x86 with recent 2.6 kernel</p>
+                    </li>
+                    <li class="listitem">
+                      <p>ARM with recent 2.6 kernel</p>
+                    </li>
+                    <li class="listitem">
+                      <p>PowerPC with 2.6.17 kernel</p>
+                    </li>
+                  </ul>
+                </div>
+                <p>
+		</p>
+                <p>
+		</p>
+              </dd>
+              <dt>
+                <span class="term"><code class="option">--image=</code>image,[images]|"all"</span>
+              </dt>
+              <dd>
+                <p>
+		Image filtering. If you specify one or more absolute
+		paths to binaries, OProfile will only produce profile results for those
+		binary images. This is useful for restricting the sometimes voluminous
+		output you may get otherwise, especially with
+		<code class="option">--separate=thread</code>. Note that if you are using
+		<code class="option">--separate=lib</code> or
+		<code class="option">--separate=kernel</code>, then if you specification an
+		application binary, the shared libraries and kernel code
+		<span class="emphasis"><em>are</em></span> included. Specify the value
+		"all" to profile everything (the default).
+		</p>
+              </dd>
+              <dt>
+                <span class="term"><code class="option">--vmlinux=</code>file</span>
+              </dt>
+              <dd>
+                <p>
+		vmlinux kernel image.
+		</p>
+              </dd>
+              <dt>
+                <span class="term">
+                  <code class="option">--no-vmlinux</code>
+                </span>
+              </dt>
+              <dd>
+                <p>
+		Use this when you don't have a kernel vmlinux file, and you don't want
+		to profile the kernel. This still counts the total number of kernel samples,
+		but can't give symbol-based results for the kernel or any modules.
+		</p>
+              </dd>
+            </dl>
+          </div>
+          <div class="sect2" title="1.1. Examples">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="opcontrolexamples"></a>1.1. Examples</h3>
+                </div>
+              </div>
+            </div>
+            <div class="sect3" title="1.1.1. Intel performance counter setup">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="examplesperfctr"></a>1.1.1. Intel performance counter setup</h4>
+                  </div>
+                </div>
+              </div>
+              <p>
+Here, we have a Pentium III running at 800MHz, and we want to look at where data memory
+references are happening most, and also get results for CPU time.
+</p>
+              <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+                <tr>
+                  <td>
+                    <pre class="screen">
+# opcontrol --event=CPU_CLK_UNHALTED:400000 --event=DATA_MEM_REFS:10000
+# opcontrol --vmlinux=/boot/2.6.0/vmlinux
+# opcontrol --start
+</pre>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <div class="sect3" title="1.1.2. RTC mode">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="examplesrtc"></a>1.1.2. RTC mode</h4>
+                  </div>
+                </div>
+              </div>
+              <p>
+Here, we have an Intel laptop without support for performance counters, running on 2.4 kernels.
+</p>
+              <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+                <tr>
+                  <td>
+                    <pre class="screen">
+# ophelp -r
+CPU with RTC device
+# opcontrol --vmlinux=/boot/2.4.13/vmlinux --event=RTC_INTERRUPTS:1024
+# opcontrol --start
+</pre>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <div class="sect3" title="1.1.3. Starting the daemon separately">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="examplesstartdaemon"></a>1.1.3. Starting the daemon separately</h4>
+                  </div>
+                </div>
+              </div>
+              <p>
+If we're running 2.6 kernels, we can use <code class="option">--start-daemon</code> to avoid
+the profiler startup affecting results.
+</p>
+              <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+                <tr>
+                  <td>
+                    <pre class="screen">
+# opcontrol --vmlinux=/boot/2.6.0/vmlinux
+# opcontrol --start-daemon
+# my_favourite_benchmark --init
+# opcontrol --start ; my_favourite_benchmark --run ; opcontrol --stop
+</pre>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <div class="sect3" title="1.1.4. Separate profiles for libraries and the kernel">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="exampleseparate"></a>1.1.4. Separate profiles for libraries and the kernel</h4>
+                  </div>
+                </div>
+              </div>
+              <p>
+Here, we want to see a profile of the OProfile daemon itself, including when
+it was running inside the kernel driver, and its use of shared libraries.
+</p>
+              <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+                <tr>
+                  <td>
+                    <pre class="screen">
+# opcontrol --separate=kernel --vmlinux=/boot/2.6.0/vmlinux
+# opcontrol --start
+# my_favourite_stress_test --run
+# opreport -l -p /lib/modules/2.6.0/kernel /usr/local/bin/oprofiled
+</pre>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <div class="sect3" title="1.1.5. Profiling sessions">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="examplessessions"></a>1.1.5. Profiling sessions</h4>
+                  </div>
+                </div>
+              </div>
+              <p>
+It can often be useful to split up profiling data into several different
+time periods. For example, you may want to collect data on an application's
+startup separately from the normal runtime data. You can use the simple
+command <span class="command"><strong>opcontrol --save</strong></span> to do this. For example :
+</p>
+              <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+                <tr>
+                  <td>
+                    <pre class="screen">
+# opcontrol --save=blah
+</pre>
+                  </td>
+                </tr>
+              </table>
+              <p>
+will create a sub-directory in <code class="filename">$SESSION_DIR/samples</code> containing the samples
+up to that point (the current session's sample files are moved into this
+directory). You can then pass this session name as a parameter to the post-profiling
+analysis tools, to only get data up to the point you named the
+session. If you do not want to save a session, you can do
+<span class="command"><strong>rm -rf $SESSION_DIR/samples/sessionname</strong></span> or, for the
+current session, <span class="command"><strong>opcontrol --reset</strong></span>.
+</p>
+            </div>
+          </div>
+          <div class="sect2" title="1.2. Specifying performance counter events">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="eventspec"></a>1.2. Specifying performance counter events</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+The <code class="option">--event</code> option to <span class="command"><strong>opcontrol</strong></span>
+takes a specification that indicates how the details of each
+hardware performance counter should be setup. If you want to
+revert to OProfile's default setting (<code class="option">--event</code>
+is strictly optional), use <code class="option">--event=default</code>. Use of this
+option over-rides all previous event selections.
+</p>
+            <p>
+You can pass multiple event specifications. OProfile will allocate
+hardware counters as necessary. Note that some combinations are not
+allowed by the CPU; running <span class="command"><strong>opcontrol --list-events</strong></span> gives the details
+of each event. The event specification is a colon-separated string
+of the form <code class="option"><span class="emphasis"><em>name</em></span>:<span class="emphasis"><em>count</em></span>:<span class="emphasis"><em>unitmask</em></span>:<span class="emphasis"><em>kernel</em></span>:<span class="emphasis"><em>user</em></span></code> as described in this table:
+</p>
+            <div class="informaltable">
+              <table border="1">
+                <colgroup>
+                  <col />
+                  <col />
+                </colgroup>
+                <tbody>
+                  <tr>
+                    <td>
+                      <code class="option">name</code>
+                    </td>
+                    <td>The symbolic event name, e.g. <code class="constant">CPU_CLK_UNHALTED</code></td>
+                  </tr>
+                  <tr>
+                    <td>
+                      <code class="option">count</code>
+                    </td>
+                    <td>The counter reset value, e.g. 100000</td>
+                  </tr>
+                  <tr>
+                    <td>
+                      <code class="option">unitmask</code>
+                    </td>
+                    <td>The unit mask, as given in the events list: e.g. 0x0f; or a symbolic name as
+given by the first word of the description (only valid for unit masks having an "extra:" parameter)</td>
+                  </tr>
+                  <tr>
+                    <td>
+                      <code class="option">kernel</code>
+                    </td>
+                    <td>Whether to profile kernel code</td>
+                  </tr>
+                  <tr>
+                    <td>
+                      <code class="option">user</code>
+                    </td>
+                    <td>Whether to profile userspace code</td>
+                  </tr>
+                </tbody>
+              </table>
+            </div>
+            <p>
+The last three values are optional, if you omit them (e.g. <code class="option">--event=DATA_MEM_REFS:30000</code>),
+they will be set to the default values (a unit mask of 0, and profiling both kernel and
+userspace code). Note that some events require a unit mask.
+</p>
+            <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
+              <h3 class="title">Note</h3>
+              <p>
+For the PowerPC platforms, all events specified must be in the same group; i.e., the group number
+appended to the event name (e.g. <code class="constant">&lt;<span class="emphasis"><em>some-event-name</em></span>&gt;_GRP9</code>) must be the same.
+</p>
+            </div>
+            <p>
+If OProfile is using RTC mode, and you want to alter the default counter value,
+you can use something like <code class="option">--event=RTC_INTERRUPTS:2048</code>. Note the last
+three values here are ignored.
+If OProfile is using timer-interrupt mode, there is no configuration possible.
+</p>
+            <p>
+The table below lists the events selected by default
+(<code class="option">--event=default</code>) for the various computer architectures:
+</p>
+            <div class="informaltable">
+              <table border="1">
+                <colgroup>
+                  <col />
+                  <col />
+                  <col />
+                </colgroup>
+                <tbody>
+                  <tr>
+                    <td>Processor</td>
+                    <td>cpu_type</td>
+                    <td>Default event</td>
+                  </tr>
+                  <tr>
+                    <td>Alpha EV4</td>
+                    <td>alpha/ev4</td>
+                    <td>CYCLES:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Alpha EV5</td>
+                    <td>alpha/ev5</td>
+                    <td>CYCLES:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Alpha PCA56</td>
+                    <td>alpha/pca56</td>
+                    <td>CYCLES:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Alpha EV6</td>
+                    <td>alpha/ev6</td>
+                    <td>CYCLES:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Alpha EV67</td>
+                    <td>alpha/ev67</td>
+                    <td>CYCLES:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>ARM/XScale PMU1</td>
+                    <td>arm/xscale1</td>
+                    <td>CPU_CYCLES:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>ARM/XScale PMU2</td>
+                    <td>arm/xscale2</td>
+                    <td>CPU_CYCLES:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>ARM/MPCore</td>
+                    <td>arm/mpcore</td>
+                    <td>CPU_CYCLES:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>AVR32</td>
+                    <td>avr32</td>
+                    <td>CPU_CYCLES:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Athlon</td>
+                    <td>i386/athlon</td>
+                    <td>CPU_CLK_UNHALTED:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Pentium Pro</td>
+                    <td>i386/ppro</td>
+                    <td>CPU_CLK_UNHALTED:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Pentium II</td>
+                    <td>i386/pii</td>
+                    <td>CPU_CLK_UNHALTED:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Pentium III</td>
+                    <td>i386/piii</td>
+                    <td>CPU_CLK_UNHALTED:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Pentium M (P6 core)</td>
+                    <td>i386/p6_mobile</td>
+                    <td>CPU_CLK_UNHALTED:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Pentium 4 (non-HT)</td>
+                    <td>i386/p4</td>
+                    <td>GLOBAL_POWER_EVENTS:100000:1:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Pentium 4 (HT)</td>
+                    <td>i386/p4-ht</td>
+                    <td>GLOBAL_POWER_EVENTS:100000:1:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Hammer</td>
+                    <td>x86-64/hammer</td>
+                    <td>CPU_CLK_UNHALTED:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Family10h</td>
+                    <td>x86-64/family10</td>
+                    <td>CPU_CLK_UNHALTED:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Family11h</td>
+                    <td>x86-64/family11h</td>
+                    <td>CPU_CLK_UNHALTED:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Itanium</td>
+                    <td>ia64/itanium</td>
+                    <td>CPU_CYCLES:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>Itanium 2</td>
+                    <td>ia64/itanium2</td>
+                    <td>CPU_CYCLES:100000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>TIMER_INT</td>
+                    <td>timer</td>
+                    <td>None selectable</td>
+                  </tr>
+                  <tr>
+                    <td>IBM iseries</td>
+                    <td>PowerPC 4/5/970</td>
+                    <td>CYCLES:10000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>IBM pseries</td>
+                    <td>PowerPC 4/5/970/Cell</td>
+                    <td>CYCLES:10000:0:1:1</td>
+                  </tr>
+                  <tr>
+                    <td>IBM s390</td>
+                    <td>timer</td>
+                    <td>None selectable</td>
+                  </tr>
+                  <tr>
+                    <td>IBM s390x</td>
+                    <td>timer</td>
+                    <td>None selectable</td>
+                  </tr>
+                </tbody>
+              </table>
+            </div>
+          </div>
+        </div>
+        <div class="sect1" title="2. Setting up the JIT profiling feature">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="setup-jit"></a>2. Setting up the JIT profiling feature</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+		To gather information about JITed code from a virtual machine,
+		it needs to be instrumented with an agent library. We use the
+		agent libraries for Java in the following example. To use the
+		Java profiling feature, you must build OProfile with the "--with-java" option
+                (<a class="xref" href="#install" title="4. Installation">Section 4, &#8220;Installation&#8221;</a>).
+
+	</p>
+          <div class="sect2" title="2.1. JVM instrumentation">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="setup-jit-jvm"></a>2.1. JVM instrumentation</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+			Add this to the startup parameters of the JVM (for JVMTI):
+
+			</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen"><code xmlns="http://www.w3.org/1999/xhtml" class="option">-agentpath:&lt;libdir&gt;/libjvmti_oprofile.so[=&lt;options&gt;]</code> </pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+			or
+			</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen"><code xmlns="http://www.w3.org/1999/xhtml" class="option">-agentlib:jvmti_oprofile[=&lt;options&gt;]</code> </pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+		</p>
+            <p>
+			The JVMPI agent implementation is enabled with the command line option
+			</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen"><code xmlns="http://www.w3.org/1999/xhtml" class="option">-Xrunjvmpi_oprofile[:&lt;options&gt;]</code> </pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+		</p>
+            <p>
+			Currently, there is just one option available -- <code class="option">debug</code>. For JVMPI,
+			the convention for specifying an option is <code class="option">option_name=[yes|no]</code>.
+			For JVMTI, the option specification is simply the option name, implying
+			"yes"; no option specified implies "no".
+		</p>
+            <p>
+                        The agent library (installed in <code class="filename">&lt;oprof_install_dir&gt;/lib/oprofile</code>)
+                        needs to be in the library search path (e.g. add the library directory
+                        to <code class="constant">LD_LIBRARY_PATH</code>). If the command line of
+                        the JVM is not accessible, it may be buried within shell scripts or a
+                        launcher program. It may also be possible to set an environment variable to add
+                        the instrumentation.
+                        For Sun JVMs this is <code class="constant">JAVA_TOOL_OPTIONS</code>. Please check
+                        your JVM documentation for
+                        further information on the agent startup options.
+                </p>
+          </div>
+        </div>
+        <div class="sect1" title="3. Using oprof_start">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="oprofile-gui"></a>3. Using <span class="command"><strong>oprof_start</strong></span></h2>
+              </div>
+            </div>
+          </div>
+          <p>
+The <span class="command"><strong>oprof_start</strong></span> application provides a convenient way to start the profiler.
+Note that <span class="command"><strong>oprof_start</strong></span> is just a wrapper around the <span class="command"><strong>opcontrol</strong></span> script,
+so it does not provide more services than the script itself.
+</p>
+          <p>
+After <span class="command"><strong>oprof_start</strong></span> is started you can select the event type for each counter;
+the sampling rate and other related parameters are explained in <a class="xref" href="#controlling-daemon" title="1. Using opcontrol">Section 1, &#8220;Using <span class="command"><strong>opcontrol</strong></span>&#8221;</a>.
+The "Configuration" section allows you to set general parameters such as the buffer size, kernel filename
+etc. The counter setup interface should be self-explanatory; <a class="xref" href="#hardware-counters" title="4.1. Hardware performance counters">Section 4.1, &#8220;Hardware performance counters&#8221;</a> and related 
+links contain information on using unit masks.
+</p>
+          <p>
+A status line shows the current status of the profiler: how long it has been running, and the average
+number of interrupts received per second and the total, over all processors.
+Note that quitting <span class="command"><strong>oprof_start</strong></span> does not stop the profiler.
+</p>
+          <p>
+Your configuration is saved in the same file as <span class="command"><strong>opcontrol</strong></span> uses; that is,
+<code class="filename">~/.oprofile/daemonrc</code>.
+</p>
+        </div>
+        <div class="sect1" title="4. Configuration details">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="detailed-parameters"></a>4. Configuration details</h2>
+              </div>
+            </div>
+          </div>
+          <div class="sect2" title="4.1. Hardware performance counters">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="hardware-counters"></a>4.1. Hardware performance counters</h3>
+                </div>
+              </div>
+            </div>
+            <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
+              <h3 class="title">Note</h3>
+              <p>
+Your CPU type may not include the requisite support for hardware performance counters, in which case
+you must use OProfile in RTC mode in 2.4 (see <a class="xref" href="#rtc" title="4.2. OProfile in RTC mode">Section 4.2, &#8220;OProfile in RTC mode&#8221;</a>), or timer mode in 2.6 (see <a class="xref" href="#timer" title="4.3. OProfile in timer interrupt mode">Section 4.3, &#8220;OProfile in timer interrupt mode&#8221;</a>). 
+You do not really need to read this section unless you are interested in using 
+events other than the default event chosen by OProfile.
+</p>
+            </div>
+            <p>
+The Intel hardware performance counters are detailed in the Intel IA-32 Architecture Manual, Volume 3, available
+from <a class="ulink" href="http://developer.intel.com/">http://developer.intel.com/</a>. 
+The AMD Athlon/Opteron/Phenom/Turion implementation is detailed in <a class="ulink" href="http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22007.pdf">
+http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22007.pdf</a>.
+For PowerPC64 processors in IBM iSeries, pSeries, and blade server systems, processor documentation
+is available at <a class="ulink" href="http://www-01.ibm.com/chips/techlib/techlib.nsf/productfamilies/PowerPC/">
+http://www-01.ibm.com/chips/techlib/techlib.nsf/productfamilies/PowerPC</a>.  (For example, the
+specific publication containing information on the performance monitor unit for the PowerPC970 is 
+"IBM PowerPC 970FX RISC Microprocessor User's Manual.")
+These processors are capable of delivering an interrupt when a counter overflows.
+This is the basic mechanism on which OProfile is based. The delivery mode is <acronym class="acronym">NMI</acronym>,
+so blocking interrupts in the kernel does not prevent profiling. When the interrupt handler is called,
+the current <acronym class="acronym">PC</acronym> value and the current task are recorded into the profiling structure.
+This allows the overflow event to be attached to a specific assembly instruction in a binary image.
+The daemon receives this data from the kernel, and writes it to the sample files.
+</p>
+            <p>
+If we use an event such as <code class="constant">CPU_CLK_UNHALTED</code> or <code class="constant">INST_RETIRED</code>
+(<code class="constant">GLOBAL_POWER_EVENTS</code> or <code class="constant">INSTR_RETIRED</code>, respectively, on the Pentium 4), we can
+use the overflow counts as an estimate of actual time spent in each part of code. Alternatively we can profile interesting
+data such as the cache behaviour of routines with the other available counters.
+</p>
+            <p>
+However there are several caveats. First, there are those issues listed in the Intel manual. There is a delay
+between the counter overflow and the interrupt delivery that can skew results on a small scale - this means
+you cannot rely on the profiles at the instruction level as being perfectly accurate.
+If you are using an "event-mode" counter such as the cache counters, a count registered against it doesn't mean
+that it is responsible for that event. However, it implies that the counter overflowed in the dynamic
+vicinity of that instruction, to within a few instructions. Further details on this problem can be found in 
+<a class="xref" href="#interpreting" title="Chapter 5. Interpreting profiling results">Chapter 5, <i>Interpreting profiling results</i></a> and also in the Digital paper "ProfileMe: A Hardware Performance Counter".
+</p>
+            <p>
+Each counter has several configuration parameters.
+First, there is the unit mask: this simply further specifies what to count.
+Second, there is the counter value, discussed below. Third, there is a parameter whether to increment counts
+whilst in kernel or user space. You can configure these separately for each counter.
+</p>
+            <p>
+After each overflow event, the counter will be re-initialized
+such that another overflow will occur after this many events have been counted. Thus, higher
+values mean less-detailed profiling, and lower values mean more detail, but higher overhead.
+Picking a good value for this
+parameter is, unfortunately, somewhat of a black art. It is of course dependent on the event
+you have chosen.
+Specifying too large a value will mean not enough interrupts are generated
+to give a realistic profile (though this problem can be ameliorated by profiling for <span class="emphasis"><em>longer</em></span>).
+Specifying too small a value can lead to higher performance overhead.
+</p>
+          </div>
+          <div class="sect2" title="4.2. OProfile in RTC mode">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="rtc"></a>4.2. OProfile in RTC mode</h3>
+                </div>
+              </div>
+            </div>
+            <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
+              <h3 class="title">Note</h3>
+              <p>
+This section applies to 2.2/2.4 kernels only.
+</p>
+            </div>
+            <p>
+Some CPU types do not provide the needed hardware support to use the hardware performance counters. This includes
+some laptops, classic Pentiums, and other CPU types not yet supported by OProfile (such as Cyrix). 
+On these machines, OProfile falls
+back to using the real-time clock interrupt to collect samples. This interrupt is also used by the <span class="command"><strong>rtc</strong></span>
+module: you cannot have both the OProfile and rtc modules loaded nor the rtc support compiled in the kernel.
+</p>
+            <p>
+RTC mode is less capable than the hardware counters mode; in particular, it is unable to profile sections of
+the kernel where interrupts are disabled. There is just one available event, "RTC interrupts", and its value 
+corresponds to the number of interrupts generated per second (that is, a higher number means a better profiling
+resolution, and higher overhead). The current implementation of the real-time clock supports only power-of-two
+sampling rates from 2 to 4096 per second.  Other values within this range are rounded to the nearest power of
+two.
+</p>
+            <p>
+You can force use of the RTC interrupt with the <code class="option">force_rtc=1</code> module parameter.
+</p>
+            <p>
+Setting the value from the GUI should be straightforward. On the command line, you need to specify the
+event to <span class="command"><strong>opcontrol</strong></span>, e.g. :
+</p>
+            <p>
+              <span class="command">
+                <strong>opcontrol --event=RTC_INTERRUPTS:256</strong>
+              </span>
+            </p>
+          </div>
+          <div class="sect2" title="4.3. OProfile in timer interrupt mode">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="timer"></a>4.3. OProfile in timer interrupt mode</h3>
+                </div>
+              </div>
+            </div>
+            <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
+              <h3 class="title">Note</h3>
+              <p>
+This section applies to 2.6 kernels and above only.
+</p>
+            </div>
+            <p>
+In 2.6 kernels on CPUs without OProfile support for the hardware performance counters, the driver
+falls back to using the timer interrupt for profiling. Like the RTC mode in 2.4 kernels, this is not able to
+profile code that has interrupts disabled. Note that there are no configuration parameters for
+setting this, unlike the RTC and hardware performance counter setup.
+</p>
+            <p>
+You can force use of the timer interrupt by using the <code class="option">timer=1</code> module
+parameter (or <code class="option">oprofile.timer=1</code> on the boot command line if OProfile is
+built-in).
+</p>
+          </div>
+          <div class="sect2" title="4.4. Pentium 4 support">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="p4"></a>4.4. Pentium 4 support</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+The Pentium 4 / Xeon performance counters are organized around 3 types of model specific registers (MSRs): 45 event
+selection control registers (ESCRs), 18 counter configuration control registers (CCCRs) and 18 counters. ESCRs describe a
+particular set of events which are to be recorded, and CCCRs bind ESCRs to counters and configure their
+operation. Unfortunately the relationship between these registers is quite complex; they cannot all be used with one
+another at any time. There is, however, a subset of 8 counters, 8 ESCRs, and 8 CCCRs which can be used independently of
+one another, so OProfile only accesses those registers, treating them as a bank of 8 "normal" counters, similar
+to those in the P6 or Athlon/Opteron/Phenom/Turion families of CPU.
+</p>
+            <p>
+There is currently no support for Precision Event-Based Sampling (PEBS), nor any advanced uses of the Debug Store
+(DS). Current support is limited to the conservative extension of OProfile's existing interrupt-based model described
+above.  Performance monitoring hardware on Pentium 4 / Xeon processors with Hyperthreading enabled (multiple logical
+processors on a single die) is not supported in 2.4 kernels (you can use OProfile if you disable hyper-threading,
+though).
+</p>
+          </div>
+          <div class="sect2" title="4.5. Intel Itanium 2 support">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="ia64"></a>4.5. Intel Itanium 2 support</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+The Itanium 2 performance monitoring unit (PMU) organizes the counters as four
+pairs of performance event monitoring registers. Each pair is composed of a
+Performance Monitoring Configuration (PMC) register and Performance Monitoring
+Data (PMD) register.  The PMC selects the performance event being monitored and
+the PMD determines the sampling interval. The IA64 Performance Monitoring Unit
+(PMU) triggers sampling with maskable interrupts. Thus, samples will not occur
+in sections of the IA64 kernel where interrupts are disabled.
+</p>
+            <p>
+None of the advance features of the Itanium 2 performance monitoring unit
+such as opcode matching, address range matching, or precise event sampling are
+supported by this version of OProfile.  The Itanium 2 support only maps OProfile's
+existing interrupt-based model to the PMU hardware.
+</p>
+          </div>
+          <div class="sect2" title="4.6. PowerPC64 support">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="ppc64"></a>4.6. PowerPC64 support</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+The performance monitoring unit (PMU) for the IBM PowerPC 64-bit processors 
+consists of between 4 and 8 counters (depending on the model), plus three
+special purpose registers used for programming the counters -- MMCR0, MMCR1,
+and MMCRA.  Advanced features such as instruction matching and thresholding are
+not supported by this version of OProfile.
+</p>
+            <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>Later versions of the IBM POWER5+ processor (beginning with revision 3.0)
+run the performance monitor unit in POWER6 mode, effectively removing OProfile's
+access to counters 5 and 6.  These two counters are dedicated to counting
+instructions completed and cycles, respectively.  In POWER6 mode, however, the
+counters do not generate an interrupt on overflow and so are unusable by
+OProfile.  Kernel versions 2.6.23 and higher will recognize this mode
+and export "ppc64/power5++" as the cpu_type to the oprofilefs pseudo filesystem.
+OProfile userspace responds to this cpu_type by removing these counters from
+the list of potential events to count.  Without this kernel support, attempts
+to profile using an event from one of these counters will yield incorrect
+results -- typically, zero (or near zero) samples in the generated report.
+</div>
+            <p>
+</p>
+          </div>
+          <div class="sect2" title="4.7. Cell Broadband Engine support">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="cell-be"></a>4.7. Cell Broadband Engine support</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+The Cell Broadband Engine (CBE) processor core consists of a PowerPC Processing
+Element (PPE) and 8 Synergistic Processing Elements (SPE).  PPEs and SPEs each
+consist of a processing unit (PPU and SPU, respectively) and other hardware
+components, such as memory controllers.
+</p>
+            <p>
+A PPU has two hardware threads (aka "virtual CPUs").  The performance monitor
+unit of the CBE collects event information on one hardware thread at a time.
+Therefore, when profiling PPE events,
+OProfile collects the profile based on the selected events by time slicing the
+performance counter hardware between the two threads.   The user must ensure the
+collection interval is long enough so that the time spent collecting data for
+each PPU is sufficient to obtain a good profile.
+</p>
+            <p>
+To profile an SPU application, the user should specify the SPU_CYCLES event.
+When starting OProfile with SPU_CYCLES, the opcontrol script enforces certain
+separation parameters (separate=cpu,lib) to ensure that sufficient information
+is collected in the sample data in order to generate a complete report.  The
+--merge=cpu option can be used to obtain a more readable report if analyzing
+the performance of each separate SPU is not necessary.
+</p>
+            <p>
+Profiling with an SPU event (events 4100 through 4163) is not compatible with any other
+event.  Further more, only one SPU event can be specified at a time.  The hardware only
+supports profiling on one SPU per node at a time.  The OProfile kernel code time slices
+between the eight SPUs to collect data on all SPUs.
+</p>
+            <p>
+SPU profile reports have some unique characteristics compared to reports for
+standard architectures:
+</p>
+            <div class="itemizedlist">
+              <ul class="itemizedlist" type="disc">
+                <li class="listitem">Typically no "app name" column.  This is really standard OProfile behavior
+when the report contains samples for just a single application, which is
+commonly the case when profiling SPUs.</li>
+                <li class="listitem">"CPU" equates to "SPU"</li>
+                <li class="listitem">Specifying '--long-filenames' on the opreport command does not always result
+in long filenames.  This happens when the SPU application code is embedded in
+the PPE executable or shared library.  The embedded SPU ELF data contains only the
+short filename (i.e., no path information) for the SPU binary file that was used as
+the source for embedding.   The reason that just the short filename is used is because
+the original SPU binary file may not exist or be accessible at runtime.  The performance
+analyst must have sufficient knowledge of the application to be able to correlate the
+SPU binary image names found in the  report to the application's source files.
+<div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
+Compile the application with -g and generate the OProfile report
+with -g to facilitate finding the right source file(s) on which to focus.
+</div></li>
+              </ul>
+            </div>
+          </div>
+          <div class="sect2" title="4.8. AMD64 (x86_64) Instruction-Based Sampling (IBS) support">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="amd-ibs-support"></a>4.8. AMD64 (x86_64) Instruction-Based Sampling (IBS) support</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+Instruction-Based Sampling (IBS) is a new performance measurement technique
+available on AMD Family 10h processors. Traditional performance counter
+sampling is not precise enough to isolate performance issues to individual
+instructions. IBS, however, precisely identifies instructions which are not
+making the best use of the processor pipeline and memory hierarchy.
+For more information, please refer to the "Instruction-Based Sampling:
+A New Performance Analysis Technique for AMD Family 10h Processors" (
+<a class="ulink" href="http://developer.amd.com/assets/AMD_IBS_paper_EN.pdf">
+http://developer.amd.com/assets/AMD_IBS_paper_EN.pdf</a>).
+There are two types of IBS profile types, described in the following sections.
+</p>
+            <div class="sect3" title="4.8.1. IBS Fetch">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="ibs-fetch"></a>4.8.1. IBS Fetch</h4>
+                  </div>
+                </div>
+              </div>
+              <p>
+IBS fetch sampling is a statistical sampling method which counts completed
+fetch operations. When the number of completed fetch operations reaches the
+maximum fetch count (the sampling period), IBS tags the fetch operation and
+monitors that operation until it either completes or aborts. When a tagged
+fetch completes or aborts, a sampling interrupt is generated and an IBS fetch
+sample is taken. An IBS fetch sample contains a timestamp, the identifier of
+the interrupted process, the virtual fetch address, and several event flags
+and values that describe what happened during the fetch operation. 
+</p>
+            </div>
+            <div class="sect3" title="4.8.2. IBS Op">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="ibs-op"></a>4.8.2. IBS Op</h4>
+                  </div>
+                </div>
+              </div>
+              <p>
+IBS op sampling selects, tags, and monitors macro-ops as issued from AMD64
+instructions. Two options are available for selecting ops for sampling:
+</p>
+              <div class="itemizedlist">
+                <ul class="itemizedlist" type="disc">
+                  <li class="listitem">
+Cycles-based selection counts CPU clock cycles. The op is tagged and monitored
+when the count reaches a threshold (the sampling period) and a valid op is
+available. 
+</li>
+                  <li class="listitem">
+Dispatched op-based selection counts dispatched macro-ops.
+When the count reaches a threshold, the next valid op is tagged and monitored. 
+</li>
+                </ul>
+              </div>
+              <p>
+In both cases, an IBS sample is generated only if the tagged op retires.
+Thus, IBS op event information does not measure speculative execution activity.
+The execution stages of the pipeline monitor the tagged macro-op. When the
+tagged macro-op retires, a sampling interrupt is generated and an IBS op
+sample is taken. An IBS op sample contains a timestamp, the identifier of
+the interrupted process, the virtual address of the AMD64 instruction from
+which the op was issued, and several event flags and values that describe
+what happened when the macro-op executed.
+</p>
+            </div>
+            <p>
+Enabling IBS profiling is done simply by specifying IBS performance events
+through the "--event=" options. These events are listed in the
+<code class="function">opcontrol --list-events</code>.
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+opcontrol --event=IBS_FETCH_XXX:&lt;count&gt;:&lt;um&gt;:&lt;kernel&gt;:&lt;user&gt;
+opcontrol --event=IBS_OP_XXX:&lt;count&gt;:&lt;um&gt;:&lt;kernel&gt;:&lt;user&gt;
+
+Note: * All IBS fetch event must have the same event count and unitmask,
+        as do those for IBS op.
+</pre>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div class="sect2" title="4.9. Dangerous counter settings">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="misuse"></a>4.9. Dangerous counter settings</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+OProfile is a low-level profiler which allow continuous profiling with a low-overhead cost.
+If too low a count reset value is set for a counter, the system can become overloaded with counter
+interrupts, and seem as if the system has frozen. Whilst some validation is done, it
+is not foolproof.
+</p>
+            <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
+              <h3 class="title">Note</h3>
+              <p>
+This can happen as follows: When the profiler count
+reaches zero an NMI handler is called which stores the sample values in an internal buffer, then resets the counter
+to its original value. If the count is very low, a pending NMI can be sent before the NMI handler has
+completed. Due to the priority of the NMI, the local APIC delivers the pending interrupt immediately after
+completion of the previous interrupt handler, and control never returns to other parts of the system.
+In this way the system seems to be frozen.
+</p>
+            </div>
+            <p>If this happens, it will be impossible to bring the system back to a workable state.
+There is no way to provide real security against this happening, other than making sure to use a reasonable value
+for the counter reset. For example, setting <code class="constant">CPU_CLK_UNHALTED</code> event type with a ridiculously low reset count (e.g. 500)
+is likely to freeze the system.
+</p>
+            <p>
+In short : <span class="command"><strong>Don't try a foolish sample count value</strong></span>. Unfortunately the definition of a foolish value
+is really dependent on the event type - if ever in doubt, e-mail </p>
+            <div class="address">
+              <p><code class="email">&lt;<a class="email" href="mailto:oprofile-list@lists.sf.net">oprofile-list@lists.sf.net</a>&gt;</code>.</p>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="chapter" title="Chapter 4. Obtaining results">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="results"></a>Chapter 4. Obtaining results</h2>
+            </div>
+          </div>
+        </div>
+        <div class="toc">
+          <p>
+            <b>Table of Contents</b>
+          </p>
+          <dl>
+            <dt>
+              <span class="sect1">
+                <a href="#profile-spec">1. Profile specifications</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#profile-spec-examples">1.1. Examples</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#profile-spec-details">1.2. Profile specification parameters</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#locating-and-managing-binary-images">1.3. Locating and managing binary images</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#no-results">1.4. What to do when you don't get any results</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#opreport">2. Image summaries and symbol summaries (<span class="command"><strong>opreport</strong></span>)</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#opreport-merging">2.1. Merging separate profiles</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#opreport-comparison">2.2. Side-by-side multiple results</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#opreport-callgraph">2.3. Callgraph output</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#opreport-diff">2.4. Differential profiles with <span class="command"><strong>opreport</strong></span></a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#opreport-anon">2.5. Anonymous executable mappings</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#opreport-xml">2.6. XML formatted output</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#opreport-options">2.7. Options for <span class="command"><strong>opreport</strong></span></a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#opannotate">3. Outputting annotated source (<span class="command"><strong>opannotate</strong></span>)</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#opannotate-finding-source">3.1. Locating source files</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#opannotate-details">3.2. Usage of <span class="command"><strong>opannotate</strong></span></a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#getting-jit-reports">4. OProfile results with JIT samples</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#opgprof">5. <span class="command"><strong>gprof</strong></span>-compatible output (<span class="command"><strong>opgprof</strong></span>)</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#opgprof-details">5.1. Usage of <span class="command"><strong>opgprof</strong></span></a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#oparchive">6. Archiving measurements (<span class="command"><strong>oparchive</strong></span>)</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#oparchive-details">6.1. Usage of <span class="command"><strong>oparchive</strong></span></a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#opimport">7. Converting sample database files (<span class="command"><strong>opimport</strong></span>)</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#opimport-details">7.1. Usage of <span class="command"><strong>opimport</strong></span></a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+          </dl>
+        </div>
+        <p>
+OK, so the profiler has been running, but it's not much use unless we can get some data out. Fairly often,
+OProfile does a little <span class="emphasis"><em>too</em></span> good a job of keeping overhead low, and no data reaches
+the profiler. This can happen on lightly-loaded machines. Remember you can force a dump at any time with :
+</p>
+        <p>
+          <span class="command">
+            <strong>opcontrol --dump</strong>
+          </span>
+        </p>
+        <p>Remember to do this before complaining there is no profiling data !
+Now that we've got some data, it has to be processed. That's the job of <span class="command"><strong>opreport</strong></span>,
+<span class="command"><strong>opannotate</strong></span>, or <span class="command"><strong>opgprof</strong></span>.
+</p>
+        <div class="sect1" title="1. Profile specifications">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="profile-spec"></a>1. Profile specifications</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+All of the analysis tools take a <span class="emphasis"><em>profile specification</em></span>.
+This is a set of definitions that describe which actual profiles should be
+examined. The simplest profile specification is empty: this will match all
+the available profile files for the current session (this is what happens
+when you do <span class="command"><strong>opreport</strong></span>).
+</p>
+          <p>
+Specification parameters are of the form <code class="option">name:value[,value]</code>.
+For example, if I wanted to get a combined symbol summary for
+<code class="filename">/bin/myprog</code> and <code class="filename">/bin/myprog2</code>,
+I could do <span class="command"><strong>opreport -l image:/bin/myprog,/bin/myprog2</strong></span>.
+As a special case, you don't actually need to specify the <code class="option">image:</code>
+part here: anything left on the command line is assumed to be an
+<code class="option">image:</code> name. Similarly, if no <code class="option">session:</code>
+is specified, then <code class="option">session:current</code> is assumed ("current"
+is a special name of the current / last profiling session).
+</p>
+          <p>
+In addition to the comma-separated list shown above, some of the 
+specification parameters can take <span class="command"><strong>glob</strong></span>-style
+values. For example, if I want to see image summaries for all
+binaries profiled in <code class="filename">/usr/bin/</code>, I could do
+<span class="command"><strong>opreport image:/usr/bin/\*</strong></span>. Note the necessity
+to escape the special character from the shell.
+</p>
+          <p>
+For <span class="command"><strong>opreport</strong></span>, profile specifications can be used to
+define two profiles, giving differential output. This is done by
+enclosing each of the two specifications within curly braces, as shown
+in the examples below. Any specifications outside of curly braces are
+shared across both.
+</p>
+          <div class="sect2" title="1.1. Examples">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="profile-spec-examples"></a>1.1. Examples</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+Image summaries for all profiles with <code class="constant">DATA_MEM_REFS</code>
+samples in the saved session called "stresstest" :
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+# opreport session:stresstest event:DATA_MEM_REFS
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+Symbol summary for the application called "test_sym53c8xx,9xx". Note the
+escaping is necessary as <code class="option">image:</code> takes a comma-separated list.
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+# opreport -l ./test/test_sym53c8xx\,9xx
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+Image summaries for all binaries in the <code class="filename">test</code> directory,
+excepting <code class="filename">boring-test</code> :
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+# opreport image:./test/\* image-exclude:./test/boring-test
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+Differential profile of a binary stored in two archives :
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+# opreport -l /bin/bash { archive:./orig } { archive:./new }
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+Differential profile of an archived binary with the current session :
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+# opreport -l /bin/bash { archive:./orig } { }
+</pre>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div class="sect2" title="1.2. Profile specification parameters">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="profile-spec-details"></a>1.2. Profile specification parameters</h3>
+                </div>
+              </div>
+            </div>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">
+                    <code class="option">archive:</code>
+                    <span class="emphasis">
+                      <em>archivepath</em>
+                    </span>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+		A path to an archive made with <span class="command"><strong>oparchive</strong></span>.
+		Absence of this tag, unlike others, means "the current system",
+		equivalent to specifying "archive:".
+		</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">session:</code>
+                    <span class="emphasis">
+                      <em>sessionlist</em>
+                    </span>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+		A comma-separated list of session names to resolve in. Absence of this
+		tag, unlike others, means "the current session", equivalent to
+		specifying "session:current".
+		</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">session-exclude:</code>
+                    <span class="emphasis">
+                      <em>sessionlist</em>
+                    </span>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+                A comma-separated list of sessions to exclude.
+		</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">image:</code>
+                    <span class="emphasis">
+                      <em>imagelist</em>
+                    </span>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+                A comma-separated list of image names to resolve. Each entry may be relative
+                path, <span class="command"><strong>glob</strong></span>-style name, or full path, e.g.</p>
+                  <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+                    <tr>
+                      <td>
+                        <pre class="screen">opreport 'image:/usr/bin/oprofiled,*op*,./opreport'</pre>
+                      </td>
+                    </tr>
+                  </table>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">image-exclude:</code>
+                    <span class="emphasis">
+                      <em>imagelist</em>
+                    </span>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+		Same as <code class="option">image:</code>, but the matching images are excluded.
+		</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">lib-image:</code>
+                    <span class="emphasis">
+                      <em>imagelist</em>
+                    </span>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+		Same as <code class="option">image:</code>, but only for images that are for
+		a particular primary binary image (namely, an application). This only
+		makes sense to use if you're using <code class="option">--separate</code>.
+		This includes kernel modules and the kernel when using
+		<code class="option">--separate=kernel</code>.
+		</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">lib-image-exclude:</code>
+                    <span class="emphasis">
+                      <em>imagelist</em>
+                    </span>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+		Same as <code class="option">lib-image:</code>, but the matching images
+		are excluded.
+		</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">event:</code>
+                    <span class="emphasis">
+                      <em>eventlist</em>
+                    </span>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+		The symbolic event name to match on, e.g. <code class="option">event:DATA_MEM_REFS</code>.
+		You can pass a list of events for side-by-side comparison with <span class="command"><strong>opreport</strong></span>.
+		When using the timer interrupt, the event is always "TIMER".
+		</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">count:</code>
+                    <span class="emphasis">
+                      <em>eventcountlist</em>
+                    </span>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+		The event count to match on, e.g. <code class="option">event:DATA_MEM_REFS count:30000</code>.
+		Note that this value refers to the setting used for <span class="command"><strong>opcontrol</strong></span>
+		only, and has nothing to do with the sample counts in the profile data
+		itself.
+		You can pass a list of events for side-by-side comparison with <span class="command"><strong>opreport</strong></span>.
+		When using the timer interrupt, the count is always 0 (indicating it cannot be set).
+		</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">unit-mask:</code>
+                    <span class="emphasis">
+                      <em>masklist</em>
+                    </span>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+		The unit mask value of the event to match on, e.g. <code class="option">unit-mask:1</code>.
+		You can pass a list of events for side-by-side comparison with <span class="command"><strong>opreport</strong></span>.
+		</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">cpu:</code>
+                    <span class="emphasis">
+                      <em>cpulist</em>
+                    </span>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+		Only consider profiles for the given numbered CPU (starting from zero).
+		This is only useful when using CPU profile separation.
+		</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">tgid:</code>
+                    <span class="emphasis">
+                      <em>pidlist</em>
+                    </span>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+		Only consider profiles for the given task groups. Unless some program
+		is using threads, the task group ID of a process is the same
+		as its process ID. This option corresponds to the POSIX
+		notion of a thread group.
+		This is only useful when using per-process profile separation.
+		</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">tid:</code>
+                    <span class="emphasis">
+                      <em>tidlist</em>
+                    </span>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+		Only consider profiles for the given threads. When using
+		recent thread libraries, all threads in a process share the
+		same task group ID, but have different thread IDs. You can
+		use this option in combination with <code class="option">tgid:</code> to
+		restrict the results to particular threads within a process.
+		This is only useful when using per-process profile separation.
+		</p>
+                </dd>
+              </dl>
+            </div>
+          </div>
+          <div class="sect2" title="1.3. Locating and managing binary images">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="locating-and-managing-binary-images"></a>1.3. Locating and managing binary images</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+Each session's sample files can be found in the $SESSION_DIR/samples/ directory (default: <code class="filename">/var/lib/oprofile/samples/</code>).
+These are used, along with the binary image files, to produce human-readable data.
+In some circumstances (kernel modules in an initrd, or modules on 2.6 kernels), OProfile
+will not be able to find the binary images. All the tools have an <code class="option">--image-path</code>
+option to which you can pass a comma-separated list of alternate paths to search. For example,
+I can let OProfile find my 2.6 modules by using <span class="command"><strong>--image-path /lib/modules/2.6.0/kernel/</strong></span>.
+It is your responsibility to ensure that the correct images are found when using this
+option.
+</p>
+            <p>
+Note that if a binary image changes after the sample file was created, you won't be able to get useful
+symbol-based data out. This situation is detected for you. If you replace a binary, you should
+make sure to save the old binary if you need to do comparative profiles.
+</p>
+          </div>
+          <div class="sect2" title="1.4. What to do when you don't get any results">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="no-results"></a>1.4. What to do when you don't get any results</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+When attempting to get output, you may see the error :
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+error: no sample files found: profile specification too strict ?
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+What this is saying is that the profile specification you passed in,
+when matched against the available sample files, resulted in no matches.
+There are a number of reasons this might happen:
+</p>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">spelling</span>
+                </dt>
+                <dd>
+                  <p>
+You specified a binary name, but spelt it wrongly. Check your spelling !
+</p>
+                </dd>
+                <dt>
+                  <span class="term">profiler wasn't running</span>
+                </dt>
+                <dd>
+                  <p>
+Make very sure that OProfile was actually up and running when you ran
+the binary.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">binary didn't run long enough</span>
+                </dt>
+                <dd>
+                  <p>
+Remember OProfile is a statistical profiler - you're not guaranteed to
+get samples for short-running programs. You can help this by using a
+lower count for the performance counter, so there are a lot more samples
+taken per second.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">binary spent most of its time in libraries</span>
+                </dt>
+                <dd>
+                  <p>
+Similarly, if the binary spends little time in the main binary image
+itself, with most of it spent in shared libraries it uses, you might
+not see any samples for the binary image itself. You can check this
+by using <span class="command"><strong>opcontrol --separate=lib</strong></span> before the
+profiling session, so <span class="command"><strong>opreport</strong></span> and friends show
+the library profiles on a per-application basis.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">specification was really too strict</span>
+                </dt>
+                <dd>
+                  <p>
+For example, you specified something like <code class="option">tgid:3433</code>,
+but no task with that group ID ever ran the code.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">binary didn't generate any events</span>
+                </dt>
+                <dd>
+                  <p>
+If you're using a particular event counter, for example counting MMX
+operations, the code might simply have not generated any events in the
+first place. Verify the code you're profiling does what you expect it
+to.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">you didn't specify kernel module name correctly</span>
+                </dt>
+                <dd>
+                  <p>
+If you're using 2.6 kernels, and trying to get reports for a kernel
+module, make sure to use the <code class="option">-p</code> option, and specify the
+module name <span class="emphasis"><em>with</em></span> the <code class="filename">.ko</code>
+extension. Check if the module is one loaded from initrd.
+</p>
+                </dd>
+              </dl>
+            </div>
+          </div>
+        </div>
+        <div class="sect1" title="2. Image summaries and symbol summaries (opreport)">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="opreport"></a>2. Image summaries and symbol summaries (<span class="command"><strong>opreport</strong></span>)</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+The <span class="command"><strong>opreport</strong></span> utility is the primary utility you will use for 
+getting formatted data out of OProfile. It produces two types of data: image summaries
+and symbol summaries. An image summary lists the number of samples for individual
+binary images such as libraries or applications. Symbol summaries provide per-symbol
+profile data. In the following example, we're getting an image summary for the whole
+system:
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+$ opreport --long-filenames
+CPU: PIII, speed 863.195 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (clocks processor is not halted) with a unit mask of 0x00 (No unit mask) count 23150
+   905898 59.7415 /usr/lib/gcc-lib/i386-redhat-linux/3.2/cc1plus
+   214320 14.1338 /boot/2.6.0/vmlinux
+   103450  6.8222 /lib/i686/libc-2.3.2.so
+    60160  3.9674 /usr/local/bin/madplay
+    31769  2.0951 /usr/local/oprofile-pp/bin/oprofiled
+    26550  1.7509 /usr/lib/libartsflow.so.1.0.0
+    23906  1.5765 /usr/bin/as
+    18770  1.2378 /oprofile
+    15528  1.0240 /usr/lib/qt-3.0.5/lib/libqt-mt.so.3.0.5
+    11979  0.7900 /usr/X11R6/bin/XFree86
+    11328  0.7471 /bin/bash
+    ...
+</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+If we had specified <code class="option">--symbols</code> in the previous command, we would have
+gotten a symbol summary of all the images across the entire system. We can restrict this to only
+part of the system profile; for example,
+below is a symbol summary of the OProfile daemon. Note that as we used
+<span class="command"><strong>opcontrol --separate=kernel</strong></span>, symbols from images that <span class="command"><strong>oprofiled</strong></span>
+has used are also shown.
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+$ opreport -l `which oprofiled` 2&gt;/dev/null | more
+CPU: PIII, speed 863.195 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (clocks processor is not halted) with a unit mask of 0x00 (No unit mask) count 23150
+vma      samples  %           image name               symbol name
+0804be10 14971    28.1993     oprofiled                odb_insert
+0804afdc 7144     13.4564     oprofiled                pop_buffer_value
+c01daea0 6113     11.5144     vmlinux                  __copy_to_user_ll
+0804b060 2816      5.3042     oprofiled                opd_put_sample
+0804b4a0 2147      4.0441     oprofiled                opd_process_samples
+0804acf4 1855      3.4941     oprofiled                opd_put_image_sample
+0804ad84 1766      3.3264     oprofiled                opd_find_image
+0804a5ec 1084      2.0418     oprofiled                opd_find_module
+0804ba5c 741       1.3957     oprofiled                odb_hash_add_node
+...
+</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+These are the two basic ways you are most likely to use regularly, but <span class="command"><strong>opreport</strong></span>
+can do a lot more than that, as described below.
+</p>
+          <div class="sect2" title="2.1. Merging separate profiles"><div class="titlepage"><div><div><h3 class="title"><a id="opreport-merging"></a>2.1. Merging separate profiles</h3></div></div></div>
+
+If you have used one of the <code class="option">--separate=</code> options
+whilst profiling, there can be several separate profiles for
+a single binary image within a session. Normally the output
+will keep these images separated (so, for example, the image summary
+output shows library image summaries on a per-application basis,
+when using <code class="option">--separate=lib</code>).
+Sometimes it can be useful to merge these results back together
+before getting results. The <code class="option">--merge</code> option allows
+you to do that.
+</div>
+          <div class="sect2" title="2.2. Side-by-side multiple results"><div class="titlepage"><div><div><h3 class="title"><a id="opreport-comparison"></a>2.2. Side-by-side multiple results</h3></div></div></div>
+If you have used multiple events when profiling, by default you get
+side-by-side results of each event's sample values from <span class="command"><strong>opreport</strong></span>.
+You can restrict which events to list by appropriate use of the
+<code class="option">event:</code> profile specifications, etc.
+</div>
+          <div class="sect2" title="2.3. Callgraph output">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="opreport-callgraph"></a>2.3. Callgraph output</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+This section provides details on how to use the OProfile callgraph feature.
+</p>
+            <div class="sect3" title="2.3.1. Callgraph details">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="op-cg1"></a>2.3.1. Callgraph details</h4>
+                  </div>
+                </div>
+              </div>
+              <p>
+When using the <code class="option">opcontrol --callgraph</code> option, you can see what
+functions are calling other functions in the output. Consider the
+following program:
+</p>
+              <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+                <tr>
+                  <td>
+                    <pre class="screen">
+#include &lt;string.h&gt;
+#include &lt;stdlib.h&gt;
+#include &lt;stdio.h&gt;
+
+#define SIZE 500000
+
+static int compare(const void *s1, const void *s2)
+{
+        return strcmp(s1, s2);
+}
+
+static void repeat(void)
+{
+        int i;
+        char *strings[SIZE];
+        char str[] = "abcdefghijklmnopqrstuvwxyz";
+
+        for (i = 0; i &lt; SIZE; ++i) {
+                strings[i] = strdup(str);
+                strfry(strings[i]);
+        }
+
+        qsort(strings, SIZE, sizeof(char *), compare);
+}
+
+int main()
+{
+        while (1)
+                repeat();
+}
+</pre>
+                  </td>
+                </tr>
+              </table>
+              <p>
+When running with the call-graph option, OProfile will
+record the function stack every time it takes a sample.
+<span class="command"><strong>opreport --callgraph</strong></span> outputs an entry for each
+function, where each entry looks similar to:
+</p>
+              <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+                <tr>
+                  <td>
+                    <pre class="screen">
+samples  %        image name               symbol name
+  197       0.1548  cg                       main
+  127036   99.8452  cg                       repeat
+84590    42.5084  libc-2.3.2.so            strfry
+  84590    66.4838  libc-2.3.2.so            strfry [self]
+  39169    30.7850  libc-2.3.2.so            random_r
+  3475      2.7312  libc-2.3.2.so            __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+</pre>
+                  </td>
+                </tr>
+              </table>
+              <p>
+Here the non-indented line is the function we're focussing upon
+(<code class="function">strfry()</code>). This
+line is the same as you'd get from a normal <span class="command"><strong>opreport</strong></span>
+output.
+</p>
+              <p>
+Above the non-indented line we find the functions that called this
+function (for example, <code class="function">repeat()</code> calls
+<code class="function">strfry()</code>). The samples and percentage values here
+refer to the number of times we took a sample where this call was found
+in the stack; the percentage is relative to all other callers of the
+function we're focussing on. Note that these values are
+<span class="emphasis"><em>not</em></span> call counts; they only reflect the call stack
+every time a sample is taken; that is, if a call is found in the stack
+at the time of a sample, it is recorded in this count.
+</p>
+              <p>
+Below the line are functions that are called by
+<code class="function">strfry()</code> (called <span class="emphasis"><em>callees</em></span>).
+It's clear here that <code class="function">strfry()</code> calls
+<code class="function">random_r()</code>. We also see a special entry with a
+"[self]" marker. This records the normal samples for the function, but
+the percentage becomes relative to all callees. This allows you to
+compare time spent in the function itself compared to functions it
+calls. Note that if a function calls itself, then it will appear in the
+list of callees of itself, but without the "[self]" marker; so recursive
+calls are still clearly separable.
+</p>
+              <p>
+You may have noticed that the output lists <code class="function">main()</code>
+as calling <code class="function">strfry()</code>, but it's clear from the source
+that this doesn't actually happen. See <a class="xref" href="#interpreting-callgraph" title="3. Interpreting call-graph profiles">Section 3, &#8220;Interpreting call-graph profiles&#8221;</a> for an explanation.
+</p>
+            </div>
+            <div class="sect3" title="2.3.2. Callgraph and JIT support">
+              <div class="titlepage">
+                <div>
+                  <div>
+                    <h4 class="title"><a id="cg-with-jitsupport"></a>2.3.2. Callgraph and JIT support</h4>
+                  </div>
+                </div>
+              </div>
+              <p>
+Callgraph output where anonymously mapped code is in the callstack can sometimes be misleading.
+For all such code, the samples for the anonymously mapped code are stored in a samples subdirectory
+named <code class="filename">{anon:anon}/&lt;tgid&gt;.&lt;begin_addr&gt;.&lt;end_addr&gt;</code>.
+As stated earlier, if this anonymously mapped code is JITed code from a supported VM like Java,
+OProfile creates an ELF file to provide a (somewhat) permanent backing file for the code.
+However, when viewing callgraph output, any anonymously mapped code in the callstack
+will be attributed to <code class="filename">anon (&lt;tgid&gt;: range:&lt;begin_addr&gt;-&lt;end_addr&gt;</code>,
+even if a <code class="filename">.jo</code> ELF file had been created for it.  See the example below.
+</p>
+              <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+                <tr>
+                  <td>
+                    <pre class="screen">
+-------------------------------------------------------------------------------
+  1         2.2727  libj9ute23.so            java.bin                 traceV
+  2         4.5455  libj9ute23.so            java.bin                 utsTraceV
+  4         9.0909  libj9trc23.so            java.bin                 fillInUTInterfaces
+  37       84.0909  libj9trc23.so            java.bin                 twGetSequenceCounter
+8         0.0154  libj9prt23.so            java.bin                 j9time_hires_clock
+  27       61.3636  anon (tgid:10014 range:0x100000-0x103000) java.bin                 (no symbols)
+  9        20.4545  libc-2.4.so              java.bin                 gettimeofday
+  8        18.1818  libj9prt23.so            java.bin                 j9time_hires_clock [self]
+-------------------------------------------------------------------------------
+</pre>
+                  </td>
+                </tr>
+              </table>
+              <p>
+The output shows that "anon (tgid:10014 range:0x100000-0x103000)" was a callee of
+<code class="code">j9time_hires_clock</code>, even though the ELF file <code class="filename">10014.jo</code> was
+created for this profile run.  Unfortunately, there is currently no way to correlate
+that anonymous callgraph entry with its corresponding <code class="filename">.jo</code> file.
+</p>
+            </div>
+          </div>
+          <div class="sect2" title="2.4. Differential profiles with opreport">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="opreport-diff"></a>2.4. Differential profiles with <span class="command"><strong>opreport</strong></span></h3>
+                </div>
+              </div>
+            </div>
+            <p>
+Often, we'd like to be able to compare two profiles. For example, when
+analysing the performance of an application, we'd like to make code
+changes and examine the effect of the change. This is supported in
+<span class="command"><strong>opreport</strong></span> by giving a profile specification that
+identifies two different profiles. The general form is of:
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+$ opreport &lt;shared-spec&gt; { &lt;first-profile&gt; } { &lt;second-profile&gt; }
+</pre>
+                </td>
+              </tr>
+            </table>
+            <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
+              <h3 class="title">Note</h3>
+              <p>
+We lost our Dragon book down the back of the sofa, so you have to be
+careful to have spaces around those braces, or things will get
+hopelessly confused. We can only apologise.
+</p>
+            </div>
+            <p>
+For each of the profiles, the shared section is prefixed, and then the
+specification is analysed. The usual parameters work both within the
+shared section, and in the sub-specification within the curly braces.
+</p>
+            <p>
+A typical way to use this feature is with archives created with
+<span class="command"><strong>oparchive</strong></span>. Let's look at an example:
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+$ ./a
+$ oparchive -o orig ./a
+$ opcontrol --reset
+  # edit and recompile a
+$ ./a
+  # now compare the current profile of a with the archived profile
+$ opreport -xl ./a { archive:./orig } { }
+CPU: PIII, speed 863.233 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (clocks processor is not halted) with a
+unit mask of 0x00 (No unit mask) count 100000
+samples  %        diff %    symbol name
+92435    48.5366  +0.4999   a
+54226    ---      ---       c
+49222    25.8459  +++       d
+48787    25.6175  -2.2e-01  b
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+Note that we specified an empty second profile in the curly braces, as
+we wanted to use the current session; alternatively, we could
+have specified another archive, or a tgid etc. We specified the binary
+<span class="command"><strong>a</strong></span> in the shared section, so we matched that in both
+the profiles we're diffing.
+</p>
+            <p>
+As in the normal output, the results are sorted by the number of
+samples, and the percentage field represents the relative percentage of
+the symbol's samples in the second profile.
+</p>
+            <p>
+Notice the new column in the output. This value represents the
+percentage change of the relative percent between the first and the
+second profile: roughly, "how much more important this symbol is".
+Looking at the symbol <code class="function">a()</code>, we can see that it took
+roughly the same amount of the total profile in both the first and the
+second profile. The function <code class="function">c()</code> was not in the new
+profile, so has been marked with <code class="function">---</code>. Note that the
+sample value is the number of samples in the first profile; since we're
+displaying results for the second profile, we don't list a percentage
+value for it, as it would be meaningless. <code class="function">d()</code> is
+new in the second profile, and consequently marked with
+<code class="function">+++</code>.
+</p>
+            <p>
+When comparing profiles between different binaries, it should be clear
+that functions can change in terms of VMA and size. To avoid this
+problem, <span class="command"><strong>opreport</strong></span> considers a symbol to be the same
+if the symbol name, image name, and owning application name all match;
+any other factors are ignored. Note that the check for application name
+means that trying to compare library profiles between two different
+applications will not work as you might expect: each symbol will be
+considered different.
+</p>
+          </div>
+          <div class="sect2" title="2.5. Anonymous executable mappings">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="opreport-anon"></a>2.5. Anonymous executable mappings</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+Many applications, typically ones involving dynamic compilation into
+machine code (just-in-time, or "JIT", compilation), have executable mappings that
+are not backed by an ELF file. <span class="command"><strong>opreport</strong></span> has basic support for showing the
+samples taken in these regions; for example:
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+$ opreport /usr/bin/mono -l
+CPU: ppc64 POWER5, speed 1654.34 MHz (estimated)
+Counted CYCLES events (Processor Cycles using continuous sampling) with a unit mask of 0x00 (No unit mask) count 100000
+samples  %        image name    		                symbol name
+47       58.7500  mono                     			(no symbols)
+14       17.5000  anon (tgid:3189 range:0xf72aa000-0xf72fa000)  (no symbols)
+9        11.2500  anon (tgid:3189 range:0xf6cca000-0xf6dd9000)  (no symbols)
+.	 .	  .						.
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+</p>
+            <p>
+Note that, since such mappings are dependent upon individual invocations of
+a binary, these mappings are always listed as a dependent image,
+even when using <code class="option">--separate=none</code>.
+Equally, the results are not affected by the <code class="option">--merge</code>
+option.
+</p>
+            <p>
+As shown in the opreport output above, OProfile is unable to attribute the samples to any
+symbol(s) because there is no ELF file for this code.
+Enhanced support for JITed code is now available for some virtual machines; 
+e.g., the Java Virtual Machine.  For details about OProfile output for
+JITed code, see <a class="xref" href="#getting-jit-reports" title="4. OProfile results with JIT samples">Section 4, &#8220;OProfile results with JIT samples&#8221;</a>.
+</p>
+            <p>For more information about JIT support in OProfile, see <a class="xref" href="#jitsupport" title="1.1. Support for dynamically compiled (JIT) code">Section 1.1, &#8220;Support for dynamically compiled (JIT) code&#8221;</a>.
+</p>
+          </div>
+          <div class="sect2" title="2.6. XML formatted output">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="opreport-xml"></a>2.6. XML formatted output</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+The -xml option can be used to generate XML instead of the usual
+text format.  This allows opreport to eliminate some of the constraints
+dictated by the two dimensional text format.  For example, it is possible
+to separate the sample data across multiple events, cpus and threads.  The XML
+schema implemented by opreport is found in doc/opreport.xsd. It contains
+more detailed comments about the structure of the XML generated by opreport.
+</p>
+            <p>
+Since XML is consumed by a client program rather than a user, its structure
+is fairly static.  In particular, the --sort option is incompatible with the
+--xml option.  Percentages are not dislayed in the XML so the options related
+to percentages will have no effect.  Full pathnames are always displayed in
+the XML so --long-filenames is not necessary.  The --details option will cause
+all of the individual sample data to be included in the XML as well as the
+instruction byte stream for each symbol (for doing disassembly) and can result
+in very large XML files.
+</p>
+          </div>
+          <div class="sect2" title="2.7. Options for opreport">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="opreport-options"></a>2.7. Options for <span class="command"><strong>opreport</strong></span></h3>
+                </div>
+              </div>
+            </div>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">
+                    <code class="option">--accumulated / -a</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Accumulate sample and percentage counts in the symbol list.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--callgraph / -c</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show callgraph information.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--debug-info / -g</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show source file and line for each symbol.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--demangle / -D none|normal|smart</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+none: no demangling. normal: use default demangler (default) smart: use
+pattern-matching to make C++ symbol demangling more readable.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--details / -d</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show per-instruction details for all selected symbols. Note that, for
+binaries without symbol information, the VMA values shown are raw file
+offsets for the image binary.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--exclude-dependent / -x</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Do not include application-specific images for libraries, kernel modules
+and the kernel. This option only makes sense if the profile session
+used --separate.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--exclude-symbols / -e [symbols]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Exclude all the symbols in the given comma-separated list.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--global-percent / -%</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Make all percentages relative to the whole profile.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--help / -? / --usage</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show help message.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--image-path / -p [paths]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Comma-separated list of additional paths to search for binaries.
+This is needed to find modules in kernels 2.6 and upwards.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--root / -R [path]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+A path to a filesystem to search for additional binaries.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--include-symbols / -i [symbols]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Only include symbols in the given comma-separated list.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--long-filenames / -f</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Output full paths instead of basenames.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--merge / -m [lib,cpu,tid,tgid,unitmask,all]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Merge any profiles separated in a --separate session.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--no-header</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Don't output a header detailing profiling parameters.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--output-file / -o [file]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Output to the given file instead of stdout.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--reverse-sort / -r</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Reverse the sort from the default.
+</p>
+                </dd>
+                <dt>
+                  <span class="term"><code class="option">--session-dir=</code>dir_path</span>
+                </dt>
+                <dd>
+                  <p>
+Use sample database out of directory <code class="filename">dir_path</code> 
+instead of the default location (/var/lib/oprofile).
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--show-address / -w</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show the VMA address of each symbol (off by default).
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--sort / -s [vma,sample,symbol,debug,image]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Sort the list of symbols by, respectively, symbol address,
+number of samples, symbol name, debug filename and line number,
+binary image filename.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--symbols / -l</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+List per-symbol information instead of a binary image summary.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--threshold / -t [percentage]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Only output data for symbols that have more than the given percentage
+of total samples.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--verbose / -V [options]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Give verbose debugging output.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--version / -v</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show version.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--xml / -X</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Generate XML output.
+</p>
+                </dd>
+              </dl>
+            </div>
+          </div>
+        </div>
+        <div class="sect1" title="3. Outputting annotated source (opannotate)">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="opannotate"></a>3. Outputting annotated source (<span class="command"><strong>opannotate</strong></span>)</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+The <span class="command"><strong>opannotate</strong></span> utility generates annotated source files or assembly listings, optionally
+mixed with source.
+If you want to see the source file, the profiled application needs to have debug information, and the source
+must be available through this debug information. For GCC, you must use the <code class="option">-g</code> option
+when you are compiling.
+If the binary doesn't contain sufficient debug information, you can still
+use <span class="command"><strong>opannotate <code class="option">--assembly</code></strong></span> to get annotated assembly.
+</p>
+          <p>
+Note that for the reason explained in <a class="xref" href="#hardware-counters" title="4.1. Hardware performance counters">Section 4.1, &#8220;Hardware performance counters&#8221;</a> the results can be
+inaccurate. The debug information itself can add other problems; for example, the line number for a symbol can be
+incorrect. Assembly instructions can be re-ordered and moved by the compiler, and this can lead to
+crediting source lines with samples not really "owned" by this line. Also see
+<a class="xref" href="#interpreting" title="Chapter 5. Interpreting profiling results">Chapter 5, <i>Interpreting profiling results</i></a>.
+</p>
+          <p>
+You can output the annotation to one single file, containing all the source found using the
+<code class="option">--source</code>. You can use this in conjunction with <code class="option">--assembly</code>
+to get combined source/assembly output.
+</p>
+          <p>
+You can also output a directory of annotated source files that maintains the structure of
+the original sources. Each line in the annotated source is prepended with the samples
+for that line. Additionally, each symbol is annotated giving details for the symbol
+as a whole. An example:
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+$ opannotate --source --output-dir=annotated /usr/local/oprofile-pp/bin/oprofiled
+$ ls annotated/home/moz/src/oprofile-pp/daemon/
+opd_cookie.h  opd_image.c  opd_kernel.c  opd_sample_files.c  oprofiled.c
+</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+Line numbers are maintained in the source files, but each file has
+a footer appended describing the profiling details. The actual annotation
+looks something like this :
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+...
+               :static uint64_t pop_buffer_value(struct transient * trans)
+ 11510  1.9661 :{ /* pop_buffer_value total:  89901 15.3566 */
+               :        uint64_t val;
+               :
+ 10227  1.7469 :        if (!trans-&gt;remaining) {
+               :                fprintf(stderr, "BUG: popping empty buffer !\n");
+               :                exit(EXIT_FAILURE);
+               :        }
+               :
+               :        val = get_buffer_value(trans-&gt;buffer, 0);
+  2281  0.3896 :        trans-&gt;remaining--;
+  2296  0.3922 :        trans-&gt;buffer += kernel_pointer_size;
+               :        return val;
+ 10454  1.7857 :}
+...
+</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+The first number on each line is the number of samples, whilst the second is
+the relative percentage of total samples.
+</p>
+          <div class="sect2" title="3.1. Locating source files">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="opannotate-finding-source"></a>3.1. Locating source files</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+Of course, <span class="command"><strong>opannotate</strong></span> needs to be able to locate the source files
+for the binary image(s) in order to produce output. Some binary images have debug
+information where the given source file paths are relative, not absolute. You can
+specify search paths to look for these files (similar to <span class="command"><strong>gdb</strong></span>'s
+<code class="option">dir</code> command) with the <code class="option">--search-dirs</code> option.
+</p>
+            <p>
+Sometimes you may have a binary image which gives absolute paths for the source files,
+but you have the actual sources elsewhere (commonly, you've installed an SRPM for
+a binary on your system and you want annotation from an existing profile). You can
+use the <code class="option">--base-dirs</code> option to redirect OProfile to look somewhere
+else for source files. For example, imagine we have a binary generated from a source
+file that is given in the debug information as <code class="filename">/tmp/build/libfoo/foo.c</code>,
+and you have the source tree matching that binary installed in <code class="filename">/home/user/libfoo/</code>.
+You can redirect OProfile to find <code class="filename">foo.c</code> correctly like this :
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+$ opannotate --source --base-dirs=/tmp/build/libfoo/ --search-dirs=/home/user/libfoo/ --output-dir=annotated/ /lib/libfoo.so
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+You can specify multiple (comma-separated) paths to both options.
+</p>
+          </div>
+          <div class="sect2" title="3.2. Usage of opannotate">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="opannotate-details"></a>3.2. Usage of <span class="command"><strong>opannotate</strong></span></h3>
+                </div>
+              </div>
+            </div>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">
+                    <code class="option">--assembly / -a</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Output annotated assembly. If this is combined with --source, then mixed
+source / assembly annotations are output.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--base-dirs / -b [paths]/</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Comma-separated list of path prefixes. This can be used to point OProfile to a
+different location for source files when the debug information specifies an
+absolute path on your system for the source that does not exist. The prefix
+is stripped from the debug source file paths, then searched in the search dirs
+specified by <code class="option">--search-dirs</code>.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--demangle / -D none|normal|smart</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+none: no demangling. normal: use default demangler (default) smart: use
+pattern-matching to make C++ symbol demangling more readable.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--exclude-dependent / -x</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Do not include application-specific images for libraries, kernel modules
+and the kernel. This option only makes sense if the profile session
+used --separate.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--exclude-file [files]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Exclude all files in the given comma-separated list of glob patterns.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--exclude-symbols / -e [symbols]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Exclude all the symbols in the given comma-separated list.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--help / -? / --usage</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show help message.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--image-path / -p [paths]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Comma-separated list of additional paths to search for binaries.
+This is needed to find modules in kernels 2.6 and upwards.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--root / -R [path]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+A path to a filesystem to search for additional binaries.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--include-file [files]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Only include files in the given comma-separated list of glob patterns.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--include-symbols / -i [symbols]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Only include symbols in the given comma-separated list.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--objdump-params [params]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Pass the given parameters as extra values when calling objdump.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--output-dir / -o [dir]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Output directory. This makes opannotate output one annotated file for each
+source file. This option can't be used in conjunction with --assembly.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--search-dirs / -d [paths]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Comma-separated list of paths to search for source files. This is useful to find
+source files when the debug information only contains relative paths.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--source / -s</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Output annotated source. This requires debugging information to be available
+for the binaries.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--threshold / -t [percentage]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Only output data for symbols that have more than the given percentage
+of total samples.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--verbose / -V [options]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Give verbose debugging output.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--version / -v</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show version.
+</p>
+                </dd>
+              </dl>
+            </div>
+          </div>
+        </div>
+        <div class="sect1" title="4. OProfile results with JIT samples">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="getting-jit-reports"></a>4. OProfile results with JIT samples</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+		After profiling a Java (or other supported VM) application, the command
+		</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen"><span xmlns="http://www.w3.org/1999/xhtml" class="command"><strong>"opcontrol --dump"</strong></span> </pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+		flushes the sample buffers and creates ELF binaries from the
+		intermediate files that were written by the agent library.
+		The ELF binaries are named <code class="filename">&lt;tgid&gt;.jo</code>.
+		With the symbol information stored in these ELF files, it is
+		possible to map samples to the appropriate symbols.
+	</p>
+          <p>
+		The usual analysis tools (<span class="command"><strong>opreport</strong></span> and/or 
+		<span class="command"><strong>opannotate</strong></span>) can now be used
+		to get symbols and assembly code for the instrumented VM processes.
+	</p>
+          <p>
+Below is an example of a profile report of a Java application that has been
+instrumented with the provided agent library.
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+$ opreport -l /usr/lib/jvm/jre-1.5.0-ibm/bin/java
+CPU: Core Solo / Duo, speed 2167 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Unhalted clock cycles) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples  %        image name               symbol name
+186020   50.0523  no-vmlinux               no-vmlinux               (no symbols)
+34333     9.2380  7635.jo                  java                     void test.f1()
+19022     5.1182  libc-2.5.so              libc-2.5.so              _IO_file_xsputn@@GLIBC_2.1
+18762     5.0483  libc-2.5.so              libc-2.5.so              vfprintf
+16408     4.4149  7635.jo                  java                     void test$HelloThread.run()
+16250     4.3724  7635.jo                  java                     void test$test_1.f2(int)
+15303     4.1176  7635.jo                  java                     void test.f2(int, int)
+13252     3.5657  7635.jo                  java                     void test.f2(int)
+5165      1.3897  7635.jo                  java                     void test.f4()
+955       0.2570  7635.jo                  java                     void test$HelloThread.run()~
+
+</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+</p>
+          <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
+            <h3 class="title">Note</h3>
+            <p>
+	  Depending on the JVM that is used, certain options of opreport and opannotate
+	  do NOT work since they rely on debug information (e.g. source code line number)
+	  that is not always available. The Sun JVM does provide the necessary debug
+	  information via the JVMTI[PI] interface,
+	  but other JVMs do not.
+  </p>
+          </div>
+          <p>
+		As you can see in the opreport output, the JIT support agent for Java
+		generates symbols to include the class and method signature.
+		A symbol with the suffix &#732;&lt;n&gt; (e.g.
+		<code class="code">void test$HelloThread.run()&#732;1</code>) means that this is
+		the &lt;n&gt;th occurrence of the identical name. This happens if a method is re-JITed.
+		A symbol with the suffix %&lt;n&gt;, means that the address space of this symbol
+		was reused during the sample session (see <a class="xref" href="#overlapping-symbols" title="6. Overlapping symbols in JITed code">Section 6, &#8220;Overlapping symbols in JITed code&#8221;</a>).
+		The value &lt;n&gt; is the percentage of time that this symbol/code was present in
+		relation to the total lifetime of all overlapping other symbols. A symbol of the form
+		<code class="code">&lt;return_val&gt; &lt;class_name&gt;$&lt;method_sig&gt;</code> denotes an
+		inner class.
+	</p>
+        </div>
+        <div class="sect1" title="5. gprof-compatible output (opgprof)">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="opgprof"></a>5. <span class="command"><strong>gprof</strong></span>-compatible output (<span class="command"><strong>opgprof</strong></span>)</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+If you're familiar with the output produced by <span class="command"><strong>GNU gprof</strong></span>,
+you may find <span class="command"><strong>opgprof</strong></span> useful. It takes a single binary
+as an argument, and produces a <code class="filename">gmon.out</code> file for use
+with <span class="command"><strong>gprof -p</strong></span>. If call-graph profiling is enabled,
+then this is also included.
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+$ opgprof `which oprofiled` # generates gmon.out file
+$ gprof -p `which oprofiled` | head
+Flat profile:
+
+Each sample counts as 1 samples.
+  %   cumulative   self              self     total
+ time   samples   samples    calls  T1/call  T1/call  name
+ 33.13 206237.00 206237.00                             odb_insert
+ 22.67 347386.00 141149.00                             pop_buffer_value
+  9.56 406881.00 59495.00                             opd_put_sample
+  7.34 452599.00 45718.00                             opd_find_image
+  7.19 497327.00 44728.00                             opd_process_samples
+</pre>
+              </td>
+            </tr>
+          </table>
+          <div class="sect2" title="5.1. Usage of opgprof">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="opgprof-details"></a>5.1. Usage of <span class="command"><strong>opgprof</strong></span></h3>
+                </div>
+              </div>
+            </div>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">
+                    <code class="option">--help / -? / --usage</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show help message.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--image-path / -p [paths]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Comma-separated list of additional paths to search for binaries.
+This is needed to find modules in kernels 2.6 and upwards.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--root / -R [path]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+A path to a filesystem to search for additional binaries.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--output-filename / -o [file]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Output to the given file instead of the default, gmon.out
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--threshold / -t [percentage]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Only output data for symbols that have more than the given percentage
+of total samples.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--verbose / -V [options]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Give verbose debugging output.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--version / -v</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show version.
+</p>
+                </dd>
+              </dl>
+            </div>
+          </div>
+        </div>
+        <div class="sect1" title="6. Archiving measurements (oparchive)">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="oparchive"></a>6. Archiving measurements (<span class="command"><strong>oparchive</strong></span>)</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+	The <span class="command"><strong>oparchive</strong></span> utility generates a directory populated
+	with executable, debug, and oprofile sample files. This directory can be
+	moved to another machine via <span class="command"><strong>tar</strong></span> and analyzed without
+	further use of the data collection machine.
+</p>
+          <p>
+	The following command would collect the sample files, the executables
+	associated with the sample files, and the debuginfo files associated
+	with the executables and copy them into
+	<code class="filename">/tmp/current_data</code>:
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+# oparchive -o /tmp/current_data
+</pre>
+              </td>
+            </tr>
+          </table>
+          <div class="sect2" title="6.1. Usage of oparchive">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="oparchive-details"></a>6.1. Usage of <span class="command"><strong>oparchive</strong></span></h3>
+                </div>
+              </div>
+            </div>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">
+                    <code class="option">--help / -? / --usage</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show help message.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--exclude-dependent / -x</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Do not include application-specific images for libraries, kernel modules
+and the kernel. This option only makes sense if the profile session
+used --separate.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--image-path / -p [paths]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Comma-separated list of additional paths to search for binaries.
+This is needed to find modules in kernels 2.6 and upwards.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--root / -R [path]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+A path to a filesystem to search for additional binaries.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--output-directory / -o [directory]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Output to the given directory. There is no default. This must be specified.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--list-files / -l</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Only list the files that would be archived, don't copy them.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--verbose / -V [options]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Give verbose debugging output.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--version / -v</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show version.
+</p>
+                </dd>
+              </dl>
+            </div>
+          </div>
+        </div>
+        <div class="sect1" title="7. Converting sample database files (opimport)">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="opimport"></a>7. Converting sample database files (<span class="command"><strong>opimport</strong></span>)</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+	This utility converts sample database files from a foreign binary format (abi) to
+	the native format. This is useful only when moving sample files between hosts,
+	for analysis on platforms other than the one used for collection. The abi format
+	of the file to be imported is described in a text file located in <code class="filename">$SESSION_DIR/abi</code>.
+</p>
+          <p>
+	The following command would convert the input samples files to the
+	output samples files using the given abi file as a binary description
+	of the input file and the curent platform abi as a binary description
+	of the output file.
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+# opimport -a /var/lib/oprofile/abi -o /tmp/current/.../GLOBAL_POWER_EVENTS.200000.1.all.all.all /var/lib/.../mprime/GLOBAL_POWER_EVENTS.200000.1.all.all.all
+</pre>
+              </td>
+            </tr>
+          </table>
+          <div class="sect2" title="7.1. Usage of opimport">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="opimport-details"></a>7.1. Usage of <span class="command"><strong>opimport</strong></span></h3>
+                </div>
+              </div>
+            </div>
+            <div class="variablelist">
+              <dl>
+                <dt>
+                  <span class="term">
+                    <code class="option">--help / -? / --usage</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show help message.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--abi / -a [filename]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Input abi file description location.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--force / -f</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Force conversion even if the input and output abi are identical.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--output / -o [filename]</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Specify the output filename. If the output file already exists, the file is
+not overwritten but data are accumulated in. Sample filename are informative
+for post profile tools and must be kept identical, in other word the pathname
+from the first path component containing a '{' must be kept as it in the
+output filename.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--verbose / -V</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Give verbose debugging output.
+</p>
+                </dd>
+                <dt>
+                  <span class="term">
+                    <code class="option">--version / -v</code>
+                  </span>
+                </dt>
+                <dd>
+                  <p>
+Show version.
+</p>
+                </dd>
+              </dl>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="chapter" title="Chapter 5. Interpreting profiling results">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="interpreting"></a>Chapter 5. Interpreting profiling results</h2>
+            </div>
+          </div>
+        </div>
+        <div class="toc">
+          <p>
+            <b>Table of Contents</b>
+          </p>
+          <dl>
+            <dt>
+              <span class="sect1">
+                <a href="#irq-latency">1. Profiling interrupt latency</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#kernel-profiling">2. Kernel profiling</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#irq-masking">2.1. Interrupt masking</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#idle">2.2. Idle time</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#kernel-modules">2.3. Profiling kernel modules</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#interpreting-callgraph">3. Interpreting call-graph profiles</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#debug-info">4. Inaccuracies in annotated source</a>
+              </span>
+            </dt>
+            <dd>
+              <dl>
+                <dt>
+                  <span class="sect2">
+                    <a href="#effect-of-optimizations">4.1. Side effects of optimizations</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#prologues">4.2. Prologues and epilogues</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#inlined-function">4.3. Inlined functions</a>
+                  </span>
+                </dt>
+                <dt>
+                  <span class="sect2">
+                    <a href="#wrong-linenr-info">4.4. Inaccuracy in line number information</a>
+                  </span>
+                </dt>
+              </dl>
+            </dd>
+            <dt>
+              <span class="sect1">
+                <a href="#symbol-without-debug-info">5. Assembly functions</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#overlapping-symbols">6. Overlapping symbols in JITed code</a>
+              </span>
+            </dt>
+            <dt>
+              <span class="sect1">
+                <a href="#hidden-cost">7. Other discrepancies</a>
+              </span>
+            </dt>
+          </dl>
+        </div>
+        <p>
+The standard caveats of profiling apply in interpreting the results from OProfile:
+profile realistic situations, profile different scenarios, profile
+for as long as a time as possible, avoid system-specific artifacts, don't trust
+the profile data too much. Also bear in mind the comments on the performance
+counters above - you <span class="emphasis"><em>cannot</em></span> rely on totally accurate
+instruction-level profiling.  However, for almost all circumstances the data
+can be useful. Ideally a utility such as Intel's VTUNE would be available to
+allow careful instruction-level analysis; go hassle Intel for this, not me ;)
+</p>
+        <div class="sect1" title="1. Profiling interrupt latency">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="irq-latency"></a>1. Profiling interrupt latency</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+This is an example of how the latency of delivery of profiling interrupts
+can impact the reliability of the profiling data. This is pretty much a 
+worst-case-scenario example: these problems are fairly rare.
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+double fun(double a, double b, double c)
+{
+ double result = 0;
+ for (int i = 0 ; i &lt; 10000; ++i) {
+  result += a;
+  result *= b;
+  result /= c;
+ }
+ return result;
+}
+</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+Here the last instruction of the loop is very costly, and you would expect the result
+reflecting that - but (cutting the instructions inside the loop):
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+$ opannotate -a -t 10 ./a.out
+
+     88 15.38% : 8048337:       fadd   %st(3),%st
+     48 8.391% : 8048339:       fmul   %st(2),%st
+     68 11.88% : 804833b:       fdiv   %st(1),%st
+    368 64.33% : 804833d:       inc    %eax
+               : 804833e:       cmp    $0x270f,%eax
+               : 8048343:       jle    8048337
+</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+The problem comes from the x86 hardware; when the counter overflows the IRQ
+is asserted but the hardware has features that can delay the NMI interrupt:
+x86 hardware is synchronous (i.e. cannot interrupt during an instruction);
+there is also a latency when the IRQ is asserted, and the multiple
+execution units and the out-of-order model of modern x86 CPUs also causes
+problems. This is the same function, with annotation :
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+$ opannotate -s -t 10 ./a.out
+
+               :double fun(double a, double b, double c)
+               :{ /* _Z3funddd total:     572 100.0% */
+               : double result = 0;
+    368 64.33% : for (int i = 0 ; i &lt; 10000; ++i) {
+     88 15.38% :  result += a;
+     48 8.391% :  result *= b;
+     68 11.88% :  result /= c;
+               : }
+               : return result;
+               :}
+</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+The conclusion: don't trust samples coming at the end of a loop,
+particularly if the last instruction generated by the compiler is costly. This
+case can also occur for branches. Always bear in mind that samples
+can be delayed by a few cycles from its real position. That's a hardware
+problem and OProfile can do nothing about it.
+</p>
+        </div>
+        <div class="sect1" title="2. Kernel profiling">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="kernel-profiling"></a>2. Kernel profiling</h2>
+              </div>
+            </div>
+          </div>
+          <div class="sect2" title="2.1. Interrupt masking">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="irq-masking"></a>2.1. Interrupt masking</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+OProfile uses non-maskable interrupts (NMI) on the P6 generation, Pentium 4,
+Athlon, Opteron, Phenom, and Turion processors. These interrupts can occur even in section of the
+Linux where interrupts are disabled, allowing collection of samples in virtually
+all executable code.  The RTC, timer interrupt mode, and Itanium 2 collection mechanisms
+use maskable interrupts. Thus, the RTC and Itanium 2 data collection mechanism have "sample
+shadows", or blind spots: regions where no samples will be collected. Typically, the samples
+will be attributed to the code immediately after the interrupts are re-enabled.
+</p>
+          </div>
+          <div class="sect2" title="2.2. Idle time">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="idle"></a>2.2. Idle time</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+Your kernel is likely to support halting the processor when a CPU is idle. As
+the typical hardware events like <code class="constant">CPU_CLK_UNHALTED</code> do not
+count when the CPU is halted, the kernel profile will not reflect the actual
+amount of time spent idle. You can change this behaviour by booting with
+the <code class="option">idle=poll</code> option, which uses a different idle routine. This
+will appear as <code class="function">poll_idle()</code> in your kernel profile.
+</p>
+          </div>
+          <div class="sect2" title="2.3. Profiling kernel modules">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="kernel-modules"></a>2.3. Profiling kernel modules</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+OProfile profiles kernel modules by default. However, there are a couple of problems
+you may have when trying to get results. First, you may have booted via an initrd;
+this means that the actual path for the module binaries cannot be determined automatically.
+To get around this, you can use the <code class="option">-p</code> option to the profiling tools
+to specify where to look for the kernel modules.
+</p>
+            <p>
+In 2.6, the information on where kernel module binaries are located has been removed.
+This means OProfile needs guiding with the <code class="option">-p</code> option to find your
+modules. Normally, you can just use your standard module top-level directory for this.
+Note that due to this problem, OProfile cannot check that the modification times match;
+it is your responsibility to make sure you do not modify a binary after a profile
+has been created.
+</p>
+            <p>
+If you have run <span class="command"><strong>insmod</strong></span> or <span class="command"><strong>modprobe</strong></span> to insert a module
+in a particular directory, it is important that you specify this directory with the 
+<code class="option">-p</code> option first, so that it over-rides an older module binary that might
+exist in other directories you've specified with <code class="option">-p</code>. It is up to you
+to make sure that these values are correct: 2.6 kernels simply do not provide enough
+information for OProfile to get this information.
+</p>
+          </div>
+        </div>
+        <div class="sect1" title="3. Interpreting call-graph profiles">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="interpreting-callgraph"></a>3. Interpreting call-graph profiles</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+Sometimes the results from call-graph profiles may be different to what
+you expect to see. The first thing to check is whether the target
+binaries where compiled with frame pointers enabled (if the binary was
+compiled using <span class="command"><strong>gcc</strong></span>'s
+<code class="option">-fomit-frame-pointer</code> option, you will not get
+meaningful results). Note that as of this writing, the GCC developers
+plan to disable frame pointers by default. The Linux kernel is built
+without frame pointers by default; there is a configuration option you
+can use to turn it on under the "Kernel Hacking" menu.
+</p>
+          <p>
+Often you may see a caller of a function that does not actually directly
+call the function you're looking at (e.g. if <code class="function">a()</code>
+calls <code class="function">b()</code>, which in turn calls
+<code class="function">c()</code>, you may see an entry for
+<code class="function">a()-&gt;c()</code>).  What's actually occurring is that we
+are taking samples at the very start (or the very end) of
+<code class="function">c()</code>; at these few instructions, we haven't yet
+created the new function's frame, so it appears as if
+<code class="function">a()</code> is calling directly into
+<code class="function">c()</code>. Be careful not to be misled by these
+entries.
+</p>
+          <p>
+Like the rest of OProfile, call-graph profiling uses a statistical
+approach; this means that sometimes a backtrace sample is truncated, or
+even partially wrong. Bear this in mind when examining results.
+</p>
+        </div>
+        <div class="sect1" title="4. Inaccuracies in annotated source">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="debug-info"></a>4. Inaccuracies in annotated source</h2>
+              </div>
+            </div>
+          </div>
+          <div class="sect2" title="4.1. Side effects of optimizations">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="effect-of-optimizations"></a>4.1. Side effects of optimizations</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+The compiler can introduce some pitfalls in the annotated source output.
+The optimizer can move pieces of code in such manner that two line of codes
+are interlaced (instruction scheduling). Also debug info generated by the compiler 
+can show strange behavior. This is especially true for complex expressions e.g. inside
+an if statement:
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+	if (a &amp;&amp; ..
+	    b &amp;&amp; ..
+	    c &amp;&amp;)
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+here the problem come from the position of line number. The available debug
+info does not give enough details for the if condition, so all samples are
+accumulated at the position of the right brace of the expression. Using
+<span class="command"><strong>opannotate <code class="option">-a</code></strong></span> can help to show the real
+samples at an assembly level.
+</p>
+          </div>
+          <div class="sect2" title="4.2. Prologues and epilogues">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="prologues"></a>4.2. Prologues and epilogues</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+The compiler generally needs to generate "glue" code across function calls, dependent
+on the particular function call conventions used. Additionally other things
+need to happen, like stack pointer adjustment for the local variables; this
+code is known as the function prologue. Similar code is needed at function return,
+and is known as the function epilogue. This will show up in annotations as
+samples at the very start and end of a function, where there is no apparent
+executable code in the source.
+</p>
+          </div>
+          <div class="sect2" title="4.3. Inlined functions">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="inlined-function"></a>4.3. Inlined functions</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+You may see that a function is credited with a certain number of samples, but
+the listing does not add up to the correct total. To pick a real example :
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+               :internal_sk_buff_alloc_security(struct sk_buff *skb)
+ 353 2.342%    :{ /* internal_sk_buff_alloc_security total: 1882 12.48% */
+               :
+               :        sk_buff_security_t *sksec;
+  15 0.0995%   :        int rc = 0;
+               :
+  10 0.06633%  :        sksec = skb-&gt;lsm_security;
+ 468 3.104%    :        if (sksec &amp;&amp; sksec-&gt;magic == DSI_MAGIC) {
+               :                goto out;
+               :        }
+               :
+               :        sksec = (sk_buff_security_t *) get_sk_buff_memory(skb);
+   3 0.0199%   :        if (!sksec) {
+  38 0.2521%   :                rc = -ENOMEM;
+               :                goto out;
+  10 0.06633%  :        }
+               :        memset(sksec, 0, sizeof (sk_buff_security_t));
+  44 0.2919%   :        sksec-&gt;magic = DSI_MAGIC;
+  32 0.2123%   :        sksec-&gt;skb = skb;
+  45 0.2985%   :        sksec-&gt;sid = DSI_SID_NORMAL;
+  31 0.2056%   :        skb-&gt;lsm_security = sksec;
+               :
+               :      out:
+               :
+ 146 0.9685%   :        return rc;
+               :
+  98 0.6501%   :}
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+Here, the function is credited with 1,882 samples, but the annotations
+below do not account for this. This is usually because of inline functions -
+the compiler marks such code with debug entries for the inline function
+definition, and this is where <span class="command"><strong>opannotate</strong></span> annotates
+such samples. In the case above, <code class="function">memset</code> is the most
+likely candidate for this problem. Examining the mixed source/assembly
+output can help identify such results.
+</p>
+            <p>
+This problem is more visible when there is no source file available, in the
+following example it's trivially visible the sums of symbols samples is less
+than the number of the samples for this file. The difference must be accounted
+to inline functions.
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+/*
+ * Total samples for file : "arch/i386/kernel/process.c"
+ *
+ *    109  2.4616
+ */
+
+ /* default_idle total:     84  1.8970 */
+ /* cpu_idle total:         21  0.4743 */
+ /* flush_thread total:      1  0.0226 */
+ /* prepare_to_copy total:   1  0.0226 */
+ /* __switch_to total:      18  0.4065 */
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+The missing samples are not lost, they will be credited to another source
+location where the inlined function is defined. The inlined function will be
+credited from multiple call site and merged in one place in the annotated
+source file so there is no way to see from what call site are coming the
+samples for an inlined function.
+</p>
+            <p>
+When running <span class="command"><strong>opannotate</strong></span>, you may get a warning
+"some functions compiled without debug information may have incorrect source line attributions".
+In some rare cases, OProfile is not able to verify that the derived source line
+is correct (when some parts of the binary image are compiled without debugging
+information). Be wary of results if this warning appears.
+</p>
+            <p>
+Furthermore, for some languages the compiler can implicitly generate functions,
+such as default copy constructors. Such functions are labelled by the compiler
+as having a line number of 0, which means the source annotation can be confusing.
+</p>
+          </div>
+          <div class="sect2" title="4.4. Inaccuracy in line number information">
+            <div class="titlepage">
+              <div>
+                <div>
+                  <h3 class="title"><a id="wrong-linenr-info"></a>4.4. Inaccuracy in line number information</h3>
+                </div>
+              </div>
+            </div>
+            <p>
+Depending on your compiler you can fall into the following problem:
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+struct big_object { int a[500]; };
+
+int main()
+{
+	big_object a, b;
+	for (int i = 0 ; i != 1000 * 1000; ++i)
+		b = a;
+	return 0;
+}
+
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+Compiled with <span class="command"><strong>gcc</strong></span> 3.0.4 the annotated source is clearly inaccurate:
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+               :int main()
+               :{  /* main total: 7871 100% */
+               :        big_object a, b;
+               :        for (int i = 0 ; i != 1000 * 1000; ++i)
+               :                b = a;
+ 7871 100%     :        return 0;
+               :}
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+The problem here is distinct from the IRQ latency problem; the debug line number
+information is not precise enough; again, looking at output of <span class="command"><strong>opannoatate -as</strong></span> can help.
+</p>
+            <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+              <tr>
+                <td>
+                  <pre class="screen">
+               :int main()
+               :{
+               :        big_object a, b;
+               :        for (int i = 0 ; i != 1000 * 1000; ++i)
+               : 80484c0:       push   %ebp
+               : 80484c1:       mov    %esp,%ebp
+               : 80484c3:       sub    $0xfac,%esp
+               : 80484c9:       push   %edi
+               : 80484ca:       push   %esi
+               : 80484cb:       push   %ebx
+               :                b = a;
+               : 80484cc:       lea    0xfffff060(%ebp),%edx
+               : 80484d2:       lea    0xfffff830(%ebp),%eax
+               : 80484d8:       mov    $0xf423f,%ebx
+               : 80484dd:       lea    0x0(%esi),%esi
+               :        return 0;
+    3 0.03811% : 80484e0:       mov    %edx,%edi
+               : 80484e2:       mov    %eax,%esi
+    1 0.0127%  : 80484e4:       cld
+    8 0.1016%  : 80484e5:       mov    $0x1f4,%ecx
+ 7850 99.73%   : 80484ea:       repz movsl %ds:(%esi),%es:(%edi)
+    9 0.1143%  : 80484ec:       dec    %ebx
+               : 80484ed:       jns    80484e0
+               : 80484ef:       xor    %eax,%eax
+               : 80484f1:       pop    %ebx
+               : 80484f2:       pop    %esi
+               : 80484f3:       pop    %edi
+               : 80484f4:       leave
+               : 80484f5:       ret
+</pre>
+                </td>
+              </tr>
+            </table>
+            <p>
+So here it's clear that copying is correctly credited with of all the samples, but the
+line number information is misplaced. <span class="command"><strong>objdump -dS</strong></span> exposes the
+same problem. Note that maintaining accurate debug information for compilers when optimizing is difficult, so this problem is not suprising.
+The problem of debug information
+accuracy is also dependent on the binutils version used; some BFD library versions
+contain a work-around for known problems of <span class="command"><strong>gcc</strong></span>, some others do not. This is unfortunate but we must live with that,
+since profiling is pointless when you disable optimisation (which would give better debugging entries).
+</p>
+          </div>
+        </div>
+        <div class="sect1" title="5. Assembly functions">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="symbol-without-debug-info"></a>5. Assembly functions</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+Often the assembler cannot generate debug information automatically.
+This means that you cannot get a source report unless 
+you manually define the neccessary debug information; read your assembler documentation for how you might
+do that. The only
+debugging info needed currently by OProfile is the line-number/filename-VMA association. When profiling assembly
+without debugging info you can always get report for symbols, and optionally for VMA, through <span class="command"><strong>opreport -l</strong></span>
+or <span class="command"><strong>opreport -d</strong></span>, but this works only for symbols with the right attributes.
+For <span class="command"><strong>gas</strong></span> you can get this by
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+.globl foo
+	.type	foo,@function
+</pre>
+              </td>
+            </tr>
+          </table>
+          <p> 
+whilst for <span class="command"><strong>nasm</strong></span> you must use
+</p>
+          <table xmlns="" border="0" style="background: #E0E0E0;" width="90%">
+            <tr>
+              <td>
+                <pre class="screen">
+	  GLOBAL foo:function		; [1]
+</pre>
+              </td>
+            </tr>
+          </table>
+          <p>
+Note that OProfile does not need the global attribute, only the function attribute.
+</p>
+        </div>
+        <div class="sect1" title="6. Overlapping symbols in JITed code">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="overlapping-symbols"></a>6. Overlapping symbols in JITed code</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+	Some virtual machines (e.g., Java) may re-JIT a method, resulting in previously
+	allocated space for a piece of compiled code to be reused. This means that, at one distinct
+	code address, multiple symbols/methods may be present during the run time of the application.
+	</p>
+          <p>
+	Since OProfile samples are buffered and don&#8242;t have timing information, there is no way
+	to correlate samples with the (possibly) varying address ranges in which the code for a symbol
+	may reside.
+	An alternative would be flushing the OProfile sampling buffer when we get an unload event,
+	but this could result in high overhead.
+	</p>
+          <p>
+	To moderate the problem of overlapping symbols, OProfile tries to select the symbol that was
+	present at this address range most of the time. Additionally, other overlapping symbols
+	are truncated in the overlapping area.
+	This gives reasonable results, because in reality, address reuse typically takes place
+	during phase changes of the application -- in particular, during application  startup.
+	Thus, for optimum profiling results, start the sampling session after application startup
+	and burn in.
+	</p>
+        </div>
+        <div class="sect1" title="7. Other discrepancies">
+          <div class="titlepage">
+            <div>
+              <div>
+                <h2 class="title" style="clear: both"><a id="hidden-cost"></a>7. Other discrepancies</h2>
+              </div>
+            </div>
+          </div>
+          <p>
+Another cause of apparent problems is the hidden cost of instructions. A very
+common example is two memory reads: one from L1 cache and the other from memory:
+the second memory read is likely to have more samples.
+There are many other causes of hidden cost of instructions. A non-exhaustive
+list: mis-predicted branch, TLB cache miss, partial register stall,
+partial register dependencies, memory mismatch stall, re-executed µops. If you want to write
+programs at the assembly level, be sure to take a look at the Intel and
+AMD documentation at <a class="ulink" href="http://developer.intel.com/">http://developer.intel.com/</a>
+and <a class="ulink" href="http://developer.amd.com/devguides.jsp/">http://developer.amd.com/devguides.jsp</a>.
+</p>
+        </div>
+      </div>
+      <div class="chapter" title="Chapter 6. Acknowledgments">
+        <div class="titlepage">
+          <div>
+            <div>
+              <h2 class="title"><a id="ack"></a>Chapter 6. Acknowledgments</h2>
+            </div>
+          </div>
+        </div>
+        <p>
+Thanks to (in no particular order) : Arjan van de Ven, Rik van Riel, Juan Quintela, Philippe Elie,
+Phillipp Rumpf, Tigran Aivazian, Alex Brown, Alisdair Rawsthorne, Bob Montgomery, Ray Bryant, H.J. Lu,
+Jeff Esper, Will Cohen, Graydon Hoare, Cliff Woolley, Alex Tsariounov, Al Stone, Jason Yeh,
+Randolph Chung, Anton Blanchard, Richard Henderson, Andries Brouwer, Bryan Rittmeyer,
+Maynard P. Johnson,
+Richard Reich (rreich@rdrtech.com), Zwane Mwaikambo, Dave Jones, Charles Filtness; and finally Pulp, for "Intro".
+</p>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/oprofile-0.9.7/doc/oprofile.xml b/oprofile-0.9.7/doc/oprofile.xml
new file mode 100644
index 0000000..6a17c6d
--- /dev/null
+++ b/oprofile-0.9.7/doc/oprofile.xml
@@ -0,0 +1,2950 @@
+<?xml version="1.0" encoding='ISO-8859-1'?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<book id="oprofile-guide">
+<bookinfo>
+	<title>OProfile manual</title>
+ 
+	<authorgroup>
+		<author>
+			<firstname>John</firstname>
+			<surname>Levon</surname>
+			<affiliation>
+				<address><email>levon@movementarian.org</email></address>
+			</affiliation>
+		</author>
+	</authorgroup>
+
+	<copyright>
+		<year>2000-2004</year>
+		<holder>Victoria University of Manchester, John Levon and others</holder>
+	</copyright>
+</bookinfo>
+
+<toc></toc>
+
+<chapter id="introduction">
+<title>Introduction</title>
+
+<para>
+This manual applies to OProfile version <oprofileversion />.
+OProfile is a profiling system for Linux 2.2/2.4/2.6 systems on a number of architectures. It is capable of profiling
+all parts of a running system, from the kernel (including modules and interrupt handlers) to shared libraries
+to binaries. It runs transparently in the background collecting information at a low overhead. These
+features make it ideal for profiling entire systems to determine bottle necks in real-world systems.
+</para>
+<para>
+Many CPUs provide "performance counters", hardware registers that can count "events"; for example,
+cache misses, or CPU cycles. OProfile provides profiles of code based on the number of these occurring events:
+repeatedly, every time a certain (configurable) number of events has occurred, the PC value is recorded.
+This information is aggregated into profiles for each binary image.</para>
+<para>
+Some hardware setups do not allow OProfile to use performance counters: in these cases, no
+events are available, and OProfile operates in timer/RTC mode, as described in later chapters.
+</para>
+<sect1 id="applications">
+<title>Applications of OProfile</title>
+<para>
+OProfile is useful in a number of situations. You might want to use OProfile when you :
+</para>
+<itemizedlist>
+<listitem><para>need low overhead</para></listitem>
+<listitem><para>cannot use highly intrusive profiling methods</para></listitem>
+<listitem><para>need to profile interrupt handlers</para></listitem>
+<listitem><para>need to profile an application and its shared libraries</para></listitem>
+<listitem><para>need to profile dynamically compiled code of supported virtual machines (see <xref linkend="jitsupport"/>)</para></listitem>
+<listitem><para>need to capture the performance behaviour of entire system</para></listitem>
+<listitem><para>want to examine hardware effects such as cache misses</para></listitem>
+<listitem><para>want detailed source annotation</para></listitem>
+<listitem><para>want instruction-level profiles</para></listitem>
+<listitem><para>want call-graph profiles</para></listitem>
+</itemizedlist>
+<para>
+OProfile is not a panacea. OProfile might not be a complete solution when you :
+</para>
+<itemizedlist>
+<listitem><para>require call graph profiles on platforms other than 2.6/x86</para></listitem>
+<listitem><para>don't have root permissions</para></listitem>
+<listitem><para>require 100% instruction-accurate profiles</para></listitem>
+<listitem><para>need function call counts or an interstitial profiling API</para></listitem>
+<listitem><para>cannot tolerate any disturbance to the system whatsoever</para></listitem>
+<listitem><para>need to profile interpreted or dynamically compiled code of non-supported virtual machines</para></listitem>
+</itemizedlist>
+<sect2 id="jitsupport">
+<title>Support for dynamically compiled (JIT) code</title>
+<para>
+Older versions of OProfile were not capable of attributing samples to symbols from dynamically
+compiled code, i.e. "just-in-time (JIT) code". Typical JIT compilers load the JIT code into
+anonymous memory regions. OProfile reported the samples from such code, but the attribution
+provided was simply:
+        <screen>"anon: &lt;tgid&gt;&lt;address range&gt;" </screen>
+Due to this limitation, it wasn't possible to profile applications executed by virtual machines (VMs)
+like the Java Virtual Machine. OProfile now contains an infrastructure to support JITed code.
+A development library is provided to allow developers
+to add support for any VM that produces dynamically compiled code (see the <emphasis>OProfile JIT agent
+developer guide</emphasis>).
+In addition, built-in support is included for the following:</para>
+<itemizedlist><listitem>JVMTI agent library for Java (1.5 and higher)</listitem>
+<listitem>JVMPI agent library for Java (1.5 and lower)</listitem>
+</itemizedlist>
+<para>
+For information on how to use OProfile's JIT support, see <xref linkend="setup-jit"/>.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="requirements">
+<title>System requirements</title>
+
+<variablelist>
+	<varlistentry>
+		<term>Linux kernel 2.2/2.4/2.6</term>
+		<listitem><para>
+			OProfile uses a kernel module that can be compiled for
+			2.2.11 or later and 2.4. 2.4.10 or above is required if you use the 
+			boot-time kernel option <option>nosmp</option>.  2.6 kernels are supported with the in-kernel
+			OProfile driver. Note that only 32-bit x86 and IA64 are supported on 2.2/2.4 kernels.
+			</para>
+
+			<para>
+			2.6 kernels are strongly recommended. Under 2.4, OProfile may cause system crashes if power
+			management is used, or the BIOS does not correctly deal with local APICs.
+			</para>
+
+			<para>
+			To use OProfile's JIT support, a kernel version 2.6.13 or later is required.
+			In earlier kernel versions, the anonymous memory regions are not reported to OProfile and results
+			in profiling reports without any samples in these regions.
+			</para>
+
+			<para>
+			PPC64 processors (Power4/Power5/PPC970, etc.) require a recent (&gt; 2.6.5) kernel with the line 
+			<constant>#define PV_970</constant> present in <filename>include/asm-ppc64/processor.h</filename>.
+<!-- FIXME: do we require always gte 2.4.10 for nosmp ? -->
+                       </para>
+                       <para>
+                       Profiling the Cell Broadband Engine PowerPC Processing Element (PPE) requires a kernel version
+                       of 2.6.18 or more recent.
+                       Profiling the Cell Broadband Engine Synergistic Processing Element (SPE) requires a kernel version
+                       of 2.6.22 or more recent.  Additionally, full support of SPE profiling requires a BFD library
+                       from binutils code dated January 2007 or later.  To ensure the proper BFD support exists, run
+                       the <code>configure</code> utility with <code>--with-target=cell-be</code>.
+
+		       Profiling the Cell Broadband Engine using SPU events requires a kernel version of 2.6.29-rc1
+		       or  more recent.
+
+                       <note>Attempting to profile SPEs with kernel versions older than 2.6.22 may cause the
+                       system to crash.</note>
+                       </para>
+		
+			<para>
+			Instruction-Based Sampling (IBS) profile on AMD family10h processors requires 
+			kernel version 2.6.28-rc2 or later.
+			</para>
+		</listitem>
+	</varlistentry>
+	<varlistentry>
+		<term>modutils 2.4.6 or above</term>
+		<listitem><para>
+			You should have installed modutils 2.4.6 or higher (in fact earlier versions work well in almost all
+			cases).
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term>Supported architecture</term>
+		<listitem><para>
+			For Intel IA32, a CPU with either a P6 generation or Pentium 4 core is
+			required. In marketing terms this translates to anything
+			between an Intel Pentium Pro (not Pentium Classics) and
+			a Pentium 4 / Xeon, including all Celerons.  The AMD
+			Athlon, Opteron, Phenom, and Turion CPUs are also supported.  Other IA32
+			CPU types only support the RTC mode of OProfile; please
+			see later in this manual for details.  Hyper-threaded Pentium IVs
+			are not supported in 2.4. For 2.4 kernels, the Intel
+			IA-64 CPUs are also supported. For 2.6 kernels, there is additionally
+			support for Alpha processors, MIPS, ARM, x86-64, sparc64, ppc64, AVR32, and,
+			in timer mode, PA-RISC and s390.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term>Uniprocessor or SMP</term>
+		<listitem><para>
+			SMP machines are fully supported.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term>Required libraries</term>
+		<listitem><para>
+			These libraries are required : <filename>popt</filename>, <filename>bfd</filename>,
+			<filename>liberty</filename> (debian users: libiberty is provided in binutils-dev package), <filename>dl</filename>,
+			plus the standard C++ libraries.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term>Required user account</term>
+		<listitem><para>
+			For secure processing of sample data from JIT virtual machines (e.g., Java),
+			the special user account "oprofile" must exist on the system.  The 'configure'
+			and 'make install' operations will print warning messages if this
+			account is not found.  If you intend to profile JITed code, you must create
+			a group account named 'oprofile' and then create the 'oprofile' user account,
+			setting the default group to 'oprofile'.  A runtime error message is printed to
+			the oprofile daemon log when processing JIT samples if this special user
+			account cannot be found.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term>OProfile GUI</term>
+		<listitem><para>
+			The use of the GUI to start the profiler requires the <filename>Qt</filename> library.
+			Either <filename>Qt 3</filename> or <filename>Qt 4</filename> should work.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+ 		<term><acronym>ELF</acronym></term>
+		<listitem><para>
+			Probably not too strenuous a requirement, but older <acronym>A.OUT</acronym> binaries/libraries are not supported.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term>K&amp;R coding style</term>
+		<listitem><para>
+			OK, so it's not really a requirement, but I wish it was...
+		</para></listitem>
+	</varlistentry>
+</variablelist>
+
+
+</sect1>
+
+<sect1 id="resources">
+<title>Internet resources</title>
+
+<variablelist>
+	<varlistentry>
+		<term>Web page</term>
+		<listitem><para>
+			There is a web page (which you may be reading now) at
+			<ulink url="http://oprofile.sf.net/">http://oprofile.sf.net/</ulink>.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term>Download</term>
+		<listitem><para>
+			You can download a source tarball or check out code from
+			the code repository at the sourceforge page,
+			<ulink url="http://sf.net/projects/oprofile/">http://sf.net/projects/oprofile/</ulink>.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term>Mailing list</term>
+		<listitem><para>
+			There is a low-traffic OProfile-specific mailing list, details at
+			<ulink url="http://sf.net/mail/?group_id=16191">http://sf.net/mail/?group_id=16191</ulink>.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term>Bug tracker</term>
+		<listitem><para>
+			There is a bug tracker for OProfile at SourceForge,
+			<ulink url="http://sf.net/tracker/?group_id=16191&amp;atid=116191">http://sf.net/tracker/?group_id=16191&amp;atid=116191</ulink>.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term>IRC channel</term>
+		<listitem><para>
+			Several OProfile developers and users sometimes hang out on channel <command>#oprofile</command>
+			on the <ulink url="http://oftc.net">OFTC</ulink> network. 
+		</para></listitem>
+	</varlistentry>
+</variablelist>
+
+</sect1>
+
+<sect1 id="install">
+<title>Installation</title>
+
+<para>
+First you need to build OProfile and install it. <command>./configure</command>, <command>make</command>, <command>make install</command>
+is often all you need, but note these arguments to <command>./configure</command> :
+</para>
+<variablelist>
+	<varlistentry>
+		<term><option>--with-linux</option></term>
+		<listitem><para>
+			Use this option to specify the location of the kernel source tree you wish
+			to compile against. The kernel module is built against this source and
+			will only work with a running kernel built from the same source with
+			exact same options, so it is important you specify this option if you need
+			to.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--with-java</option></term>
+		<listitem>
+			<para>
+			Use this option if you need to profile Java applications.  Also, see
+			<xref linkend="requirements"/>, "Required user account".  This option
+			is used to specify the location of the Java Development Kit (JDK)
+			source tree you wish to use. This is necessary to get the interface description
+			of the JVMPI (or JVMTI) interface to compile the JIT support code successfully.
+			</para>
+			<note>
+				<para>
+				The Java Runtime Environment (JRE) does not include the development
+				files that are required to compile the JIT support code, so the full
+				JDK must be installed in order to use this option.
+				</para>
+			</note>
+			<para>
+			By default, the Oprofile JIT support libraries will be installed in
+			<filename>&lt;oprof_install_dir&gt;/lib/oprofile</filename>.  To build
+			and install OProfile and the JIT support libraries as 64-bit, you can
+			do something like the following:
+			<screen>
+			# CFLAGS="-m64" CXXFLAGS="-m64" ./configure \
+			--with-kernel-support --with-java={my_jdk_installdir} \
+			--libdir=/usr/local/lib64
+			</screen>
+			</para>
+			<note>
+				<para>
+				If you encounter errors building 64-bit, you should
+				install libtool 1.5.26 or later since that release of
+				libtool fixes known problems for certain platforms.
+				If you install libtool into a non-standard location,
+				you'll need to edit the invocation of 'aclocal' in
+				OProfile's autogen.sh as follows (assume an install
+				location of /usr/local):
+				</para>
+				<para>
+				<code>aclocal -I m4 -I /usr/local/share/aclocal</code>
+				</para>
+			</note> 
+		</listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--with-kernel-support</option></term>
+		<listitem><para>
+			Use this option with 2.6 and above kernels to indicate the 
+	    		kernel provides the OProfile device driver.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--with-qt-dir/includes/libraries</option></term>
+		<listitem><para>
+			Specify the location of Qt headers and libraries. It defaults to searching in
+			<constant>$QTDIR</constant> if these are not specified.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry id="disable-werror">
+		<term><option>--disable-werror</option></term>
+		<listitem><para>
+			Development versions of OProfile build by
+			default with <option>-Werror</option>. This option turns
+			<option>-Werror</option> off.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry id="disable-optimization">
+		<term><option>--disable-optimization</option></term>
+		<listitem><para>
+			Disable the <option>-O2</option> compiler flag
+			(useful if you discover an OProfile bug and want to give a useful
+			back-trace etc.)
+		</para></listitem>
+	</varlistentry>
+</variablelist>
+<para>
+You'll need to have a configured kernel source for the current kernel
+to build the module for 2.4 kernels.  Since all distributions provide different kernels it's unlikely the running kernel match the configured source
+you installed. The safest way is to recompile your own kernel, run it and compile oprofile. It is also recommended that if you have a
+uniprocessor machine, you enable the local APIC / IO_APIC support for
+your kernel (this is automatically enabled for SMP kernels). With many BIOS, kernel &gt;= 2.6.9 and UP kernel it's not sufficient to enable the local APIC you must also turn it on explicitly at boot time by providing "lapic" option to the kernel. On
+machines with power management, such as laptops, the power management
+must be turned off when using OProfile with 2.4 kernels. The power management software
+in the BIOS cannot handle the non-maskable interrupts (NMIs) used by
+OProfile for data collection. If you use the NMI watchdog, be aware that
+the watchdog is disabled when profiling starts, and not re-enabled until the
+OProfile module is removed (or, in 2.6, when OProfile is not running). If you compile OProfile for
+a 2.2 kernel you must be root to compile the module. If you are using
+2.6 kernels or higher, you do not need kernel source, as long as the
+OProfile driver is enabled; additionally, you should not need to disable
+power management.
+</para>
+<para>
+Please note that you must save or have available the <filename>vmlinux</filename> file
+generated during a kernel compile, as OProfile needs it (you can use
+<option>--no-vmlinux</option>, but this will prevent kernel profiling).
+</para>
+
+</sect1>
+
+<sect1 id="uninstall">
+<title>Uninstalling OProfile</title>
+<para>
+You must have the source tree available to uninstall OProfile; a <command>make uninstall</command> will
+remove all installed files except your configuration file in the directory <filename>~/.oprofile</filename>.
+</para>
+</sect1>
+
+</chapter>
+
+<chapter id="overview"> 
+<title>Overview</title>
+
+<sect1 id="getting-started">
+<title>Getting started</title>
+<para>
+Before you can use OProfile, you must set it up. The minimum setup required for this
+is to tell OProfile where the <filename>vmlinux</filename> file corresponding to the
+running kernel is, for example :
+</para>
+<screen>opcontrol --vmlinux=/boot/vmlinux-`uname -r`</screen>
+<para>
+If you don't want to profile the kernel itself,
+you can tell OProfile you don't have a <filename>vmlinux</filename> file :
+</para>
+<screen>opcontrol --no-vmlinux</screen>
+<para>
+Now we are ready to start the daemon (<command>oprofiled</command>) which collects
+the profile data :
+</para>
+<screen>opcontrol --start</screen>
+<para>
+When I want to stop profiling, I can do so with :
+</para>
+<screen>opcontrol --shutdown</screen>
+<para>
+Note that unlike <command>gprof</command>, no instrumentation (<option>-pg</option>
+and <option>-a</option> options to <command>gcc</command>)
+is necessary.
+</para>
+<para>
+Periodically (or on <command>opcontrol --shutdown</command> or <command>opcontrol --dump</command>)
+the profile data is written out into the $SESSION_DIR/samples directory (by default at <filename>/var/lib/oprofile/samples</filename>).
+These profile files cover shared libraries, applications, the kernel (vmlinux), and kernel modules.
+You can clear the profile data (at any time) with <command>opcontrol --reset</command>.
+</para>
+<para>
+To place these sample database files in a specific directory instead of the default location (<filename>/var/lib/oprofile</filename>) use the <option>--session-dir=dir</option> option. You must also specify the <option>--session-dir</option> to tell the tools to continue using this directory. (In the future, we should allow this to be specified in an environment variable.) :
+</para>
+<screen>opcontrol --no-vmlinux --session-dir=/home/me/tmpsession</screen>
+<screen>opcontrol --start --session-dir=/home/me/tmpsession</screen>
+<para>
+You can get summaries of this data in a number of ways at any time. To get a summary of
+data across the entire system for all of these profiles, you can do :
+</para>
+<screen>opreport [--session-dir=dir]</screen>
+<para>
+Or to get a more detailed summary, for a particular image, you can do something like :
+</para>
+<screen>opreport -l /boot/vmlinux-`uname -r`</screen>
+<para>
+There are also a number of other ways of presenting the data, as described later in this manual.
+Note that OProfile will choose a default profiling setup for you. However, there are a number
+of options you can pass to <command>opcontrol</command> if you need to change something,
+also detailed later.
+</para>
+
+</sect1>
+
+<sect1 id="tools-overview">
+<title>Tools summary</title>
+<para>
+This section gives a brief description of the available OProfile utilities and their purpose.
+</para>
+<variablelist>
+<varlistentry>
+	<term><filename>ophelp</filename></term>
+	<listitem><para>
+		This utility lists the available events and short descriptions.
+	</para></listitem>
+</varlistentry>
+	
+<varlistentry>
+	<term><filename>opcontrol</filename></term>
+	<listitem><para>
+		Used for controlling the OProfile data collection, discussed in <xref linkend="controlling" />.
+	</para></listitem>
+</varlistentry>
+
+<varlistentry>
+	<term><filename>agent libraries</filename></term>
+	<listitem><para>
+			Used by virtual machines (like the Java VM) to record information about JITed code being profiled. See <xref linkend="setup-jit" />.
+		</para></listitem>
+</varlistentry>
+
+<varlistentry>
+	<term><filename>opreport</filename></term>
+	<listitem><para>
+		This is the main tool for retrieving useful profile data, described in
+		<xref linkend="opreport" />.
+	</para></listitem>
+</varlistentry>
+
+<varlistentry>
+	<term><filename>opannotate</filename></term>
+	<listitem><para>
+		This utility can be used to produce annotated source, assembly or mixed source/assembly.
+		Source level annotation is available only if the application was compiled with 
+		debugging symbols. See <xref linkend="opannotate" />.
+	</para></listitem>
+</varlistentry>
+
+<varlistentry>
+	<term><filename>opgprof</filename></term>
+	<listitem><para>
+		This utility can output gprof-style data files for a binary, for use with
+		<command>gprof -p</command>. See <xref linkend="opgprof" />.
+	</para></listitem>
+</varlistentry>
+
+<varlistentry>
+	<term><filename>oparchive</filename></term>
+	<listitem><para>
+		This utility can be used to collect executables, debuginfo,
+		and sample files and copy the files into an archive.
+		The archive is self-contained and can be moved to another
+		machine for further analysis.
+		See <xref linkend="oparchive" />.
+	</para></listitem>
+</varlistentry>
+
+<varlistentry>
+	<term><filename>opimport</filename></term>
+	<listitem><para>
+		This utility converts sample database files from a foreign binary format (abi) to
+		the native format. This is useful only when moving sample files between hosts,
+		for analysis on platforms other than the one used for collection.
+		See <xref linkend="opimport" />.
+	</para></listitem>
+</varlistentry>
+
+</variablelist>
+</sect1>
+	
+</chapter>
+ 
+<chapter id="controlling">
+<title>Controlling the profiler</title>
+
+<sect1 id="controlling-daemon">
+<title>Using <command>opcontrol</command></title>
+<para>
+In this section we describe the configuration and control of the profiling system
+with opcontrol in more depth.
+The <command>opcontrol</command> script has a default setup, but you
+can alter this with the options given below. In particular,
+if your hardware supports performance counters, you can configure them.
+There are a number of counters (for example, counter 0 and counter 1
+on the Pentium III). Each of these counters can be programmed with
+an event to count, such as cache misses or MMX operations. The event
+chosen for each counter is reflected in the profile data collected
+by OProfile: functions and binaries at the top of the profiles reflect
+that most of the chosen events happened within that code.
+</para>
+<para>
+Additionally, each counter has a "count" value: this corresponds to how
+detailed the profile is. The lower the value, the more frequently profile
+samples are taken. A counter can choose to sample only kernel code, user-space code,
+or both (both is the default). Finally, some events have a "unit mask"
+- this is a value that further restricts the types of event that are counted. 
+The event types and unit masks for your CPU are listed by <command>opcontrol
+--list-events</command>.
+</para>
+<para>
+The <command>opcontrol</command> script provides the following actions :
+</para>
+<variablelist>
+	<varlistentry>
+		<term><option>--init</option></term>
+		<listitem><para>
+		Loads the OProfile module if required and makes the OProfile driver
+		interface available.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--setup</option></term>
+		<listitem><para>
+		    Followed by list arguments for profiling set up. List of arguments
+		    saved in <filename>/root/.oprofile/daemonrc</filename>.
+		    Giving this option is not necessary; you can just directly pass one
+		    of the setup options, e.g. <command>opcontrol --no-vmlinux</command>.
+		  </para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--status</option></term>
+		<listitem><para>
+		Show configuration information.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--start-daemon</option></term>
+		<listitem><para>
+		    Start the oprofile daemon without starting actual profiling. The profiling
+		can then be started using <option>--start</option>. This is useful for avoiding
+		measuring the cost of daemon startup, as <option>--start</option> is a simple
+		write to a file in oprofilefs. Not available in 2.2/2.4 kernels.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--start</option></term>
+		<listitem><para>
+		    Start data collection with either arguments provided by <option>--setup</option>
+		or information saved in <filename>/root/.oprofile/daemonrc</filename>. Specifying
+		the addition <option>--verbose</option> makes the daemon generate lots of debug data
+		whilst it is running.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--dump</option></term>
+		<listitem><para>
+		    Force a flush of the collected profiling data to the daemon.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--stop</option></term>
+		<listitem><para>
+		    Stop data collection (this separate step is not possible with 2.2 or 2.4 kernels).
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--shutdown</option></term>
+		<listitem><para>
+		    Stop data collection and kill the daemon.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--reset</option></term>
+		<listitem><para>
+		    Clears out data from current session, but leaves saved sessions.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--save=</option>session_name</term>
+		<listitem><para>
+		    Save data from current session to session_name.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--deinit</option></term>
+		<listitem><para>
+                Shuts down daemon. Unload the OProfile module and oprofilefs.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--list-events</option></term>
+		<listitem><para>
+		    List event types and unit masks.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--help</option></term>
+		<listitem><para>
+		    Generate usage messages.
+		</para></listitem>
+	</varlistentry>
+</variablelist>
+
+<para>
+There are a number of possible settings, of which, only
+<option>--vmlinux</option> (or <option>--no-vmlinux</option>)
+is required. These settings are stored in <filename>~/.oprofile/daemonrc</filename>.
+</para>
+<variablelist>
+	<varlistentry>
+		<term><option>--buffer-size=</option>num</term>
+		<listitem><para>
+		Number of samples in kernel buffer. When using a 2.6 kernel
+		buffer watershed need to be tweaked when changing this value.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--buffer-watershed=</option>num</term>
+		<listitem><para>
+		Set kernel buffer watershed to num samples (2.6 only). When it'll remain only
+		buffer-size - buffer-watershed free entry in the kernel buffer data will be
+		flushed to daemon, most usefull value are in the range [0.25 - 0.5] * buffer-size.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--cpu-buffer-size=</option>num</term>
+		<listitem><para>
+		Number of samples in kernel per-cpu buffer (2.6 only). If you
+		profile at high rate it can help to increase this if the log
+		file show excessive count of sample lost cpu buffer overflow. 
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--event=</option>[eventspec]</term>
+		<listitem><para>
+		Use the given performance counter event to profile.
+		See <xref linkend="eventspec" /> below.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--session-dir=</option>dir_path</term>
+		<listitem><para>
+		    Create/use sample database out of directory <filename>dir_path</filename> instead of
+		the default location (/var/lib/oprofile).
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--separate=</option>[none,lib,kernel,thread,cpu,all]</term>
+		<listitem><para>
+		By default, every profile is stored in a single file. Thus, for example,
+		samples in the C library are all accredited to the <filename>/lib/libc.o</filename>
+		profile. However, you choose to create separate sample files by specifying
+		one of the below options.
+		</para>
+		<informaltable frame="all">
+		<tgroup cols='2'> 
+		<tbody>
+		<row><entry><option>none</option></entry><entry>No profile separation (default)</entry></row>
+		<row><entry><option>lib</option></entry><entry>Create per-application profiles for libraries</entry></row>
+		<row><entry><option>kernel</option></entry><entry>Create per-application profiles for the kernel and kernel modules</entry></row>
+		<row><entry><option>thread</option></entry><entry>Create profiles for each thread and each task</entry></row>
+		<row><entry><option>cpu</option></entry><entry>Create profiles for each CPU</entry></row>
+		<row><entry><option>all</option></entry><entry>All of the above options</entry></row>
+		</tbody>
+		</tgroup>
+		</informaltable>
+		<para>
+		Note  that <option>--separate=kernel</option> also turns on <option>--separate=lib</option>.
+		<!-- FIXME: update if this change -->
+		When using <option>--separate=kernel</option>, samples in hardware interrupts, soft-irqs, or other
+		asynchronous kernel contexts are credited to the task currently running. This means you will see
+		seemingly nonsense profiles such as <filename>/bin/bash</filename> showing samples for the PPP modules,
+		etc.
+		</para>
+		<para>
+		On 2.2/2.4 only kernel threads already started when profiling begins are correctly profiled;
+		newly started kernel thread samples are credited to the vmlinux (kernel) profile.
+		</para>
+		<para>
+		Using <option>--separate=thread</option> creates a lot
+		of sample files if you leave OProfile running for a while; it's most
+		useful when used for short sessions, or when using image filtering.
+		</para>
+		</listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--callgraph=</option>#depth</term>
+		<listitem><para>
+		Enable call-graph sample collection with a maximum depth. Use 0 to disable
+		callgraph profiling.  NOTE: Callgraph support is available on a limited
+		number of platforms at this time; for example:
+		<para>
+		<itemizedlist>
+		<listitem><para>x86 with recent 2.6 kernel</para></listitem>
+		<listitem><para>ARM with recent 2.6 kernel</para></listitem>
+		<listitem><para>PowerPC with 2.6.17 kernel</para></listitem>
+		</itemizedlist>
+		</para>
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--image=</option>image,[images]|"all"</term>
+		<listitem><para>
+		Image filtering. If you specify one or more absolute
+		paths to binaries, OProfile will only produce profile results for those
+		binary images. This is useful for restricting the sometimes voluminous
+		output you may get otherwise, especially with
+		<option>--separate=thread</option>. Note that if you are using
+		<option>--separate=lib</option> or
+		<option>--separate=kernel</option>, then if you specification an
+		application binary, the shared libraries and kernel code
+		<emphasis>are</emphasis> included. Specify the value
+		"all" to profile everything (the default).
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--vmlinux=</option>file</term>
+		<listitem><para>
+		vmlinux kernel image.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>--no-vmlinux</option></term>
+		<listitem><para>
+		Use this when you don't have a kernel vmlinux file, and you don't want
+		to profile the kernel. This still counts the total number of kernel samples,
+		but can't give symbol-based results for the kernel or any modules.
+		</para></listitem>
+	</varlistentry>
+</variablelist>
+
+<sect2 id="opcontrolexamples">
+<title>Examples</title>
+
+<sect3 id="examplesperfctr">
+<title>Intel performance counter setup</title>
+<para>
+Here, we have a Pentium III running at 800MHz, and we want to look at where data memory
+references are happening most, and also get results for CPU time.
+</para>
+<screen>
+# opcontrol --event=CPU_CLK_UNHALTED:400000 --event=DATA_MEM_REFS:10000
+# opcontrol --vmlinux=/boot/2.6.0/vmlinux
+# opcontrol --start
+</screen>
+</sect3>
+
+<sect3 id="examplesrtc">
+<title>RTC mode</title>
+<para>
+Here, we have an Intel laptop without support for performance counters, running on 2.4 kernels.
+</para>
+<screen>
+# ophelp -r
+CPU with RTC device
+# opcontrol --vmlinux=/boot/2.4.13/vmlinux --event=RTC_INTERRUPTS:1024
+# opcontrol --start
+</screen>
+</sect3>
+
+<sect3 id="examplesstartdaemon">
+<title>Starting the daemon separately</title>
+<para>
+If we're running 2.6 kernels, we can use <option>--start-daemon</option> to avoid
+the profiler startup affecting results.
+</para>
+<screen>
+# opcontrol --vmlinux=/boot/2.6.0/vmlinux
+# opcontrol --start-daemon
+# my_favourite_benchmark --init
+# opcontrol --start ; my_favourite_benchmark --run ; opcontrol --stop
+</screen>
+</sect3>
+
+<sect3 id="exampleseparate">
+<title>Separate profiles for libraries and the kernel</title>
+<para>
+Here, we want to see a profile of the OProfile daemon itself, including when
+it was running inside the kernel driver, and its use of shared libraries.
+</para>
+<screen>
+# opcontrol --separate=kernel --vmlinux=/boot/2.6.0/vmlinux
+# opcontrol --start
+# my_favourite_stress_test --run
+# opreport -l -p /lib/modules/2.6.0/kernel /usr/local/bin/oprofiled
+</screen>
+</sect3>
+
+<sect3 id="examplessessions">
+<title>Profiling sessions</title>
+<para>
+It can often be useful to split up profiling data into several different
+time periods. For example, you may want to collect data on an application's
+startup separately from the normal runtime data. You can use the simple
+command <command>opcontrol --save</command> to do this. For example :
+</para>
+<screen>
+# opcontrol --save=blah
+</screen>
+<para>
+will create a sub-directory in <filename>$SESSION_DIR/samples</filename> containing the samples
+up to that point (the current session's sample files are moved into this
+directory). You can then pass this session name as a parameter to the post-profiling
+analysis tools, to only get data up to the point you named the
+session. If you do not want to save a session, you can do
+<command>rm -rf $SESSION_DIR/samples/sessionname</command> or, for the
+current session, <command>opcontrol --reset</command>.
+</para>
+</sect3>
+</sect2> 
+
+<sect2 id="eventspec">
+<title>Specifying performance counter events</title>
+<para>
+The <option>--event</option> option to <command>opcontrol</command>
+takes a specification that indicates how the details of each
+hardware performance counter should be setup. If you want to
+revert to OProfile's default setting (<option>--event</option>
+is strictly optional), use <option>--event=default</option>. Use of this
+option over-rides all previous event selections.
+</para>
+<para>
+You can pass multiple event specifications. OProfile will allocate
+hardware counters as necessary. Note that some combinations are not
+allowed by the CPU; running <command>opcontrol --list-events</command> gives the details
+of each event. The event specification is a colon-separated string
+of the form <option><emphasis>name</emphasis>:<emphasis>count</emphasis>:<emphasis>unitmask</emphasis>:<emphasis>kernel</emphasis>:<emphasis>user</emphasis></option> as described in this table:
+</para>
+<informaltable frame="all">
+<tgroup cols='2'> 
+<tbody>
+<row><entry><option>name</option></entry><entry>The symbolic event name, e.g. <constant>CPU_CLK_UNHALTED</constant></entry></row>
+<row><entry><option>count</option></entry><entry>The counter reset value, e.g. 100000</entry></row>
+<row><entry><option>unitmask</option></entry><entry>The unit mask, as given in the events list: e.g. 0x0f; or a symbolic name as
+given by the first word of the description (only valid for unit masks having an "extra:" parameter)</entry></row>
+<row><entry><option>kernel</option></entry><entry>Whether to profile kernel code</entry></row>
+<row><entry><option>user</option></entry><entry>Whether to profile userspace code</entry></row>
+</tbody>
+</tgroup>
+</informaltable>
+<para>
+The last three values are optional, if you omit them (e.g. <option>--event=DATA_MEM_REFS:30000</option>),
+they will be set to the default values (a unit mask of 0, and profiling both kernel and
+userspace code). Note that some events require a unit mask.
+</para>
+<note><para>
+For the PowerPC platforms, all events specified must be in the same group; i.e., the group number
+appended to the event name (e.g. <constant>&lt;<emphasis>some-event-name</emphasis>&gt;_GRP9</constant>) must be the same.
+</para></note>
+<para>
+If OProfile is using RTC mode, and you want to alter the default counter value,
+you can use something like <option>--event=RTC_INTERRUPTS:2048</option>. Note the last
+three values here are ignored.
+If OProfile is using timer-interrupt mode, there is no configuration possible.
+</para>
+<para>
+The table below lists the events selected by default
+(<option>--event=default</option>) for the various computer architectures:
+</para>
+<informaltable frame="all">
+<tgroup cols='3'> 
+<tbody>
+<row><entry>Processor</entry><entry>cpu_type</entry><entry>Default event</entry></row>
+<row><entry>Alpha EV4</entry><entry>alpha/ev4</entry><entry>CYCLES:100000:0:1:1</entry></row>
+<row><entry>Alpha EV5</entry><entry>alpha/ev5</entry><entry>CYCLES:100000:0:1:1</entry></row>
+<row><entry>Alpha PCA56</entry><entry>alpha/pca56</entry><entry>CYCLES:100000:0:1:1</entry></row>
+<row><entry>Alpha EV6</entry><entry>alpha/ev6</entry><entry>CYCLES:100000:0:1:1</entry></row>
+<row><entry>Alpha EV67</entry><entry>alpha/ev67</entry><entry>CYCLES:100000:0:1:1</entry></row>
+<row><entry>ARM/XScale PMU1</entry><entry>arm/xscale1</entry><entry>CPU_CYCLES:100000:0:1:1</entry></row>
+<row><entry>ARM/XScale PMU2</entry><entry>arm/xscale2</entry><entry>CPU_CYCLES:100000:0:1:1</entry></row>
+<row><entry>ARM/MPCore</entry><entry>arm/mpcore</entry><entry>CPU_CYCLES:100000:0:1:1</entry></row>
+<row><entry>AVR32</entry><entry>avr32</entry><entry>CPU_CYCLES:100000:0:1:1</entry></row>
+<row><entry>Athlon</entry><entry>i386/athlon</entry><entry>CPU_CLK_UNHALTED:100000:0:1:1</entry></row>
+<row><entry>Pentium Pro</entry><entry>i386/ppro</entry><entry>CPU_CLK_UNHALTED:100000:0:1:1</entry></row>
+<row><entry>Pentium II</entry><entry>i386/pii</entry><entry>CPU_CLK_UNHALTED:100000:0:1:1</entry></row>
+<row><entry>Pentium III</entry><entry>i386/piii</entry><entry>CPU_CLK_UNHALTED:100000:0:1:1</entry></row>
+<row><entry>Pentium M (P6 core)</entry><entry>i386/p6_mobile</entry><entry>CPU_CLK_UNHALTED:100000:0:1:1</entry></row>
+<row><entry>Pentium 4 (non-HT)</entry><entry>i386/p4</entry><entry>GLOBAL_POWER_EVENTS:100000:1:1:1</entry></row>
+<row><entry>Pentium 4 (HT)</entry><entry>i386/p4-ht</entry><entry>GLOBAL_POWER_EVENTS:100000:1:1:1</entry></row>
+<row><entry>Hammer</entry><entry>x86-64/hammer</entry><entry>CPU_CLK_UNHALTED:100000:0:1:1</entry></row>
+<row><entry>Family10h</entry><entry>x86-64/family10</entry><entry>CPU_CLK_UNHALTED:100000:0:1:1</entry></row>
+<row><entry>Family11h</entry><entry>x86-64/family11h</entry><entry>CPU_CLK_UNHALTED:100000:0:1:1</entry></row>
+<row><entry>Itanium</entry><entry>ia64/itanium</entry><entry>CPU_CYCLES:100000:0:1:1</entry></row>
+<row><entry>Itanium 2</entry><entry>ia64/itanium2</entry><entry>CPU_CYCLES:100000:0:1:1</entry></row>
+<row><entry>TIMER_INT</entry><entry>timer</entry><entry>None selectable</entry></row>
+<row><entry>IBM iseries</entry><entry>PowerPC 4/5/970</entry><entry>CYCLES:10000:0:1:1</entry></row>
+<row><entry>IBM pseries</entry><entry>PowerPC 4/5/970/Cell</entry><entry>CYCLES:10000:0:1:1</entry></row>
+<row><entry>IBM s390</entry><entry>timer</entry><entry>None selectable</entry></row>
+<row><entry>IBM s390x</entry><entry>timer</entry><entry>None selectable</entry></row>
+</tbody>
+</tgroup>
+</informaltable>
+
+</sect2>
+
+</sect1>
+ 
+<sect1 id="setup-jit">
+	<title>Setting up the JIT profiling feature</title>
+	<para>
+		To gather information about JITed code from a virtual machine,
+		it needs to be instrumented with an agent library. We use the
+		agent libraries for Java in the following example. To use the
+		Java profiling feature, you must build OProfile with the "--with-java" option
+                (<xref linkend="install" />).
+
+	</para>
+
+	<sect2 id="setup-jit-jvm">
+		<title>JVM instrumentation</title>
+		<para>
+			Add this to the startup parameters of the JVM (for JVMTI):
+
+			<screen><option>-agentpath:&lt;libdir&gt;/libjvmti_oprofile.so[=&lt;options&gt;]</option> </screen>
+			or
+			<screen><option>-agentlib:jvmti_oprofile[=&lt;options&gt;]</option> </screen>
+		</para>
+		<para>
+			The JVMPI agent implementation is enabled with the command line option
+			<screen><option>-Xrunjvmpi_oprofile[:&lt;options&gt;]</option> </screen>
+		</para>
+		<para>
+			Currently, there is just one option available -- <option>debug</option>. For JVMPI,
+			the convention for specifying an option is <option>option_name=[yes|no]</option>.
+			For JVMTI, the option specification is simply the option name, implying
+			"yes"; no option specified implies "no".
+		</para>
+                <para>
+                        The agent library (installed in <filename>&lt;oprof_install_dir&gt;/lib/oprofile</filename>)
+                        needs to be in the library search path (e.g. add the library directory
+                        to <constant>LD_LIBRARY_PATH</constant>). If the command line of
+                        the JVM is not accessible, it may be buried within shell scripts or a
+                        launcher program. It may also be possible to set an environment variable to add
+                        the instrumentation.
+                        For Sun JVMs this is <constant>JAVA_TOOL_OPTIONS</constant>. Please check
+                        your JVM documentation for
+                        further information on the agent startup options.
+                </para>
+
+	</sect2>
+</sect1>
+
+<sect1 id="oprofile-gui">
+<title>Using <command>oprof_start</command></title>
+<para>
+The <command>oprof_start</command> application provides a convenient way to start the profiler.
+Note that <command>oprof_start</command> is just a wrapper around the <command>opcontrol</command> script,
+so it does not provide more services than the script itself.
+</para>
+<para>
+After <command>oprof_start</command> is started you can select the event type for each counter;
+the sampling rate and other related parameters are explained in <xref linkend="controlling-daemon" />.
+The "Configuration" section allows you to set general parameters such as the buffer size, kernel filename
+etc. The counter setup interface should be self-explanatory; <xref linkend="hardware-counters" /> and related 
+links contain information on using unit masks.
+</para>
+<para>
+A status line shows the current status of the profiler: how long it has been running, and the average
+number of interrupts received per second and the total, over all processors.
+Note that quitting <command>oprof_start</command> does not stop the profiler.
+</para>
+<para>
+Your configuration is saved in the same file as <command>opcontrol</command> uses; that is,
+<filename>~/.oprofile/daemonrc</filename>.
+</para>
+
+</sect1>
+
+<sect1 id="detailed-parameters">
+<title>Configuration details</title>
+
+<sect2 id="hardware-counters">
+<title>Hardware performance counters</title>
+<note>
+<para>
+Your CPU type may not include the requisite support for hardware performance counters, in which case
+you must use OProfile in RTC mode in 2.4 (see <xref linkend="rtc" />), or timer mode in 2.6 (see <xref linkend="timer" />). 
+You do not really need to read this section unless you are interested in using 
+events other than the default event chosen by OProfile.
+</para>
+</note>
+<para>
+The Intel hardware performance counters are detailed in the Intel IA-32 Architecture Manual, Volume 3, available
+from <ulink url="http://developer.intel.com/">http://developer.intel.com/</ulink>. 
+The AMD Athlon/Opteron/Phenom/Turion implementation is detailed in <ulink
+url="http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22007.pdf">
+http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22007.pdf</ulink>.
+For PowerPC64 processors in IBM iSeries, pSeries, and blade server systems, processor documentation
+is available at <ulink url="http://www-01.ibm.com/chips/techlib/techlib.nsf/productfamilies/PowerPC/">
+http://www-01.ibm.com/chips/techlib/techlib.nsf/productfamilies/PowerPC</ulink>.  (For example, the
+specific publication containing information on the performance monitor unit for the PowerPC970 is 
+"IBM PowerPC 970FX RISC Microprocessor User's Manual.")
+These processors are capable of delivering an interrupt when a counter overflows.
+This is the basic mechanism on which OProfile is based. The delivery mode is <acronym>NMI</acronym>,
+so blocking interrupts in the kernel does not prevent profiling. When the interrupt handler is called,
+the current <acronym>PC</acronym> value and the current task are recorded into the profiling structure.
+This allows the overflow event to be attached to a specific assembly instruction in a binary image.
+The daemon receives this data from the kernel, and writes it to the sample files.
+</para>
+<para>
+If we use an event such as <constant>CPU_CLK_UNHALTED</constant> or <constant>INST_RETIRED</constant>
+(<constant>GLOBAL_POWER_EVENTS</constant> or <constant>INSTR_RETIRED</constant>, respectively, on the Pentium 4), we can
+use the overflow counts as an estimate of actual time spent in each part of code. Alternatively we can profile interesting
+data such as the cache behaviour of routines with the other available counters.
+</para>
+<para>
+However there are several caveats. First, there are those issues listed in the Intel manual. There is a delay
+between the counter overflow and the interrupt delivery that can skew results on a small scale - this means
+you cannot rely on the profiles at the instruction level as being perfectly accurate.
+If you are using an "event-mode" counter such as the cache counters, a count registered against it doesn't mean
+that it is responsible for that event. However, it implies that the counter overflowed in the dynamic
+vicinity of that instruction, to within a few instructions. Further details on this problem can be found in 
+<xref linkend="interpreting" /> and also in the Digital paper "ProfileMe: A Hardware Performance Counter".
+</para>
+<para>
+Each counter has several configuration parameters.
+First, there is the unit mask: this simply further specifies what to count.
+Second, there is the counter value, discussed below. Third, there is a parameter whether to increment counts
+whilst in kernel or user space. You can configure these separately for each counter.
+</para>
+<para>
+After each overflow event, the counter will be re-initialized
+such that another overflow will occur after this many events have been counted. Thus, higher
+values mean less-detailed profiling, and lower values mean more detail, but higher overhead.
+Picking a good value for this
+parameter is, unfortunately, somewhat of a black art. It is of course dependent on the event
+you have chosen.
+Specifying too large a value will mean not enough interrupts are generated
+to give a realistic profile (though this problem can be ameliorated by profiling for <emphasis>longer</emphasis>).
+Specifying too small a value can lead to higher performance overhead.
+</para>
+
+</sect2>
+
+<sect2 id="rtc">
+<title>OProfile in RTC mode</title>
+<note><para>
+This section applies to 2.2/2.4 kernels only.
+</para></note>
+<para>
+Some CPU types do not provide the needed hardware support to use the hardware performance counters. This includes
+some laptops, classic Pentiums, and other CPU types not yet supported by OProfile (such as Cyrix). 
+On these machines, OProfile falls
+back to using the real-time clock interrupt to collect samples. This interrupt is also used by the <command>rtc</command>
+module: you cannot have both the OProfile and rtc modules loaded nor the rtc support compiled in the kernel.
+</para>
+<para>
+RTC mode is less capable than the hardware counters mode; in particular, it is unable to profile sections of
+the kernel where interrupts are disabled. There is just one available event, "RTC interrupts", and its value 
+corresponds to the number of interrupts generated per second (that is, a higher number means a better profiling
+resolution, and higher overhead). The current implementation of the real-time clock supports only power-of-two
+sampling rates from 2 to 4096 per second.  Other values within this range are rounded to the nearest power of
+two.
+</para>
+<para>
+You can force use of the RTC interrupt with the <option>force_rtc=1</option> module parameter.
+</para>
+<para>
+Setting the value from the GUI should be straightforward. On the command line, you need to specify the
+event to <command>opcontrol</command>, e.g. :
+</para>
+<para><command>opcontrol --event=RTC_INTERRUPTS:256</command></para>
+</sect2>
+
+<sect2 id="timer">
+<title>OProfile in timer interrupt mode</title>
+<note><para>
+This section applies to 2.6 kernels and above only.
+</para></note>
+<para>
+In 2.6 kernels on CPUs without OProfile support for the hardware performance counters, the driver
+falls back to using the timer interrupt for profiling. Like the RTC mode in 2.4 kernels, this is not able to
+profile code that has interrupts disabled. Note that there are no configuration parameters for
+setting this, unlike the RTC and hardware performance counter setup.
+</para>
+<para>
+You can force use of the timer interrupt by using the <option>timer=1</option> module
+parameter (or <option>oprofile.timer=1</option> on the boot command line if OProfile is
+built-in).
+</para>
+</sect2>
+
+<sect2 id="p4">
+<title>Pentium 4 support</title>
+<para>
+The Pentium 4 / Xeon performance counters are organized around 3 types of model specific registers (MSRs): 45 event
+selection control registers (ESCRs), 18 counter configuration control registers (CCCRs) and 18 counters. ESCRs describe a
+particular set of events which are to be recorded, and CCCRs bind ESCRs to counters and configure their
+operation. Unfortunately the relationship between these registers is quite complex; they cannot all be used with one
+another at any time. There is, however, a subset of 8 counters, 8 ESCRs, and 8 CCCRs which can be used independently of
+one another, so OProfile only accesses those registers, treating them as a bank of 8 "normal" counters, similar
+to those in the P6 or Athlon/Opteron/Phenom/Turion families of CPU.
+</para>
+<para>
+There is currently no support for Precision Event-Based Sampling (PEBS), nor any advanced uses of the Debug Store
+(DS). Current support is limited to the conservative extension of OProfile's existing interrupt-based model described
+above.  Performance monitoring hardware on Pentium 4 / Xeon processors with Hyperthreading enabled (multiple logical
+processors on a single die) is not supported in 2.4 kernels (you can use OProfile if you disable hyper-threading,
+though).
+</para>
+</sect2>
+
+<sect2 id="ia64">
+<title>Intel Itanium 2 support</title>
+<para>
+The Itanium 2 performance monitoring unit (PMU) organizes the counters as four
+pairs of performance event monitoring registers. Each pair is composed of a
+Performance Monitoring Configuration (PMC) register and Performance Monitoring
+Data (PMD) register.  The PMC selects the performance event being monitored and
+the PMD determines the sampling interval. The IA64 Performance Monitoring Unit
+(PMU) triggers sampling with maskable interrupts. Thus, samples will not occur
+in sections of the IA64 kernel where interrupts are disabled.
+</para>
+<para>
+None of the advance features of the Itanium 2 performance monitoring unit
+such as opcode matching, address range matching, or precise event sampling are
+supported by this version of OProfile.  The Itanium 2 support only maps OProfile's
+existing interrupt-based model to the PMU hardware.
+</para>
+</sect2>
+
+<sect2 id="ppc64">
+<title>PowerPC64 support</title>
+<para>
+The performance monitoring unit (PMU) for the IBM PowerPC 64-bit processors 
+consists of between 4 and 8 counters (depending on the model), plus three
+special purpose registers used for programming the counters -- MMCR0, MMCR1,
+and MMCRA.  Advanced features such as instruction matching and thresholding are
+not supported by this version of OProfile.
+<note>Later versions of the IBM POWER5+ processor (beginning with revision 3.0)
+run the performance monitor unit in POWER6 mode, effectively removing OProfile's
+access to counters 5 and 6.  These two counters are dedicated to counting
+instructions completed and cycles, respectively.  In POWER6 mode, however, the
+counters do not generate an interrupt on overflow and so are unusable by
+OProfile.  Kernel versions 2.6.23 and higher will recognize this mode
+and export "ppc64/power5++" as the cpu_type to the oprofilefs pseudo filesystem.
+OProfile userspace responds to this cpu_type by removing these counters from
+the list of potential events to count.  Without this kernel support, attempts
+to profile using an event from one of these counters will yield incorrect
+results -- typically, zero (or near zero) samples in the generated report.
+</note>
+</para>
+
+</sect2>
+
+<sect2 id="cell-be">
+<title>Cell Broadband Engine support</title>
+<para>
+The Cell Broadband Engine (CBE) processor core consists of a PowerPC Processing
+Element (PPE) and 8 Synergistic Processing Elements (SPE).  PPEs and SPEs each
+consist of a processing unit (PPU and SPU, respectively) and other hardware
+components, such as memory controllers.
+</para>
+<para>
+A PPU has two hardware threads (aka "virtual CPUs").  The performance monitor
+unit of the CBE collects event information on one hardware thread at a time.
+Therefore, when profiling PPE events,
+OProfile collects the profile based on the selected events by time slicing the
+performance counter hardware between the two threads.   The user must ensure the
+collection interval is long enough so that the time spent collecting data for
+each PPU is sufficient to obtain a good profile.
+</para>
+<para>
+To profile an SPU application, the user should specify the SPU_CYCLES event.
+When starting OProfile with SPU_CYCLES, the opcontrol script enforces certain
+separation parameters (separate=cpu,lib) to ensure that sufficient information
+is collected in the sample data in order to generate a complete report.  The
+--merge=cpu option can be used to obtain a more readable report if analyzing
+the performance of each separate SPU is not necessary.
+</para>
+<para>
+Profiling with an SPU event (events 4100 through 4163) is not compatible with any other
+event.  Further more, only one SPU event can be specified at a time.  The hardware only
+supports profiling on one SPU per node at a time.  The OProfile kernel code time slices
+between the eight SPUs to collect data on all SPUs.
+</para>
+<para>
+SPU profile reports have some unique characteristics compared to reports for
+standard architectures:
+</para>
+<itemizedlist>
+<listitem>Typically no "app name" column.  This is really standard OProfile behavior
+when the report contains samples for just a single application, which is
+commonly the case when profiling SPUs.</listitem>
+<listitem>"CPU" equates to "SPU"</listitem>
+<listitem>Specifying '--long-filenames' on the opreport command does not always result
+in long filenames.  This happens when the SPU application code is embedded in
+the PPE executable or shared library.  The embedded SPU ELF data contains only the
+short filename (i.e., no path information) for the SPU binary file that was used as
+the source for embedding.   The reason that just the short filename is used is because
+the original SPU binary file may not exist or be accessible at runtime.  The performance
+analyst must have sufficient knowledge of the application to be able to correlate the
+SPU binary image names found in the  report to the application's source files.
+<note>
+Compile the application with -g and generate the OProfile report
+with -g to facilitate finding the right source file(s) on which to focus.
+</note>
+</listitem>
+</itemizedlist>
+
+</sect2>
+
+<sect2 id="amd-ibs-support">
+<title>AMD64 (x86_64) Instruction-Based Sampling (IBS) support</title>
+
+<para>
+Instruction-Based Sampling (IBS) is a new performance measurement technique
+available on AMD Family 10h processors. Traditional performance counter
+sampling is not precise enough to isolate performance issues to individual
+instructions. IBS, however, precisely identifies instructions which are not
+making the best use of the processor pipeline and memory hierarchy.
+For more information, please refer to the "Instruction-Based Sampling:
+A New Performance Analysis Technique for AMD Family 10h Processors" (
+<ulink url="http://developer.amd.com/assets/AMD_IBS_paper_EN.pdf">
+http://developer.amd.com/assets/AMD_IBS_paper_EN.pdf</ulink>).
+There are two types of IBS profile types, described in the following sections.
+</para>
+
+<sect3 id="ibs-fetch">
+<title>IBS Fetch</title>
+
+<para>
+IBS fetch sampling is a statistical sampling method which counts completed
+fetch operations. When the number of completed fetch operations reaches the
+maximum fetch count (the sampling period), IBS tags the fetch operation and
+monitors that operation until it either completes or aborts. When a tagged
+fetch completes or aborts, a sampling interrupt is generated and an IBS fetch
+sample is taken. An IBS fetch sample contains a timestamp, the identifier of
+the interrupted process, the virtual fetch address, and several event flags
+and values that describe what happened during the fetch operation. 
+</para>
+
+</sect3>
+
+<sect3 id="ibs-op">
+<title>IBS Op</title>
+
+<para>
+IBS op sampling selects, tags, and monitors macro-ops as issued from AMD64
+instructions. Two options are available for selecting ops for sampling:
+</para>
+
+<itemizedlist>
+<listitem>
+Cycles-based selection counts CPU clock cycles. The op is tagged and monitored
+when the count reaches a threshold (the sampling period) and a valid op is
+available. 
+</listitem>
+
+<listitem>
+Dispatched op-based selection counts dispatched macro-ops.
+When the count reaches a threshold, the next valid op is tagged and monitored. 
+</listitem>
+</itemizedlist>
+
+<para>
+In both cases, an IBS sample is generated only if the tagged op retires.
+Thus, IBS op event information does not measure speculative execution activity.
+The execution stages of the pipeline monitor the tagged macro-op. When the
+tagged macro-op retires, a sampling interrupt is generated and an IBS op
+sample is taken. An IBS op sample contains a timestamp, the identifier of
+the interrupted process, the virtual address of the AMD64 instruction from
+which the op was issued, and several event flags and values that describe
+what happened when the macro-op executed.
+</para>
+
+</sect3>
+
+<para>
+Enabling IBS profiling is done simply by specifying IBS performance events
+through the "--event=" options. These events are listed in the
+<function>opcontrol --list-events</function>.
+</para>
+
+<screen>
+opcontrol --event=IBS_FETCH_XXX:&lt;count&gt;:&lt;um&gt;:&lt;kernel&gt;:&lt;user&gt;
+opcontrol --event=IBS_OP_XXX:&lt;count&gt;:&lt;um&gt;:&lt;kernel&gt;:&lt;user&gt;
+
+Note: * All IBS fetch event must have the same event count and unitmask,
+        as do those for IBS op.
+</screen>
+
+</sect2>
+
+
+<sect2 id="misuse">
+<title>Dangerous counter settings</title>
+<para>
+OProfile is a low-level profiler which allow continuous profiling with a low-overhead cost.
+If too low a count reset value is set for a counter, the system can become overloaded with counter
+interrupts, and seem as if the system has frozen. Whilst some validation is done, it
+is not foolproof.
+</para>
+<note><para>
+This can happen as follows: When the profiler count
+reaches zero an NMI handler is called which stores the sample values in an internal buffer, then resets the counter
+to its original value. If the count is very low, a pending NMI can be sent before the NMI handler has
+completed. Due to the priority of the NMI, the local APIC delivers the pending interrupt immediately after
+completion of the previous interrupt handler, and control never returns to other parts of the system.
+In this way the system seems to be frozen.
+</para></note>
+<para>If this happens, it will be impossible to bring the system back to a workable state.
+There is no way to provide real security against this happening, other than making sure to use a reasonable value
+for the counter reset. For example, setting <constant>CPU_CLK_UNHALTED</constant> event type with a ridiculously low reset count (e.g. 500)
+is likely to freeze the system.
+</para>
+<para>
+In short : <command>Don't try a foolish sample count value</command>. Unfortunately the definition of a foolish value
+is really dependent on the event type - if ever in doubt, e-mail </para>
+<address><email>oprofile-list@lists.sf.net</email>.</address>
+</sect2>
+
+</sect1>
+ 
+</chapter>
+
+<chapter id="results">
+<title>Obtaining results</title>
+<para>
+OK, so the profiler has been running, but it's not much use unless we can get some data out. Fairly often,
+OProfile does a little <emphasis>too</emphasis> good a job of keeping overhead low, and no data reaches
+the profiler. This can happen on lightly-loaded machines. Remember you can force a dump at any time with :
+</para>
+<para><command>opcontrol --dump</command></para>
+<para>Remember to do this before complaining there is no profiling data !
+Now that we've got some data, it has to be processed. That's the job of <command>opreport</command>,
+<command>opannotate</command>, or <command>opgprof</command>.
+</para>
+
+<sect1 id="profile-spec">
+<title>Profile specifications</title>
+
+<para>
+All of the analysis tools take a <emphasis>profile specification</emphasis>.
+This is a set of definitions that describe which actual profiles should be
+examined. The simplest profile specification is empty: this will match all
+the available profile files for the current session (this is what happens
+when you do <command>opreport</command>).
+</para>
+<para>
+Specification parameters are of the form <option>name:value[,value]</option>.
+For example, if I wanted to get a combined symbol summary for
+<filename>/bin/myprog</filename> and <filename>/bin/myprog2</filename>,
+I could do <command>opreport -l image:/bin/myprog,/bin/myprog2</command>.
+As a special case, you don't actually need to specify the <option>image:</option>
+part here: anything left on the command line is assumed to be an
+<option>image:</option> name. Similarly, if no <option>session:</option>
+is specified, then <option>session:current</option> is assumed ("current"
+is a special name of the current / last profiling session).
+</para>
+<para>
+In addition to the comma-separated list shown above, some of the 
+specification parameters can take <command>glob</command>-style
+values. For example, if I want to see image summaries for all
+binaries profiled in <filename>/usr/bin/</filename>, I could do
+<command>opreport image:/usr/bin/\*</command>. Note the necessity
+to escape the special character from the shell.
+</para>
+<para>
+For <command>opreport</command>, profile specifications can be used to
+define two profiles, giving differential output. This is done by
+enclosing each of the two specifications within curly braces, as shown
+in the examples below. Any specifications outside of curly braces are
+shared across both.
+</para>
+
+<sect2 id="profile-spec-examples">
+<title>Examples</title>
+
+<para>
+Image summaries for all profiles with <constant>DATA_MEM_REFS</constant>
+samples in the saved session called "stresstest" :
+</para>
+<screen>
+# opreport session:stresstest event:DATA_MEM_REFS
+</screen>
+
+<para>
+Symbol summary for the application called "test_sym53c8xx,9xx". Note the
+escaping is necessary as <option>image:</option> takes a comma-separated list.
+</para>
+<screen>
+# opreport -l ./test/test_sym53c8xx\,9xx
+</screen>
+
+<para>
+Image summaries for all binaries in the <filename>test</filename> directory,
+excepting <filename>boring-test</filename> :
+</para>
+<screen>
+# opreport image:./test/\* image-exclude:./test/boring-test
+</screen>
+
+<para>
+Differential profile of a binary stored in two archives :
+</para>
+<screen>
+# opreport -l /bin/bash { archive:./orig } { archive:./new }
+</screen>
+
+<para>
+Differential profile of an archived binary with the current session :
+</para>
+<screen>
+# opreport -l /bin/bash { archive:./orig } { }
+</screen>
+
+</sect2> <!-- profile spec examples -->
+
+<sect2 id="profile-spec-details">
+<title>Profile specification parameters</title>
+
+<variablelist>
+	<varlistentry>
+		<term><option>archive:</option><emphasis>archivepath</emphasis></term>
+		<listitem><para>
+		A path to an archive made with <command>oparchive</command>.
+		Absence of this tag, unlike others, means "the current system",
+		equivalent to specifying "archive:".
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>session:</option><emphasis>sessionlist</emphasis></term>
+		<listitem><para>
+		A comma-separated list of session names to resolve in. Absence of this
+		tag, unlike others, means "the current session", equivalent to
+		specifying "session:current".
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>session-exclude:</option><emphasis>sessionlist</emphasis></term>
+		<listitem><para>
+                A comma-separated list of sessions to exclude.
+		</para></listitem>
+	</varlistentry>
+	<varlistentry>
+		<term><option>image:</option><emphasis>imagelist</emphasis></term>
+		<listitem><para>
+                A comma-separated list of image names to resolve. Each entry may be relative
+                path, <command>glob</command>-style name, or full path, e.g.</para>
+		<screen>opreport 'image:/usr/bin/oprofiled,*op*,./opreport'</screen>
+		</listitem>
+	</varlistentry>
+
+	<varlistentry>
+		<term><option>image-exclude:</option><emphasis>imagelist</emphasis></term>
+		<listitem><para>
+		Same as <option>image:</option>, but the matching images are excluded.
+		</para></listitem>
+	</varlistentry>
+
+	<varlistentry>
+		<term><option>lib-image:</option><emphasis>imagelist</emphasis></term>
+		<listitem><para>
+		Same as <option>image:</option>, but only for images that are for
+		a particular primary binary image (namely, an application). This only
+		makes sense to use if you're using <option>--separate</option>.
+		This includes kernel modules and the kernel when using
+		<option>--separate=kernel</option>.
+		</para></listitem>
+	</varlistentry>
+
+	<varlistentry>
+		<term><option>lib-image-exclude:</option><emphasis>imagelist</emphasis></term>
+		<listitem><para>
+		Same as <option>lib-image:</option>, but the matching images
+		are excluded.
+		</para></listitem>
+	</varlistentry>
+
+	<varlistentry>
+		<term><option>event:</option><emphasis>eventlist</emphasis></term>
+		<listitem><para>
+		The symbolic event name to match on, e.g. <option>event:DATA_MEM_REFS</option>.
+		You can pass a list of events for side-by-side comparison with <command>opreport</command>.
+		When using the timer interrupt, the event is always "TIMER".
+		</para></listitem>
+	</varlistentry>
+
+	<varlistentry>
+		<term><option>count:</option><emphasis>eventcountlist</emphasis></term>
+		<listitem><para>
+		The event count to match on, e.g. <option>event:DATA_MEM_REFS count:30000</option>.
+		Note that this value refers to the setting used for <command>opcontrol</command>
+		only, and has nothing to do with the sample counts in the profile data
+		itself.
+		You can pass a list of events for side-by-side comparison with <command>opreport</command>.
+		When using the timer interrupt, the count is always 0 (indicating it cannot be set).
+		</para></listitem>
+	</varlistentry>
+
+	<varlistentry>
+		<term><option>unit-mask:</option><emphasis>masklist</emphasis></term>
+		<listitem><para>
+		The unit mask value of the event to match on, e.g. <option>unit-mask:1</option>.
+		You can pass a list of events for side-by-side comparison with <command>opreport</command>.
+		</para></listitem>
+	</varlistentry>
+
+	<varlistentry>
+		<term><option>cpu:</option><emphasis>cpulist</emphasis></term>
+		<listitem><para>
+		Only consider profiles for the given numbered CPU (starting from zero).
+		This is only useful when using CPU profile separation.
+		</para></listitem>
+	</varlistentry>
+
+	<varlistentry>
+		<term><option>tgid:</option><emphasis>pidlist</emphasis></term>
+		<listitem><para>
+		Only consider profiles for the given task groups. Unless some program
+		is using threads, the task group ID of a process is the same
+		as its process ID. This option corresponds to the POSIX
+		notion of a thread group.
+		This is only useful when using per-process profile separation.
+		</para></listitem>
+	</varlistentry>
+
+	<varlistentry>
+		<term><option>tid:</option><emphasis>tidlist</emphasis></term>
+		<listitem><para>
+		Only consider profiles for the given threads. When using
+		recent thread libraries, all threads in a process share the
+		same task group ID, but have different thread IDs. You can
+		use this option in combination with <option>tgid:</option> to
+		restrict the results to particular threads within a process.
+		This is only useful when using per-process profile separation.
+		</para></listitem>
+	</varlistentry>
+</variablelist>
+
+</sect2>
+
+<sect2 id="locating-and-managing-binary-images">
+<title>Locating and managing binary images</title>
+<para>
+Each session's sample files can be found in the $SESSION_DIR/samples/ directory (default: <filename>/var/lib/oprofile/samples/</filename>).
+These are used, along with the binary image files, to produce human-readable data.
+In some circumstances (kernel modules in an initrd, or modules on 2.6 kernels), OProfile
+will not be able to find the binary images. All the tools have an <option>--image-path</option>
+option to which you can pass a comma-separated list of alternate paths to search. For example,
+I can let OProfile find my 2.6 modules by using <command>--image-path /lib/modules/2.6.0/kernel/</command>.
+It is your responsibility to ensure that the correct images are found when using this
+option.
+</para>
+<para>
+Note that if a binary image changes after the sample file was created, you won't be able to get useful
+symbol-based data out. This situation is detected for you. If you replace a binary, you should
+make sure to save the old binary if you need to do comparative profiles.
+</para>
+
+</sect2>
+
+<sect2 id="no-results">
+<title>What to do when you don't get any results</title>
+<para>
+When attempting to get output, you may see the error :
+</para>
+<screen>
+error: no sample files found: profile specification too strict ?
+</screen>
+<para>
+What this is saying is that the profile specification you passed in,
+when matched against the available sample files, resulted in no matches.
+There are a number of reasons this might happen:
+</para>
+<variablelist>
+<varlistentry><term>spelling</term><listitem><para>
+You specified a binary name, but spelt it wrongly. Check your spelling !
+</para></listitem></varlistentry>
+<varlistentry><term>profiler wasn't running</term><listitem><para>
+Make very sure that OProfile was actually up and running when you ran
+the binary.
+</para></listitem></varlistentry>
+<varlistentry><term>binary didn't run long enough</term><listitem><para>
+Remember OProfile is a statistical profiler - you're not guaranteed to
+get samples for short-running programs. You can help this by using a
+lower count for the performance counter, so there are a lot more samples
+taken per second.
+</para></listitem></varlistentry>
+<varlistentry><term>binary spent most of its time in libraries</term><listitem><para>
+Similarly, if the binary spends little time in the main binary image
+itself, with most of it spent in shared libraries it uses, you might
+not see any samples for the binary image itself. You can check this
+by using <command>opcontrol --separate=lib</command> before the
+profiling session, so <command>opreport</command> and friends show
+the library profiles on a per-application basis.
+</para></listitem></varlistentry>
+<varlistentry><term>specification was really too strict</term><listitem><para>
+For example, you specified something like <option>tgid:3433</option>,
+but no task with that group ID ever ran the code.
+</para></listitem></varlistentry>
+<varlistentry><term>binary didn't generate any events</term><listitem><para>
+If you're using a particular event counter, for example counting MMX
+operations, the code might simply have not generated any events in the
+first place. Verify the code you're profiling does what you expect it
+to.
+</para></listitem></varlistentry>
+<varlistentry><term>you didn't specify kernel module name correctly</term><listitem><para>
+If you're using 2.6 kernels, and trying to get reports for a kernel
+module, make sure to use the <option>-p</option> option, and specify the
+module name <emphasis>with</emphasis> the <filename>.ko</filename>
+extension. Check if the module is one loaded from initrd.
+</para></listitem></varlistentry>
+</variablelist>
+
+</sect2>
+
+</sect1> <!-- profile-spec -->
+
+<sect1 id="opreport">
+<title>Image summaries and symbol summaries (<command>opreport</command>)</title>
+<para>
+The <command>opreport</command> utility is the primary utility you will use for 
+getting formatted data out of OProfile. It produces two types of data: image summaries
+and symbol summaries. An image summary lists the number of samples for individual
+binary images such as libraries or applications. Symbol summaries provide per-symbol
+profile data. In the following example, we're getting an image summary for the whole
+system:
+</para>
+<screen>
+$ opreport --long-filenames
+CPU: PIII, speed 863.195 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (clocks processor is not halted) with a unit mask of 0x00 (No unit mask) count 23150
+   905898 59.7415 /usr/lib/gcc-lib/i386-redhat-linux/3.2/cc1plus
+   214320 14.1338 /boot/2.6.0/vmlinux
+   103450  6.8222 /lib/i686/libc-2.3.2.so
+    60160  3.9674 /usr/local/bin/madplay
+    31769  2.0951 /usr/local/oprofile-pp/bin/oprofiled
+    26550  1.7509 /usr/lib/libartsflow.so.1.0.0
+    23906  1.5765 /usr/bin/as
+    18770  1.2378 /oprofile
+    15528  1.0240 /usr/lib/qt-3.0.5/lib/libqt-mt.so.3.0.5
+    11979  0.7900 /usr/X11R6/bin/XFree86
+    11328  0.7471 /bin/bash
+    ...
+</screen>
+<para>
+If we had specified <option>--symbols</option> in the previous command, we would have
+gotten a symbol summary of all the images across the entire system. We can restrict this to only
+part of the system profile; for example,
+below is a symbol summary of the OProfile daemon. Note that as we used
+<command>opcontrol --separate=kernel</command>, symbols from images that <command>oprofiled</command>
+has used are also shown.
+</para>
+<screen>
+$ opreport -l `which oprofiled` 2>/dev/null | more
+CPU: PIII, speed 863.195 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (clocks processor is not halted) with a unit mask of 0x00 (No unit mask) count 23150
+vma      samples  %           image name               symbol name
+0804be10 14971    28.1993     oprofiled                odb_insert
+0804afdc 7144     13.4564     oprofiled                pop_buffer_value
+c01daea0 6113     11.5144     vmlinux                  __copy_to_user_ll
+0804b060 2816      5.3042     oprofiled                opd_put_sample
+0804b4a0 2147      4.0441     oprofiled                opd_process_samples
+0804acf4 1855      3.4941     oprofiled                opd_put_image_sample
+0804ad84 1766      3.3264     oprofiled                opd_find_image
+0804a5ec 1084      2.0418     oprofiled                opd_find_module
+0804ba5c 741       1.3957     oprofiled                odb_hash_add_node
+...
+</screen>
+
+<para>
+These are the two basic ways you are most likely to use regularly, but <command>opreport</command>
+can do a lot more than that, as described below.
+</para>
+
+<sect2 id="opreport-merging">
+<title>Merging separate profiles</title>
+
+If you have used one of the <option>--separate=</option> options
+whilst profiling, there can be several separate profiles for
+a single binary image within a session. Normally the output
+will keep these images separated (so, for example, the image summary
+output shows library image summaries on a per-application basis,
+when using <option>--separate=lib</option>).
+Sometimes it can be useful to merge these results back together
+before getting results. The <option>--merge</option> option allows
+you to do that.
+</sect2>
+
+<sect2 id="opreport-comparison">
+<title>Side-by-side multiple results</title>
+If you have used multiple events when profiling, by default you get
+side-by-side results of each event's sample values from <command>opreport</command>.
+You can restrict which events to list by appropriate use of the
+<option>event:</option> profile specifications, etc.
+</sect2>
+
+<sect2 id="opreport-callgraph">
+<title>Callgraph output</title>
+<para>
+This section provides details on how to use the OProfile callgraph feature.
+</para>
+<sect3 id="op-cg1">
+<title>Callgraph details</title>
+<para>
+When using the <option>opcontrol --callgraph</option> option, you can see what
+functions are calling other functions in the output. Consider the
+following program:
+</para>
+<screen>
+#include &lt;string.h&gt;
+#include &lt;stdlib.h&gt;
+#include &lt;stdio.h&gt;
+
+#define SIZE 500000
+
+static int compare(const void *s1, const void *s2)
+{
+        return strcmp(s1, s2);
+}
+
+static void repeat(void)
+{
+        int i;
+        char *strings[SIZE];
+        char str[] = "abcdefghijklmnopqrstuvwxyz";
+
+        for (i = 0; i &lt; SIZE; ++i) {
+                strings[i] = strdup(str);
+                strfry(strings[i]);
+        }
+
+        qsort(strings, SIZE, sizeof(char *), compare);
+}
+
+int main()
+{
+        while (1)
+                repeat();
+}
+</screen>
+<para>
+When running with the call-graph option, OProfile will
+record the function stack every time it takes a sample.
+<command>opreport --callgraph</command> outputs an entry for each
+function, where each entry looks similar to:
+</para>
+<screen>
+samples  %        image name               symbol name
+  197       0.1548  cg                       main
+  127036   99.8452  cg                       repeat
+84590    42.5084  libc-2.3.2.so            strfry
+  84590    66.4838  libc-2.3.2.so            strfry [self]
+  39169    30.7850  libc-2.3.2.so            random_r
+  3475      2.7312  libc-2.3.2.so            __i686.get_pc_thunk.bx
+-------------------------------------------------------------------------------
+</screen>
+<para>
+Here the non-indented line is the function we're focussing upon
+(<function>strfry()</function>). This
+line is the same as you'd get from a normal <command>opreport</command>
+output.
+</para>
+<para>
+Above the non-indented line we find the functions that called this
+function (for example, <function>repeat()</function> calls
+<function>strfry()</function>). The samples and percentage values here
+refer to the number of times we took a sample where this call was found
+in the stack; the percentage is relative to all other callers of the
+function we're focussing on. Note that these values are
+<emphasis>not</emphasis> call counts; they only reflect the call stack
+every time a sample is taken; that is, if a call is found in the stack
+at the time of a sample, it is recorded in this count.
+</para>
+<para>
+Below the line are functions that are called by
+<function>strfry()</function> (called <emphasis>callees</emphasis>).
+It's clear here that <function>strfry()</function> calls
+<function>random_r()</function>. We also see a special entry with a
+"[self]" marker. This records the normal samples for the function, but
+the percentage becomes relative to all callees. This allows you to
+compare time spent in the function itself compared to functions it
+calls. Note that if a function calls itself, then it will appear in the
+list of callees of itself, but without the "[self]" marker; so recursive
+calls are still clearly separable.
+</para>
+<para>
+You may have noticed that the output lists <function>main()</function>
+as calling <function>strfry()</function>, but it's clear from the source
+that this doesn't actually happen. See <xref
+linkend="interpreting-callgraph" /> for an explanation.
+</para>
+</sect3>
+<sect3 id="cg-with-jitsupport">
+<title>Callgraph and JIT support</title>
+<para>
+Callgraph output where anonymously mapped code is in the callstack can sometimes be misleading.
+For all such code, the samples for the anonymously mapped code are stored in a samples subdirectory
+named <filename>{anon:anon}/&lt;tgid&gt;.&lt;begin_addr&gt;.&lt;end_addr&gt;</filename>.
+As stated earlier, if this anonymously mapped code is JITed code from a supported VM like Java,
+OProfile creates an ELF file to provide a (somewhat) permanent backing file for the code.
+However, when viewing callgraph output, any anonymously mapped code in the callstack
+will be attributed to <filename>anon (&lt;tgid&gt;: range:&lt;begin_addr&gt;-&lt;end_addr&gt;</filename>,
+even if a <filename>.jo</filename> ELF file had been created for it.  See the example below.
+</para>
+<screen>
+-------------------------------------------------------------------------------
+  1         2.2727  libj9ute23.so            java.bin                 traceV
+  2         4.5455  libj9ute23.so            java.bin                 utsTraceV
+  4         9.0909  libj9trc23.so            java.bin                 fillInUTInterfaces
+  37       84.0909  libj9trc23.so            java.bin                 twGetSequenceCounter
+8         0.0154  libj9prt23.so            java.bin                 j9time_hires_clock
+  27       61.3636  anon (tgid:10014 range:0x100000-0x103000) java.bin                 (no symbols)
+  9        20.4545  libc-2.4.so              java.bin                 gettimeofday
+  8        18.1818  libj9prt23.so            java.bin                 j9time_hires_clock [self]
+-------------------------------------------------------------------------------
+</screen>
+<para>
+The output shows that "anon (tgid:10014 range:0x100000-0x103000)" was a callee of
+<code>j9time_hires_clock</code>, even though the ELF file <filename>10014.jo</filename> was
+created for this profile run.  Unfortunately, there is currently no way to correlate
+that anonymous callgraph entry with its corresponding <filename>.jo</filename> file.
+</para>
+</sect3>
+
+
+</sect2> <!-- opreport-callgraph -->
+
+<sect2 id="opreport-diff">
+<title>Differential profiles with <command>opreport</command></title>
+
+<para>
+Often, we'd like to be able to compare two profiles. For example, when
+analysing the performance of an application, we'd like to make code
+changes and examine the effect of the change. This is supported in
+<command>opreport</command> by giving a profile specification that
+identifies two different profiles. The general form is of:
+</para>
+<screen>
+$ opreport &lt;shared-spec&gt; { &lt;first-profile&gt; } { &lt;second-profile&gt; }
+</screen>
+<note><para>
+We lost our Dragon book down the back of the sofa, so you have to be
+careful to have spaces around those braces, or things will get
+hopelessly confused. We can only apologise.
+</para></note>
+<para>
+For each of the profiles, the shared section is prefixed, and then the
+specification is analysed. The usual parameters work both within the
+shared section, and in the sub-specification within the curly braces.
+</para>
+<para>
+A typical way to use this feature is with archives created with
+<command>oparchive</command>. Let's look at an example:
+</para>
+<screen>
+$ ./a
+$ oparchive -o orig ./a
+$ opcontrol --reset
+  # edit and recompile a
+$ ./a
+  # now compare the current profile of a with the archived profile
+$ opreport -xl ./a { archive:./orig } { }
+CPU: PIII, speed 863.233 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (clocks processor is not halted) with a
+unit mask of 0x00 (No unit mask) count 100000
+samples  %        diff %    symbol name
+92435    48.5366  +0.4999   a
+54226    ---      ---       c
+49222    25.8459  +++       d
+48787    25.6175  -2.2e-01  b
+</screen>
+<para>
+Note that we specified an empty second profile in the curly braces, as
+we wanted to use the current session; alternatively, we could
+have specified another archive, or a tgid etc. We specified the binary
+<command>a</command> in the shared section, so we matched that in both
+the profiles we're diffing.
+</para>
+<para>
+As in the normal output, the results are sorted by the number of
+samples, and the percentage field represents the relative percentage of
+the symbol's samples in the second profile.
+</para>
+<para>
+Notice the new column in the output. This value represents the
+percentage change of the relative percent between the first and the
+second profile: roughly, "how much more important this symbol is".
+Looking at the symbol <function>a()</function>, we can see that it took
+roughly the same amount of the total profile in both the first and the
+second profile. The function <function>c()</function> was not in the new
+profile, so has been marked with <function>---</function>. Note that the
+sample value is the number of samples in the first profile; since we're
+displaying results for the second profile, we don't list a percentage
+value for it, as it would be meaningless. <function>d()</function> is
+new in the second profile, and consequently marked with
+<function>+++</function>.
+</para>
+<para>
+When comparing profiles between different binaries, it should be clear
+that functions can change in terms of VMA and size. To avoid this
+problem, <command>opreport</command> considers a symbol to be the same
+if the symbol name, image name, and owning application name all match;
+any other factors are ignored. Note that the check for application name
+means that trying to compare library profiles between two different
+applications will not work as you might expect: each symbol will be
+considered different.
+</para>
+
+</sect2> <!-- opreport-diff -->
+
+<sect2 id="opreport-anon">
+<title>Anonymous executable mappings</title>
+<para>
+Many applications, typically ones involving dynamic compilation into
+machine code (just-in-time, or "JIT", compilation), have executable mappings that
+are not backed by an ELF file. <command>opreport</command> has basic support for showing the
+samples taken in these regions; for example:
+<screen>
+$ opreport /usr/bin/mono -l
+CPU: ppc64 POWER5, speed 1654.34 MHz (estimated)
+Counted CYCLES events (Processor Cycles using continuous sampling) with a unit mask of 0x00 (No unit mask) count 100000
+samples  %        image name    		                symbol name
+47       58.7500  mono                     			(no symbols)
+14       17.5000  anon (tgid:3189 range:0xf72aa000-0xf72fa000)  (no symbols)
+9        11.2500  anon (tgid:3189 range:0xf6cca000-0xf6dd9000)  (no symbols)
+.	 .	  .						.
+</screen>
+</para>
+<para>
+Note that, since such mappings are dependent upon individual invocations of
+a binary, these mappings are always listed as a dependent image,
+even when using <option>--separate=none</option>.
+Equally, the results are not affected by the <option>--merge</option>
+option.
+</para>
+<para>
+As shown in the opreport output above, OProfile is unable to attribute the samples to any
+symbol(s) because there is no ELF file for this code.
+Enhanced support for JITed code is now available for some virtual machines; 
+e.g., the Java Virtual Machine.  For details about OProfile output for
+JITed code, see <xref linkend="getting-jit-reports" />.
+</para>
+<para>For more information about JIT support in OProfile, see <xref linkend="jitsupport"/>.
+</para>
+</sect2> <!-- opreport-anon -->
+
+<sect2 id="opreport-xml">
+<title>XML formatted output</title>
+<para>
+The -xml option can be used to generate XML instead of the usual
+text format.  This allows opreport to eliminate some of the constraints
+dictated by the two dimensional text format.  For example, it is possible
+to separate the sample data across multiple events, cpus and threads.  The XML
+schema implemented by opreport is found in doc/opreport.xsd. It contains
+more detailed comments about the structure of the XML generated by opreport.
+</para>
+<para>
+Since XML is consumed by a client program rather than a user, its structure
+is fairly static.  In particular, the --sort option is incompatible with the
+--xml option.  Percentages are not dislayed in the XML so the options related
+to percentages will have no effect.  Full pathnames are always displayed in
+the XML so --long-filenames is not necessary.  The --details option will cause
+all of the individual sample data to be included in the XML as well as the
+instruction byte stream for each symbol (for doing disassembly) and can result
+in very large XML files.
+</para>
+</sect2> <!-- opreport-xml -->
+
+<sect2 id="opreport-options">
+<title>Options for <command>opreport</command></title>
+
+<variablelist>
+<varlistentry><term><option>--accumulated / -a</option></term><listitem><para>
+Accumulate sample and percentage counts in the symbol list.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--callgraph / -c</option></term><listitem><para>
+Show callgraph information.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--debug-info / -g</option></term><listitem><para>
+Show source file and line for each symbol.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--demangle / -D none|normal|smart</option></term><listitem><para>
+none: no demangling. normal: use default demangler (default) smart: use
+pattern-matching to make C++ symbol demangling more readable.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--details / -d</option></term><listitem><para>
+Show per-instruction details for all selected symbols. Note that, for
+binaries without symbol information, the VMA values shown are raw file
+offsets for the image binary.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--exclude-dependent / -x</option></term><listitem><para>
+Do not include application-specific images for libraries, kernel modules
+and the kernel. This option only makes sense if the profile session
+used --separate.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--exclude-symbols / -e [symbols]</option></term><listitem><para>
+Exclude all the symbols in the given comma-separated list.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--global-percent / -%</option></term><listitem><para>
+Make all percentages relative to the whole profile.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--help / -? / --usage</option></term><listitem><para>
+Show help message.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--image-path / -p [paths]</option></term><listitem><para>
+Comma-separated list of additional paths to search for binaries.
+This is needed to find modules in kernels 2.6 and upwards.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--root / -R [path]</option></term><listitem><para>
+A path to a filesystem to search for additional binaries.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--include-symbols / -i [symbols]</option></term><listitem><para>
+Only include symbols in the given comma-separated list.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--long-filenames / -f</option></term><listitem><para>
+Output full paths instead of basenames.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--merge / -m [lib,cpu,tid,tgid,unitmask,all]</option></term><listitem><para>
+Merge any profiles separated in a --separate session.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--no-header</option></term><listitem><para>
+Don't output a header detailing profiling parameters.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--output-file / -o [file]</option></term><listitem><para>
+Output to the given file instead of stdout.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--reverse-sort / -r</option></term><listitem><para>
+Reverse the sort from the default.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--session-dir=</option>dir_path</term><listitem><para>
+Use sample database out of directory <filename>dir_path</filename> 
+instead of the default location (/var/lib/oprofile).
+</para></listitem></varlistentry>
+<varlistentry><term><option>--show-address / -w</option></term><listitem><para>
+Show the VMA address of each symbol (off by default).
+</para></listitem></varlistentry>
+<varlistentry><term><option>--sort / -s [vma,sample,symbol,debug,image]</option></term><listitem><para>
+Sort the list of symbols by, respectively, symbol address,
+number of samples, symbol name, debug filename and line number,
+binary image filename.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--symbols / -l</option></term><listitem><para>
+List per-symbol information instead of a binary image summary.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--threshold / -t [percentage]</option></term><listitem><para>
+Only output data for symbols that have more than the given percentage
+of total samples.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--verbose / -V [options]</option></term><listitem><para>
+Give verbose debugging output.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--version / -v</option></term><listitem><para>
+Show version.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--xml / -X</option></term><listitem><para>
+Generate XML output.
+</para></listitem></varlistentry>
+</variablelist>
+
+</sect2>
+
+</sect1> <!-- opreport -->
+
+<sect1 id="opannotate">
+<title>Outputting annotated source (<command>opannotate</command>)</title>
+<para>
+The <command>opannotate</command> utility generates annotated source files or assembly listings, optionally
+mixed with source.
+If you want to see the source file, the profiled application needs to have debug information, and the source
+must be available through this debug information. For GCC, you must use the <option>-g</option> option
+when you are compiling.
+If the binary doesn't contain sufficient debug information, you can still
+use <command>opannotate <option>--assembly</option></command> to get annotated assembly.
+</para>
+<para>
+Note that for the reason explained in <xref linkend="hardware-counters" /> the results can be
+inaccurate. The debug information itself can add other problems; for example, the line number for a symbol can be
+incorrect. Assembly instructions can be re-ordered and moved by the compiler, and this can lead to
+crediting source lines with samples not really "owned" by this line. Also see
+<xref linkend="interpreting" />.
+</para>
+<para>
+You can output the annotation to one single file, containing all the source found using the
+<option>--source</option>. You can use this in conjunction with <option>--assembly</option>
+to get combined source/assembly output.
+</para>
+<para>
+You can also output a directory of annotated source files that maintains the structure of
+the original sources. Each line in the annotated source is prepended with the samples
+for that line. Additionally, each symbol is annotated giving details for the symbol
+as a whole. An example:
+</para>
+<screen>
+$ opannotate --source --output-dir=annotated /usr/local/oprofile-pp/bin/oprofiled
+$ ls annotated/home/moz/src/oprofile-pp/daemon/
+opd_cookie.h  opd_image.c  opd_kernel.c  opd_sample_files.c  oprofiled.c
+</screen>
+<para>
+Line numbers are maintained in the source files, but each file has
+a footer appended describing the profiling details. The actual annotation
+looks something like this :
+</para>
+<screen>
+...
+               :static uint64_t pop_buffer_value(struct transient * trans)
+ 11510  1.9661 :{ /* pop_buffer_value total:  89901 15.3566 */
+               :        uint64_t val;
+               :
+ 10227  1.7469 :        if (!trans->remaining) {
+               :                fprintf(stderr, "BUG: popping empty buffer !\n");
+               :                exit(EXIT_FAILURE);
+               :        }
+               :
+               :        val = get_buffer_value(trans->buffer, 0);
+  2281  0.3896 :        trans->remaining--;
+  2296  0.3922 :        trans->buffer += kernel_pointer_size;
+               :        return val;
+ 10454  1.7857 :}
+...
+</screen>
+
+<para>
+The first number on each line is the number of samples, whilst the second is
+the relative percentage of total samples.
+</para>
+
+<sect2 id="opannotate-finding-source">
+<title>Locating source files</title>
+<para>
+Of course, <command>opannotate</command> needs to be able to locate the source files
+for the binary image(s) in order to produce output. Some binary images have debug
+information where the given source file paths are relative, not absolute. You can
+specify search paths to look for these files (similar to <command>gdb</command>'s
+<option>dir</option> command) with the <option>--search-dirs</option> option.
+</para>
+<para>
+Sometimes you may have a binary image which gives absolute paths for the source files,
+but you have the actual sources elsewhere (commonly, you've installed an SRPM for
+a binary on your system and you want annotation from an existing profile). You can
+use the <option>--base-dirs</option> option to redirect OProfile to look somewhere
+else for source files. For example, imagine we have a binary generated from a source
+file that is given in the debug information as <filename>/tmp/build/libfoo/foo.c</filename>,
+and you have the source tree matching that binary installed in <filename>/home/user/libfoo/</filename>.
+You can redirect OProfile to find <filename>foo.c</filename> correctly like this :
+</para>
+<screen>
+$ opannotate --source --base-dirs=/tmp/build/libfoo/ --search-dirs=/home/user/libfoo/ --output-dir=annotated/ /lib/libfoo.so
+</screen>
+<para>
+You can specify multiple (comma-separated) paths to both options.
+</para>
+</sect2>
+
+<sect2 id="opannotate-details">
+<title>Usage of <command>opannotate</command></title>
+
+<variablelist>
+<varlistentry><term><option>--assembly / -a</option></term><listitem><para>
+Output annotated assembly. If this is combined with --source, then mixed
+source / assembly annotations are output.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--base-dirs / -b [paths]/</option></term><listitem><para>
+Comma-separated list of path prefixes. This can be used to point OProfile to a
+different location for source files when the debug information specifies an
+absolute path on your system for the source that does not exist. The prefix
+is stripped from the debug source file paths, then searched in the search dirs
+specified by <option>--search-dirs</option>.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--demangle / -D none|normal|smart</option></term><listitem><para>
+none: no demangling. normal: use default demangler (default) smart: use
+pattern-matching to make C++ symbol demangling more readable.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--exclude-dependent / -x</option></term><listitem><para>
+Do not include application-specific images for libraries, kernel modules
+and the kernel. This option only makes sense if the profile session
+used --separate.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--exclude-file [files]</option></term><listitem><para>
+Exclude all files in the given comma-separated list of glob patterns.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--exclude-symbols / -e [symbols]</option></term><listitem><para>
+Exclude all the symbols in the given comma-separated list.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--help / -? / --usage</option></term><listitem><para>
+Show help message.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--image-path / -p [paths]</option></term><listitem><para>
+Comma-separated list of additional paths to search for binaries.
+This is needed to find modules in kernels 2.6 and upwards.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--root / -R [path]</option></term><listitem><para>
+A path to a filesystem to search for additional binaries.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--include-file [files]</option></term><listitem><para>
+Only include files in the given comma-separated list of glob patterns.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--include-symbols / -i [symbols]</option></term><listitem><para>
+Only include symbols in the given comma-separated list.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--objdump-params [params]</option></term><listitem><para>
+Pass the given parameters as extra values when calling objdump.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--output-dir / -o [dir]</option></term><listitem><para>
+Output directory. This makes opannotate output one annotated file for each
+source file. This option can't be used in conjunction with --assembly.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--search-dirs / -d [paths]</option></term><listitem><para>
+Comma-separated list of paths to search for source files. This is useful to find
+source files when the debug information only contains relative paths.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--source / -s</option></term><listitem><para>
+Output annotated source. This requires debugging information to be available
+for the binaries.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--threshold / -t [percentage]</option></term><listitem><para>
+Only output data for symbols that have more than the given percentage
+of total samples.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--verbose / -V [options]</option></term><listitem><para>
+Give verbose debugging output.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--version / -v</option></term><listitem><para>
+Show version.
+</para></listitem></varlistentry>
+</variablelist>
+
+
+</sect2> <!-- opannotate-details -->
+
+</sect1> <!-- opannotate -->
+
+<sect1 id="getting-jit-reports">
+	<title>OProfile results with JIT samples</title>
+	<para>
+		After profiling a Java (or other supported VM) application, the command
+		<screen><command>"opcontrol --dump"</command> </screen>
+		flushes the sample buffers and creates ELF binaries from the
+		intermediate files that were written by the agent library.
+		The ELF binaries are named <filename>&lt;tgid&gt;.jo</filename>.
+		With the symbol information stored in these ELF files, it is
+		possible to map samples to the appropriate symbols.
+	</para>
+	<para>
+		The usual analysis tools (<command>opreport</command> and/or 
+		<command>opannotate</command>) can now be used
+		to get symbols and assembly code for the instrumented VM processes.
+	</para>
+<para>
+Below is an example of a profile report of a Java application that has been
+instrumented with the provided agent library.
+<screen>
+$ opreport -l /usr/lib/jvm/jre-1.5.0-ibm/bin/java
+CPU: Core Solo / Duo, speed 2167 MHz (estimated)
+Counted CPU_CLK_UNHALTED events (Unhalted clock cycles) with a unit mask of 0x00 (Unhalted core cycles) count 100000
+samples  %        image name               symbol name
+186020   50.0523  no-vmlinux               no-vmlinux               (no symbols)
+34333     9.2380  7635.jo                  java                     void test.f1()
+19022     5.1182  libc-2.5.so              libc-2.5.so              _IO_file_xsputn@@GLIBC_2.1
+18762     5.0483  libc-2.5.so              libc-2.5.so              vfprintf
+16408     4.4149  7635.jo                  java                     void test$HelloThread.run()
+16250     4.3724  7635.jo                  java                     void test$test_1.f2(int)
+15303     4.1176  7635.jo                  java                     void test.f2(int, int)
+13252     3.5657  7635.jo                  java                     void test.f2(int)
+5165      1.3897  7635.jo                  java                     void test.f4()
+955       0.2570  7635.jo                  java                     void test$HelloThread.run()~
+
+</screen>
+</para>
+<note><para>
+	  Depending on the JVM that is used, certain options of opreport and opannotate
+	  do NOT work since they rely on debug information (e.g. source code line number)
+	  that is not always available. The Sun JVM does provide the necessary debug
+	  information via the JVMTI[PI] interface,
+	  but other JVMs do not.
+  </para></note>
+	<para>
+		As you can see in the opreport output, the JIT support agent for Java
+		generates symbols to include the class and method signature.
+		A symbol with the suffix &tilde;&lt;n&gt; (e.g.
+		<code>void test$HelloThread.run()&tilde;1</code>) means that this is
+		the &lt;n&gt;th occurrence of the identical name. This happens if a method is re-JITed.
+		A symbol with the suffix %&lt;n&gt;, means that the address space of this symbol
+		was reused during the sample session (see <xref linkend="overlapping-symbols" />).
+		The value &lt;n&gt; is the percentage of time that this symbol/code was present in
+		relation to the total lifetime of all overlapping other symbols. A symbol of the form
+		<code>&lt;return_val&gt; &lt;class_name&gt;$&lt;method_sig&gt;</code> denotes an
+		inner class.
+	</para>
+</sect1>
+
+<sect1 id="opgprof">
+<title><command>gprof</command>-compatible output (<command>opgprof</command>)</title>
+<para>
+If you're familiar with the output produced by <command>GNU gprof</command>,
+you may find <command>opgprof</command> useful. It takes a single binary
+as an argument, and produces a <filename>gmon.out</filename> file for use
+with <command>gprof -p</command>. If call-graph profiling is enabled,
+then this is also included.
+</para>
+<screen>
+$ opgprof `which oprofiled` # generates gmon.out file
+$ gprof -p `which oprofiled` | head
+Flat profile:
+
+Each sample counts as 1 samples.
+  %   cumulative   self              self     total
+ time   samples   samples    calls  T1/call  T1/call  name
+ 33.13 206237.00 206237.00                             odb_insert
+ 22.67 347386.00 141149.00                             pop_buffer_value
+  9.56 406881.00 59495.00                             opd_put_sample
+  7.34 452599.00 45718.00                             opd_find_image
+  7.19 497327.00 44728.00                             opd_process_samples
+</screen>
+
+<sect2 id="opgprof-details">
+<title>Usage of <command>opgprof</command></title>
+
+<variablelist>
+<varlistentry><term><option>--help / -? / --usage</option></term><listitem><para>
+Show help message.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--image-path / -p [paths]</option></term><listitem><para>
+Comma-separated list of additional paths to search for binaries.
+This is needed to find modules in kernels 2.6 and upwards.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--root / -R [path]</option></term><listitem><para>
+A path to a filesystem to search for additional binaries.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--output-filename / -o [file]</option></term><listitem><para>
+Output to the given file instead of the default, gmon.out
+</para></listitem></varlistentry>
+<varlistentry><term><option>--threshold / -t [percentage]</option></term><listitem><para>
+Only output data for symbols that have more than the given percentage
+of total samples.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--verbose / -V [options]</option></term><listitem><para>
+Give verbose debugging output.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--version / -v</option></term><listitem><para>
+Show version.
+</para></listitem></varlistentry>
+</variablelist>
+
+</sect2> <!-- opgprof-details -->
+
+</sect1> <!-- opgprof -->
+
+<sect1 id="oparchive">
+<title>Archiving measurements (<command>oparchive</command>)</title>
+<para>
+	The <command>oparchive</command> utility generates a directory populated
+	with executable, debug, and oprofile sample files. This directory can be
+	moved to another machine via <command>tar</command> and analyzed without
+	further use of the data collection machine.
+</para>
+
+<para>
+	The following command would collect the sample files, the executables
+	associated with the sample files, and the debuginfo files associated
+	with the executables and copy them into
+	<filename>/tmp/current_data</filename>:
+</para>
+
+<screen>
+# oparchive -o /tmp/current_data
+</screen>
+
+<sect2 id="oparchive-details">
+<title>Usage of <command>oparchive</command></title>
+
+<variablelist>
+<varlistentry><term><option>--help / -? / --usage</option></term><listitem><para>
+Show help message.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--exclude-dependent / -x</option></term><listitem><para>
+Do not include application-specific images for libraries, kernel modules
+and the kernel. This option only makes sense if the profile session
+used --separate.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--image-path / -p [paths]</option></term><listitem><para>
+Comma-separated list of additional paths to search for binaries.
+This is needed to find modules in kernels 2.6 and upwards.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--root / -R [path]</option></term><listitem><para>
+A path to a filesystem to search for additional binaries.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--output-directory / -o [directory]</option></term><listitem><para>
+Output to the given directory. There is no default. This must be specified.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--list-files / -l</option></term><listitem><para>
+Only list the files that would be archived, don't copy them.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--verbose / -V [options]</option></term><listitem><para>
+Give verbose debugging output.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--version / -v</option></term><listitem><para>
+Show version.
+</para></listitem></varlistentry>
+</variablelist>
+
+</sect2> <!-- oparchive-details -->
+
+</sect1> <!-- oparchive -->
+
+<sect1 id="opimport">
+<title>Converting sample database files (<command>opimport</command>)</title>
+<para>
+	This utility converts sample database files from a foreign binary format (abi) to
+	the native format. This is useful only when moving sample files between hosts,
+	for analysis on platforms other than the one used for collection. The abi format
+	of the file to be imported is described in a text file located in <filename>$SESSION_DIR/abi</filename>.
+</para>
+
+<para>
+	The following command would convert the input samples files to the
+	output samples files using the given abi file as a binary description
+	of the input file and the curent platform abi as a binary description
+	of the output file.
+</para>
+
+<screen>
+# opimport -a /var/lib/oprofile/abi -o /tmp/current/.../GLOBAL_POWER_EVENTS.200000.1.all.all.all /var/lib/.../mprime/GLOBAL_POWER_EVENTS.200000.1.all.all.all
+</screen>
+
+<sect2 id="opimport-details">
+<title>Usage of <command>opimport</command></title>
+
+<variablelist>
+<varlistentry><term><option>--help / -? / --usage</option></term><listitem><para>
+Show help message.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--abi / -a [filename]</option></term><listitem><para>
+Input abi file description location.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--force / -f</option></term><listitem><para>
+Force conversion even if the input and output abi are identical.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--output / -o [filename]</option></term><listitem><para>
+Specify the output filename. If the output file already exists, the file is
+not overwritten but data are accumulated in. Sample filename are informative
+for post profile tools and must be kept identical, in other word the pathname
+from the first path component containing a '{' must be kept as it in the
+output filename.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--verbose / -V</option></term><listitem><para>
+Give verbose debugging output.
+</para></listitem></varlistentry>
+<varlistentry><term><option>--version / -v</option></term><listitem><para>
+Show version.
+</para></listitem></varlistentry>
+</variablelist>
+
+</sect2> <!-- opimport-details -->
+
+</sect1> <!-- opimport -->
+
+</chapter>
+
+<chapter id="interpreting">
+<title>Interpreting profiling results</title>
+<para>
+The standard caveats of profiling apply in interpreting the results from OProfile:
+profile realistic situations, profile different scenarios, profile
+for as long as a time as possible, avoid system-specific artifacts, don't trust
+the profile data too much. Also bear in mind the comments on the performance
+counters above - you <emphasis>cannot</emphasis> rely on totally accurate
+instruction-level profiling.  However, for almost all circumstances the data
+can be useful. Ideally a utility such as Intel's VTUNE would be available to
+allow careful instruction-level analysis; go hassle Intel for this, not me ;)
+</para>
+<sect1 id="irq-latency">
+<title>Profiling interrupt latency</title>
+<para>
+This is an example of how the latency of delivery of profiling interrupts
+can impact the reliability of the profiling data. This is pretty much a 
+worst-case-scenario example: these problems are fairly rare.
+</para>
+<screen>
+double fun(double a, double b, double c)
+{
+ double result = 0;
+ for (int i = 0 ; i &lt; 10000; ++i) {
+  result += a;
+  result *= b;
+  result /= c;
+ }
+ return result;
+}
+</screen>
+<para>
+Here the last instruction of the loop is very costly, and you would expect the result
+reflecting that - but (cutting the instructions inside the loop):
+</para>
+<screen>
+$ opannotate -a -t 10 ./a.out
+
+     88 15.38% : 8048337:       fadd   %st(3),%st
+     48 8.391% : 8048339:       fmul   %st(2),%st
+     68 11.88% : 804833b:       fdiv   %st(1),%st
+    368 64.33% : 804833d:       inc    %eax
+               : 804833e:       cmp    $0x270f,%eax
+               : 8048343:       jle    8048337
+</screen>
+<para>
+The problem comes from the x86 hardware; when the counter overflows the IRQ
+is asserted but the hardware has features that can delay the NMI interrupt:
+x86 hardware is synchronous (i.e. cannot interrupt during an instruction);
+there is also a latency when the IRQ is asserted, and the multiple
+execution units and the out-of-order model of modern x86 CPUs also causes
+problems. This is the same function, with annotation :
+</para>
+<screen>
+$ opannotate -s -t 10 ./a.out
+
+               :double fun(double a, double b, double c)
+               :{ /* _Z3funddd total:     572 100.0% */
+               : double result = 0;
+    368 64.33% : for (int i = 0 ; i &lt; 10000; ++i) {
+     88 15.38% :  result += a;
+     48 8.391% :  result *= b;
+     68 11.88% :  result /= c;
+               : }
+               : return result;
+               :}
+</screen>
+<para>
+The conclusion: don't trust samples coming at the end of a loop,
+particularly if the last instruction generated by the compiler is costly. This
+case can also occur for branches. Always bear in mind that samples
+can be delayed by a few cycles from its real position. That's a hardware
+problem and OProfile can do nothing about it.
+</para>
+</sect1>
+<sect1 id="kernel-profiling">
+<title>Kernel profiling</title>
+<sect2 id="irq-masking">
+<title>Interrupt masking</title>
+<para>
+OProfile uses non-maskable interrupts (NMI) on the P6 generation, Pentium 4,
+Athlon, Opteron, Phenom, and Turion processors. These interrupts can occur even in section of the
+Linux where interrupts are disabled, allowing collection of samples in virtually
+all executable code.  The RTC, timer interrupt mode, and Itanium 2 collection mechanisms
+use maskable interrupts. Thus, the RTC and Itanium 2 data collection mechanism have "sample
+shadows", or blind spots: regions where no samples will be collected. Typically, the samples
+will be attributed to the code immediately after the interrupts are re-enabled.
+</para>
+</sect2>
+<sect2 id="idle">
+<title>Idle time</title>
+<para>
+Your kernel is likely to support halting the processor when a CPU is idle. As
+the typical hardware events like <constant>CPU_CLK_UNHALTED</constant> do not
+count when the CPU is halted, the kernel profile will not reflect the actual
+amount of time spent idle. You can change this behaviour by booting with
+the <option>idle=poll</option> option, which uses a different idle routine. This
+will appear as <function>poll_idle()</function> in your kernel profile.
+</para>
+</sect2>
+<sect2 id="kernel-modules">
+<title>Profiling kernel modules</title>
+<para>
+OProfile profiles kernel modules by default. However, there are a couple of problems
+you may have when trying to get results. First, you may have booted via an initrd;
+this means that the actual path for the module binaries cannot be determined automatically.
+To get around this, you can use the <option>-p</option> option to the profiling tools
+to specify where to look for the kernel modules.
+</para>
+<para>
+In 2.6, the information on where kernel module binaries are located has been removed.
+This means OProfile needs guiding with the <option>-p</option> option to find your
+modules. Normally, you can just use your standard module top-level directory for this.
+Note that due to this problem, OProfile cannot check that the modification times match;
+it is your responsibility to make sure you do not modify a binary after a profile
+has been created.
+</para>
+<para>
+If you have run <command>insmod</command> or <command>modprobe</command> to insert a module
+in a particular directory, it is important that you specify this directory with the 
+<option>-p</option> option first, so that it over-rides an older module binary that might
+exist in other directories you've specified with <option>-p</option>. It is up to you
+to make sure that these values are correct: 2.6 kernels simply do not provide enough
+information for OProfile to get this information.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="interpreting-callgraph">
+<title>Interpreting call-graph profiles</title>
+<para>
+Sometimes the results from call-graph profiles may be different to what
+you expect to see. The first thing to check is whether the target
+binaries where compiled with frame pointers enabled (if the binary was
+compiled using <command>gcc</command>'s
+<option>-fomit-frame-pointer</option> option, you will not get
+meaningful results). Note that as of this writing, the GCC developers
+plan to disable frame pointers by default. The Linux kernel is built
+without frame pointers by default; there is a configuration option you
+can use to turn it on under the "Kernel Hacking" menu.
+</para>
+<para>
+Often you may see a caller of a function that does not actually directly
+call the function you're looking at (e.g. if <function>a()</function>
+calls <function>b()</function>, which in turn calls
+<function>c()</function>, you may see an entry for
+<function>a()->c()</function>).  What's actually occurring is that we
+are taking samples at the very start (or the very end) of
+<function>c()</function>; at these few instructions, we haven't yet
+created the new function's frame, so it appears as if
+<function>a()</function> is calling directly into
+<function>c()</function>. Be careful not to be misled by these
+entries.
+</para>
+<para>
+Like the rest of OProfile, call-graph profiling uses a statistical
+approach; this means that sometimes a backtrace sample is truncated, or
+even partially wrong. Bear this in mind when examining results.
+</para>
+<!--  FIXME: what do we need here ? -->
+</sect1>
+
+<sect1 id="debug-info">
+<title>Inaccuracies in annotated source</title>
+<sect2 id="effect-of-optimizations">
+<title>Side effects of optimizations</title>
+<para>
+The compiler can introduce some pitfalls in the annotated source output.
+The optimizer can move pieces of code in such manner that two line of codes
+are interlaced (instruction scheduling). Also debug info generated by the compiler 
+can show strange behavior. This is especially true for complex expressions e.g. inside
+an if statement:
+</para>
+<screen>
+	if (a &amp;&amp; ..
+	    b &amp;&amp; ..
+	    c &amp;&amp;)
+</screen>
+<para>
+here the problem come from the position of line number. The available debug
+info does not give enough details for the if condition, so all samples are
+accumulated at the position of the right brace of the expression. Using
+<command>opannotate <option>-a</option></command> can help to show the real
+samples at an assembly level.
+</para>
+</sect2>
+<sect2 id="prologues">
+<title>Prologues and epilogues</title>
+<para>
+The compiler generally needs to generate "glue" code across function calls, dependent
+on the particular function call conventions used. Additionally other things
+need to happen, like stack pointer adjustment for the local variables; this
+code is known as the function prologue. Similar code is needed at function return,
+and is known as the function epilogue. This will show up in annotations as
+samples at the very start and end of a function, where there is no apparent
+executable code in the source.
+</para>
+</sect2>
+<sect2 id="inlined-function">
+<title>Inlined functions</title>
+<para>
+You may see that a function is credited with a certain number of samples, but
+the listing does not add up to the correct total. To pick a real example :
+</para>
+<screen>
+               :internal_sk_buff_alloc_security(struct sk_buff *skb)
+ 353 2.342%    :{ /* internal_sk_buff_alloc_security total: 1882 12.48% */
+               :
+               :        sk_buff_security_t *sksec;
+  15 0.0995%   :        int rc = 0;
+               :
+  10 0.06633%  :        sksec = skb-&gt;lsm_security;
+ 468 3.104%    :        if (sksec &amp;&amp; sksec-&gt;magic == DSI_MAGIC) {
+               :                goto out;
+               :        }
+               :
+               :        sksec = (sk_buff_security_t *) get_sk_buff_memory(skb);
+   3 0.0199%   :        if (!sksec) {
+  38 0.2521%   :                rc = -ENOMEM;
+               :                goto out;
+  10 0.06633%  :        }
+               :        memset(sksec, 0, sizeof (sk_buff_security_t));
+  44 0.2919%   :        sksec-&gt;magic = DSI_MAGIC;
+  32 0.2123%   :        sksec-&gt;skb = skb;
+  45 0.2985%   :        sksec-&gt;sid = DSI_SID_NORMAL;
+  31 0.2056%   :        skb-&gt;lsm_security = sksec;
+               :
+               :      out:
+               :
+ 146 0.9685%   :        return rc;
+               :
+  98 0.6501%   :}
+</screen>
+<para>
+Here, the function is credited with 1,882 samples, but the annotations
+below do not account for this. This is usually because of inline functions -
+the compiler marks such code with debug entries for the inline function
+definition, and this is where <command>opannotate</command> annotates
+such samples. In the case above, <function>memset</function> is the most
+likely candidate for this problem. Examining the mixed source/assembly
+output can help identify such results.
+</para>
+<para>
+This problem is more visible when there is no source file available, in the
+following example it's trivially visible the sums of symbols samples is less
+than the number of the samples for this file. The difference must be accounted
+to inline functions.
+</para>
+<screen>
+/*
+ * Total samples for file : "arch/i386/kernel/process.c"
+ *
+ *    109  2.4616
+ */
+
+ /* default_idle total:     84  1.8970 */
+ /* cpu_idle total:         21  0.4743 */
+ /* flush_thread total:      1  0.0226 */
+ /* prepare_to_copy total:   1  0.0226 */
+ /* __switch_to total:      18  0.4065 */
+</screen>
+<para>
+The missing samples are not lost, they will be credited to another source
+location where the inlined function is defined. The inlined function will be
+credited from multiple call site and merged in one place in the annotated
+source file so there is no way to see from what call site are coming the
+samples for an inlined function.
+</para>
+<para>
+When running <command>opannotate</command>, you may get a warning
+"some functions compiled without debug information may have incorrect source line attributions".
+In some rare cases, OProfile is not able to verify that the derived source line
+is correct (when some parts of the binary image are compiled without debugging
+information). Be wary of results if this warning appears.
+</para>
+<para>
+Furthermore, for some languages the compiler can implicitly generate functions,
+such as default copy constructors. Such functions are labelled by the compiler
+as having a line number of 0, which means the source annotation can be confusing.
+</para>
+<!-- FIXME so what *actually* happens to those samples ? ignored ? -->
+</sect2>
+<sect2 id="wrong-linenr-info">
+<title>Inaccuracy in line number information</title>
+<para>
+Depending on your compiler you can fall into the following problem:
+</para>
+<screen>
+struct big_object { int a[500]; };
+
+int main()
+{
+	big_object a, b;
+	for (int i = 0 ; i != 1000 * 1000; ++i)
+		b = a;
+	return 0;
+}
+
+</screen>
+<para>
+Compiled with <command>gcc</command> 3.0.4 the annotated source is clearly inaccurate:
+</para>
+<screen>
+               :int main()
+               :{  /* main total: 7871 100% */
+               :        big_object a, b;
+               :        for (int i = 0 ; i != 1000 * 1000; ++i)
+               :                b = a;
+ 7871 100%     :        return 0;
+               :}
+</screen>
+<para>
+The problem here is distinct from the IRQ latency problem; the debug line number
+information is not precise enough; again, looking at output of <command>opannoatate -as</command> can help.
+</para>
+<screen>
+               :int main()
+               :{
+               :        big_object a, b;
+               :        for (int i = 0 ; i != 1000 * 1000; ++i)
+               : 80484c0:       push   %ebp
+               : 80484c1:       mov    %esp,%ebp
+               : 80484c3:       sub    $0xfac,%esp
+               : 80484c9:       push   %edi
+               : 80484ca:       push   %esi
+               : 80484cb:       push   %ebx
+               :                b = a;
+               : 80484cc:       lea    0xfffff060(%ebp),%edx
+               : 80484d2:       lea    0xfffff830(%ebp),%eax
+               : 80484d8:       mov    $0xf423f,%ebx
+               : 80484dd:       lea    0x0(%esi),%esi
+               :        return 0;
+    3 0.03811% : 80484e0:       mov    %edx,%edi
+               : 80484e2:       mov    %eax,%esi
+    1 0.0127%  : 80484e4:       cld
+    8 0.1016%  : 80484e5:       mov    $0x1f4,%ecx
+ 7850 99.73%   : 80484ea:       repz movsl %ds:(%esi),%es:(%edi)
+    9 0.1143%  : 80484ec:       dec    %ebx
+               : 80484ed:       jns    80484e0
+               : 80484ef:       xor    %eax,%eax
+               : 80484f1:       pop    %ebx
+               : 80484f2:       pop    %esi
+               : 80484f3:       pop    %edi
+               : 80484f4:       leave
+               : 80484f5:       ret
+</screen>
+<para>
+So here it's clear that copying is correctly credited with of all the samples, but the
+line number information is misplaced. <command>objdump -dS</command> exposes the
+same problem. Note that maintaining accurate debug information for compilers when optimizing is difficult, so this problem is not suprising.
+The problem of debug information
+accuracy is also dependent on the binutils version used; some BFD library versions
+contain a work-around for known problems of <command>gcc</command>, some others do not. This is unfortunate but we must live with that,
+since profiling is pointless when you disable optimisation (which would give better debugging entries).
+</para>
+</sect2>
+</sect1>
+<sect1 id="symbol-without-debug-info">
+<title>Assembly functions</title>
+<para>
+Often the assembler cannot generate debug information automatically.
+This means that you cannot get a source report unless 
+you manually define the neccessary debug information; read your assembler documentation for how you might
+do that. The only
+debugging info needed currently by OProfile is the line-number/filename-VMA association. When profiling assembly
+without debugging info you can always get report for symbols, and optionally for VMA, through <command>opreport -l</command>
+or <command>opreport -d</command>, but this works only for symbols with the right attributes.
+For <command>gas</command> you can get this by
+</para>
+<screen>
+.globl foo
+	.type	foo,@function
+</screen>
+<para> 
+whilst for <command>nasm</command> you must use
+</para>
+<screen>
+	  GLOBAL foo:function		; [1]
+</screen>
+<para>
+Note that OProfile does not need the global attribute, only the function attribute.
+</para>
+</sect1>
+<!-- 
+
+FIXME: I commented this bit out until we've written something ...
+
+improve this ? but look first why this file is special 
+<sect2 id="small-functions">
+<title>Small functions</title>
+<para>
+Very small functions can show strange behavior. The file in your source
+directory of OProfile <filename>$SRC/test-oprofile/understanding/puzzle.c</filename>
+show such example
+</para>
+</sect2>
+--> 
+
+<sect1 id="overlapping-symbols">
+	<title>Overlapping symbols in JITed code</title>
+	<para>
+	Some virtual machines (e.g., Java) may re-JIT a method, resulting in previously
+	allocated space for a piece of compiled code to be reused. This means that, at one distinct
+	code address, multiple symbols/methods may be present during the run time of the application.
+	</para>
+	<para>
+	Since OProfile samples are buffered and don&prime;t have timing information, there is no way
+	to correlate samples with the (possibly) varying address ranges in which the code for a symbol
+	may reside.
+	An alternative would be flushing the OProfile sampling buffer when we get an unload event,
+	but this could result in high overhead.
+	</para>
+	<para>
+	To moderate the problem of overlapping symbols, OProfile tries to select the symbol that was
+	present at this address range most of the time. Additionally, other overlapping symbols
+	are truncated in the overlapping area.
+	This gives reasonable results, because in reality, address reuse typically takes place
+	during phase changes of the application -- in particular, during application  startup.
+	Thus, for optimum profiling results, start the sampling session after application startup
+	and burn in.
+	</para>
+</sect1>
+
+<sect1 id="hidden-cost">
+<title>Other discrepancies</title>
+<para>
+Another cause of apparent problems is the hidden cost of instructions. A very
+common example is two memory reads: one from L1 cache and the other from memory:
+the second memory read is likely to have more samples.
+There are many other causes of hidden cost of instructions. A non-exhaustive
+list: mis-predicted branch, TLB cache miss, partial register stall,
+partial register dependencies, memory mismatch stall, re-executed µops. If you want to write
+programs at the assembly level, be sure to take a look at the Intel and
+AMD documentation at <ulink url="http://developer.intel.com/">http://developer.intel.com/</ulink>
+and <ulink url="http://developer.amd.com/devguides.jsp/">http://developer.amd.com/devguides.jsp</ulink>.
+</para>
+</sect1>
+</chapter>
+
+
+<chapter id="ack">
+<title>Acknowledgments</title>
+<para>
+Thanks to (in no particular order) : Arjan van de Ven, Rik van Riel, Juan Quintela, Philippe Elie,
+Phillipp Rumpf, Tigran Aivazian, Alex Brown, Alisdair Rawsthorne, Bob Montgomery, Ray Bryant, H.J. Lu,
+Jeff Esper, Will Cohen, Graydon Hoare, Cliff Woolley, Alex Tsariounov, Al Stone, Jason Yeh,
+Randolph Chung, Anton Blanchard, Richard Henderson, Andries Brouwer, Bryan Rittmeyer,
+Maynard P. Johnson,
+Richard Reich (rreich@rdrtech.com), Zwane Mwaikambo, Dave Jones, Charles Filtness; and finally Pulp, for "Intro".
+</para>
+</chapter>
+
+</book>
diff --git a/oprofile-0.9.7/doc/srcdoc/Doxyfile.in b/oprofile-0.9.7/doc/srcdoc/Doxyfile.in
new file mode 100644
index 0000000..1f76ff4
--- /dev/null
+++ b/oprofile-0.9.7/doc/srcdoc/Doxyfile.in
@@ -0,0 +1,184 @@
+# Doxyfile 1.2.13-20020210
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME           = @PACKAGE@
+PROJECT_NUMBER         = @VERSION@
+OUTPUT_DIRECTORY       =
+OUTPUT_LANGUAGE        = English
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = NO
+EXTRACT_STATIC         = NO
+EXTRACT_LOCAL_CLASSES  = YES
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = NO
+STRIP_FROM_PATH        = 
+INTERNAL_DOCS          = NO
+STRIP_CODE_COMMENTS    = NO
+CASE_SENSE_NAMES       = YES
+SHORT_NAMES            = NO
+HIDE_SCOPE_NAMES       = NO
+VERBATIM_HEADERS       = YES
+SHOW_INCLUDE_FILES     = YES
+JAVADOC_AUTOBRIEF      = YES
+INHERIT_DOCS           = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+DISTRIBUTE_GROUP_DOC   = NO
+TAB_SIZE               = 8
+GENERATE_TODOLIST      = NO
+GENERATE_TESTLIST      = NO
+GENERATE_BUGLIST       = NO
+ALIASES                = 
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+SHOW_USED_FILES        = YES
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = ../../
+FILE_PATTERNS          = *.cpp *.c *.h
+RECURSIVE              = YES
+EXCLUDE                = ../../module
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = *.moc.cpp *.moc.h oprof_start.base.cpp
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = 
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = NO
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = NO
+USE_PDFLATEX           = NO
+LATEX_BATCHMODE        = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = YES
+EXPAND_ONLY_PREDEF     = YES
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+HAVE_DOT               = YES
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+TEMPLATE_RELATIONS     = YES
+HIDE_UNDOC_RELATIONS   = YES
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+GRAPHICAL_HIERARCHY    = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MAX_DOT_GRAPH_WIDTH    = 1024
+MAX_DOT_GRAPH_HEIGHT   = 1024
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO
+#CGI_NAME               = search.cgi
+#CGI_URL                = 
+#DOC_URL                = 
+#DOC_ABSPATH            = 
+#BIN_ABSPATH            = /usr/local/bin/
+#EXT_DOC_PATHS          = 
diff --git a/oprofile-0.9.7/doc/srcdoc/Makefile b/oprofile-0.9.7/doc/srcdoc/Makefile
new file mode 100644
index 0000000..e848669
--- /dev/null
+++ b/oprofile-0.9.7/doc/srcdoc/Makefile
@@ -0,0 +1,9 @@
+DOXYGEN=doxygen
+
+.PHONY: clean
+
+all: clean
+	doxygen Doxyfile
+
+clean:
+	rm -rf html/
diff --git a/oprofile-0.9.7/doc/xsl/catalog-1.xml.in b/oprofile-0.9.7/doc/xsl/catalog-1.xml.in
new file mode 100644
index 0000000..6ab6e7a
--- /dev/null
+++ b/oprofile-0.9.7/doc/xsl/catalog-1.xml.in
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS/DTD Entity Resolution XML Catalog V1.0//EN"
+	"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+	<nextCatalog catalog="@XML_CATALOG@" />
+
+	@CAT_ENTRY_START@
+	<uri name="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"
+		uri="@DOCBOOK_ROOT@/xhtml/docbook.xsl"/>
+	<uri name="http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl"
+		uri="@DOCBOOK_ROOT@/xhtml/chunk.xsl"/>
+	@CAT_ENTRY_END@
+
+	<uri name="xsl/xhtml-common.xsl" uri="@top_srcdir@/doc/xsl/xhtml-common.xsl"/>
+</catalog>
diff --git a/oprofile-0.9.7/doc/xsl/xhtml-chunk.xsl b/oprofile-0.9.7/doc/xsl/xhtml-chunk.xsl
new file mode 100644
index 0000000..b3320e8
--- /dev/null
+++ b/oprofile-0.9.7/doc/xsl/xhtml-chunk.xsl
@@ -0,0 +1,52 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl"/>
+<xsl:import href="xhtml-common.xsl"/>
+ 
+<xsl:template name="process-chunk">
+  <xsl:param name="prev" select="."/>
+  <xsl:param name="next" select="."/>
+ 
+  <xsl:variable name="ischunk">
+    <xsl:call-template name="chunk"/>
+  </xsl:variable>
+ 
+  <xsl:variable name="chunkfn">
+    <xsl:if test="$ischunk='1'">
+      <xsl:apply-templates mode="chunk-filename" select="."/>
+    </xsl:if>
+  </xsl:variable>
+ 
+  <xsl:if test="$ischunk='0'">
+    <xsl:message>
+      <xsl:text>Error </xsl:text>
+      <xsl:value-of select="name(.)"/>
+      <xsl:text> is not a chunk!</xsl:text>
+    </xsl:message>
+  </xsl:if>
+ 
+  <xsl:variable name="filename">
+    <xsl:call-template name="make-relative-filename">
+      <xsl:with-param name="base.dir" select="$base.dir"/>
+      <xsl:with-param name="base.name" select="$chunkfn"/>
+    </xsl:call-template>
+  </xsl:variable>
+ 
+<!-- FIXME: use Strict when the problems with width on td/th are
+  sorted out. Not yet. -->
+  <xsl:call-template name="write.chunk.with.doctype">
+    <xsl:with-param name="filename" select="$filename"/>
+    <xsl:with-param name="indent" select="'yes'"/>
+   <xsl:with-param name="doctype-public">-//W3C//DTD XHTML 1.0 Transitional//EN</xsl:with-param>
+   <xsl:with-param name="doctype-system">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</xsl:with-param>
+    <xsl:with-param name="content">
+      <xsl:call-template name="chunk-element-content">
+        <xsl:with-param name="prev" select="$prev"/>
+        <xsl:with-param name="next" select="$next"/>
+      </xsl:call-template>
+    </xsl:with-param>
+  </xsl:call-template>
+</xsl:template>
+ 
+</xsl:stylesheet>
diff --git a/oprofile-0.9.7/doc/xsl/xhtml-common.xsl b/oprofile-0.9.7/doc/xsl/xhtml-common.xsl
new file mode 100644
index 0000000..99f2bf7
--- /dev/null
+++ b/oprofile-0.9.7/doc/xsl/xhtml-common.xsl
@@ -0,0 +1,55 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+
+<xsl:param name="use.id.as.filename" select="1"/>
+<xsl:param name="section.autolabel" select="1"/>
+<xsl:param name="chapter.autolabel" select="1"/>
+<xsl:param name="ulink.target" select="''"/>
+ 
+<xsl:param name="version"/>
+<xsl:template match="oprofileversion">
+  <xsl:value-of select="$version"/>
+</xsl:template>
+
+<!-- Custom template for programlisting, screen and synopsis to generate a gray
+     background to the item. -->
+<xsl:template match="programlisting|screen|synopsis">
+  <xsl:param name="suppress-numbers" select="'0'"/>
+  <xsl:variable name="vendor" select="system-property('xsl:vendor')"/>
+  <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable>
+ 
+  <xsl:if test="@id">
+    <a href="{$id}"/>
+  </xsl:if>
+ 
+  <xsl:choose>
+    <xsl:when test="$suppress-numbers = '0'
+                    and @linenumbering = 'numbered'
+                    and $use.extensions != '0'
+                    and $linenumbering.extension != '0'">
+      <xsl:variable name="rtf">
+        <xsl:apply-templates/>
+      </xsl:variable>
+      <!-- Change the color background color in the line below. -->
+      <table border="0" style="background: #E0E0E0;" width="90%">
+      <tr><td>
+      <pre class="{name(.)}">
+        <xsl:call-template name="number.rtf.lines">
+          <xsl:with-param name="rtf" select="$rtf"/>
+        </xsl:call-template>
+      </pre>
+      </td></tr></table>
+    </xsl:when>
+    <xsl:otherwise>
+      <!-- Change the color background color in the line below. -->
+      <table border="0" style="background: #E0E0E0;" width="90%">
+      <tr><td>
+      <pre class="{name(.)}">
+        <xsl:apply-templates/>
+      </pre>
+      </td></tr></table>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template> 
+ 
+</xsl:stylesheet>
diff --git a/oprofile-0.9.7/doc/xsl/xhtml.xsl b/oprofile-0.9.7/doc/xsl/xhtml.xsl
new file mode 100644
index 0000000..31217a6
--- /dev/null
+++ b/oprofile-0.9.7/doc/xsl/xhtml.xsl
@@ -0,0 +1,13 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+xmlns:doc="http://nwalsh.com/xsl/documentation/1.0" version="1.0">
+ 
+<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"/>
+<xsl:import href="xhtml-common.xsl"/>
+ 
+<xsl:output method="xml" encoding="ISO-8859-1" indent="yes"
+doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
+doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+/>
+ 
+</xsl:stylesheet>
diff --git a/oprofile-0.9.7/events/Makefile.am b/oprofile-0.9.7/events/Makefile.am
new file mode 100644
index 0000000..c4101cc
--- /dev/null
+++ b/oprofile-0.9.7/events/Makefile.am
@@ -0,0 +1,95 @@
+event_files = \
+	alpha/ev4/events alpha/ev4/unit_masks \
+	alpha/ev5/events alpha/ev5/unit_masks \
+	alpha/ev67/events alpha/ev67/unit_masks \
+	alpha/ev6/events alpha/ev6/unit_masks \
+	alpha/pca56/events alpha/pca56/unit_masks \
+	i386/athlon/events i386/athlon/unit_masks \
+	i386/core_2/events i386/core_2/unit_masks \
+	i386/p4/events i386/p4-ht/events \
+	i386/p4-ht/unit_masks i386/p4/unit_masks \
+	i386/pii/events i386/pii/unit_masks \
+	i386/piii/events i386/piii/unit_masks \
+	i386/ppro/events i386/ppro/unit_masks \
+	i386/p6_mobile/events i386/p6_mobile/unit_masks \
+	i386/core/events i386/core/unit_masks \
+	i386/arch_perfmon/events i386/arch_perfmon/unit_masks \
+	i386/atom/events i386/atom/unit_masks \
+	i386/core_i7/events i386/core_i7/unit_masks \
+	i386/nehalem/events i386/nehalem/unit_masks \
+	i386/westmere/events i386/westmere/unit_masks \
+	i386/sandybridge/events i386/sandybridge/unit_masks \
+	ia64/ia64/events ia64/ia64/unit_masks \
+	ia64/itanium2/events ia64/itanium2/unit_masks \
+	ia64/itanium/events ia64/itanium/unit_masks \
+	ppc64/power4/events ppc64/power4/event_mappings ppc64/power4/unit_masks \
+	ppc64/power5/events ppc64/power5/event_mappings ppc64/power5/unit_masks \
+	ppc64/power5+/events ppc64/power5+/event_mappings ppc64/power5+/unit_masks \
+	ppc64/power5++/events ppc64/power5++/event_mappings ppc64/power5++/unit_masks \
+	ppc64/power6/events ppc64/power6/event_mappings ppc64/power6/unit_masks \
+	ppc64/power7/events ppc64/power7/event_mappings ppc64/power7/unit_masks \
+	ppc64/970/events ppc64/970/event_mappings ppc64/970/unit_masks \
+	ppc64/970MP/events ppc64/970MP/event_mappings ppc64/970MP/unit_masks \
+	ppc64/ibm-compat-v1/events ppc64/ibm-compat-v1/event_mappings ppc64/ibm-compat-v1/unit_masks \
+	ppc64/pa6t/events ppc64/pa6t/event_mappings ppc64/pa6t/unit_masks \
+	ppc64/cell-be/events ppc64/cell-be/unit_masks \
+	rtc/events rtc/unit_masks \
+	x86-64/hammer/events x86-64/hammer/unit_masks \
+	x86-64/family10/events x86-64/family10/unit_masks \
+	x86-64/family11h/events x86-64/family11h/unit_masks \
+	x86-64/family12h/events x86-64/family12h/unit_masks \
+	x86-64/family14h/events x86-64/family14h/unit_masks \
+	x86-64/family15h/events x86-64/family15h/unit_masks \
+	arm/xscale1/events arm/xscale1/unit_masks \
+	arm/xscale2/events arm/xscale2/unit_masks \
+	arm/armv6/events arm/armv6/unit_masks \
+	arm/armv7-common/events arm/armv7-common/unit_masks \
+	arm/armv7/events arm/armv7/unit_masks \
+	arm/armv7-scorpion/events arm/armv7-scorpion/unit_masks \
+	arm/armv7-scorpionmp/events arm/armv7-scorpionmp/unit_masks \
+	arm/armv7-ca9/events arm/armv7-ca9/unit_masks \
+	arm/mpcore/events arm/mpcore/unit_masks \
+	avr32/events avr32/unit_masks \
+	mips/20K/events mips/20K/unit_masks \
+	mips/24K/events mips/24K/unit_masks \
+	mips/25K/events mips/25K/unit_masks \
+	mips/34K/events mips/34K/unit_masks \
+	mips/5K/events mips/5K/unit_masks \
+	mips/rm7000/events mips/rm7000/unit_masks \
+	mips/rm9000/events mips/rm9000/unit_masks \
+	mips/sb1/events mips/sb1/unit_masks \
+	mips/r10000/events mips/r10000/unit_masks \
+	mips/r12000/events mips/r12000/unit_masks \
+	mips/vr5432/events mips/vr5432/unit_masks \
+	mips/vr5500/events mips/vr5500/unit_masks \
+	mips/loongson2/events mips/loongson2/unit_masks \
+	mips/1004K/events mips/1004K/unit_masks \
+	mips/74K/events mips/74K/unit_masks \
+	ppc/7450/events ppc/7450/unit_masks \
+	ppc/e500/events ppc/e500/unit_masks \
+	ppc/e500v2/events ppc/e500v2/unit_masks \
+	ppc/e300/events ppc/e300/unit_masks
+
+install-data-local:
+	for i in ${event_files} ; do \
+		dir=`dirname $$i` ; \
+		mkdir -p $(DESTDIR)$(pkgdatadir)/$$dir ; \
+		$(INSTALL_DATA) $(top_srcdir)/events/$$i $(DESTDIR)$(pkgdatadir)/$$i ; \
+	done
+
+uninstall-local:
+	for i in ${event_files} ; do \
+		dir=`dirname $$i` ; \
+		archdir=`dirname $$dir` ; \
+		if test -f $(DESTDIR)$(pkgdatadir)/$$i ; then \
+			rm $(DESTDIR)$(pkgdatadir)/$$i ; \
+		fi;  \
+		if test -d $(DESTDIR)$(pkgdatadir)/$$dir ; then \
+			rmdir --ignore-fail-on-non-empty $(DESTDIR)$(pkgdatadir)/$$dir ; \
+		fi; \
+		if test $$archdir != "." -a -d $(DESTDIR)$(pkgdatadir)/$$archdir ; then \
+			rmdir --ignore-fail-on-non-empty $(DESTDIR)$(pkgdatadir)/$$archdir ; \
+		fi; \
+	done
+
+EXTRA_DIST = $(event_files)
diff --git a/oprofile-0.9.7/events/Makefile.in b/oprofile-0.9.7/events/Makefile.in
new file mode 100644
index 0000000..3dd70db
--- /dev/null
+++ b/oprofile-0.9.7/events/Makefile.in
@@ -0,0 +1,504 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = events
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/binutils.m4 \
+	$(top_srcdir)/m4/builtinexpect.m4 \
+	$(top_srcdir)/m4/cellspubfdsupport.m4 \
+	$(top_srcdir)/m4/compileroption.m4 \
+	$(top_srcdir)/m4/configmodule.m4 \
+	$(top_srcdir)/m4/copyifchange.m4 $(top_srcdir)/m4/docbook.m4 \
+	$(top_srcdir)/m4/extradirs.m4 $(top_srcdir)/m4/findkernel.m4 \
+	$(top_srcdir)/m4/kerneloption.m4 \
+	$(top_srcdir)/m4/kernelversion.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/mallocattribute.m4 \
+	$(top_srcdir)/m4/poptconst.m4 \
+	$(top_srcdir)/m4/precompiledheader.m4 $(top_srcdir)/m4/qt.m4 \
+	$(top_srcdir)/m4/resultyn.m4 $(top_srcdir)/m4/sstream.m4 \
+	$(top_srcdir)/m4/typedef.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_LIBS = @BFD_LIBS@
+CAT_ENTRY_END = @CAT_ENTRY_END@
+CAT_ENTRY_START = @CAT_ENTRY_START@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOCBOOK_ROOT = @DOCBOOK_ROOT@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTRA_CFLAGS_MODULE = @EXTRA_CFLAGS_MODULE@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVA_HOMEDIR = @JAVA_HOMEDIR@
+KINC = @KINC@
+KSRC = @KSRC@
+KVERS = @KVERS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBERTY_LIBS = @LIBERTY_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MODINSTALLDIR = @MODINSTALLDIR@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPROFILE_DIR = @OPROFILE_DIR@
+OPROFILE_MODULE_ARCH = @OPROFILE_MODULE_ARCH@
+OP_CFLAGS = @OP_CFLAGS@
+OP_CXXFLAGS = @OP_CXXFLAGS@
+OP_DOCDIR = @OP_DOCDIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POPT_LIBS = @POPT_LIBS@
+PTRDIFF_T_TYPE = @PTRDIFF_T_TYPE@
+QT_CFLAGS = @QT_CFLAGS@
+QT_INCLUDES = @QT_INCLUDES@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LIB = @QT_LIB@
+QT_LIBS = @QT_LIBS@
+QT_VERSION = @QT_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T_TYPE = @SIZE_T_TYPE@
+STRIP = @STRIP@
+UIC = @UIC@
+UIChelp = @UIChelp@
+VERSION = @VERSION@
+XMKMF = @XMKMF@
+XML_CATALOG = @XML_CATALOG@
+XSLTPROC = @XSLTPROC@
+XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+topdir = @topdir@
+event_files = \
+	alpha/ev4/events alpha/ev4/unit_masks \
+	alpha/ev5/events alpha/ev5/unit_masks \
+	alpha/ev67/events alpha/ev67/unit_masks \
+	alpha/ev6/events alpha/ev6/unit_masks \
+	alpha/pca56/events alpha/pca56/unit_masks \
+	i386/athlon/events i386/athlon/unit_masks \
+	i386/core_2/events i386/core_2/unit_masks \
+	i386/p4/events i386/p4-ht/events \
+	i386/p4-ht/unit_masks i386/p4/unit_masks \
+	i386/pii/events i386/pii/unit_masks \
+	i386/piii/events i386/piii/unit_masks \
+	i386/ppro/events i386/ppro/unit_masks \
+	i386/p6_mobile/events i386/p6_mobile/unit_masks \
+	i386/core/events i386/core/unit_masks \
+	i386/arch_perfmon/events i386/arch_perfmon/unit_masks \
+	i386/atom/events i386/atom/unit_masks \
+	i386/core_i7/events i386/core_i7/unit_masks \
+	i386/nehalem/events i386/nehalem/unit_masks \
+	i386/westmere/events i386/westmere/unit_masks \
+	i386/sandybridge/events i386/sandybridge/unit_masks \
+	ia64/ia64/events ia64/ia64/unit_masks \
+	ia64/itanium2/events ia64/itanium2/unit_masks \
+	ia64/itanium/events ia64/itanium/unit_masks \
+	ppc64/power4/events ppc64/power4/event_mappings ppc64/power4/unit_masks \
+	ppc64/power5/events ppc64/power5/event_mappings ppc64/power5/unit_masks \
+	ppc64/power5+/events ppc64/power5+/event_mappings ppc64/power5+/unit_masks \
+	ppc64/power5++/events ppc64/power5++/event_mappings ppc64/power5++/unit_masks \
+	ppc64/power6/events ppc64/power6/event_mappings ppc64/power6/unit_masks \
+	ppc64/power7/events ppc64/power7/event_mappings ppc64/power7/unit_masks \
+	ppc64/970/events ppc64/970/event_mappings ppc64/970/unit_masks \
+	ppc64/970MP/events ppc64/970MP/event_mappings ppc64/970MP/unit_masks \
+	ppc64/ibm-compat-v1/events ppc64/ibm-compat-v1/event_mappings ppc64/ibm-compat-v1/unit_masks \
+	ppc64/pa6t/events ppc64/pa6t/event_mappings ppc64/pa6t/unit_masks \
+	ppc64/cell-be/events ppc64/cell-be/unit_masks \
+	rtc/events rtc/unit_masks \
+	x86-64/hammer/events x86-64/hammer/unit_masks \
+	x86-64/family10/events x86-64/family10/unit_masks \
+	x86-64/family11h/events x86-64/family11h/unit_masks \
+	x86-64/family12h/events x86-64/family12h/unit_masks \
+	x86-64/family14h/events x86-64/family14h/unit_masks \
+	x86-64/family15h/events x86-64/family15h/unit_masks \
+	arm/xscale1/events arm/xscale1/unit_masks \
+	arm/xscale2/events arm/xscale2/unit_masks \
+	arm/armv6/events arm/armv6/unit_masks \
+	arm/armv7-common/events arm/armv7-common/unit_masks \
+	arm/armv7/events arm/armv7/unit_masks \
+	arm/armv7-scorpion/events arm/armv7-scorpion/unit_masks \
+	arm/armv7-scorpionmp/events arm/armv7-scorpionmp/unit_masks \
+	arm/armv7-ca9/events arm/armv7-ca9/unit_masks \
+	arm/mpcore/events arm/mpcore/unit_masks \
+	avr32/events avr32/unit_masks \
+	mips/20K/events mips/20K/unit_masks \
+	mips/24K/events mips/24K/unit_masks \
+	mips/25K/events mips/25K/unit_masks \
+	mips/34K/events mips/34K/unit_masks \
+	mips/5K/events mips/5K/unit_masks \
+	mips/rm7000/events mips/rm7000/unit_masks \
+	mips/rm9000/events mips/rm9000/unit_masks \
+	mips/sb1/events mips/sb1/unit_masks \
+	mips/r10000/events mips/r10000/unit_masks \
+	mips/r12000/events mips/r12000/unit_masks \
+	mips/vr5432/events mips/vr5432/unit_masks \
+	mips/vr5500/events mips/vr5500/unit_masks \
+	mips/loongson2/events mips/loongson2/unit_masks \
+	mips/1004K/events mips/1004K/unit_masks \
+	mips/74K/events mips/74K/unit_masks \
+	ppc/7450/events ppc/7450/unit_masks \
+	ppc/e500/events ppc/e500/unit_masks \
+	ppc/e500v2/events ppc/e500v2/unit_masks \
+	ppc/e300/events ppc/e300/unit_masks
+
+EXTRA_DIST = $(event_files)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign events/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign events/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-data-local install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	uninstall uninstall-am uninstall-local
+
+
+install-data-local:
+	for i in ${event_files} ; do \
+		dir=`dirname $$i` ; \
+		mkdir -p $(DESTDIR)$(pkgdatadir)/$$dir ; \
+		$(INSTALL_DATA) $(top_srcdir)/events/$$i $(DESTDIR)$(pkgdatadir)/$$i ; \
+	done
+
+uninstall-local:
+	for i in ${event_files} ; do \
+		dir=`dirname $$i` ; \
+		archdir=`dirname $$dir` ; \
+		if test -f $(DESTDIR)$(pkgdatadir)/$$i ; then \
+			rm $(DESTDIR)$(pkgdatadir)/$$i ; \
+		fi;  \
+		if test -d $(DESTDIR)$(pkgdatadir)/$$dir ; then \
+			rmdir --ignore-fail-on-non-empty $(DESTDIR)$(pkgdatadir)/$$dir ; \
+		fi; \
+		if test $$archdir != "." -a -d $(DESTDIR)$(pkgdatadir)/$$archdir ; then \
+			rmdir --ignore-fail-on-non-empty $(DESTDIR)$(pkgdatadir)/$$archdir ; \
+		fi; \
+	done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/oprofile-0.9.7/events/alpha/ev4/events b/oprofile-0.9.7/events/alpha/ev4/events
new file mode 100644
index 0000000..8b193d1
--- /dev/null
+++ b/oprofile-0.9.7/events/alpha/ev4/events
@@ -0,0 +1,18 @@
+# Alpha EV4 events.
+#
+event:0x00 counters:0 um:zero minimum:4096 name:ISSUES : Total issues divided by 2
+event:0x02 counters:0 um:zero minimum:4096 name:PIPELINE_DRY : Nothing issued, no valid I-stream data
+event:0x04 counters:0 um:zero minimum:4096 name:LOAD_INSNS : All load instructions
+event:0x06 counters:0 um:zero minimum:4096 name:PIPELINE_FROZEN : Nothing issued, resource conflict
+event:0x08 counters:0 um:zero minimum:4096 name:BRANCH_INSNS : All branches (conditional, unconditional, jsr, hw_rei)
+event:0x0a counters:0 um:zero minimum:4096 name:CYCLES : Total cycles
+event:0x0b counters:0 um:zero minimum:4096 name:PAL_MODE : Cycles while in PALcode environment
+event:0x0c counters:0 um:zero minimum:4096 name:NON_ISSUES : Total nonissues divided by 2
+event:0x10 counters:0 um:zero minimum:256 name:DCACHE_MISSES : Total D-cache misses
+event:0x11 counters:0 um:zero minimum:256 name:ICACHE_MISSES : Total I-cache misses
+event:0x12 counters:0 um:zero minimum:256 name:DUAL_ISSUE_CYCLES : Cycles of dual issue
+event:0x13 counters:0 um:zero minimum:256 name:BRANCH_MISPREDICTS : Branch mispredicts (conditional, jsr, hw_rei)
+event:0x14 counters:0 um:zero minimum:256 name:FP_INSNS : FP operate instructions (not br, load, store)
+event:0x15 counters:0 um:zero minimum:256 name:INTEGER_OPERATE : Integer operate instructions
+event:0x16 counters:0 um:zero minimum:256 name:STORE_INSNS : Store instructions
+# There's also EXTERNAL, by which we could monitor the 21066/21068 bus controller.
diff --git a/oprofile-0.9.7/events/alpha/ev4/unit_masks b/oprofile-0.9.7/events/alpha/ev4/unit_masks
new file mode 100644
index 0000000..bc77cc8
--- /dev/null
+++ b/oprofile-0.9.7/events/alpha/ev4/unit_masks
@@ -0,0 +1,4 @@
+# Alpha EV4 possible unit masks
+#
+name:zero type:mandatory default:0x0
+	0x0 No unit mask
diff --git a/oprofile-0.9.7/events/alpha/ev5/events b/oprofile-0.9.7/events/alpha/ev5/events
new file mode 100644
index 0000000..709e06a
--- /dev/null
+++ b/oprofile-0.9.7/events/alpha/ev5/events
@@ -0,0 +1,49 @@
+# Alpha EV5 events
+#
+event:0x00 counters:0,2 um:zero minimum:256 name:CYCLES : Total cycles
+event:0x01 counters:0 um:zero minimum:256 name:ISSUES : Total issues
+event:0x02 counters:1 um:zero minimum:256 name:NON_ISSUE_CYCLES : Nothing issued, pipeline frozen
+event:0x03 counters:1 um:zero minimum:256 name:SPLIT_ISSUE_CYCLES : Some but not all issuable instructions issued
+event:0x04 counters:1 um:zero minimum:256 name:PIPELINE_DRY : Nothing issued, pipeline dry
+event:0x05 counters:1 um:zero minimum:256 name:REPLAY_TRAP : Replay traps (ldu, wb/maf, litmus test)
+event:0x06 counters:1 um:zero minimum:256 name:SINGLE_ISSUE_CYCLES : Single issue cycles
+event:0x07 counters:1 um:zero minimum:256 name:DUAL_ISSUE_CYCLES : Dual issue cycles
+event:0x08 counters:1 um:zero minimum:256 name:TRIPLE_ISSUE_CYCLES : Triple issue cycles
+event:0x09 counters:1 um:zero minimum:256 name:QUAD_ISSUE_CYCLES : Quad issue cycles
+event:0x0a counters:1 um:zero minimum:256 name:FLOW_CHANGE : Flow change (meaning depends on counter 2)
+# ??? This one's dependent on the value in PCSEL2: If measuring PC_MISPR,
+# this is jsr-ret instructions, if measuring BRANCH_MISPREDICTS, this is
+# conditional branches, otherwise this is all branch insns, including hw_rei.
+event:0x0b counters:1 um:zero minimum:256 name:INTEGER_OPERATE : Integer operate instructions
+event:0x0c counters:1 um:zero minimum:256 name:FP_INSNS : FP operate instructions (not br, load, store)
+# FIXME: Bug carried over
+event:0x0c counters:1 um:zero minimum:256 name:LOAD_INSNS : Load instructions
+event:0x0d counters:1 um:zero minimum:256 name:STORE_INSNS : Store instructions
+event:0x0e counters:1 um:zero minimum:256 name:ICACHE_ACCESS : Instruction cache access
+event:0x0f um:zero minimum:256 name:DCACHE_ACCESS : Data cache access
+event:0x10 counters:2 um:zero minimum:256 name:LONG_STALLS : Stalls longer than 15 cycles
+event:0x11 counters:2 um:zero minimum:256 name:PC_MISPR : PC mispredicts
+event:0x12 counters:2 um:zero minimum:256 name:BRANCH_MISPREDICTS : Branch mispredicts
+event:0x13 counters:2 um:zero minimum:256 name:ICACHE_MISSES : Instruction cache misses
+event:0x14 counters:2 um:zero minimum:256 name:ITB_MISS : Instruction TLB miss
+event:0x15 counters:2 um:zero minimum:256 name:DCACHE_MISSES : Data cache misses
+event:0x16 counters:2 um:zero minimum:256 name:DTB_MISS : Data TLB miss
+event:0x17 counters:2 um:zero minimum:256 name:LOADS_MERGED : Loads merged in MAF
+event:0x18 counters:2 um:zero minimum:256 name:LDU_REPLAYS : LDU replay traps
+event:0x19 counters:2 um:zero minimum:256 name:WB_MAF_FULL_REPLAYS : WB/MAF full replay traps
+event:0x1a counters:2 um:zero minimum:256 name:MEM_BARRIER : Memory barrier instructions
+event:0x1b counters:2 um:zero minimum:256 name:LOAD_LOCKED : LDx/L instructions
+event:0x1c counters:1 um:zero minimum:256 name:SCACHE_ACCESS : S-cache access
+event:0x1d counters:1 um:zero minimum:256 name:SCACHE_READ : S-cache read
+event:0x1e counters:1,2 um:zero minimum:256 name:SCACHE_WRITE : S-cache write
+event:0x1f counters:1 um:zero minimum:256 name:SCACHE_VICTIM : S-cache victim
+event:0x20 counters:2 um:zero minimum:256 name:SCACHE_MISS : S-cache miss
+event:0x21 counters:2 um:zero minimum:256 name:SCACHE_READ_MISS : S-cache read miss
+event:0x22 counters:2 um:zero minimum:256 name:SCACHE_WRITE_MISS : S-cache write miss
+event:0x23 counters:2 um:zero minimum:256 name:SCACHE_SH_WRITE : S-cache shared writes
+event:0x24 counters:1 um:zero minimum:256 name:BCACHE_HIT : B-cache hit
+event:0x25 counters:1 um:zero minimum:256 name:BCACHE_VICTIM : B-cache victim
+event:0x26 counters:2 um:zero minimum:256 name:BCACHE_MISS : B-cache miss
+event:0x27 counters:1 um:zero minimum:256 name:SYS_REQ : System requests
+event:0x28 counters:2 um:zero minimum:256 name:SYS_INV : System invalidates
+event:0x29 counters:2 um:zero minimum:256 name:SYS_READ_REQ : System read requests
diff --git a/oprofile-0.9.7/events/alpha/ev5/unit_masks b/oprofile-0.9.7/events/alpha/ev5/unit_masks
new file mode 100644
index 0000000..4f24fa9
--- /dev/null
+++ b/oprofile-0.9.7/events/alpha/ev5/unit_masks
@@ -0,0 +1,4 @@
+# Alpha EV-5 possible unit masks
+#
+name:zero type:mandatory default:0x0
+	0x0 No unit mask
diff --git a/oprofile-0.9.7/events/alpha/ev6/events b/oprofile-0.9.7/events/alpha/ev6/events
new file mode 100644
index 0000000..2039cef
--- /dev/null
+++ b/oprofile-0.9.7/events/alpha/ev6/events
@@ -0,0 +1,11 @@
+# Alpha EV6 events
+#
+event:0x00 counters:0,1 um:zero minimum:500 name:CYCLES : Total cycles
+event:0x01 counters:1 um:zero minimum:500 name:RETIRED : Retired instructions
+event:0x02 counters:1 um:zero minimum:500 name:COND_BRANCHES : Retired conditional branches
+event:0x03 counters:1 um:zero minimum:500 name:BRANCH_MISPREDICTS : Retired branch mispredicts
+event:0x04 counters:1 um:zero minimum:500 name:DTB_MISS : Retired DTB single misses * 2
+event:0x05 counters:1 um:zero minimum:500 name:DTB_DD_MISS : Retired DTB double double misses
+event:0x06 counters:1 um:zero minimum:500 name:ITB_MISS : Retired ITB misses
+event:0x07 counters:1 um:zero minimum:500 name:UNALIGNED_TRAP : Retired unaligned traps
+event:0x08 counters:1 um:zero minimum:500 name:REPLAY_TRAP : Replay traps
diff --git a/oprofile-0.9.7/events/alpha/ev6/unit_masks b/oprofile-0.9.7/events/alpha/ev6/unit_masks
new file mode 100644
index 0000000..bbe38c6
--- /dev/null
+++ b/oprofile-0.9.7/events/alpha/ev6/unit_masks
@@ -0,0 +1,4 @@
+# Alpha EV-6 possible unit masks
+#
+name:zero type:mandatory default:0x0
+	0x0 No unit mask
diff --git a/oprofile-0.9.7/events/alpha/ev67/events b/oprofile-0.9.7/events/alpha/ev67/events
new file mode 100644
index 0000000..b603871
--- /dev/null
+++ b/oprofile-0.9.7/events/alpha/ev67/events
@@ -0,0 +1,27 @@
+# Alpha EV-67 Events
+#
+event:0x00 counters:0 um:zero minimum:500 name:CYCLES : Total cycles
+event:0x01 counters:1 um:zero minimum:500 name:DELAYED_CYCLES : Cycles of delayed retire pointer advance
+# FIXME: bug carried over
+event:0x00 counters:0,1 um:zero minimum:500 name:RETIRED : Retired instructions
+event:0x02 counters:1 um:zero minimum:500 name:BCACHE_MISS : Bcache misses/long probe latency
+event:0x03 counters:1 um:zero minimum:500 name:MBOX_REPLAY : Mbox replay traps
+# FIXME: all the below used PM_CTR
+event:0x04 counters:0 um:zero minimum:500 name:STALLED_0 : PCTR0 triggered; stalled between fetch and map stages
+event:0x05 counters:0 um:zero minimum:500 name:TAKEN_0 : PCTR0 triggered; branch was not mispredicted and taken
+event:0x06 counters:0 um:zero minimum:500 name:MISPREDICT_0 : PCTR0 triggered; branch was mispredicted
+event:0x07 counters:0 um:zero minimum:500 name:ITB_MISS_0 : PCTR0 triggered; ITB miss
+event:0x08 counters:0 um:zero minimum:500 name:DTB_MISS_0 : PCTR0 triggered; DTB miss
+event:0x09 counters:0 um:zero minimum:500 name:REPLAY_0 : PCTR0 triggered; replay trap
+event:0x0a counters:0 um:zero minimum:500 name:LOAD_STORE_0 : PCTR0 triggered; load-store order replay trap
+event:0x0b counters:0 um:zero minimum:500 name:ICACHE_MISS_0 : PCTR0 triggered; Icache miss
+event:0x0c counters:0 um:zero minimum:500 name:UNALIGNED_0 : PCTR0 triggered; unaligned load/store trap
+event:0x0d counters:0 um:zero minimum:500 name:STALLED_1 : PCTR1 triggered; stalled between fetch and map stages
+event:0x0e counters:0 um:zero minimum:500 name:TAKEN_1 : PCTR1 triggered; branch was not mispredicted and taken
+event:0x0f counters:0 um:zero minimum:500 name:MISPREDICT_1 : PCTR1 triggered; branch was mispredicted
+event:0x10 counters:0 um:zero minimum:500 name:ITB_MISS_1 : PCTR1 triggered; ITB miss
+event:0x11 counters:0 um:zero minimum:500 name:DTB_MISS_1 : PCTR1 triggered; DTB miss
+event:0x12 counters:0 um:zero minimum:500 name:REPLAY_1 : PCTR1 triggered; replay trap
+event:0x13 counters:0 um:zero minimum:500 name:LOAD_STORE_1 : PCTR1 triggered; load-store order replay trap
+event:0x14 counters:0 um:zero minimum:500 name:ICACHE_MISS_1 : PCTR1 triggered; Icache miss
+event:0x15 counters:0 um:zero minimum:500 name:UNALIGNED_1 : PCTR1 triggered; unaligned load/store trap
diff --git a/oprofile-0.9.7/events/alpha/ev67/unit_masks b/oprofile-0.9.7/events/alpha/ev67/unit_masks
new file mode 100644
index 0000000..3461e49
--- /dev/null
+++ b/oprofile-0.9.7/events/alpha/ev67/unit_masks
@@ -0,0 +1,4 @@
+# Alpha EV-67 possible unit masks
+#
+name:zero type:mandatory default:0x0
+	0x0 No unit mask
diff --git a/oprofile-0.9.7/events/alpha/pca56/events b/oprofile-0.9.7/events/alpha/pca56/events
new file mode 100644
index 0000000..334babe
--- /dev/null
+++ b/oprofile-0.9.7/events/alpha/pca56/events
@@ -0,0 +1,2 @@
+# PCA-56
+# FIXME: no events ? What's going on here Falk ?
diff --git a/oprofile-0.9.7/events/alpha/pca56/unit_masks b/oprofile-0.9.7/events/alpha/pca56/unit_masks
new file mode 100644
index 0000000..2b807b7
--- /dev/null
+++ b/oprofile-0.9.7/events/alpha/pca56/unit_masks
@@ -0,0 +1,3 @@
+# Alpha PCA-56 possible unit masks
+#
+# FIXME: any events ...?
diff --git a/oprofile-0.9.7/events/arm/armv6/events b/oprofile-0.9.7/events/arm/armv6/events
new file mode 100644
index 0000000..d885118
--- /dev/null
+++ b/oprofile-0.9.7/events/arm/armv6/events
@@ -0,0 +1,23 @@
+# ARM V6 events
+#
+event:0x00 counters:0,1 um:zero minimum:500 name:IFU_IFETCH_MISS : number of instruction fetch misses
+event:0x01 counters:0,1 um:zero minimum:500 name:CYCLES_IFU_MEM_STALL : cycles instruction fetch pipe is stalled
+event:0x02 counters:0,1 um:zero minimum:500 name:CYCLES_DATA_STALL : cycles stall occurs for due to data dependency
+event:0x03 counters:0,1 um:zero minimum:500 name:ITLB_MISS : number of Instruction MicroTLB misses
+event:0x04 counters:0,1 um:zero minimum:500 name:DTLB_MISS : number of Data MicroTLB misses
+event:0x05 counters:0,1 um:zero minimum:500 name:BR_INST_EXECUTED : branch instruction executed w/ or w/o program flow change
+event:0x06 counters:0,1 um:zero minimum:500 name:BR_INST_MISS_PRED : branch mispredicted
+event:0x07 counters:0,1 um:zero minimum:500 name:INSN_EXECUTED : instructions executed
+event:0x09 counters:0,1 um:zero minimum:500 name:DCACHE_ACCESS : data cache access, cacheable locations
+event:0x0a counters:0,1 um:zero minimum:500 name:DCACHE_ACCESS_ALL : data cache access, all locations
+event:0x0b counters:0,1 um:zero minimum:500 name:DCACHE_MISS : data cache miss
+event:0x0c counters:0,1 um:zero minimum:500 name:DCACHE_WB : data cache writeback, 1 event for every half cacheline
+event:0x0d counters:0,1 um:zero minimum:500 name:PC_CHANGE : number of times the program counter was changed without a mode switch
+event:0x0f counters:0,1 um:zero minimum:500 name:TLB_MISS : Main TLB miss
+event:0x10 counters:0,1 um:zero minimum:500 name:EXP_EXTERNAL : Explict external data access
+event:0x11 counters:0,1 um:zero minimum:500 name:LSU_STALL : cycles stalled because Load Store request queque is full
+event:0x12 counters:0,1 um:zero minimum:500 name:WRITE_DRAIN : Times write buffer was drained
+event:0x20 counters:0,1 um:zero minimum:500 name:ETMEXTOUT0 : nuber of cycles ETMEXTOUT[0] signal was asserted
+event:0x21 counters:0,1 um:zero minimum:500 name:ETMEXTOUT1 : nuber of cycles ETMEXTOUT[1] signal was asserted
+event:0x22 counters:0,1 um:zero minimum:500 name:ETMEXTOUT_BOTH : nuber of cycles both ETMEXTOUT [0] and [1] were asserted * 2
+event:0xff counters:0,1,2 um:zero minimum:500 name:CPU_CYCLES : clock cycles counter
diff --git a/oprofile-0.9.7/events/arm/armv6/unit_masks b/oprofile-0.9.7/events/arm/armv6/unit_masks
new file mode 100644
index 0000000..4add7e4
--- /dev/null
+++ b/oprofile-0.9.7/events/arm/armv6/unit_masks
@@ -0,0 +1,4 @@
+# ARM V6 PMU possible unit masks
+#
+name:zero type:mandatory default:0x00
+	0x00 No unit mask
diff --git a/oprofile-0.9.7/events/arm/armv7-ca9/events b/oprofile-0.9.7/events/arm/armv7-ca9/events
new file mode 100644
index 0000000..50094b5
--- /dev/null
+++ b/oprofile-0.9.7/events/arm/armv7-ca9/events
@@ -0,0 +1,51 @@
+# ARM Cortex A9 events
+# From Cortex A9 TRM
+#
+include:arm/armv7-common
+event:0x40 counters:1,2,3,4,5,6 um:zero minimum:500 name:JAVA_BC_EXEC : Number of Java bytecodes decoded, including speculative ones
+event:0x41 counters:1,2,3,4,5,6 um:zero minimum:500 name:JAVA_SFTBC_EXEC : Number of software Java bytecodes decoded, including speculative ones
+event:0x42 counters:1,2,3,4,5,6 um:zero minimum:500 name:JAVA_BB_EXEC : Number of Jazelle taken branches executed, including those flushed due to a previous load/store which aborts late
+
+event:0x50 counters:1,2,3,4,5,6 um:zero minimum:500 name:CO_LF_MISS : Number of coherent linefill requests which miss in all other CPUs, meaning that the request is sent to external memory
+event:0x51 counters:1,2,3,4,5,6 um:zero minimum:500 name:CO_LF_HIT : Number of coherent linefill requests which hit in another CPU, meaning that the linefill data is fetched directly from the relevant cache
+
+event:0x60 counters:1,2,3,4,5,6 um:zero minimum:500 name:IC_DEP_STALL : Number of cycles where CPU is ready to accept new instructions but does not receive any because of the instruction side not being able to provide any and the instruction cache is currently performing at least one linefill
+event:0x61 counters:1,2,3,4,5,6 um:zero minimum:500 name:DC_DEP_STALL : Number of cycles where CPU has some instructions that it cannot issue to any pipeline and the LSU has at least one pending linefill request but no pending TLB requests
+event:0x62 counters:1,2,3,4,5,6 um:zero minimum:500 name:STALL_MAIN_TLB : Number of cycles where CPU is stalled waiting for completion of translation table walk from the main TLB
+event:0x63 counters:1,2,3,4,5,6 um:zero minimum:500 name:STREX_PASS : Number of STREX instructions architecturally executed and passed
+event:0x64 counters:1,2,3,4,5,6 um:zero minimum:500 name:STREX_FAILS : Number of STREX instructions architecturally executed and failed
+event:0x65 counters:1,2,3,4,5,6 um:zero minimum:500 name:DATA_EVICT : Number of eviction requests due to a linefill in the data cache
+event:0x66 counters:1,2,3,4,5,6 um:zero minimum:500 name:ISS_NO_DISP : Number of cycles where the issue stage does not dispatch any instruction
+event:0x67 counters:1,2,3,4,5,6 um:zero minimum:500 name:ISS_EMPTY : Number of cycles where the issue stage is empty
+event:0x68 counters:1,2,3,4,5,6 um:zero minimum:500 name:INS_RENAME : Number of instructions going through the Register Renaming stage
+
+event:0x6E counters:1,2,3,4,5,6 um:zero minimum:500 name:PRD_FN_RET : Number of procedure returns whose condition codes do not fail, excluding all exception returns
+
+event:0x70 counters:1,2,3,4,5,6 um:zero minimum:500 name:INS_MAIN_EXEC : Number of instructions being executed in main execution pipeline of the CPU, the multiply pipeline and the ALU pipeline
+event:0x71 counters:1,2,3,4,5,6 um:zero minimum:500 name:INS_SND_EXEC : Number of instructions being executed in the second execution pipeline (ALU) of the CPU
+event:0x72 counters:1,2,3,4,5,6 um:zero minimum:500 name:INS_LSU : Number of instructions being executed in the Load/Store unit
+event:0x73 counters:1,2,3,4,5,6 um:zero minimum:500 name:INS_FP_RR : Number of floating-point instructions going through the Register Rename stage
+event:0x74 counters:1,2,3,4,5,6 um:zero minimum:500 name:INS_NEON_RR : Number of NEON instructions going through the Register Rename stage
+
+event:0x80 counters:1,2,3,4,5,6 um:zero minimum:500 name:STALL_PLD : Number of cycles where CPU is stalled because PLD slots are all full
+event:0x81 counters:1,2,3,4,5,6 um:zero minimum:500 name:STALL_WRITE : Number of cycles where CPU is stalled because data side is full and executing writes to external memory
+event:0x82 counters:1,2,3,4,5,6 um:zero minimum:500 name:STALL_INS_TLB : Number of cycles where CPU is stalled because of main TLB misses on requests issued by the instruction side
+event:0x83 counters:1,2,3,4,5,6 um:zero minimum:500 name:STALL_DATA_TLB : Number of cycles where CPU is stalled because of main TLB misses on requests issued by the data side
+event:0x84 counters:1,2,3,4,5,6 um:zero minimum:500 name:STALL_INS_UTLB : Number of cycles where CPU is stalled because of micro TLB misses on the instruction side
+event:0x85 counters:1,2,3,4,5,6 um:zero minimum:500 name:STALL_DATA_ULTB : Number of cycles where CPU is stalled because of micro TLB misses on the data side
+event:0x86 counters:1,2,3,4,5,6 um:zero minimum:500 name:STALL_DMB : Number of cycles where CPU is stalled due to executed of a DMB memory barrier
+
+event:0x8A counters:1,2,3,4,5,6 um:zero minimum:500 name:CLK_INT_EN : Number of cycles during which the integer core clock is enabled
+event:0x8B counters:1,2,3,4,5,6 um:zero minimum:500 name:CLK_DE_EN : Number of cycles during which the Data Engine clock is enabled
+
+event:0x90 counters:1,2,3,4,5,6 um:zero minimum:500 name:INS_ISB : Number of ISB instructions architecturally executed
+event:0x91 counters:1,2,3,4,5,6 um:zero minimum:500 name:INS_DSB : Number of DSB instructions architecturally executed
+event:0x92 counters:1,2,3,4,5,6 um:zero minimum:500 name:INS_DMB : Number of DMB instructions speculatively executed
+event:0x93 counters:1,2,3,4,5,6 um:zero minimum:500 name:EXT_IRQ : Number of external interrupts executed by the processor
+
+event:0xA0 counters:1,2,3,4,5,6 um:zero minimum:500 name:PLE_CL_REQ_CMP : PLE cache line request completed
+event:0xA1 counters:1,2,3,4,5,6 um:zero minimum:500 name:PLE_CL_REQ_SKP : PLE cache line request skipped
+event:0xA2 counters:1,2,3,4,5,6 um:zero minimum:500 name:PLE_FIFO_FLSH : PLE FIFO flush
+event:0xA3 counters:1,2,3,4,5,6 um:zero minimum:500 name:PLE_REQ_COMP : PLE request completed
+event:0xA4 counters:1,2,3,4,5,6 um:zero minimum:500 name:PLE_FIFO_OF : PLE FIFO overflow
+event:0xA5 counters:1,2,3,4,5,6 um:zero minimum:500 name:PLE_REQ_PRG : PLE request programmed
diff --git a/oprofile-0.9.7/events/arm/armv7-ca9/unit_masks b/oprofile-0.9.7/events/arm/armv7-ca9/unit_masks
new file mode 100644
index 0000000..4027469
--- /dev/null
+++ b/oprofile-0.9.7/events/arm/armv7-ca9/unit_masks
@@ -0,0 +1,4 @@
+# ARM V7 PMNC possible unit masks
+#
+name:zero type:mandatory default:0x00
+	0x00 No unit mask
diff --git a/oprofile-0.9.7/events/arm/armv7-common/events b/oprofile-0.9.7/events/arm/armv7-common/events
new file mode 100644
index 0000000..c4fe8c7
--- /dev/null
+++ b/oprofile-0.9.7/events/arm/armv7-common/events
@@ -0,0 +1,22 @@
+# ARM V7 events
+# From ARM ARM
+#
+event:0x00 counters:1,2,3,4,5,6 um:zero minimum:500 name:PMNC_SW_INCR : Software increment of PMNC registers
+event:0x01 counters:1,2,3,4,5,6 um:zero minimum:500 name:IFETCH_MISS : Instruction fetch misses from cache or normal cacheable memory
+event:0x02 counters:1,2,3,4,5,6 um:zero minimum:500 name:ITLB_MISS : Instruction fetch misses from TLB
+event:0x03 counters:1,2,3,4,5,6 um:zero minimum:500 name:DCACHE_REFILL : Data R/W operation that causes a refill from cache or normal cacheable memory
+event:0x04 counters:1,2,3,4,5,6 um:zero minimum:500 name:DCACHE_ACCESS : Data R/W from cache
+event:0x05 counters:1,2,3,4,5,6 um:zero minimum:500 name:DTLB_REFILL : Data R/W that causes a TLB refill
+event:0x06 counters:1,2,3,4,5,6 um:zero minimum:500 name:DREAD : Data read architecturally executed (note: architecturally executed = for instructions that are unconditional or that pass the condition code)
+event:0x07 counters:1,2,3,4,5,6 um:zero minimum:500 name:DWRITE : Data write architecturally executed
+event:0x08 counters:1,2,3,4,5,6 um:zero minimum:500 name:INSTR_EXECUTED : All executed instructions
+event:0x09 counters:1,2,3,4,5,6 um:zero minimum:500 name:EXC_TAKEN : Exception taken
+event:0x0A counters:1,2,3,4,5,6 um:zero minimum:500 name:EXC_EXECUTED : Exception return architecturally executed
+event:0x0B counters:1,2,3,4,5,6 um:zero minimum:500 name:CID_WRITE : Instruction that writes to the Context ID Register architecturally executed
+event:0x0C counters:1,2,3,4,5,6 um:zero minimum:500 name:PC_WRITE : SW change of PC, architecturally executed (not by exceptions)
+event:0x0D counters:1,2,3,4,5,6 um:zero minimum:500 name:PC_IMM_BRANCH : Immediate branch instruction executed (taken or not)
+event:0x0E counters:1,2,3,4,5,6 um:zero minimum:500 name:PC_PROC_RETURN : Procedure return architecturally executed (not by exceptions)
+event:0x0F counters:1,2,3,4,5,6 um:zero minimum:500 name:UNALIGNED_ACCESS : Unaligned access architecturally executed
+event:0x10 counters:1,2,3,4,5,6 um:zero minimum:500 name:PC_BRANCH_MIS_PRED : Branch mispredicted or not predicted. Counts pipeline flushes because of misprediction
+event:0x12 counters:1,2,3,4,5,6 um:zero minimum:500 name:PC_BRANCH_MIS_USED : Branch or change in program flow that could have been predicted
+event:0xFF counters:0 um:zero minimum:500 name:CPU_CYCLES : Number of CPU cycles
diff --git a/oprofile-0.9.7/events/arm/armv7-common/unit_masks b/oprofile-0.9.7/events/arm/armv7-common/unit_masks
new file mode 100644
index 0000000..4027469
--- /dev/null
+++ b/oprofile-0.9.7/events/arm/armv7-common/unit_masks
@@ -0,0 +1,4 @@
+# ARM V7 PMNC possible unit masks
+#
+name:zero type:mandatory default:0x00
+	0x00 No unit mask
diff --git a/oprofile-0.9.7/events/arm/armv7-scorpion/events b/oprofile-0.9.7/events/arm/armv7-scorpion/events
new file mode 100644
index 0000000..2925421
--- /dev/null
+++ b/oprofile-0.9.7/events/arm/armv7-scorpion/events
@@ -0,0 +1,94 @@
+# ARM V7 events
+# From Scorpion Processor Family Programmer's Reference Manual (PRM)
+#
+include:arm/armv7-common
+
+event:0x4c counters:1,2,3,4 um:zero minimum:500 name:ICACHE_EXPL_INV : I-cache explicit invalidates
+event:0x4d counters:1,2,3,4 um:zero minimum:500 name:ICACHE_MISS : I-cache misses
+event:0x4e counters:1,2,3,4 um:zero minimum:500 name:ICACHE_ACCESS : I-cache accesses
+event:0x4f counters:1,2,3,4 um:zero minimum:500 name:ICACHE_CACHEREQ_L2 : I-cache cacheable requests to L2
+event:0x50 counters:1,2,3,4 um:zero minimum:500 name:ICACHE_NOCACHE_L2 : I-cache non-cacheable requests to L2
+event:0x51 counters:1,2,3,4 um:zero minimum:500 name:HIQUP_NOPED : Conditional instructions HIQUPs NOPed
+event:0x52 counters:1,2,3,4 um:zero minimum:500 name:DATA_ABORT : Interrupts and Exceptions Data Abort
+event:0x53 counters:1,2,3,4 um:zero minimum:500 name:IRQ : Interrupts and Exceptions IRQ
+event:0x54 counters:1,2,3,4 um:zero minimum:500 name:FIQ : Interrupts and Exceptions FIQ
+event:0x55 counters:1,2,3,4 um:zero minimum:500 name:ALL_EXCPT : Interrupts and Exceptions All interrupts
+event:0x56 counters:1,2,3,4 um:zero minimum:500 name:UNDEF : Interrupts and Exceptions Undefined
+event:0x57 counters:1,2,3,4 um:zero minimum:500 name:SVC : Interrupts and Exceptions SVC
+event:0x58 counters:1,2,3,4 um:zero minimum:500 name:SMC : Interrupts and Exceptions SMC
+event:0x59 counters:1,2,3,4 um:zero minimum:500 name:PREFETCH_ABORT : Interrupts and Exceptions Prefetch Abort
+event:0x5a counters:1,2,3,4 um:zero minimum:500 name:INDEX_CHECK : Interrupts and Exceptions Index Check
+event:0x5b counters:1,2,3,4 um:zero minimum:500 name:NULL_CHECK : Interrupts and Exceptions Null Check
+event:0x5c counters:1,2,3,4 um:zero minimum:500 name:EXPL_ICIALLU : I-cache and BTAC Invalidates Explicit ICIALLU
+event:0x5d counters:1,2,3,4 um:zero minimum:500 name:IMPL_ICIALLU : I-cache and BTAC Invalidates Implicit ICIALLU
+event:0x5e counters:1,2,3,4 um:zero minimum:500 name:NONICIALLU_BTAC_INV : I-cache and BTAC Invalidates Non-ICIALLU BTAC Invalidate
+event:0x5f counters:1,2,3,4 um:zero minimum:500 name:ICIMVAU_IMPL_ICIALLU : I-cache and BTAC Invalidates ICIMVAU-implied ICIALLU
+
+event:0x60 counters:1,2,3,4 um:zero minimum:500 name:SPIPE_ONLY_CYCLES : Issue S-pipe only issue cycles
+event:0x61 counters:1,2,3,4 um:zero minimum:500 name:XPIPE_ONLY_CYCLES : Issue X-pipe only issue cycles
+event:0x62 counters:1,2,3,4 um:zero minimum:500 name:DUAL_CYCLES : Issue dual issue cycles
+event:0x63 counters:1,2,3,4 um:zero minimum:500 name:DISPATCH_ANY_CYCLES : Dispatch any dispatch cycles
+event:0x64 counters:1,2,3,4 um:zero minimum:500 name:FIFO_FULLBLK_CMT : Commits Trace FIFO full Blk CMT
+event:0x65 counters:1,2,3,4 um:zero minimum:500 name:FAIL_COND_INST : Conditional instructions failing conditional instrs (excluding branches)
+event:0x66 counters:1,2,3,4 um:zero minimum:500 name:PASS_COND_INST : Conditional instructions passing conditional instrs (excluding branches)
+event:0x67 counters:1,2,3,4 um:zero minimum:500 name:ALLOW_VU_CLK : Unit Clock Gating Allow VU Clks
+event:0x68 counters:1,2,3,4 um:zero minimum:500 name:VU_IDLE : Unit Clock Gating VU Idle
+event:0x69 counters:1,2,3,4 um:zero minimum:500 name:ALLOW_L2_CLK : Unit Clock Gating Allow L2 Clks
+event:0x6a counters:1,2,3,4 um:zero minimum:500 name:L2_IDLE : Unit Clock Gating L2 Idle
+
+event:0x6b counters:1,2,3,4 um:zero minimum:500 name:DTLB_IMPL_INV_SCTLR_DACR : DTLB implicit invalidates writes to SCTLR and DACR
+event:0x6c counters:1,2,3,4 um:zero minimum:500 name:DTLB_EXPL_INV : DTLB explicit invalidates
+event:0x6d counters:1,2,3,4 um:zero minimum:500 name:DTLB_MISS : DTLB misses
+event:0x6e counters:1,2,3,4 um:zero minimum:500 name:DTLB_ACCESS : DTLB accesses
+event:0x6f counters:1,2,3,4 um:zero minimum:500 name:ITLB_MISS : ITLB misses
+event:0x70 counters:1,2,3,4 um:zero minimum:500 name:ITLB_IMPL_INV : ITLB implicit ITLB invalidates
+event:0x71 counters:1,2,3,4 um:zero minimum:500 name:ITLB_EXPL_INV : ITLB explicit ITLB invalidates
+event:0x72 counters:1,2,3,4 um:zero minimum:500 name:UTLB_D_MISS : UTLB d-side misses
+event:0x73 counters:1,2,3,4 um:zero minimum:500 name:UTLB_D_ACCESS : UTLB d-side accesses
+event:0x74 counters:1,2,3,4 um:zero minimum:500 name:UTLB_I_MISS : UTLB i-side misses
+event:0x75 counters:1,2,3,4 um:zero minimum:500 name:UTLB_I_ACCESS : UTLB i-side accesses
+event:0x76 counters:1,2,3,4 um:zero minimum:500 name:UTLB_INV_ASID : UTLB invalidate by ASID
+event:0x77 counters:1,2,3,4 um:zero minimum:500 name:UTLB_INV_MVA : UTLB invalidate by MVA
+event:0x78 counters:1,2,3,4 um:zero minimum:500 name:UTLB_INV_ALL : UTLB invalidate all
+event:0x79 counters:1,2,3,4 um:zero minimum:500 name:S2_HOLD_RDQ_UNAVAIL : S2 hold RDQ unavail
+event:0x7a counters:1,2,3,4 um:zero minimum:500 name:S2_HOLD : S2 hold S2 hold
+event:0x7b counters:1,2,3,4 um:zero minimum:500 name:S2_HOLD_DEV_OP : S2 hold device op
+event:0x7c counters:1,2,3,4 um:zero minimum:500 name:S2_HOLD_ORDER : S2 hold strongly ordered op
+event:0x7d counters:1,2,3,4 um:zero minimum:500 name:S2_HOLD_BARRIER : S2 hold barrier
+
+event:0x7e counters:1,2,3,4 um:zero minimum:500 name:SCORPION_VIU_DUAL_CYCLE : Scorpion VIU dual cycle
+event:0x7f counters:1,2,3,4 um:zero minimum:500 name:SCORPION_VIU_SINGLE_CYCLE : Scorpion VIU single cycle
+event:0x80 counters:1,2,3,4 um:zero minimum:500 name:SCORPION_VX_PIPE_WAR_STALL_CYCLES : Scorpion VX pipe WAR cycles
+event:0x81 counters:1,2,3,4 um:zero minimum:500 name:SCORPION_VX_PIPE_WAW_STALL_CYCLES : Scorpion VX pipe WAW cycles
+event:0x82 counters:1,2,3,4 um:zero minimum:500 name:SCORPION_VX_PIPE_RAW_STALL_CYCLES : Scorpion VX pipe RAW cycles
+event:0x83 counters:1,2,3,4 um:zero minimum:500 name:SCORPION_VX_PIPE_LOAD_USE_STALL : Scorpion VX pipe load use stall
+event:0x84 counters:1,2,3,4 um:zero minimum:500 name:SCORPION_VS_PIPE_WAR_STALL_CYCLES : Scorpion VS pipe WAR stall cycles
+event:0x85 counters:1,2,3,4 um:zero minimum:500 name:SCORPION_VS_PIPE_WAW_STALL_CYCLES : Scorpion VS pipe WAW stall cycles
+event:0x86 counters:1,2,3,4 um:zero minimum:500 name:SCORPION_VS_PIPE_RAW_STALL_CYCLES : Scorpion VS pipe RAW stall cycles
+event:0x87 counters:1,2,3,4 um:zero minimum:500 name:SCORPION_EXCEPTIONS_INV_OPERATION : Scorpion invalid operation exceptions
+event:0x88 counters:1,2,3,4 um:zero minimum:500 name:SCORPION_EXCEPTIONS_DIV_BY_ZERO : Scorpion divide by zero exceptions
+event:0x89 counters:1,2,3,4 um:zero minimum:500 name:SCORPION_COND_INST_FAIL_VX_PIPE : Scorpion conditional instruction fail VX pipe
+event:0x8a counters:1,2,3,4 um:zero minimum:500 name:SCORPION_COND_INST_FAIL_VS_PIPE : Scorpion conditional instruction fail VS pipe
+event:0x8b counters:1,2,3,4 um:zero minimum:500 name:SCORPION_EXCEPTIONS_OVERFLOW : Scorpion overflow exceptions
+event:0x8c counters:1,2,3,4 um:zero minimum:500 name:SCORPION_EXCEPTIONS_UNDERFLOW : Scorpion underflow exceptions
+event:0x8d counters:1,2,3,4 um:zero minimum:500 name:SCORPION_EXCEPTIONS_DENORM : Scorpion denorm exceptions
+