[Compbench-devel] CompBenchmarks++/Benchmark Benchmark-DLLoader.cpp, 1.1, 1.2 Benchmark-DLLoader.h,
Brought to you by:
xfred
From: Frederic T. <xf...@us...> - 2006-12-28 13:18:58
|
Update of /cvsroot/compbench/CompBenchmarks++/Benchmark In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv18335 Modified Files: Benchmark-DLLoader.cpp Benchmark-DLLoader.h Log Message: Take care of UO_verbose. Paths to libraries are now defined through a vector. Index: Benchmark-DLLoader.cpp =================================================================== RCS file: /cvsroot/compbench/CompBenchmarks++/Benchmark/Benchmark-DLLoader.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Benchmark-DLLoader.cpp 1 Nov 2006 13:03:13 -0000 1.1 --- Benchmark-DLLoader.cpp 28 Dec 2006 13:18:55 -0000 1.2 *************** *** 1,9 **** #include <Benchmark/Benchmark-DLLoader.h> #include <string> #include <iostream> - #include <vector> #include <config.h> /* cache... */ std::vector<cbmlib_internal*> cbmlib_loaded_libraries; --- 1,12 ---- #include <Benchmark/Benchmark-DLLoader.h> + #include <libcompbenchmarks.h> + #include <string> #include <iostream> #include <config.h> + std::vector<std::string> cbmlib_paths; + /* cache... */ std::vector<cbmlib_internal*> cbmlib_loaded_libraries; *************** *** 28,36 **** cbmlib_internal *r; ! std::cout << "Loading " << lib << "... "; r=cbmlib_check_previousload(package_id); if (r) { ! std::cout << "found (cached)." << std::endl; return(r); } --- 31,41 ---- cbmlib_internal *r; ! if (UO_verbose) ! std::cout << "Loading " << lib << "... "; r=cbmlib_check_previousload(package_id); if (r) { ! if (UO_verbose) ! std::cout << "found (cached)." << std::endl; return(r); } *************** *** 38,75 **** library=dlopen(lib, RTLD_NOW); if (library) { ! std::cout << "found." << std::endl; r=new cbmlib_internal; r->library=library; ! std::cout << " Checking cbmlib_getBenchmarkNumber... "; r->Number=(cbmlib_internal_number_t) (dlsym(r->library, "cbmlib_getBenchmarkNumber")); if (!r->Number) { dlclose(library); ! std::cout << "N.A." << std::endl; delete(r); return(0); } else { ! std::cout << "found." << std::endl; } ! std::cout << " Checking cbmlib_getBenchmark... "; r->Bench=(cbmlib_internal_bench_t) dlsym(r->library, "cbmlib_getBenchmark"); if (!r->Bench) { dlclose(library); ! std::cout << "N.A." << std::endl; delete(r); return(0); } else { ! std::cout << "found." << std::endl; } ! std::cout << " Checking cbmlib_getBenchmarkByName... "; r->BenchByName=(cbmlib_internal_benchbyname_t) dlsym(r->library, "cbmlib_getBenchmarkByName"); if (!r->Bench) { dlclose(library); ! std::cout << "N.A." << std::endl; delete(r); return(0); } else { ! std::cout << "found." << std::endl; } r->package_id=package_id; --- 43,90 ---- library=dlopen(lib, RTLD_NOW); if (library) { ! if (UO_verbose) ! std::cout << "found." << std::endl; r=new cbmlib_internal; r->library=library; ! if (UO_verbose) ! std::cout << " Checking cbmlib_getBenchmarkNumber... "; r->Number=(cbmlib_internal_number_t) (dlsym(r->library, "cbmlib_getBenchmarkNumber")); if (!r->Number) { dlclose(library); ! if (UO_verbose) ! std::cout << "N.A." << std::endl; delete(r); return(0); } else { ! if (UO_verbose) ! std::cout << "found." << std::endl; } ! if (UO_verbose) ! std::cout << " Checking cbmlib_getBenchmark... "; r->Bench=(cbmlib_internal_bench_t) dlsym(r->library, "cbmlib_getBenchmark"); if (!r->Bench) { dlclose(library); ! if (UO_verbose) ! std::cout << "N.A." << std::endl; delete(r); return(0); } else { ! if (UO_verbose) ! std::cout << "found." << std::endl; } ! if (UO_verbose) ! std::cout << " Checking cbmlib_getBenchmarkByName... "; r->BenchByName=(cbmlib_internal_benchbyname_t) dlsym(r->library, "cbmlib_getBenchmarkByName"); if (!r->Bench) { dlclose(library); ! if (UO_verbose) ! std::cout << "N.A." << std::endl; delete(r); return(0); } else { ! if (UO_verbose) ! std::cout << "found." << std::endl; } r->package_id=package_id; *************** *** 77,81 **** return(r); } else { ! std::cout << "N.A." << std::endl; } return(0); --- 92,97 ---- return(r); } else { ! if (UO_verbose) ! std::cout << "N.A." << std::endl; } return(0); *************** *** 84,105 **** cbmlib_internal *cbmlib_load(char *package_id) { ! std::string local = "./Benchmark/.libs/libcompbenchmarks-"; ! cbmlib_internal *r; ! ! local+=package_id; ! local+=".so"; ! ! r=cbmlib_load_internal(local.c_str(), package_id); ! if (r) ! return(r); ! local=PREFIX; ! local+="/lib/libcompbenchmarks-"; ! local+=package_id; ! local+=".so"; ! r=cbmlib_load_internal(local.c_str(), package_id); ! ! return(r); } --- 100,120 ---- cbmlib_internal *cbmlib_load(char *package_id) { ! std::string tmp; ! cbmlib_internal *r = 0; ! int i; ! int n = cbmlib_paths.size(); ! for(i=0; i<n; i++) { ! tmp=cbmlib_paths[i]; ! tmp+="/libcompbenchmarks-"; ! tmp+=package_id; ! tmp+=".so"; ! r=cbmlib_load_internal(tmp.c_str(), package_id); ! if (r) { ! return(r); ! } ! } ! return(0); } Index: Benchmark-DLLoader.h =================================================================== RCS file: /cvsroot/compbench/CompBenchmarks++/Benchmark/Benchmark-DLLoader.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Benchmark-DLLoader.h 1 Nov 2006 13:03:13 -0000 1.1 --- Benchmark-DLLoader.h 28 Dec 2006 13:18:55 -0000 1.2 *************** *** 13,16 **** --- 13,20 ---- #include <Benchmark/Benchmark.h> #include <dlfcn.h> + #include <vector> + + /** Paths to libraries */ + extern std::vector<std::string> cbmlib_paths; /** Function prototype for getting benchmark's number in a shared library */ *************** *** 21,25 **** typedef CBMBenchmark* (*cbmlib_internal_benchbyname_t)(char*, CBMSystem*); ! /** Internal benchmark's shared library object */ typedef struct cbmlib_internal { void *library; --- 25,29 ---- typedef CBMBenchmark* (*cbmlib_internal_benchbyname_t)(char*, CBMSystem*); ! /** Low-level internal benchmark's shared library object */ typedef struct cbmlib_internal { void *library; *************** *** 31,46 **** ! /** \brief Load a library according to the benchmark/package's internal name. \param package_id something like gzip, bzip2, nbench and so on. */ cbmlib_internal *cbmlib_load(char *package_id); ! /** \brief Gets a CBMBenchmark instance from a shared library. ! \param bench_id gzip-1c, benchpp-whetstone and so on. ! \param _system A system instance. */ CBMBenchmark *cbmlib_bench_load(char *bench_id, CBMSystem *_system); ! /** \brief Remove any internal existing reference to shared library. */ void cbmlib_done(void); --- 35,52 ---- ! /** \brief Low-level library loading according to the benchmark/package's ! internal name. \param package_id something like gzip, bzip2, nbench and so on. */ cbmlib_internal *cbmlib_load(char *package_id); ! /** \brief Low-level function to Get a CBMBenchmark instance from a ! * shared library. ! * \param bench_id gzip-1c, benchpp-whetstone and so on. ! * \param _system A system instance. */ CBMBenchmark *cbmlib_bench_load(char *bench_id, CBMSystem *_system); ! /** \brief Low-level function for removing any internal existing reference to shared libraries. */ void cbmlib_done(void); |