This source file includes following definitions.
- alloc_map
- fill_map
- fill_attributes
- mpidbg_init_once
- mpidbg_interface_version_compatibility
- mpidbg_version_string
- mpidbg_dll_taddr_width
- mpidbg_init_per_image
- mpidbg_finalize_per_image
- mpidbg_init_per_process
- mpidbg_finalize_per_process
- mpidbg_comm_query
- mpidbg_comm_f2c
- mpidbg_comm_cxx2c
- mpidbg_errhandler_query
- mpidbg_errhandler_f2c
- mpidbg_errhandler_cxx2c
- mpidbg_request_query
- mpidbg_request_f2c
- mpidbg_request_cxx2c
- mpidbg_status_query
- mpidbg_status_f2c
- mpidbg_status_cxx2c
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 
  31 
  32 
  33 
  34 
  35 
  36 
  37 
  38 
  39 
  40 #include "ompi_config.h"
  41 
  42 #include <string.h>
  43 #include <stdlib.h>
  44 
  45 #include "ompi/mca/pml/base/pml_base_request.h"
  46 #include "mpihandles_interface.h"
  47 #include "ompi_mpihandles_dll_defs.h"
  48 #include "ompi/communicator/communicator.h"
  49 
  50 
  51 #define OPAL_ALIGN(x,a,t) (((x)+((t)(a)-1)) & ~(((t)(a)-1)))
  52 
  53 
  54 #if defined(WORDS_BIGENDIAN)
  55 char mpidbg_dll_is_big_endian = 1;
  56 #else
  57 char mpidbg_dll_is_big_endian = 0;
  58 #endif
  59 char mpidbg_dll_bitness = (char) (sizeof(void*) * 8);
  60 enum mpidbg_comm_capabilities_t mpidbg_comm_capabilities = 0;
  61 struct mpidbg_name_map_t *mpidbg_comm_name_map = NULL;
  62 enum mpidbg_errhandler_capabilities_t mpidbg_errhandler_capabilities = 0;
  63 struct mpidbg_name_map_t *mpidbg_errhandler_name_map = NULL;
  64 enum mpidbg_request_capabilities_t mpidbg_request_capabilities = 0;
  65 struct mpidbg_name_map_t *mpidbg_request_name_map = NULL;
  66 enum mpidbg_status_capabilities_t mpidbg_status_capabilities = 0;
  67 struct mpidbg_name_map_t *mpidbg_status_name_map = NULL;
  68 
  69 #if defined(__SUNPRO_C)
  70 
  71 
  72 
  73 
  74 
  75 
  76 
  77 
  78 
  79 
  80 
  81 
  82 
  83 
  84 
  85 
  86 
  87 
  88 
  89 
  90 opal_mutex_t opal_event_lock;
  91 int opal_progress_spin_count;
  92 bool opal_mutex_check_locks;
  93 bool opal_uses_threads;
  94 #endif 
  95 
  96 
  97 
  98 
  99 static struct mpidbg_name_map_t *alloc_map(mqs_image *image, int len)
 100 {
 101     mpi_image_info *i_info = (mpi_image_info *) mqs_get_image_info(image);
 102     struct mpidbg_name_map_t *m = NULL;
 103 
 104     if (NULL != i_info) {
 105         m = mqs_malloc(len * sizeof(struct mpidbg_name_map_t));
 106     }
 107 
 108     return m;
 109 }
 110 
 111 
 112 
 113 static void fill_map(mqs_image *image,
 114                      char *public_name, char *private_name,
 115                      struct mpidbg_name_map_t *map)
 116 {
 117     mqs_taddr_t value;
 118     mpi_image_info *i_info = (mpi_image_info *) mqs_get_image_info(image);
 119 
 120     if (NULL != i_info) {
 121         map->map_name = strdup(public_name);
 122         if (NULL != private_name) {
 123             if (mqs_ok == mqs_find_symbol(image, private_name, &value)) {
 124                 map->map_handle = value;
 125                 return;
 126             }
 127         } else {
 128             map->map_handle = 0;
 129             return;
 130         }
 131     }
 132 
 133     printf("OMPI MPI handles DLL: fill_map: Unable to find symbol: %s\n",
 134            private_name);
 135 }
 136 
 137 
 138 
 139 static int fill_attributes(int *num_attrs,
 140                            struct mpidbg_attribute_pair_t **attrs,
 141                            mqs_taddr_t table)
 142 {
 143     
 144     return mqs_ok;
 145 }
 146 
 147 
 148 
 149 int mpidbg_init_once(const mqs_basic_callbacks *cb)
 150 {
 151     mqs_basic_entrypoints = cb;
 152     printf("mpidbg_init_once\n");
 153     return MPIDBG_SUCCESS;
 154 }
 155 
 156 
 157 
 158 
 159 int mpidbg_interface_version_compatibility(void)
 160 {
 161     printf("mpidbg_interface_version_compatibility\n");
 162     return MPIDBG_INTERFACE_VERSION;
 163 }
 164 
 165 
 166 static char mpidbg_version_str[OMPI_MAX_VER_SIZE];
 167 
 168 
 169 char *mpidbg_version_string(void)
 170 {
 171     int offset;
 172     printf("mpidbg_version_string\n");
 173     offset = snprintf(mpidbg_version_str, OMPI_MAX_VER_SIZE-1,  
 174                       "Open MPI handle interpretation support for parallel debuggers ");
 175     ompi_get_lib_version(mpidbg_version_str+offset, OMPI_MAX_VER_SIZE-offset);
 176     return mpidbg_version_str;
 177 }
 178 
 179 
 180 
 181 
 182 int mpidbg_dll_taddr_width(void)
 183 {
 184     printf("mpidbg_dll_taddr_width\n");
 185     return sizeof(mqs_taddr_t);
 186 }
 187 
 188 
 189 
 190 
 191 int mpidbg_init_per_image(mqs_image *image, const mqs_image_callbacks *icb,
 192                           struct mpidbg_handle_info_t *handle_types)
 193 {
 194     char **message;
 195     mpi_image_info *i_info =
 196         (mpi_image_info *) mqs_malloc(sizeof(mpi_image_info));
 197     printf("mpidbg_init_per_image\n");
 198 
 199     if (NULL == i_info) {
 200         printf("mpidbg_init_per_image: malloc failed!\n");
 201         return MPIDBG_ERR_NO_MEM;
 202     }
 203 
 204     memset((void *)i_info, 0, sizeof(mpi_image_info));
 205     
 206     i_info->image_callbacks = icb;
 207 
 208     
 209     i_info->extra = NULL;
 210 
 211     
 212     mqs_put_image_info(image, (mqs_image_info *)i_info);
 213 
 214     
 215     if (mqs_ok != ompi_fill_in_type_info(image, message)) {
 216         printf("mpidbg_init_per_image: failed to get all type info\n");
 217         return MPIDBG_ERR_NOT_SUPPORTED;
 218     }
 219 
 220     
 221     
 222 
 223 
 224     handle_types->hi_c_aint = mqs_find_type(image, "MPI_Aint", mqs_lang_c);
 225     
 226 
 227 
 228 
 229 
 230 
 231 
 232 
 233     handle_types->hi_c_comm = i_info->ompi_communicator_t.type;
 234     handle_types->hi_c_datatype = i_info->ompi_datatype_t.type;
 235     handle_types->hi_c_errhandler =
 236         mqs_find_type(image, "ompi_errhandler_t", mqs_lang_c);
 237     handle_types->hi_c_file =
 238         mqs_find_type(image, "ompi_file_t", mqs_lang_c);
 239     handle_types->hi_c_group = i_info->ompi_group_t.type;
 240     handle_types->hi_c_info =
 241         mqs_find_type(image, "opal_info_t", mqs_lang_c);
 242     
 243     handle_types->hi_c_offset =
 244         mqs_find_type(image, "MPI_Offset", mqs_lang_c);
 245     handle_types->hi_c_op =
 246         mqs_find_type(image, "ompi_op_t", mqs_lang_c);
 247     handle_types->hi_c_request = i_info->ompi_request_t.type;
 248     handle_types->hi_c_status = i_info->ompi_status_public_t.type;
 249     handle_types->hi_c_win =
 250         mqs_find_type(image, "ompi_win_t", mqs_lang_c);
 251 
 252     
 253     handle_types->hi_cxx_aint = handle_types->hi_cxx_aint;
 254     handle_types->hi_cxx_comm =
 255         mqs_find_type(image, "MPI::Comm", mqs_lang_cplus);
 256     handle_types->hi_cxx_intracomm =
 257         mqs_find_type(image, "MPI::Intracomm", mqs_lang_cplus);
 258     handle_types->hi_cxx_intercomm =
 259         mqs_find_type(image, "MPI::Intercomm", mqs_lang_cplus);
 260     handle_types->hi_cxx_graphcomm =
 261         mqs_find_type(image, "MPI::Graphcomm", mqs_lang_cplus);
 262     handle_types->hi_cxx_cartcomm =
 263         mqs_find_type(image, "MPI::Cartcomm", mqs_lang_cplus);
 264     handle_types->hi_cxx_datatype =
 265         mqs_find_type(image, "MPI::Datatype", mqs_lang_cplus);
 266     handle_types->hi_cxx_errhandler =
 267         mqs_find_type(image, "MPI::Errhandler", mqs_lang_cplus);
 268     handle_types->hi_cxx_file =
 269         mqs_find_type(image, "MPI::File", mqs_lang_cplus);
 270     handle_types->hi_cxx_group =
 271         mqs_find_type(image, "MPI::Group", mqs_lang_cplus);
 272     handle_types->hi_cxx_info =
 273         mqs_find_type(image, "MPI::Info", mqs_lang_cplus);
 274     
 275     handle_types->hi_cxx_offset = handle_types->hi_c_offset;
 276     handle_types->hi_cxx_op =
 277         mqs_find_type(image, "MPI::Op", mqs_lang_cplus);
 278     handle_types->hi_cxx_request =
 279         mqs_find_type(image, "MPI::Request", mqs_lang_cplus);
 280     handle_types->hi_cxx_prequest =
 281         mqs_find_type(image, "MPI::Prequest", mqs_lang_cplus);
 282     handle_types->hi_cxx_grequest =
 283         mqs_find_type(image, "MPI::Grequest", mqs_lang_cplus);
 284     handle_types->hi_cxx_status =
 285         mqs_find_type(image, "MPI::Status", mqs_lang_cplus);
 286     handle_types->hi_cxx_win =
 287         mqs_find_type(image, "MPI::Win", mqs_lang_cplus);
 288 
 289     
 290     mpidbg_comm_capabilities =
 291         MPIDBG_COMM_CAP_BASIC |
 292         MPIDBG_COMM_CAP_STRING_NAMES |
 293         MPIDBG_COMM_CAP_FREED_HANDLE |
 294         MPIDBG_COMM_CAP_FREED_OBJECT;
 295     mpidbg_errhandler_capabilities =
 296         MPIDBG_ERRH_CAP_BASIC |
 297         MPIDBG_ERRH_CAP_STRING_NAMES |
 298         MPIDBG_ERRH_CAP_FREED_HANDLE |
 299         MPIDBG_ERRH_CAP_FREED_OBJECT;
 300     mpidbg_request_capabilities =
 301         MPIDBG_REQUEST_CAP_BASIC;
 302     mpidbg_status_capabilities =
 303         MPIDBG_STATUS_CAP_BASIC;
 304 
 305     
 306     printf("mpidbg_init_per_image: init succeeded -- ready!\n");
 307     return MPIDBG_SUCCESS;
 308 }
 309 
 310 
 311 
 312 void mpidbg_finalize_per_image(mqs_image *image, mqs_image_info *info)
 313 {
 314     mpi_image_info *i_info = (mpi_image_info *)info;
 315 
 316     printf("mpidbg_finalize_per_image\n");
 317     if (NULL != i_info->extra) {
 318         mqs_free(i_info->extra);
 319     }
 320     mqs_free(info);
 321 }
 322 
 323 
 324 
 325 
 326 
 327 
 328 
 329 
 330 int mpidbg_init_per_process(mqs_process *process,
 331                             const mqs_process_callbacks *pcb,
 332                             struct mpidbg_handle_info_t *handle_types)
 333 {
 334     mqs_image *image;
 335     mpi_image_info *i_info;
 336 
 337     
 338 
 339     mpi_process_info *p_info =
 340         (mpi_process_info *) mqs_malloc(sizeof(mpi_process_info));
 341     printf("mpidbg_init_per_process\n");
 342 
 343     if (NULL == p_info) {
 344         return MPIDBG_ERR_NO_MEM;
 345     }
 346 
 347     
 348     p_info->process_callbacks = pcb;
 349 
 350     
 351     p_info->extra = NULL;
 352 
 353     
 354     image = mqs_get_image(process);
 355     i_info = (mpi_image_info *) mqs_get_image_info(image);
 356 
 357     
 358     mqs_get_type_sizes (process, &p_info->sizes);
 359 
 360     
 361     mqs_put_process_info(process, (mqs_process_info *) p_info);
 362 
 363     
 364 
 365 
 366     
 367     mpidbg_comm_name_map = alloc_map(image, 4);
 368     if (NULL != mpidbg_comm_name_map) {
 369         int i = 0;
 370         fill_map(image, "MPI_COMM_WORLD", "ompi_mpi_comm_world",
 371                  &mpidbg_comm_name_map[i++]);
 372         fill_map(image, "MPI_COMM_SELF", "ompi_mpi_comm_self",
 373                  &mpidbg_comm_name_map[i++]);
 374         fill_map(image, "MPI_COMM_NULL", "ompi_mpi_comm_null",
 375                  &mpidbg_comm_name_map[i++]);
 376 
 377         
 378         mpidbg_comm_name_map[i].map_name = NULL;
 379     }
 380 
 381     
 382     mpidbg_errhandler_name_map = alloc_map(image, 4);
 383     if (NULL != mpidbg_errhandler_name_map) {
 384         int i = 0;
 385         fill_map(image, "MPI_ERRORS_ARE_FATAL", "ompi_mpi_errors_are_fatal",
 386                  &mpidbg_errhandler_name_map[i++]);
 387         fill_map(image, "MPI_ERRORS_RETURN", "ompi_mpi_errors_return",
 388                  &mpidbg_errhandler_name_map[i++]);
 389         fill_map(image, "MPI_ERRHANDLER_NULL", "ompi_mpi_errhandler_null",
 390                  &mpidbg_errhandler_name_map[i++]);
 391         
 392 
 393 
 394         
 395         mpidbg_errhandler_name_map[i].map_name = NULL;
 396     }
 397 
 398     
 399     mpidbg_request_name_map = alloc_map(image, 2);
 400     if (NULL != mpidbg_request_name_map) {
 401         int i = 0;
 402         fill_map(image, "MPI_REQUEST_NULL", "ompi_request_null",
 403                  &mpidbg_request_name_map[i++]);
 404 
 405         
 406         mpidbg_request_name_map[i].map_name = NULL;
 407     }
 408 
 409     
 410     mpidbg_status_name_map = alloc_map(image, 2);
 411     if (NULL != mpidbg_status_name_map) {
 412         int i = 0;
 413         fill_map(image, "MPI_STATUS_IGNORE", NULL,
 414                  &mpidbg_status_name_map[i++]);
 415 
 416         
 417         mpidbg_status_name_map[i].map_name = NULL;
 418     }
 419 
 420     
 421     return MPIDBG_SUCCESS;
 422 }
 423 
 424 
 425 
 426 void mpidbg_finalize_per_process(mqs_process *process, mqs_process_info *info)
 427 {
 428     mpi_process_info *p_info = (mpi_process_info *)info;
 429 
 430     printf("mpidbg_finalize_per_process\n");
 431     if (NULL != p_info->extra) {
 432         mqs_free(p_info->extra);
 433     }
 434     mqs_free(info);
 435 }
 436 
 437 
 438 
 439 
 440 int mpidbg_comm_query(mqs_image *image, mqs_image_info *image_info,
 441                       mqs_process *process, mqs_process_info *process_info,
 442                       mqs_taddr_t c_comm, struct mpidbg_comm_info_t **info)
 443 {
 444     int flags;
 445     mpi_image_info *i_info = (mpi_image_info*) image_info;
 446     mpi_process_info *p_info = (mpi_process_info*) process_info;
 447     mqs_taddr_t group, topo, keyhash;
 448 
 449     
 450 
 451     *info = mqs_malloc(sizeof(struct mpidbg_comm_info_t));
 452     if (NULL == *info) {
 453         return MPIDBG_ERR_NO_MEM;
 454     }
 455     
 456 
 457     memset(*info, 0, sizeof(struct mpidbg_comm_info_t));
 458     (*info)->comm_c_handle = c_comm;
 459 
 460     printf("mpidbg_comm_query: %p\n", (void*) c_comm);
 461     mqs_fetch_data(process, c_comm + i_info->ompi_communicator_t.offset.c_name,
 462                    MPIDBG_MAX_OBJECT_NAME, (*info)->comm_name);
 463 
 464     
 465     (*info)->comm_rank = ompi_fetch_int(process,
 466                                         c_comm + i_info->ompi_communicator_t.offset.c_my_rank,
 467                                         p_info);
 468 
 469     
 470     flags = ompi_fetch_int(process,
 471                            c_comm + i_info->ompi_communicator_t.offset.c_flags,
 472                            p_info);
 473     (*info)->comm_bitflags = 0;
 474     if (MPI_PROC_NULL == (*info)->comm_rank) {
 475         
 476         (*info)->comm_rank = (*info)->comm_size = 0;
 477         (*info)->comm_bitflags |= MPIDBG_COMM_INFO_COMM_NULL;
 478     } else if (0 != (flags & OMPI_COMM_INTER)) {
 479         (*info)->comm_bitflags |= MPIDBG_COMM_INFO_INTERCOMM;
 480     } else {
 481         if (0 != (flags & OMPI_COMM_CART)) {
 482             (*info)->comm_bitflags |= MPIDBG_COMM_INFO_CARTESIAN;
 483         } else if (0 != (flags & OMPI_COMM_GRAPH)) {
 484             (*info)->comm_bitflags |= MPIDBG_COMM_INFO_GRAPH;
 485         } else if (0 != (flags & OMPI_COMM_DIST_GRAPH)) {
 486             (*info)->comm_bitflags |= MPIDBG_COMM_INFO_DIST_GRAPH;
 487         }
 488     }
 489     if (0 != (flags & OMPI_COMM_ISFREED)) {
 490         (*info)->comm_bitflags |= MPIDBG_COMM_INFO_FREED_HANDLE;
 491     }
 492     if (0 != (flags & OMPI_COMM_INTRINSIC)) {
 493         (*info)->comm_bitflags |= MPIDBG_COMM_INFO_PREDEFINED;
 494     }
 495     if (0 != (flags & OMPI_COMM_INVALID)) {
 496         (*info)->comm_bitflags |= MPIDBG_COMM_INFO_FREED_OBJECT;
 497     }
 498 
 499     
 500     group = ompi_fetch_pointer(process,
 501                                c_comm + i_info->ompi_communicator_t.offset.c_local_group,
 502                                p_info);
 503     (*info)->comm_rank = ompi_fetch_int(process,
 504                                         group + i_info->ompi_group_t.offset.grp_my_rank,
 505                                         p_info);
 506     (*info)->comm_num_local_procs = ompi_fetch_int(process,
 507                                                    group + i_info->ompi_group_t.offset.grp_proc_count,
 508                                                    p_info);
 509 
 510     
 511 
 512     (*info)->comm_size = (*info)->comm_num_local_procs;
 513 
 514     
 515 
 516     (*info)->comm_local_procs = NULL;
 517 
 518     
 519     if (0 != (flags & OMPI_COMM_INTER)) {
 520         group = ompi_fetch_pointer(process,
 521                                    c_comm + i_info->ompi_communicator_t.offset.c_remote_group,
 522                                    p_info);
 523         (*info)->comm_num_remote_procs = ompi_fetch_int(process,
 524                                                         group + i_info->ompi_group_t.offset.grp_proc_count,
 525                                                         p_info);
 526         (*info)->comm_size = (*info)->comm_num_remote_procs;
 527 
 528         
 529 
 530         (*info)->comm_remote_procs = NULL;
 531     } else {
 532         (*info)->comm_num_remote_procs = 0;
 533         (*info)->comm_remote_procs = NULL;
 534     }
 535 
 536     
 537 
 538 
 539 
 540     topo = ompi_fetch_pointer(process,
 541                               c_comm + i_info->ompi_communicator_t.offset.c_topo,
 542                               p_info);
 543     if (0 != topo &&
 544         0 != ((*info)->comm_bitflags & MPIDBG_COMM_INFO_CARTESIAN)) {
 545         int i, ndims, tmp;
 546         mqs_taddr_t dims, periods;
 547 
 548         
 549         (*info)->comm_cart_num_dims = ndims =
 550             ompi_fetch_int(process,
 551                            topo + i_info->mca_topo_base_module_t.offset.mtc.cart.ndims,
 552                            p_info);
 553         (*info)->comm_cart_dims = mqs_malloc(ndims * sizeof(int));
 554         if (NULL == (*info)->comm_cart_dims) {
 555             return MPIDBG_ERR_NO_MEM;
 556         }
 557         (*info)->comm_cart_periods = mqs_malloc(ndims * sizeof(int8_t));
 558         if (NULL == (*info)->comm_cart_periods) {
 559             mqs_free((*info)->comm_cart_dims); (*info)->comm_cart_dims = NULL;
 560             return MPIDBG_ERR_NO_MEM;
 561         }
 562         (*info)->comm_cart_coords = mqs_malloc(ndims * sizeof(int8_t));
 563         if (NULL == (*info)->comm_cart_coords) {
 564             mqs_free((*info)->comm_cart_periods); (*info)->comm_cart_periods = NULL;
 565             mqs_free((*info)->comm_cart_dims);    (*info)->comm_cart_dims = NULL;
 566             return MPIDBG_ERR_NO_MEM;
 567         }
 568 
 569         
 570 
 571         dims = ompi_fetch_pointer(process,
 572                                  topo + i_info->mca_topo_base_module_t.offset.mtc.cart.dims,
 573                                  p_info);
 574         periods = ompi_fetch_pointer(process,
 575                                  topo + i_info->mca_topo_base_module_t.offset.mtc.cart.periods,
 576                                  p_info);
 577         coords = ompi_fetch_pointer(process,
 578                                  topo + i_info->mca_topo_base_module_t.offset.mtc.cart.coords,
 579                                  p_info);
 580 
 581         for (i = 0; i < ndims; ++i) {
 582             (*info)->comm_cart_dims[i] =
 583                 ompi_fetch_int(process, dims + (sizeof(int) * i), p_info);
 584             tmp = ompi_fetch_int(process, periods + (sizeof(int) * i), p_info);
 585             (*info)->comm_cart_periods[i] = (int8_t) tmp;
 586             printf("mpidbg: cart comm: dimension %d: (length %d, periodic: %d)\n", i, (*info)->comm_cart_dims[i], tmp);
 587         }
 588     } else if (0 != topo &&
 589                0 != ((*info)->comm_bitflags & MPIDBG_COMM_INFO_GRAPH)) {
 590         int i, nnodes;
 591         mqs_taddr_t index, edges;
 592 
 593         
 594         (*info)->comm_graph_num_nodes = nnodes =
 595             ompi_fetch_int(process,
 596                            topo + i_info->mca_topo_base_module_t.offset.mtc.graph.nnodes,
 597                            p_info);
 598         (*info)->comm_graph_index = mqs_malloc(nnodes * sizeof(int));
 599         if (NULL == (*info)->comm_graph_index) {
 600             return MPIDBG_ERR_NO_MEM;
 601         }
 602 
 603         
 604         index = ompi_fetch_pointer(process,
 605                                  topo + i_info->mca_topo_base_module_t.offset.mtc.graph.index,
 606                                  p_info);
 607         for (i = 0; i < nnodes; ++i) {
 608             (*info)->comm_graph_index[i] =
 609                 ompi_fetch_int(process, index + (sizeof(int) * i), p_info);
 610         }
 611 
 612         
 613         (*info)->comm_graph_edges = mqs_malloc((*info)->comm_graph_index[(*info)->comm_graph_num_nodes - 1] * sizeof(int));
 614         if (NULL == (*info)->comm_graph_edges) {
 615             mqs_free((*info)->comm_graph_index);
 616             (*info)->comm_graph_index = NULL;
 617             return MPIDBG_ERR_NO_MEM;
 618         }
 619 
 620         
 621         edges = ompi_fetch_pointer(process,
 622                                  topo + i_info->mca_topo_base_module_t.offset.mtc.graph.edges,
 623                                  p_info);
 624         for (i = 0;
 625              i < (*info)->comm_graph_index[(*info)->comm_graph_num_nodes - 1];
 626              ++i) {
 627             (*info)->comm_graph_edges[i] =
 628                 ompi_fetch_int(process, edges + (sizeof(int) * i), p_info);
 629         }
 630     } else if (0 != topo &&
 631                0 != ((*info)->comm_bitflags & MPIDBG_COMM_INFO_DIST_GRAPH)) {
 632         
 633     }
 634 
 635     
 636     (*info)->comm_fortran_handle =
 637         ompi_fetch_int(process,
 638                        c_comm + i_info->ompi_communicator_t.offset.c_f_to_c_index,
 639                        p_info);
 640     printf("mpdbg: comm fortran handle: %d\n", (*info)->comm_fortran_handle);
 641 
 642     
 643     keyhash = ompi_fetch_pointer(process,
 644                                  c_comm + i_info->ompi_communicator_t.offset.c_keyhash,
 645                                  p_info);
 646     fill_attributes(&((*info)->comm_num_attrs), &((*info)->comm_attrs),
 647                     keyhash);
 648 
 649     
 650     (*info)->comm_num_pending_requests = MPIDBG_ERR_NOT_SUPPORTED;
 651     (*info)->comm_pending_requests = NULL;
 652     (*info)->comm_num_derived_windows = MPIDBG_ERR_NOT_SUPPORTED;
 653     (*info)->comm_derived_windows = NULL;
 654     (*info)->comm_num_derived_files = MPIDBG_ERR_NOT_SUPPORTED;
 655     (*info)->comm_derived_files = NULL;
 656 
 657     return MPIDBG_SUCCESS;
 658 }
 659 
 660 int mpidbg_comm_f2c(mqs_image *image, mqs_image_info *image_info,
 661                     mqs_process *process, mqs_process_info *process_info,
 662                     mqs_taddr_t f77_comm, mqs_taddr_t *c_comm)
 663 {
 664     mqs_taddr_t comm_list;
 665     mpi_image_info *i_info = (mpi_image_info *) image_info;
 666     mpi_process_info *p_info = (mpi_process_info*) process_info;
 667 
 668     mqs_find_symbol(image, "ompi_mpi_communicators", &comm_list);
 669     if (mqs_ok != ompi_fetch_opal_pointer_array_item(process, comm_list,
 670                                                      p_info, f77_comm,
 671                                                      c_comm) ||
 672         NULL == c_comm) {
 673         printf("mpidbg_comm_f2c: %lu -> not found\n",
 674                (long unsigned int) f77_comm);
 675         return MPIDBG_ERR_NOT_FOUND;
 676     }
 677     printf("mpidbg_comm_f2c: %lu -> %lu\n",
 678            (long unsigned int) f77_comm, (long unsigned int) c_comm);
 679     return MPIDBG_SUCCESS;
 680 }
 681 
 682 int mpidbg_comm_cxx2c(mqs_image *image, mqs_image_info *image_info,
 683                       mqs_process *process, mqs_process_info *process_info,
 684                       mqs_taddr_t cxx_comm,
 685                       enum mpidbg_comm_info_bitmap_t comm_type,
 686                       mqs_taddr_t *c_comm)
 687 {
 688     
 689 
 690 
 691     printf("mpidbg_comm_cxx2c: %p\n", (void*) cxx_comm);
 692     return MPIDBG_ERR_NOT_FOUND;
 693 }
 694 
 695 
 696 
 697 int mpidbg_errhandler_query(mqs_image *image, mqs_image_info *image_info,
 698                             mqs_process *process, mqs_process_info *process_info,
 699                             mqs_taddr_t c_errhandler,
 700                             struct mpidbg_errhandler_info_t **info)
 701 {
 702     printf("mpidbg_errhandler_query: %p\n", (void*) c_errhandler);
 703     printf("mpidbg_errhandler_query: not [yet] found\n");
 704     return MPIDBG_ERR_NOT_FOUND;
 705 }
 706 
 707 int mpidbg_errhandler_f2c(mqs_image *image, mqs_image_info *image_info,
 708                           mqs_process *process, mqs_process_info *process_info,
 709                           mqs_taddr_t f77_errhandler, mqs_taddr_t *c_errhandler)
 710 {
 711     printf("mpidbg_errhandler_f2c: %lu\n", (long unsigned int) f77_errhandler);
 712     printf("mpidbg_errhandler_f2c: not [yet] found\n");
 713     return MPIDBG_ERR_NOT_FOUND;
 714 }
 715 
 716 int mpidbg_errhandler_cxx2c(mqs_image *image, mqs_image_info *image_info,
 717                             mqs_process *process, mqs_process_info *process_info,
 718                             mqs_taddr_t cxx_errhandler,
 719                             mqs_taddr_t *c_errhandler)
 720 {
 721     printf("mpidbg_errhandler_cxx2c: %p\n", (void*) cxx_errhandler);
 722     printf("mpidbg_errhandler_cxx2c: not [yet] found\n");
 723     return MPIDBG_ERR_NOT_FOUND;
 724 }
 725 
 726 
 727 
 728 int mpidbg_request_query(mqs_image *image, mqs_image_info *image_info,
 729                          mqs_process *process, mqs_process_info *process_info,
 730                          mqs_taddr_t c_request,
 731                          struct mpidbg_request_info_t **info)
 732 {
 733     printf("mpidbg_request_query: %p\n", (void*) c_request);
 734     printf("mpidbg_request_query: not [yet] found\n");
 735     return MPIDBG_ERR_NOT_FOUND;
 736 }
 737 
 738 int mpidbg_request_f2c(mqs_image *image, mqs_image_info *image_info,
 739                        mqs_process *process, mqs_process_info *process_info,
 740                        mqs_taddr_t f77_request, mqs_taddr_t *c_request)
 741 {
 742     printf("mpidbg_request_f2c: %lu\n", (long unsigned int) f77_request);
 743     printf("mpidbg_request_f2c: not [yet] found\n");
 744     return MPIDBG_ERR_NOT_FOUND;
 745 }
 746 
 747 int mpidbg_request_cxx2c(mqs_image *image, mqs_image_info *image_info,
 748                          mqs_process *process, mqs_process_info *process_info,
 749                          mqs_taddr_t cxx_request,
 750                          enum mpidbg_request_info_bitmap_t request_type,
 751                          mqs_taddr_t *c_request)
 752 {
 753     printf("mpidbg_request_cxx2c: %p\n", (void*) cxx_request);
 754     printf("mpidbg_request_cxx2c: not [yet] found\n");
 755     return MPIDBG_ERR_NOT_FOUND;
 756 }
 757 
 758 
 759 
 760 int mpidbg_status_query(mqs_image *image, mqs_image_info *image_info,
 761                         mqs_process *process, mqs_process_info *process_info,
 762                         mqs_taddr_t c_status,
 763                         struct mpidbg_status_info_t **info)
 764 {
 765     printf("mpidbg_status_query: %p\n", (void*) c_status);
 766     printf("mpidbg_status_query: not [yet] found\n");
 767     return MPIDBG_ERR_NOT_FOUND;
 768 }
 769 
 770 int mpidbg_status_f2c(mqs_image *image, mqs_image_info *image_info,
 771                       mqs_process *process, mqs_process_info *process_info,
 772                       mqs_taddr_t f77_status, mqs_taddr_t *c_status)
 773 {
 774     printf("mpidbg_status_f2c: %lu\n", (long unsigned int) f77_status);
 775     printf("mpidbg_status_f2c: not [yet] found\n");
 776     return MPIDBG_ERR_NOT_FOUND;
 777 }
 778 
 779 int mpidbg_status_cxx2c(mqs_image *image, mqs_image_info *image_info,
 780                         mqs_process *process, mqs_process_info *process_info,
 781                         mqs_taddr_t cxx_status,
 782                         mqs_taddr_t *c_status)
 783 {
 784     printf("mpidbg_status_cxx2c: %p\n", (void*) cxx_status);
 785     printf("mpidbg_status_cxx2c: not [yet] found\n");
 786     return MPIDBG_ERR_NOT_FOUND;
 787 }