diff --git a/auxprogs/libmpiwrap.c b/auxprogs/libmpiwrap.c index 0c6c1f5c1..45a0298b2 100644 --- a/auxprogs/libmpiwrap.c +++ b/auxprogs/libmpiwrap.c @@ -84,11 +84,20 @@ /* Where are API symbols? Open MPI lib/libmpi.so, soname = libmpi.so.0 + AIX: in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore*_r.o) ditto Quadrics MPI */ /* ifdef OpenMPI ... */ -#define I_WRAP_FNNAME_U(_name) I_WRAP_SONAME_FNNAME_ZU(libmpiZdsoZa,_name) +#if defined(_AIX) +# define I_WRAP_FNNAME_U(_name) \ + I_WRAP_SONAME_FNNAME_ZU(libmpiZurZdaZLmpicoreZaZurZdoZR,_name) + /* Don't change this without also changing all the names in + libmpiwrap.exp. */ +#else +# define I_WRAP_FNNAME_U(_name) \ + I_WRAP_SONAME_FNNAME_ZU(libmpiZdsoZa,_name) +#endif /*------------------------------------------------------------*/ /*--- Decls ---*/ @@ -119,11 +128,12 @@ typedef unsigned long UWord; static const char* preamble = "valgrind MPI wrappers"; /* established at startup */ -static pid_t my_pid = -1; -static char* options_str = NULL; -static int opt_verbosity = 1; -static Bool opt_missing = 0; /* 0:silent; 1:warn; 2:abort */ -static Bool opt_help = False; +static pid_t my_pid = -1; +static char* options_str = NULL; +static int opt_verbosity = 1; +static Bool opt_missing = 0; /* 0:silent; 1:warn; 2:abort */ +static Bool opt_help = False; +static Bool opt_initkludge = False; static void before ( char* fnname ) { @@ -145,6 +155,8 @@ static void before ( char* fnname ) opt_verbosity--; if (NULL != strstr(options_str, "help")) opt_help = True; + if (NULL != strstr(options_str, "initkludge")) + opt_initkludge = True; } if (opt_verbosity > 0) fprintf(stderr, "%s %5d: Active for pid %d\n", @@ -160,13 +172,14 @@ static void before ( char* fnname ) fprintf(stderr, "Valid options for the MPIWRAP_DEBUG environment" " variable are:\n"); fprintf(stderr, "\n"); - fprintf(stderr, " quiet be silent except for errors\n"); - fprintf(stderr, " verbose show wrapper entries/exits\n"); - fprintf(stderr, " strict abort the program if a function" + fprintf(stderr, " quiet be silent except for errors\n"); + fprintf(stderr, " verbose show wrapper entries/exits\n"); + fprintf(stderr, " strict abort the program if a function" " with no wrapper is used\n"); - fprintf(stderr, " warn give a warning if a function" + fprintf(stderr, " warn give a warning if a function" " with no wrapper is used\n"); - fprintf(stderr, " help display this message, then exit\n"); + fprintf(stderr, " help display this message, then exit\n"); + fprintf(stderr, " initkludge debugging hack; do not use\n"); fprintf(stderr, "\n"); fprintf(stderr, "Multiple options are allowed, eg" " MPIWRAP_DEBUG=strict,verbose\n"); @@ -186,7 +199,7 @@ static void before ( char* fnname ) fprintf(stderr, "%s %5d: enter PMPI_%s\n", preamble, my_pid, fnname ); } -static inline void after ( char* fnname, int err ) +static __inline__ void after ( char* fnname, int err ) { if (opt_verbosity > 1) fprintf(stderr, "%s %5d: exit PMPI_%s (err = %d)\n", @@ -291,21 +304,21 @@ static void showCombiner ( FILE* f, int combiner ) /* Note, PMPI_Comm_rank/size are themselves wrapped. Should work fine. */ -static inline int comm_rank ( MPI_Comm comm ) +static __inline__ int comm_rank ( MPI_Comm comm ) { int err, r; err = PMPI_Comm_rank(comm, &r); return err ? 0/*arbitrary*/ : r; } -static inline int comm_size ( MPI_Comm comm ) +static __inline__ int comm_size ( MPI_Comm comm ) { int err, r; err = PMPI_Comm_size(comm, &r); return err ? 0/*arbitrary*/ : r; } -static inline Bool count_from_Status( /*OUT*/int* recv_count, +static __inline__ Bool count_from_Status( /*OUT*/int* recv_count, MPI_Datatype datatype, MPI_Status* status) { @@ -326,7 +339,7 @@ static inline Bool count_from_Status( /*OUT*/int* recv_count, types that support assignment and equality operations." Hence the following function should compile for any compliant definition of MPI_Request. */ -static inline +static __inline__ Bool eq_MPI_Request ( MPI_Request r1, MPI_Request r2 ) { return r1 == r2; @@ -674,7 +687,7 @@ void walk_type_array ( void(*f)(void*,long), char* base, void mpiwrap_walk_type_EXTERNALLY_VISIBLE ( void(*f)(void*,long), char* base, MPI_Datatype ty ) { - return walk_type(f, base, ty); + walk_type(f, base, ty); } @@ -688,7 +701,7 @@ void mpiwrap_walk_type_EXTERNALLY_VISIBLE ---------------- */ -static inline +static __inline__ void check_mem_is_defined_untyped ( void* buffer, long nbytes ) { if (nbytes > 0) { @@ -696,7 +709,7 @@ void check_mem_is_defined_untyped ( void* buffer, long nbytes ) } } -static inline +static __inline__ void check_mem_is_addressable_untyped ( void* buffer, long nbytes ) { if (nbytes > 0) { @@ -704,7 +717,7 @@ void check_mem_is_addressable_untyped ( void* buffer, long nbytes ) } } -static inline +static __inline__ void make_mem_defined_if_addressable_untyped ( void* buffer, long nbytes ) { if (nbytes > 0) { @@ -712,7 +725,7 @@ void make_mem_defined_if_addressable_untyped ( void* buffer, long nbytes ) } } -static inline +static __inline__ void make_mem_defined_if_addressable_if_success_untyped ( int err, void* buffer, long nbytes ) { @@ -724,7 +737,7 @@ void make_mem_defined_if_addressable_if_success_untyped ( int err, /* Set the specified area to 'addressible but undefined' (safe-to-write) state. */ -static inline +static __inline__ void make_mem_undefined_untyped ( void* buffer, long nbytes ) { if (nbytes > 0) { @@ -874,7 +887,11 @@ int WRAPPER_FOR(PMPI_Get_count)(MPI_Status* status, int err; VALGRIND_GET_ORIG_FN(fn); before("Get_count"); +# if defined(_AIX) + check_mem_is_addressable_untyped(status, sizeof(*status)); +# else check_mem_is_defined_untyped(status, sizeof(*status)); +# endif CALL_FN_W_WWW(err, fn, status,ty,count); after("Get_count", err); return err; @@ -1061,7 +1078,7 @@ MPI_Request* clone_Request_array ( int count, MPI_Request* orig ) if (count < 0) count = 0; /* Hmm. Call Mulder and Scully. */ copy = malloc( count * sizeof(MPI_Request) ); - if (copy == NULL) { + if (copy == NULL && count > 0) { UNLOCK_SREQS; barf("clone_Request_array: malloc failed"); } @@ -1776,7 +1793,7 @@ int WRAPPER_FOR(PMPI_Error_string)( int errorcode, char* string, /* --- Init --- */ /* rd: *argc, *argv[0 .. *argc-1] */ -int WRAPPER_FOR(PMPI_Init)(int *argc, char ***argv) +long WRAPPER_FOR(PMPI_Init)(int *argc, char ***argv) { OrigFn fn; int err; @@ -1786,7 +1803,10 @@ int WRAPPER_FOR(PMPI_Init)(int *argc, char ***argv) check_mem_is_defined_untyped(*argv, *argc * sizeof(char**)); CALL_FN_W_WW(err, fn, argc,argv); after("Init", err); - return err; + if (opt_initkludge) + return (long)(void*)&mpiwrap_walk_type_EXTERNALLY_VISIBLE; + else + return (long)err; } /* --- Initialized --- */ diff --git a/auxprogs/libmpiwrap_aix5.exp b/auxprogs/libmpiwrap_aix5.exp new file mode 100644 index 000000000..7a3c33de8 --- /dev/null +++ b/auxprogs/libmpiwrap_aix5.exp @@ -0,0 +1,298 @@ +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Abort +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Accumulate +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Add_error_class +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Add_error_code +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Add_error_string +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Allgather +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Allgatherv +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Alloc_mem +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Allreduce +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Alltoall +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Alltoallv +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Alltoallw +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Attr_delete +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Attr_get +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Attr_put +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Barrier +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Bcast +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Bsend +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Bsend_init +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Buffer_attach +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Buffer_detach +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Cancel +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Cart_coords +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Cart_create +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Cart_get +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Cart_map +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Cart_rank +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Cart_shift +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Cart_sub +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Cartdim_get +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Close_port +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_accept +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_c2f +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_call_errhandler +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_compare +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_connect +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_create +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_create_errhandler +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_create_keyval +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_delete_attr +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_disconnect +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_dup +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_f2c +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_free +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_free_keyval +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_get_attr +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_get_errhandler +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_get_name +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_get_parent +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_group +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_join +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_rank +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_remote_group +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_remote_size +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_set_attr +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_set_errhandler +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_set_name +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_size +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_spawn +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_spawn_multiple +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_split +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Comm_test_inter +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Dims_create +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Errhandler_c2f +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Errhandler_create +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Errhandler_f2c +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Errhandler_free +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Errhandler_get +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Errhandler_set +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Error_class +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Error_string +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Exscan +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_c2f +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_call_errhandler +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_close +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_create_errhandler +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_delete +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_f2c +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_get_amode +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_get_atomicity +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_get_byte_offset +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_get_errhandler +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_get_group +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_get_info +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_get_position +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_get_position_shared +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_get_size +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_get_type_extent +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_get_view +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_iread +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_iread_at +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_iread_shared +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_iwrite +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_iwrite_at +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_iwrite_shared +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_open +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_preallocate +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_read +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_read_all +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_read_all_begin +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_read_all_end +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_read_at +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_read_at_all +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_read_at_all_begin +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_read_at_all_end +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_read_ordered +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_read_ordered_begin +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_read_ordered_end +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_read_shared +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_seek +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_seek_shared +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_set_atomicity +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_set_errhandler +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_set_info +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_set_size +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_set_view +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_sync +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_write +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_write_all +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_write_all_begin +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_write_all_end +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_write_at +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_write_at_all +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_write_at_all_begin +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_write_at_all_end +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_write_ordered +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_write_ordered_begin +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_write_ordered_end +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_File_write_shared +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Finalize +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Finalized +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Free_mem +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Gather +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Gatherv +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Get +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Get_address +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Get_count +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Get_elements +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Get_processor_name +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Get_version +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Graph_create +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Graph_get +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Graph_map +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Graph_neighbors +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Graph_neighbors_count +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Graphdims_get +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Grequest_complete +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Grequest_start +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_c2f +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_compare +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_difference +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_excl +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_f2c +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_free +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_incl +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_intersection +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_range_excl +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_range_incl +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_rank +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_size +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_translate_ranks +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Group_union +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Ibsend +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Info_c2f +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Info_create +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Info_delete +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Info_dup +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Info_f2c +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Info_free +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Info_get +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Info_get_nkeys +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Info_get_nthkey +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Info_get_valuelen +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Info_set +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Init +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Init_thread +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Initialized +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Intercomm_create +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Intercomm_merge +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Iprobe +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Irecv +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Irsend +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Is_thread_main +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Isend +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Issend +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Keyval_create +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Keyval_free +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Lookup_name +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Op_c2f +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Op_create +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Op_f2c +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Op_free +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Open_port +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Pack +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Pack_external +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Pack_external_size +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Pack_size +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Probe +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Publish_name +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Put +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Query_thread +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Recv +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Recv_init +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Reduce +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Reduce_scatter +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Register_datarep +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Request_c2f +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Request_f2c +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Request_free +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Request_get_status +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Rsend +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Rsend_init +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Scan +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Scatter +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Scatterv +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Send +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Send_init +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Sendrecv +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Sendrecv_replace +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Ssend +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Ssend_init +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Start +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Startall +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Status_c2f +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Status_f2c +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Status_set_cancelled +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Status_set_elements +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Test +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Test_cancelled +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Testall +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Testany +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Testsome +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Topo_test +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_c2f +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_commit +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_contiguous +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_create_darray +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_create_f90_complex +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_create_f90_integer +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_create_f90_real +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_create_hindexed +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_create_hvector +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_create_indexed_block +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_create_keyval +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_create_resized +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_create_struct +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_create_subarray +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_delete_attr +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_dup +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_f2c +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_free +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_free_keyval +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_get_attr +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_get_extent +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_get_name +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_get_true_extent +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_hindexed +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_hvector +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_indexed +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_lb +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_match_size +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_set_attr +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_set_name +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_size +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_struct +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_ub +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Type_vector +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Unpack +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Unpack_external +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Unpublish_name +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Wait +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Waitall +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Waitany +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Waitsome +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_c2f +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_call_errhandler +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_complete +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_create +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_create_errhandler +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_create_keyval +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_delete_attr +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_f2c +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_fence +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_free +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_free_keyval +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_get_attr +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_get_errhandler +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_get_group +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_get_name +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_lock +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_post +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_set_attr +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_set_errhandler +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_set_name +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_start +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_test +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_unlock +_vgwZU_libmpiZurZdaZLmpicoreZaZurZdoZR_PMPI_Win_wait diff --git a/auxprogs/mpiwrap_type_test.c b/auxprogs/mpiwrap_type_test.c index 81f56db1a..c56b7ef19 100644 --- a/auxprogs/mpiwrap_type_test.c +++ b/auxprogs/mpiwrap_type_test.c @@ -9,7 +9,6 @@ #include #include #include -#include #include "mpi.h" #include "../memcheck/memcheck.h" @@ -19,6 +18,8 @@ typedef unsigned char Bool; #define False ((Bool)0) #define True ((Bool)1) +void* walk_type_fn = NULL; + static Ty tycon_Contiguous ( int count, Ty t ) { Ty t2; @@ -96,7 +97,7 @@ static Ty tycon_HIndexed2 ( MPI_Aint d1, int copies1, return tres; } -////////////////////////////////////// +/* ------------------------------ */ char characterise ( unsigned char b ) { @@ -125,23 +126,14 @@ void sendToMyself ( Bool commit_free, Ty* tyP, char* name ) char* rbuf_walk; int r; - void* dl_handle = NULL; - /* C: what a fabulous functional programming language :-) */ - void(*dl_walk_type)(void(*)(void*,long),char*,MPI_Datatype) = NULL; - - /* NULL: gives a handle which is RTLD_GLOBAL syms in current - process image */ - dl_handle = dlopen(NULL, RTLD_LAZY); - if (!dl_handle) { - printf("sendToMyself: can't dlopen current process image\n"); - return; - } - dl_walk_type = dlsym(dl_handle, "mpiwrap_walk_type_EXTERNALLY_VISIBLE"); + void(*dl_walk_type)(void(*)(void*,long),char*,MPI_Datatype) + = (void(*)(void(*)(void*,long),char*,MPI_Datatype)) + walk_type_fn; + if (!dl_walk_type) { printf("sendToMyself: can't find mpiwrap_walk_type_EXTERNALLY_VISIBLE" " in current process image\n"); - dlclose(dl_handle); return; } @@ -192,7 +184,6 @@ void sendToMyself ( Bool commit_free, Ty* tyP, char* name ) dl_walk_type( sendToMyself_callback, rbuf_walk, *tyP ); - dlclose(dl_handle); if (commit_free) { r = MPI_Type_free( tyP ); assert(r == MPI_SUCCESS); @@ -225,13 +216,22 @@ typedef char* Nm; int main ( int argc, char** argv ) { int rank, size; + char* opts; if (!RUNNING_ON_VALGRIND) { printf("error: this program must be run on valgrind\n"); return 1; } + opts = getenv("MPIWRAP_DEBUG"); + if ((!opts) || NULL==strstr(opts, "initkludge")) { + printf("error: program requires MPIWRAP_DEBUG=initkludge\n"); + return 1; + } + + walk_type_fn = (void*)(long) MPI_Init( &argc, &argv ); + printf("mpiwrap_type_test: walk_type_fn = %p\n", walk_type_fn); + assert(walk_type_fn); - MPI_Init( &argc, &argv ); MPI_Comm_size( MPI_COMM_WORLD, &size ); MPI_Comm_rank( MPI_COMM_WORLD, &rank );