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

Reply via email to