Date: Tuesday, April 17, 2007 @ 12:11:06
Author: marc
Path: /cvsroot/carob/libmysequoia/ldtest
Added: staticinit.hpp (1.1)
Modified: main.cpp (1.8 -> 1.9) orig.c (1.3 -> 1.4) override.c (1.3 ->
1.4) plugin.c (1.3 -> 1.4) runtest.sh (1.8 -> 1.9)
Implemented tracing of .so loading/unloading
----------------+
main.cpp | 17 +++++++++++------
orig.c | 4 ++++
override.c | 4 ++++
plugin.c | 4 ++++
runtest.sh | 4 ++--
staticinit.hpp | 31 +++++++++++++++++++++++++++++++
6 files changed, 56 insertions(+), 8 deletions(-)
Index: libmysequoia/ldtest/main.cpp
diff -u libmysequoia/ldtest/main.cpp:1.8 libmysequoia/ldtest/main.cpp:1.9
--- libmysequoia/ldtest/main.cpp:1.8 Mon Apr 16 16:01:27 2007
+++ libmysequoia/ldtest/main.cpp Tue Apr 17 12:11:06 2007
@@ -45,19 +45,24 @@
RTLD_NOW |
(global? RTLD_GLOBAL : RTLD_LOCAL);
+ std::cout << std::endl << "dlopen(./plugin.so, ";
+#ifdef RTLD_DEEPBIND
+ std::cout << "RTLD_DEEPBIND=" << deepbind << ", " ;
+#endif
+ std::cout << "RTLD_GLOBAL=" << global << ") starting... ";
+
void *plugin = dlopen("./plugin.so", flags);
+ std::cout << "...completed." << std::endl;
+
if (!plugin) {
std::cerr << "failed to open plugin: " << dlerror() << std::endl;
exit (1);
}
-#ifdef RTLD_DEEPBIND
- std::cout << "RTLD_DEEPBIND=" << deepbind << ", " ;
-#endif
- std::cout << "RTLD_GLOBAL=" << global << " ---> ";
+ std::cout << " ";
const char *functions[2] = { "intercepted", "orig_calling_intercepted" };
for (int i = 0; i<2; i++)
{
@@ -70,8 +75,8 @@
exit(2);
}
- std::cout << functions[i] << "() = "
- << ( (*plugin_function) () ? "INTERCEPTED" : " NOT " )
+ std::cout << functions[i] << "() = "
+ << ( (*plugin_function) () ? "--INTERCEPTED--" : " --NOT--
" )
<< " " ;
}
Index: libmysequoia/ldtest/orig.c
diff -u libmysequoia/ldtest/orig.c:1.3 libmysequoia/ldtest/orig.c:1.4
--- libmysequoia/ldtest/orig.c:1.3 Tue Apr 17 11:06:04 2007
+++ libmysequoia/ldtest/orig.c Tue Apr 17 12:11:06 2007
@@ -1,4 +1,8 @@
+#include "staticinit.hpp"
+const StaticInit loaded(__FILE__);
+
+
extern "C" {
int intercepted();
Index: libmysequoia/ldtest/override.c
diff -u libmysequoia/ldtest/override.c:1.3 libmysequoia/ldtest/override.c:1.4
--- libmysequoia/ldtest/override.c:1.3 Tue Apr 17 11:06:04 2007
+++ libmysequoia/ldtest/override.c Tue Apr 17 12:11:06 2007
@@ -1,4 +1,8 @@
+#include "staticinit.hpp"
+const StaticInit loaded(__FILE__);
+
+
extern "C" int intercepted();
int intercepted()
Index: libmysequoia/ldtest/plugin.c
diff -u libmysequoia/ldtest/plugin.c:1.3 libmysequoia/ldtest/plugin.c:1.4
--- libmysequoia/ldtest/plugin.c:1.3 Tue Apr 17 11:06:04 2007
+++ libmysequoia/ldtest/plugin.c Tue Apr 17 12:11:06 2007
@@ -1,4 +1,8 @@
+#include "staticinit.hpp"
+const StaticInit loaded(__FILE__);
+
+
extern "C" {
int intercepted();
int orig_calling_intercepted();
Index: libmysequoia/ldtest/runtest.sh
diff -u libmysequoia/ldtest/runtest.sh:1.8 libmysequoia/ldtest/runtest.sh:1.9
--- libmysequoia/ldtest/runtest.sh:1.8 Tue Apr 17 10:56:16 2007
+++ libmysequoia/ldtest/runtest.sh Tue Apr 17 12:11:06 2007
@@ -22,10 +22,10 @@
1>/dev/null make clean all MAINFLAGS="${mainlinkflags}" \
OVERLIBFLAGS="${overridelinkflags}"
- printf "\n"
- printf "%s" "liboverride.so $overridelinkflags "
+ printf "\n %s" "liboverride.so $overridelinkflags "
printf "LD_PRELOAD=$preload\n"
LD_LIBRARY_PATH=. LD_PRELOAD=${preload} ./main
+ printf "\n\n"
done
done
Index: libmysequoia/ldtest/staticinit.hpp
diff -u /dev/null libmysequoia/ldtest/staticinit.hpp:1.1
--- /dev/null Tue Apr 17 12:11:06 2007
+++ libmysequoia/ldtest/staticinit.hpp Tue Apr 17 12:11:06 2007
@@ -0,0 +1,31 @@
+
+#include <string>
+
+#include <stdio.h>
+
+
+class StaticInit
+{
+ public:
+ StaticInit(std::string soname) : name(soname)
+ { loadtrace(true); };
+
+ ~StaticInit()
+ { loadtrace(false); };
+
+private:
+ void loadtrace(bool up);
+ const std::string name;
+};
+
+
+void
+StaticInit::loadtrace(bool up)
+{
+ const char *updown = up ? "Loading UP" : "UNloading";
+ printf("%s %s ", updown, name.c_str());
+}
+
+
+
+
_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits