|
Packit Service |
c5cf8c |
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
|
Packit Service |
c5cf8c |
/*
|
|
Packit Service |
c5cf8c |
* (C) 2005 by Argonne National Laboratory.
|
|
Packit Service |
c5cf8c |
* See COPYRIGHT in top-level directory.
|
|
Packit Service |
c5cf8c |
*/
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/*
|
|
Packit Service |
c5cf8c |
* This file provides a simple test of the Totalview debugger interface
|
|
Packit Service |
c5cf8c |
* It also illustrates some (but not all) of the operations that the
|
|
Packit Service |
c5cf8c |
* debugger performs using the routines defined in mpi_interface.h .
|
|
Packit Service |
c5cf8c |
*/
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* You can build this with -DNOT_STANDALONE and then run it with a debugger;
|
|
Packit Service |
c5cf8c |
by default, it builds routines to simulate some actions that a
|
|
Packit Service |
c5cf8c |
debugger might take when running it with the message queue interface */
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
#include <stdio.h>
|
|
Packit Service |
c5cf8c |
#include "mpi.h"
|
|
Packit Service |
c5cf8c |
#include <stdlib.h>
|
|
Packit Service |
c5cf8c |
#include <string.h>
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
#include "mpi_interface.h"
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* style: allow:fprintf:8 sig:0 */
|
|
Packit Service |
c5cf8c |
/* style: allow:printf:15 sig:0 */
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
int showQueues(int, int);
|
|
Packit Service |
c5cf8c |
int init_dbr(void);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
int main(int argc, char *argv[])
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
MPI_Request rreq, sreq, rreq2;
|
|
Packit Service |
c5cf8c |
int wrank, wsize;
|
|
Packit Service |
c5cf8c |
int buf = -1, sbuf = 2, rbuf = -1;;
|
|
Packit Service |
c5cf8c |
int vbuf[10];
|
|
Packit Service |
c5cf8c |
MPI_Comm dupworld;
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
MPI_Init(&argc, &argv);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Perform the initialization steps for accessing the message queues */
|
|
Packit Service |
c5cf8c |
init_dbr();
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Create some pending receives and unexpected messages */
|
|
Packit Service |
c5cf8c |
MPI_Comm_dup(MPI_COMM_WORLD, &dupworld);
|
|
Packit Service |
c5cf8c |
MPI_Comm_set_name(dupworld, "Dup of comm world");
|
|
Packit Service |
c5cf8c |
MPI_Comm_rank(MPI_COMM_WORLD, &wrank);
|
|
Packit Service |
c5cf8c |
MPI_Comm_size(MPI_COMM_WORLD, &wsize);
|
|
Packit Service |
c5cf8c |
MPI_Irecv(&buf, 1, MPI_INT, (wrank + 1) % wsize, 17, dupworld, &rreq);
|
|
Packit Service |
c5cf8c |
MPI_Irecv(vbuf, 10, MPI_INT, (wrank + 1) % wsize, 19, dupworld, &rreq2);
|
|
Packit Service |
c5cf8c |
MPI_Isend(&sbuf, 1, MPI_INT, (wrank + wsize - 1) % wsize, 18, MPI_COMM_WORLD, &sreq);
|
|
Packit Service |
c5cf8c |
/* This relies on buffering short eager messages */
|
|
Packit Service |
c5cf8c |
/* MPI_Send(&ssbuf, 1, MPI_INT, (wrank + 2) %wsize, 18, dupworld); */
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Access the queues */
|
|
Packit Service |
c5cf8c |
printf("Should see pending recv with tag 17, 19 on dupworld and send with tag 18 on world\n");
|
|
Packit Service |
c5cf8c |
showQueues(3, 3);
|
|
Packit Service |
c5cf8c |
MPI_Barrier(MPI_COMM_WORLD);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Match up some of the messages */
|
|
Packit Service |
c5cf8c |
MPI_Send(&sbuf, 1, MPI_INT, (wrank + wsize - 1) % wsize, 17, dupworld);
|
|
Packit Service |
c5cf8c |
MPI_Recv(&rbuf, 1, MPI_INT, (wrank + 1) % wsize, 18, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
|
|
Packit Service |
c5cf8c |
MPI_Wait(&rreq, MPI_STATUS_IGNORE);
|
|
Packit Service |
c5cf8c |
MPI_Wait(&sreq, MPI_STATUS_IGNORE);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Access the queues again */
|
|
Packit Service |
c5cf8c |
printf("\nAfter a few send/receives\n");
|
|
Packit Service |
c5cf8c |
printf("Should see recv with tag 19 on dupworld\n");
|
|
Packit Service |
c5cf8c |
showQueues(3, 1);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
MPI_Barrier(MPI_COMM_WORLD);
|
|
Packit Service |
c5cf8c |
MPI_Send(&sbuf, 1, MPI_INT, (wrank + wsize - 1) % wsize, 19, dupworld);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Access the queues again */
|
|
Packit Service |
c5cf8c |
printf("\nAfter a few send/receives (all now matched)\n");
|
|
Packit Service |
c5cf8c |
showQueues(3, 0);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Shut down */
|
|
Packit Service |
c5cf8c |
MPI_Cancel(&rreq2);
|
|
Packit Service |
c5cf8c |
MPI_Wait(&rreq2, MPI_STATUS_IGNORE);
|
|
Packit Service |
c5cf8c |
MPI_Comm_free(&dupworld);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
MPI_Finalize();
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
return 0;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
#if !defined(NOT_STANDALONE)
|
|
Packit Service |
c5cf8c |
/* ------------------------------------------------------------------------- */
|
|
Packit Service |
c5cf8c |
/* Forward references for the functions that simulate debugger operations */
|
|
Packit Service |
c5cf8c |
static void dbgrI_put_image_info(mqs_image * image, mqs_image_info * info);
|
|
Packit Service |
c5cf8c |
static mqs_image_info *dbgrI_get_image_info(mqs_image * image);
|
|
Packit Service |
c5cf8c |
static int dbgrI_find_function(mqs_image * image, char *name,
|
|
Packit Service |
c5cf8c |
mqs_lang_code lang, mqs_taddr_t * loc);
|
|
Packit Service |
c5cf8c |
int dbgrI_find_symbol(mqs_image * image, char *name, mqs_taddr_t * loc);
|
|
Packit Service |
c5cf8c |
static void dbgrI_put_process_info(mqs_process * process, mqs_process_info * info);
|
|
Packit Service |
c5cf8c |
static mqs_process_info *dbgrI_get_process_info(mqs_process * process);
|
|
Packit Service |
c5cf8c |
static void dbgrI_get_type_sizes(mqs_process * process, mqs_target_type_sizes * ts);
|
|
Packit Service |
c5cf8c |
static int dbgrI_fetch_data(mqs_process * proc, mqs_taddr_t addr, int asize, void *data);
|
|
Packit Service |
c5cf8c |
static void dbgrI_target_to_host(mqs_process * proc, const void *in_data,
|
|
Packit Service |
c5cf8c |
void *out_data, int asize);
|
|
Packit Service |
c5cf8c |
static mqs_image *dbgrI_get_image(mqs_process * process);
|
|
Packit Service |
c5cf8c |
mqs_type *dbgrI_find_type(mqs_image * image, char *name, mqs_lang_code lang);
|
|
Packit Service |
c5cf8c |
int dbgrI_field_offset(mqs_type * type, char *name);
|
|
Packit Service |
c5cf8c |
static int dbgrI_get_global_rank(mqs_process * process);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* The global variables describing this process for the debugger */
|
|
Packit Service |
c5cf8c |
static mqs_basic_callbacks cb;
|
|
Packit Service |
c5cf8c |
static mqs_image_callbacks icb;
|
|
Packit Service |
c5cf8c |
static mqs_process_callbacks pcb;
|
|
Packit Service |
c5cf8c |
static mqs_image image;
|
|
Packit Service |
c5cf8c |
static mqs_process process;
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
struct mqs_process_ {
|
|
Packit Service |
c5cf8c |
mqs_process_info *p_info;
|
|
Packit Service |
c5cf8c |
};
|
|
Packit Service |
c5cf8c |
struct mqs_image_ {
|
|
Packit Service |
c5cf8c |
mqs_image_info *i_info;
|
|
Packit Service |
c5cf8c |
};
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
int init_dbr(void)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
int hasQ = 0;
|
|
Packit Service |
c5cf8c |
const char *version = mqs_version_string();
|
|
Packit Service |
c5cf8c |
const char *msg;
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
if (mqs_version_compatibility() != MQS_INTERFACE_COMPATIBILITY) {
|
|
Packit Service |
c5cf8c |
fprintf(stderr, "Unexpected value of version\n");
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
fprintf(stderr, "Version string: %s\n", version);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
if (mqs_dll_taddr_width() != sizeof(void *)) {
|
|
Packit Service |
c5cf8c |
fprintf(stderr, "Unexpected table width returned\n");
|
|
Packit Service |
c5cf8c |
return 1;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Do the initialization. */
|
|
Packit Service |
c5cf8c |
memset(&cb, 0, sizeof(cb));
|
|
Packit Service |
c5cf8c |
cb.mqs_malloc_fp = malloc;
|
|
Packit Service |
c5cf8c |
cb.mqs_free_fp = free;
|
|
Packit Service |
c5cf8c |
cb.mqs_dprints_fp = 0;
|
|
Packit Service |
c5cf8c |
cb.mqs_put_image_info_fp = dbgrI_put_image_info;
|
|
Packit Service |
c5cf8c |
cb.mqs_get_image_info_fp = dbgrI_get_image_info;
|
|
Packit Service |
c5cf8c |
cb.mqs_put_process_info_fp = dbgrI_put_process_info;
|
|
Packit Service |
c5cf8c |
cb.mqs_get_process_info_fp = dbgrI_get_process_info;
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
mqs_setup_basic_callbacks(&cb;;
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
icb.mqs_get_type_sizes_fp = dbgrI_get_type_sizes;
|
|
Packit Service |
c5cf8c |
icb.mqs_find_function_fp = dbgrI_find_function;
|
|
Packit Service |
c5cf8c |
icb.mqs_find_symbol_fp = dbgrI_find_symbol;
|
|
Packit Service |
c5cf8c |
icb.mqs_find_type_fp = dbgrI_find_type;
|
|
Packit Service |
c5cf8c |
icb.mqs_field_offset_fp = dbgrI_field_offset;
|
|
Packit Service |
c5cf8c |
icb.mqs_sizeof_fp = 0;
|
|
Packit Service |
c5cf8c |
mqs_setup_image(&image, &icb;;
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
hasQ = mqs_image_has_queues(&image, &msg;;
|
|
Packit Service |
c5cf8c |
if (hasQ == mqs_ok) {
|
|
Packit Service |
c5cf8c |
pcb.mqs_get_global_rank_fp = dbgrI_get_global_rank;
|
|
Packit Service |
c5cf8c |
pcb.mqs_get_image_fp = dbgrI_get_image;
|
|
Packit Service |
c5cf8c |
pcb.mqs_fetch_data_fp = dbgrI_fetch_data;
|
|
Packit Service |
c5cf8c |
pcb.mqs_target_to_host_fp = dbgrI_target_to_host;
|
|
Packit Service |
c5cf8c |
mqs_setup_process(&process, &pcb;;
|
|
Packit Service |
c5cf8c |
hasQ = mqs_process_has_queues(&process, &msg;;
|
|
Packit Service |
c5cf8c |
if (hasQ != mqs_ok) {
|
|
Packit Service |
c5cf8c |
fprintf(stderr, "Failed to get queues from process: %s\n", msg);
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
} else {
|
|
Packit Service |
c5cf8c |
fprintf(stderr, "Failed to get queues from image: %s\n", msg);
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
if (hasQ != mqs_ok)
|
|
Packit Service |
c5cf8c |
return 1;
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
return 0;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
int showQueues(int nComm, int expected)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
mqs_communicator comm;
|
|
Packit Service |
c5cf8c |
mqs_pending_operation op;
|
|
Packit Service |
c5cf8c |
int rc;
|
|
Packit Service |
c5cf8c |
int nFound = 0, nCommFound = 0;
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Get a stable copy of the active communicators */
|
|
Packit Service |
c5cf8c |
mqs_update_communicator_list(&process);
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
mqs_setup_communicator_iterator(&process);
|
|
Packit Service |
c5cf8c |
while (mqs_get_communicator(&process, &comm) == mqs_ok) {
|
|
Packit Service |
c5cf8c |
printf("Communicator %s\n", comm.name);
|
|
Packit Service |
c5cf8c |
nCommFound++;
|
|
Packit Service |
c5cf8c |
rc = mqs_setup_operation_iterator(&process, mqs_pending_receives);
|
|
Packit Service |
c5cf8c |
if (rc == mqs_ok) {
|
|
Packit Service |
c5cf8c |
printf("Pending receives for communicator %s\n", comm.name);
|
|
Packit Service |
c5cf8c |
while ((rc = mqs_next_operation(&process, &op)) == mqs_ok) {
|
|
Packit Service |
c5cf8c |
printf("tag = %d, rank = %d, length = %d\n",
|
|
Packit Service |
c5cf8c |
(int) op.desired_tag, (int) op.desired_local_rank, (int) op.desired_length);
|
|
Packit Service |
c5cf8c |
nFound++;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
} else if (rc == mqs_end_of_list) {
|
|
Packit Service |
c5cf8c |
/* No operations */
|
|
Packit Service |
c5cf8c |
printf("No pending receives for communicator %s\n", comm.name);
|
|
Packit Service |
c5cf8c |
} else if (rc == mqs_no_information) {
|
|
Packit Service |
c5cf8c |
printf("No information available for communicator %s\n", comm.name);
|
|
Packit Service |
c5cf8c |
} else {
|
|
Packit Service |
c5cf8c |
fprintf(stderr, "Unknown return %d from mqs_setup_operation_iterator\n", rc);
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
rc = mqs_setup_operation_iterator(&process, mqs_unexpected_messages);
|
|
Packit Service |
c5cf8c |
if (rc == mqs_ok) {
|
|
Packit Service |
c5cf8c |
printf("Unexpected messages for communicator %s\n", comm.name);
|
|
Packit Service |
c5cf8c |
while ((rc = mqs_next_operation(&process, &op)) == mqs_ok) {
|
|
Packit Service |
c5cf8c |
printf("tag = %d, rank = %d, length = %d\n",
|
|
Packit Service |
c5cf8c |
(int) op.desired_tag, (int) op.desired_local_rank, (int) op.desired_length);
|
|
Packit Service |
c5cf8c |
nFound++;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
} else if (rc == mqs_end_of_list) {
|
|
Packit Service |
c5cf8c |
/* No operations */
|
|
Packit Service |
c5cf8c |
printf("No unexpected receives for communicator %s\n", comm.name);
|
|
Packit Service |
c5cf8c |
} else if (rc == mqs_no_information) {
|
|
Packit Service |
c5cf8c |
printf("No unexpected receive information available for communicator %s\n", comm.name);
|
|
Packit Service |
c5cf8c |
} else {
|
|
Packit Service |
c5cf8c |
fprintf(stderr, "Unknown return %d from mqs_setup_operation_iterator\n", rc);
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
rc = mqs_setup_operation_iterator(&process, mqs_pending_sends);
|
|
Packit Service |
c5cf8c |
if (rc == mqs_ok) {
|
|
Packit Service |
c5cf8c |
printf("Pending sends for communicator %s\n", comm.name);
|
|
Packit Service |
c5cf8c |
while ((rc = mqs_next_operation(&process, &op)) == mqs_ok) {
|
|
Packit Service |
c5cf8c |
printf("tag = %d, rank = %d, length = %d\n",
|
|
Packit Service |
c5cf8c |
(int) op.desired_tag, (int) op.desired_local_rank, (int) op.desired_length);
|
|
Packit Service |
c5cf8c |
nFound++;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
} else if (rc == mqs_end_of_list) {
|
|
Packit Service |
c5cf8c |
/* No operations */
|
|
Packit Service |
c5cf8c |
printf("No pending sends for communicator %s\n", comm.name);
|
|
Packit Service |
c5cf8c |
} else if (rc == mqs_no_information) {
|
|
Packit Service |
c5cf8c |
printf("No pending send information available for communicator %s\n", comm.name);
|
|
Packit Service |
c5cf8c |
} else {
|
|
Packit Service |
c5cf8c |
fprintf(stderr, "Unknown return %d from mqs_setup_operation_iterator\n", rc);
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
mqs_next_communicator(&process);
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
if (nFound < expected) {
|
|
Packit Service |
c5cf8c |
fprintf(stderr, "Error: expected to find %d queue entries but only saw %d\n", expected,
|
|
Packit Service |
c5cf8c |
nFound);
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
if (nCommFound < nComm) {
|
|
Packit Service |
c5cf8c |
fprintf(stderr, "Error: expected to find %d comms but only saw %d\n", nComm, nCommFound);
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
fflush(stdout);
|
|
Packit Service |
c5cf8c |
fflush(stderr);
|
|
Packit Service |
c5cf8c |
return 0;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* ----------------------------------------------------------------------- */
|
|
Packit Service |
c5cf8c |
/* Example service routines */
|
|
Packit Service |
c5cf8c |
/* FIXME: Move these into dbgstub.c */
|
|
Packit Service |
c5cf8c |
/* ----------------------------------------------------------------------- */
|
|
Packit Service |
c5cf8c |
static void dbgrI_put_image_info(mqs_image * image, mqs_image_info * info)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
image->i_info = info;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
static mqs_image_info *dbgrI_get_image_info(mqs_image * image)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
return image->i_info;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
static void dbgrI_put_process_info(mqs_process * process, mqs_process_info * info)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
process->p_info = info;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
static mqs_process_info *dbgrI_get_process_info(mqs_process * process)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
return process->p_info;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
static void dbgrI_get_type_sizes(mqs_process * process, mqs_target_type_sizes * ts)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
ts->short_size = sizeof(short);
|
|
Packit Service |
c5cf8c |
ts->int_size = sizeof(int);
|
|
Packit Service |
c5cf8c |
ts->long_size = sizeof(long);
|
|
Packit Service |
c5cf8c |
ts->long_long_size = sizeof(long long);
|
|
Packit Service |
c5cf8c |
ts->pointer_size = sizeof(void *);
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* This is a hack that knows exactly the names used in dll_mpich.c */
|
|
Packit Service |
c5cf8c |
/* Note that if loc is null, don't save the address */
|
|
Packit Service |
c5cf8c |
static int dbgrI_find_function(mqs_image * image, char *name, mqs_lang_code lang, mqs_taddr_t * loc)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
if (strcmp(name, "MPIR_Breakpoint") == 0) {
|
|
Packit Service |
c5cf8c |
#if 0
|
|
Packit Service |
c5cf8c |
if (loc)
|
|
Packit Service |
c5cf8c |
*loc = (mqs_taddr_t) MPIR_Breakpoint;
|
|
Packit Service |
c5cf8c |
#endif
|
|
Packit Service |
c5cf8c |
} else {
|
|
Packit Service |
c5cf8c |
if (loc)
|
|
Packit Service |
c5cf8c |
*loc = 0;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
return mqs_ok;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
#define MPIR_Memcpy memcpy
|
|
Packit Service |
c5cf8c |
/* Simulate requesting the debugger to fetch data from within this process */
|
|
Packit Service |
c5cf8c |
static int dbgrI_fetch_data(mqs_process * proc, mqs_taddr_t addr, int asize, void *data)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
MPIR_Memcpy(data, (void *) addr, (size_t) asize);
|
|
Packit Service |
c5cf8c |
return mqs_ok;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Simulate converting data to debuggers byte ordering */
|
|
Packit Service |
c5cf8c |
static void dbgrI_target_to_host(mqs_process * proc, const void *in_data, void *out_data, int asize)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
MPIR_Memcpy(out_data, in_data, asize);
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
/* Return the "debuggers" image structure (statically allocated above) */
|
|
Packit Service |
c5cf8c |
static mqs_image *dbgrI_get_image(mqs_process * process)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
return ℑ
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
static int dbgrI_get_global_rank(mqs_process * process)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
static int wrank = -1;
|
|
Packit Service |
c5cf8c |
if (wrank < 0) {
|
|
Packit Service |
c5cf8c |
MPI_Comm_rank(MPI_COMM_WORLD, &wrank);
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
return wrank;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
#else
|
|
Packit Service |
c5cf8c |
int init_dbr(void)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
return 0;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
|
|
Packit Service |
c5cf8c |
int showQueues(void)
|
|
Packit Service |
c5cf8c |
{
|
|
Packit Service |
c5cf8c |
return 0;
|
|
Packit Service |
c5cf8c |
}
|
|
Packit Service |
c5cf8c |
#endif
|