oprofile 0.9.6

Copy in the rest of the oprofile 0.9.6 tree so we have a source
copy to match the prebuilt binaries that are checked into
external/.

Change-Id: Iaac327571d5d583594a4194973bf256569061048
diff --git a/pp/common_option.h b/pp/common_option.h
new file mode 100644
index 0000000..b54ef7c
--- /dev/null
+++ b/pp/common_option.h
@@ -0,0 +1,72 @@
+/**
+ * @file common_option.h
+ * Declaration of entry point of pp tools, implementation file add common
+ * options of pp tools and some miscelleaneous functions
+ *
+ * @remark Copyright 2003 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#ifndef COMMON_OPTION_H
+#define COMMON_OPTION_H
+
+#include <vector>
+#include <list>
+
+#include "arrange_profiles.h"
+#include "demangle_symbol.h"
+
+namespace options {
+	extern bool verbose;
+	extern double threshold;
+	extern std::string threshold_opt;
+	extern std::string command_options;
+	extern std::vector<std::string> image_path;
+	extern std::string root_path;
+
+	struct spec {
+		std::list<std::string> common;
+		std::list<std::string> first;
+		std::list<std::string> second;
+	};
+}
+
+/**
+ * prototype of a pp tool entry point. This entry point is called
+ * by run_pp_tool
+ */
+typedef int (*pp_fct_run_t)(options::spec const & spec);
+
+/**
+ * @param argc  command line number of argument
+ * @param argv  command line argument pointer array
+ * @param fct  function to run to start this pp tool
+ *
+ * Provide a common entry to all pp tools, parsing all options, handling
+ * common options and providing the necessary try catch clause
+ */
+int run_pp_tool(int argc, char const * argv[], pp_fct_run_t fct);
+
+/**
+ * @param option one of [smart,none,normal]
+ *
+ * return the demangle_type of option or throw an exception if option
+ * is not valid.
+ */
+demangle_type handle_demangle_option(std::string const & option);
+
+/**
+ * @param mergespec  merge option
+ * @param allow_lib  is merge)lib allowed in mergespec
+ * @param exclude_dependent user specified --exclude-dependent
+ *
+ * parse merge option and return a merge_option filled from it.
+ * 
+ */
+merge_option handle_merge_option(std::vector<std::string> const & mergespec,
+       bool allow_lib, bool exclude_dependent);
+
+#endif /* !COMMON_OPTION_H */