13#include "ompd-specific.h"
21#define ompd_declare_access(t, m) uint64_t ompd_access__##t##__##m;
22OMPD_FOREACH_ACCESS(ompd_declare_access)
23#undef ompd_declare_access
25#define ompd_declare_sizeof_member(t, m) uint64_t ompd_sizeof__##t##__##m;
26OMPD_FOREACH_ACCESS(ompd_declare_sizeof_member)
27#undef ompd_declare_sizeof_member
29#define ompd_declare_bitfield(t, m) uint64_t ompd_bitfield__##t##__##m;
30OMPD_FOREACH_BITFIELD(ompd_declare_bitfield)
31#undef ompd_declare_bitfield
33#define ompd_declare_sizeof(t) uint64_t ompd_sizeof__##t;
34OMPD_FOREACH_SIZEOF(ompd_declare_sizeof)
35#undef ompd_declare_sizeof
37volatile const char **ompd_dll_locations = NULL;
38uint64_t ompd_state = 0;
40char *ompd_env_block = NULL;
41ompd_size_t ompd_env_block_size = 0;
45 static int ompd_initialized = 0;
54#define ompd_init_access(t, m) \
55 ompd_access__##t##__##m = (uint64_t) & (((t *)0)->m);
56 OMPD_FOREACH_ACCESS(ompd_init_access)
57#undef ompd_init_access
63#define ompd_init_bitfield(t, m) \
64 ompd_bitfield__##t##__##m = 0; \
65 ((t *)(&ompd_bitfield__##t##__##m))->m = 1;
66 OMPD_FOREACH_BITFIELD(ompd_init_bitfield)
67#undef ompd_init_bitfield
73#define ompd_init_sizeof_member(t, m) \
74 ompd_sizeof__##t##__##m = sizeof(((t *)0)->m);
75 OMPD_FOREACH_ACCESS(ompd_init_sizeof_member)
76#undef ompd_init_sizeof_member
78#define ompd_init_sizeof(t) ompd_sizeof__##t = sizeof(t);
79 OMPD_FOREACH_SIZEOF(ompd_init_sizeof)
80#undef ompd_init_sizeof
84 const char *ompd_env_var = getenv(
"OMP_DEBUG");
85 int ompd_debug = ompd_env_var && !strcmp(ompd_env_var,
"enabled");
91 int ret = dladdr((
void *)ompd_init, &dl_info);
93 const char *err = dlerror();
94 if (ompd_debug || err)
96 "The OpenMP runtime could not determine the location of "
97 "libompd.so. If the debugger fails to load the library, make "
98 "sure to add the directory containing a compatible libompd.so "
99 "to your LD_LIBRARY_PATH%s%s\n",
100 err ?
": " :
"", err ? err :
"");
101 }
else if (dl_info.dli_fname && strrchr(dl_info.dli_fname,
'/')) {
102 int lib_path_length = strrchr(dl_info.dli_fname,
'/') - dl_info.dli_fname;
104 (
char *)malloc(lib_path_length + 12 );
105 strncpy(libname, dl_info.dli_fname, lib_path_length);
106 memcpy(libname + lib_path_length,
"/libompd.so\0", 12);
111 fprintf(stderr,
"OMP_OMPD active\n");
112 ompt_enabled.enabled = 1;
113 ompd_state |= OMPD_ENABLE_BP;
116 ompd_initialized = 1;
117 ompd_dll_locations = (
volatile const char **)malloc(3 *
sizeof(
const char *));
118 ompd_dll_locations[0] =
"libompd.so";
119 ompd_dll_locations[1] = libname;
120 ompd_dll_locations[2] = NULL;
121 ompd_dll_locations_valid();
124void __attribute__((noinline)) ompd_dll_locations_valid(
void) {
130void ompd_bp_parallel_begin(
void) {
135void ompd_bp_parallel_end(
void) {
140void ompd_bp_task_begin(
void) {
145void ompd_bp_task_end(
void) {
150void ompd_bp_thread_begin(
void) {
155void ompd_bp_thread_end(
void) {