Getting closer to a full Total View support.
This commit was SVN r11974.
Этот коммит содержится в:
родитель
e9572c7aee
Коммит
4d18d208d4
@ -19,6 +19,7 @@
|
||||
include $(top_srcdir)/config/Makefile.options
|
||||
|
||||
noinst_LTLIBRARIES = libdebuggers.la
|
||||
inst_LTLIBRARIES = libompitv.la
|
||||
|
||||
# This is not quite in the Automake spirit, but we have to do it.
|
||||
# Since the totalview portion of the library must be built with -g, we
|
||||
@ -34,9 +35,16 @@ CFLAGS = $(CFLAGS_WITHOUT_OPTFLAGS) $(TOTALVIEW_DEBUG_FLAGS)
|
||||
headers = \
|
||||
debuggers.h
|
||||
|
||||
instdir = $(libdir)/openmpi
|
||||
|
||||
libdebuggers_la_SOURCES = \
|
||||
$(headers) \
|
||||
ompi_totalview.c
|
||||
libdebuggers_la_CFLAGS = -DOMPI_TV_DLL=\"$(instdir)/libompitv.so\"
|
||||
|
||||
libompitv_la_SOURCES = ompi_dll.c
|
||||
libompitv_la_CFLAGS = -g
|
||||
libompitv_la_LDFLAGS = -module -avoid-version
|
||||
|
||||
# Conditionally install the header files
|
||||
|
||||
|
@ -519,6 +519,43 @@ int mqs_image_has_queues (mqs_image *image, char **message)
|
||||
i_info->mca_pml_base_recv_request_t.size = mqs_sizeof(qh_type);
|
||||
i_info->mca_pml_base_recv_request_t.offset.req_bytes_packed = mqs_field_offset(qh_type, "req_bytes_packed");
|
||||
}
|
||||
/**
|
||||
* Gather information about the receive fragments and theirs headers.
|
||||
*/
|
||||
{
|
||||
mqs_type* qh_type = mqs_find_type( image, "mca_pml_ob1_common_hdr_t", mqs_lang_c );
|
||||
if( !qh_type ) {
|
||||
missing_in_action = "mca_pml_ob1_common_hdr_t";
|
||||
goto type_missing;
|
||||
}
|
||||
i_info->mca_pml_ob1_common_hdr_t.size = mqs_sizeof(qh_type);
|
||||
i_info->mca_pml_ob1_common_hdr_t.offset.hdr_type = mqs_field_offset(qh_type, "hdr_type");
|
||||
i_info->mca_pml_ob1_common_hdr_t.offset.hdr_flags = mqs_field_offset(qh_type, "hdr_flags");
|
||||
}
|
||||
{
|
||||
mqs_type* qh_type = mqs_find_type( image, "mca_pml_ob1_match_hdr_t", mqs_lang_c );
|
||||
if( !qh_type ) {
|
||||
missing_in_action = "mca_pml_ob1_match_hdr_t";
|
||||
goto type_missing;
|
||||
}
|
||||
i_info->mca_pml_ob1_match_hdr_t.size = mqs_sizeof(qh_type);
|
||||
i_info->mca_pml_ob1_match_hdr_t.offset.hdr_common = mqs_field_offset(qh_type, "hdr_common");
|
||||
i_info->mca_pml_ob1_match_hdr_t.offset.hdr_ctx = mqs_field_offset(qh_type, "hdr_ctx");
|
||||
i_info->mca_pml_ob1_match_hdr_t.offset.hdr_src = mqs_field_offset(qh_type, "hdr_src");
|
||||
i_info->mca_pml_ob1_match_hdr_t.offset.hdr_tag = mqs_field_offset(qh_type, "hdr_tag");
|
||||
i_info->mca_pml_ob1_match_hdr_t.offset.hdr_seq = mqs_field_offset(qh_type, "hdr_seq");
|
||||
}
|
||||
{
|
||||
mqs_type* qh_type = mqs_find_type( image, "mca_pml_ob1_recv_frag_t", mqs_lang_c );
|
||||
if( !qh_type ) {
|
||||
missing_in_action = "mca_pml_ob1_recv_frag_t";
|
||||
goto type_missing;
|
||||
}
|
||||
i_info->mca_pml_ob1_recv_frag_t.size = mqs_sizeof(qh_type);
|
||||
i_info->mca_pml_ob1_recv_frag_t.offset.hdr = mqs_field_offset(qh_type, "hdr");
|
||||
i_info->mca_pml_ob1_recv_frag_t.offset.request = mqs_field_offset(qh_type, "request");
|
||||
}
|
||||
|
||||
/**
|
||||
* And now let's look at the communicator and group structures.
|
||||
*/
|
||||
|
@ -103,6 +103,31 @@ typedef struct
|
||||
int req_bytes_packed;
|
||||
} offset;
|
||||
} mca_pml_base_recv_request_t;
|
||||
/* fragments for unexpected messages (as well as theirs headers) */
|
||||
struct {
|
||||
int size;
|
||||
struct {
|
||||
int hdr;
|
||||
int request;
|
||||
} offset;
|
||||
} mca_pml_ob1_recv_frag_t;
|
||||
struct {
|
||||
int size;
|
||||
struct {
|
||||
int hdr_type;
|
||||
int hdr_flags;
|
||||
} offset;
|
||||
} mca_pml_ob1_common_hdr_t;
|
||||
struct {
|
||||
int size;
|
||||
struct {
|
||||
int hdr_common;
|
||||
int hdr_ctx;
|
||||
int hdr_src;
|
||||
int hdr_tag;
|
||||
int hdr_seq;
|
||||
} offset;
|
||||
} mca_pml_ob1_match_hdr_t;
|
||||
/* communicator structures */
|
||||
struct {
|
||||
int size;
|
||||
|
@ -36,6 +36,23 @@ OMPI_DECLSPEC volatile int MPIR_debug_state = 0;
|
||||
OMPI_DECLSPEC char MPIR_dll_name[] = OMPI_TV_DLL;
|
||||
#endif /* defined(OMPI_TV_DLL) */
|
||||
|
||||
/**
|
||||
* There is an issue with the debugger running on different architectures
|
||||
* compared with the debugged program. We need to know the sizes of the types
|
||||
* on the debugged program. The problem is that the size depend on the
|
||||
* compilation options (32 or 64 bits) and on the compiler. Therefore,
|
||||
* the simplest and more accurate way is to export these sizes directly from
|
||||
* the debugged program.
|
||||
*/
|
||||
OMPI_DECLSPEC int MPIR_debug_typedefs_sizeof[] = {
|
||||
sizeof(bool),
|
||||
sizeof(short),
|
||||
sizeof(int),
|
||||
sizeof(long),
|
||||
sizeof(long long),
|
||||
sizeof(size_t)
|
||||
};
|
||||
|
||||
struct MPIR_PROCDESC {
|
||||
char *host_name; /* something that can be passed to inet_addr */
|
||||
char *executable_name; /* name of binary */
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user