[mpich-commits] [mpich] MPICH primary repository branch, master, updated. v3.1.1-65-g0989cef

Service Account noreply at mpich.org
Mon Jul 7 16:37:16 CDT 2014


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".

The branch, master has been updated
       via  0989cef3742a9b9ccac167e900fb0310c2c48bc9 (commit)
       via  b208dd70c27812397afe3568ba97fd835c00030e (commit)
       via  0011344aee9fadd4c2e879da9b14e764bfbf837a (commit)
      from  aa1b034353ca4c1ffbfe4d25cb69b62bbe9dee77 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/0989cef3742a9b9ccac167e900fb0310c2c48bc9

commit 0989cef3742a9b9ccac167e900fb0310c2c48bc9
Author: Antonio J. Pena <apenya at mcs.anl.gov>
Date:   Thu Jul 3 14:10:25 2014 -0500

    Remove MPICH_ATTR_WEAK_ALIAS macro
    
    After fixing #2002, MPICH_ATTR_WEAK_ALIAS is not needed. This commit
    cleans up its leftovers.
    
    Signed-off-by: Ken Raffenetti <raffenet at mcs.anl.gov>

diff --git a/configure.ac b/configure.ac
index 4d0a929..216b6e8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1793,12 +1793,7 @@ if test $enable_weak_symbols = "yes" ; then
     # Check for the ability to support multiple weak symbols
     if test "$pac_cv_prog_c_weak_symbols" = "pragma weak" ; then
        PAC_PROG_C_MULTIPLE_WEAK_SYMBOLS(AC_DEFINE(HAVE_MULTIPLE_PRAGMA_WEAK,1,[Define if multiple weak symbols may be defined]))
-    else
-        if test "$pac_cv_prog_c_weak_symbols" = "no" -a "$pac_cv_attr_weak_alias" = "yes"; then
-            MPICH_ATTR_WEAK_ALIAS_DEFINITION="__attribute__((weak,alias(fname)))"
-        fi
     fi
-    AC_SUBST(MPICH_ATTR_WEAK_ALIAS_DEFINITION)
 fi
 export NEEDSPLIB
 
diff --git a/src/binding/fortran/mpif_h/buildiface b/src/binding/fortran/mpif_h/buildiface
index 811d315..0221eb6 100755
--- a/src/binding/fortran/mpif_h/buildiface
+++ b/src/binding/fortran/mpif_h/buildiface
@@ -5264,17 +5264,17 @@ extern FORT_DLL_SPEC int FORT_CALL mpi_conversion_fn_null_ ( void*v1, MPI_Fint*v
 #elif defined(HAVE_WEAK_ATTRIBUTE) /* If support weak attribute */
 extern FORT_DLL_SPEC int FORT_CALL mpi_conversion_fn_null__ ( void*v1, MPI_Fint*v2, MPI_Fint*v3, void*v4, MPI_Offset*v5, MPI_Fint *v6, MPI_Fint*v7, MPI_Fint *ierr )
 #ifndef MPICH_MPI_FROM_PMPI
-MPICH_ATTR_WEAK_ALIAS(\"mpi_conversion_fn_null_\")
+__attribute__((weak,alias(\"mpi_conversion_fn_null_\")))
 #endif
 ;
 extern FORT_DLL_SPEC int FORT_CALL mpi_conversion_fn_null ( void*v1, MPI_Fint*v2, MPI_Fint*v3, void*v4, MPI_Offset*v5, MPI_Fint *v6, MPI_Fint*v7, MPI_Fint *ierr )
 #ifndef MPICH_MPI_FROM_PMPI
-MPICH_ATTR_WEAK_ALIAS(\"mpi_conversion_fn_null_\")
+__attribute__((weak,alias(\"mpi_conversion_fn_null_\")))
 #endif
 ;
 extern FORT_DLL_SPEC int FORT_CALL MPI_CONVERSION_FN_NULL ( void*v1, MPI_Fint*v2, MPI_Fint*v3, void*v4, MPI_Offset*v5, MPI_Fint *v6, MPI_Fint*v7, MPI_Fint *ierr )
 #ifndef MPICH_MPI_FROM_PMPI
-MPICH_ATTR_WEAK_ALIAS(\"mpi_conversion_fn_null_\")
+__attribute__((weak,alias(\"mpi_conversion_fn_null_\")))
 #endif
 ;
 #endif
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface b/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface
index ef15847..91cbf73 100755
--- a/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface
+++ b/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface
@@ -424,7 +424,6 @@ while (<FD>) {
     $fullline =~ s+/\*.*\*/++g;
 
     # parse out attributes
-    $fullline =~ s/MPICH_ATTR_WEAK_ALIAS\(.*\)//g;
     $fullline =~ s/MPICH_ATTR_POINTER_WITH_TYPE_TAG\(.*\)//g;
 
     # parse out unnecessary spaces
diff --git a/src/glue/romio/all_romio_symbols b/src/glue/romio/all_romio_symbols
index 9ee6736..dfafd87 100755
--- a/src/glue/romio/all_romio_symbols
+++ b/src/glue/romio/all_romio_symbols
@@ -107,7 +107,6 @@ while (<FD>) {
     $fullline =~ s+/\*.*\*/++g;
 
     # parse out attributes
-    $fullline =~ s/MPICH_ATTR_WEAK_ALIAS\(.*\)//g;
     $fullline =~ s/MPICH_ATTR_POINTER_WITH_TYPE_TAG\(.*\)//g;
 
     # cleanup pointer format
diff --git a/src/include/mpi.h.in b/src/include/mpi.h.in
index f4bfe84..72bbf04 100644
--- a/src/include/mpi.h.in
+++ b/src/include/mpi.h.in
@@ -14,8 +14,6 @@
 extern "C" {
 #endif
 
-#define MPICH_ATTR_WEAK_ALIAS(fname) @MPICH_ATTR_WEAK_ALIAS_DEFINITION@
-
 #undef MPICH_DEFINE_ATTR_TYPE_TYPES
 #if defined(__has_attribute)
 #  if __has_attribute(pointer_with_type_tag) && \

http://git.mpich.org/mpich.git/commitdiff/b208dd70c27812397afe3568ba97fd835c00030e

commit b208dd70c27812397afe3568ba97fd835c00030e
Author: Antonio J. Pena <apenya at mcs.anl.gov>
Date:   Thu Jul 3 13:43:59 2014 -0500

    Fix usage of weak,alias attributes
    
    Moved the weak,alias attribute declarations from header files to the
    implementation. Complies with the requirement that alias targets are
    defined in the same compilation unit.
    
    Fixes #2002
    
    Signed-off-by: Ken Raffenetti <raffenet at mcs.anl.gov>

diff --git a/src/binding/fortran/use_mpi/create_f90_complex.c b/src/binding/fortran/use_mpi/create_f90_complex.c
index 4960c6c..c002da4 100644
--- a/src/binding/fortran/use_mpi/create_f90_complex.c
+++ b/src/binding/fortran/use_mpi/create_f90_complex.c
@@ -22,6 +22,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_create_f90_complex  MPI_Type_create_f90_complex
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_create_f90_complex as PMPI_Type_create_f90_complex
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_f90_complex(int precision, int range, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_f90_complex")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/binding/fortran/use_mpi/create_f90_int.c b/src/binding/fortran/use_mpi/create_f90_int.c
index cc421f0..4dd7c8c 100644
--- a/src/binding/fortran/use_mpi/create_f90_int.c
+++ b/src/binding/fortran/use_mpi/create_f90_int.c
@@ -21,6 +21,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_create_f90_integer  MPI_Type_create_f90_integer
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_create_f90_integer as PMPI_Type_create_f90_integer
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_f90_integer(int range, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_f90_integer")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/binding/fortran/use_mpi/create_f90_real.c b/src/binding/fortran/use_mpi/create_f90_real.c
index 9711509..a21e810 100644
--- a/src/binding/fortran/use_mpi/create_f90_real.c
+++ b/src/binding/fortran/use_mpi/create_f90_real.c
@@ -22,6 +22,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_create_f90_real  MPI_Type_create_f90_real
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_create_f90_real as PMPI_Type_create_f90_real
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_f90_real(int precision, int range, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_f90_real")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/include/mpi.h.in b/src/include/mpi.h.in
index 83d81d3..f4bfe84 100644
--- a/src/include/mpi.h.in
+++ b/src/include/mpi.h.in
@@ -899,633 +899,633 @@ typedef int (MPI_Datarep_extent_function)(MPI_Datatype datatype, MPI_Aint *,
 /* We require that the C compiler support prototypes */
 /* Begin Prototypes */
 int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-             MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Send");
+             MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
-             MPI_Comm comm, MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Recv");
-int MPI_Get_count(const MPI_Status *status, MPI_Datatype datatype, int *count) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_count");
+             MPI_Comm comm, MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Get_count(const MPI_Status *status, MPI_Datatype datatype, int *count);
 int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-              MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Bsend");
+              MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Ssend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-              MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Ssend");
+              MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-              MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Rsend");
-int MPI_Buffer_attach(void *buffer, int size) MPICH_ATTR_WEAK_ALIAS("PMPI_Buffer_attach");
-int MPI_Buffer_detach(void *buffer_addr, int *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Buffer_detach");
+              MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Buffer_attach(void *buffer, int size);
+int MPI_Buffer_detach(void *buffer_addr, int *size);
 int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-              MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Isend");
+              MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-               MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Ibsend");
+               MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-               MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Issend");
+               MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Irsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-               MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Irsend");
+               MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
-              MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Irecv");
-int MPI_Wait(MPI_Request *request, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Wait");
-int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Test");
-int MPI_Request_free(MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Request_free");
-int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Waitany");
+              MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Wait(MPI_Request *request, MPI_Status *status);
+int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status);
+int MPI_Request_free(MPI_Request *request);
+int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx, MPI_Status *status);
 int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx, int *flag,
-                MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Testany");
-int MPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_statuses[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Waitall");
+                MPI_Status *status);
+int MPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_statuses[]);
 int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
-                MPI_Status array_of_statuses[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Testall");
+                MPI_Status array_of_statuses[]);
 int MPI_Waitsome(int incount, MPI_Request array_of_requests[], int *outcount,
-                 int array_of_indices[], MPI_Status array_of_statuses[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Waitsome");
+                 int array_of_indices[], MPI_Status array_of_statuses[]);
 int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
-                 int array_of_indices[], MPI_Status array_of_statuses[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Testsome");
-int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Iprobe");
-int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Probe");
-int MPI_Cancel(MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Cancel");
-int MPI_Test_cancelled(const MPI_Status *status, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Test_cancelled");
+                 int array_of_indices[], MPI_Status array_of_statuses[]);
+int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status);
+int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status);
+int MPI_Cancel(MPI_Request *request);
+int MPI_Test_cancelled(const MPI_Status *status, int *flag);
 int MPI_Send_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-                  MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Send_init");
+                  MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Bsend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-                   MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Bsend_init");
+                   MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Ssend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-                   MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Ssend_init");
+                   MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Rsend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-                   MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Rsend_init");
+                   MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source, int tag,
-                  MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Recv_init");
-int MPI_Start(MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Start");
-int MPI_Startall(int count, MPI_Request array_of_requests[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Startall");
+                  MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Start(MPI_Request *request);
+int MPI_Startall(int count, MPI_Request array_of_requests[]);
 int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest,
                  int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype,
                  int source, int recvtag, MPI_Comm comm, MPI_Status *status)
-                 MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(6,8) MPICH_ATTR_WEAK_ALIAS("PMPI_Sendrecv");
+                 MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(6,8);
 int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype, int dest,
                          int sendtag, int source, int recvtag, MPI_Comm comm,
-                         MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Sendrecv_replace");
-int MPI_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_contiguous");
+                         MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype *newtype);
 int MPI_Type_vector(int count, int blocklength, int stride, MPI_Datatype oldtype,
-                    MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_vector");
+                    MPI_Datatype *newtype);
 int MPI_Type_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype,
-                     MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_hvector");
+                     MPI_Datatype *newtype);
 int MPI_Type_indexed(int count, const int *array_of_blocklengths,
                      const int *array_of_displacements, MPI_Datatype oldtype,
-                     MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_indexed");
+                     MPI_Datatype *newtype);
 int MPI_Type_hindexed(int count, const int *array_of_blocklengths,
                       const MPI_Aint *array_of_displacements, MPI_Datatype oldtype,
-                      MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_hindexed");
+                      MPI_Datatype *newtype);
 int MPI_Type_struct(int count, const int *array_of_blocklengths,
                     const MPI_Aint *array_of_displacements,
-                    const MPI_Datatype *array_of_types, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_struct");
-int MPI_Address(const void *location, MPI_Aint *address) MPICH_ATTR_WEAK_ALIAS("PMPI_Address");
-int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_extent");
-int MPI_Type_size(MPI_Datatype datatype, int *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_size");
-int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_lb");
-int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_ub");
-int MPI_Type_commit(MPI_Datatype *datatype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_commit");
-int MPI_Type_free(MPI_Datatype *datatype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_free");
-int MPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_elements");
+                    const MPI_Datatype *array_of_types, MPI_Datatype *newtype);
+int MPI_Address(const void *location, MPI_Aint *address);
+int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent);
+int MPI_Type_size(MPI_Datatype datatype, int *size);
+int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement);
+int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement);
+int MPI_Type_commit(MPI_Datatype *datatype);
+int MPI_Type_free(MPI_Datatype *datatype);
+int MPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count);
 int MPI_Pack(const void *inbuf, int incount, MPI_Datatype datatype, void *outbuf,
-             int outsize, int *position, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Pack");
+             int outsize, int *position, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Unpack(const void *inbuf, int insize, int *position, void *outbuf, int outcount,
-               MPI_Datatype datatype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Unpack");
-int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Pack_size");
-int MPI_Barrier(MPI_Comm comm) MPICH_ATTR_WEAK_ALIAS("PMPI_Barrier");
+               MPI_Datatype datatype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size);
+int MPI_Barrier(MPI_Comm comm);
 int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm)
-              MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Bcast");
+              MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
                int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
-               MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Gather");
+               MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
 int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
                 const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root,
                 MPI_Comm comm)
-                MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Gatherv");
+                MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
 int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
                 int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
-                MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Scatter");
+                MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
 int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
                  MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
                  int root, MPI_Comm comm)
-                 MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Scatterv");
+                 MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
 int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
                   int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
-                  MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Allgather");
+                  MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
 int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
                    const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPI_Comm comm)
-                   MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Allgatherv");
+                   MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
 int MPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
                  int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
-                 MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Alltoall");
+                 MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
 int MPI_Alltoallv(const void *sendbuf, const int *sendcounts, const int *sdispls,
                   MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
                   const int *rdispls, MPI_Datatype recvtype, MPI_Comm comm)
-                  MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_ATTR_WEAK_ALIAS("PMPI_Alltoallv");
+                  MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
 int MPI_Alltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
                   const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
-                  const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm) MPICH_ATTR_WEAK_ALIAS("PMPI_Alltoallw");
+                  const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm);
 int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
                MPI_Op op, MPI_Comm comm)
-               MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Exscan");
+               MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
                MPI_Op op, int root, MPI_Comm comm)
-               MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Reduce");
-int MPI_Op_create(MPI_User_function *user_fn, int commute, MPI_Op *op) MPICH_ATTR_WEAK_ALIAS("PMPI_Op_create");
-int MPI_Op_free(MPI_Op *op) MPICH_ATTR_WEAK_ALIAS("PMPI_Op_free");
+               MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_Op_create(MPI_User_function *user_fn, int commute, MPI_Op *op);
+int MPI_Op_free(MPI_Op *op);
 int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
                   MPI_Op op, MPI_Comm comm)
-                  MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Allreduce");
+                  MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
                        MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
-                       MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Reduce_scatter");
+                       MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
              MPI_Comm comm)
-             MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Scan");
-int MPI_Group_size(MPI_Group group, int *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_size");
-int MPI_Group_rank(MPI_Group group, int *rank) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_rank");
+             MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_Group_size(MPI_Group group, int *size);
+int MPI_Group_rank(MPI_Group group, int *rank);
 int MPI_Group_translate_ranks(MPI_Group group1, int n, const int ranks1[], MPI_Group group2,
-                              int ranks2[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_translate_ranks");
-int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_compare");
-int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_group");
-int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_union");
-int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_intersection");
-int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_difference");
-int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_incl");
-int MPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_excl");
-int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_range_incl");
-int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_range_excl");
-int MPI_Group_free(MPI_Group *group) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_free");
-int MPI_Comm_size(MPI_Comm comm, int *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_size");
-int MPI_Comm_rank(MPI_Comm comm, int *rank) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_rank");
-int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_compare");
-int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_dup");
-int MPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_dup_with_info");
-int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_create");
-int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_split");
-int MPI_Comm_free(MPI_Comm *comm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_free");
-int MPI_Comm_test_inter(MPI_Comm comm, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_test_inter");
-int MPI_Comm_remote_size(MPI_Comm comm, int *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_remote_size");
-int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_remote_group");
+                              int ranks2[]);
+int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result);
+int MPI_Comm_group(MPI_Comm comm, MPI_Group *group);
+int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);
+int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);
+int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);
+int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup);
+int MPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup);
+int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup);
+int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup);
+int MPI_Group_free(MPI_Group *group);
+int MPI_Comm_size(MPI_Comm comm, int *size);
+int MPI_Comm_rank(MPI_Comm comm, int *rank);
+int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result);
+int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm);
+int MPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm *newcomm);
+int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm);
+int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm);
+int MPI_Comm_free(MPI_Comm *comm);
+int MPI_Comm_test_inter(MPI_Comm comm, int *flag);
+int MPI_Comm_remote_size(MPI_Comm comm, int *size);
+int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group);
 int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm,
-                         int remote_leader, int tag, MPI_Comm *newintercomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Intercomm_create");
-int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Intercomm_merge");
+                         int remote_leader, int tag, MPI_Comm *newintercomm);
+int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm);
 int MPI_Keyval_create(MPI_Copy_function *copy_fn, MPI_Delete_function *delete_fn,
-                      int *keyval, void *extra_state) MPICH_ATTR_WEAK_ALIAS("PMPI_Keyval_create");
-int MPI_Keyval_free(int *keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Keyval_free");
-int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val) MPICH_ATTR_WEAK_ALIAS("PMPI_Attr_put");
-int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Attr_get");
-int MPI_Attr_delete(MPI_Comm comm, int keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Attr_delete");
-int MPI_Topo_test(MPI_Comm comm, int *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Topo_test");
+                      int *keyval, void *extra_state);
+int MPI_Keyval_free(int *keyval);
+int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val);
+int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag);
+int MPI_Attr_delete(MPI_Comm comm, int keyval);
+int MPI_Topo_test(MPI_Comm comm, int *status);
 int MPI_Cart_create(MPI_Comm comm_old, int ndims, const int dims[], const int periods[],
-                    int reorder, MPI_Comm *comm_cart) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_create");
-int MPI_Dims_create(int nnodes, int ndims, int dims[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Dims_create");
+                    int reorder, MPI_Comm *comm_cart);
+int MPI_Dims_create(int nnodes, int ndims, int dims[]);
 int MPI_Graph_create(MPI_Comm comm_old, int nnodes, const int indx[], const int edges[],
-                     int reorder, MPI_Comm *comm_graph) MPICH_ATTR_WEAK_ALIAS("PMPI_Graph_create");
-int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges) MPICH_ATTR_WEAK_ALIAS("PMPI_Graphdims_get");
-int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int indx[], int edges[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Graph_get");
-int MPI_Cartdim_get(MPI_Comm comm, int *ndims) MPICH_ATTR_WEAK_ALIAS("PMPI_Cartdim_get");
-int MPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[], int coords[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_get");
-int MPI_Cart_rank(MPI_Comm comm, const int coords[], int *rank) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_rank");
-int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_coords");
-int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors) MPICH_ATTR_WEAK_ALIAS("PMPI_Graph_neighbors_count");
-int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int neighbors[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Graph_neighbors");
-int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_shift");
-int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_sub");
-int MPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[], int *newrank) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_map");
-int MPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[], int *newrank) MPICH_ATTR_WEAK_ALIAS("PMPI_Graph_map");
-int MPI_Get_processor_name(char *name, int *resultlen) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_processor_name");
-int MPI_Get_version(int *version, int *subversion) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_version");
-int MPI_Get_library_version(char *version, int *resultlen) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_library_version");
-int MPI_Errhandler_create(MPI_Handler_function *function, MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Errhandler_create");
-int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Errhandler_set");
-int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Errhandler_get");
-int MPI_Errhandler_free(MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Errhandler_free");
-int MPI_Error_string(int errorcode, char *string, int *resultlen) MPICH_ATTR_WEAK_ALIAS("PMPI_Error_string");
-int MPI_Error_class(int errorcode, int *errorclass) MPICH_ATTR_WEAK_ALIAS("PMPI_Error_class");
-double MPI_Wtime(void) MPICH_ATTR_WEAK_ALIAS("PMPI_Wtime");
-double MPI_Wtick(void) MPICH_ATTR_WEAK_ALIAS("PMPI_Wtick");
-int MPI_Init(int *argc, char ***argv) MPICH_ATTR_WEAK_ALIAS("PMPI_Init");
-int MPI_Finalize(void) MPICH_ATTR_WEAK_ALIAS("PMPI_Finalize");
-int MPI_Initialized(int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Initialized");
-int MPI_Abort(MPI_Comm comm, int errorcode) MPICH_ATTR_WEAK_ALIAS("PMPI_Abort");
+                     int reorder, MPI_Comm *comm_graph);
+int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges);
+int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int indx[], int edges[]);
+int MPI_Cartdim_get(MPI_Comm comm, int *ndims);
+int MPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[], int coords[]);
+int MPI_Cart_rank(MPI_Comm comm, const int coords[], int *rank);
+int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[]);
+int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors);
+int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int neighbors[]);
+int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest);
+int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm);
+int MPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[], int *newrank);
+int MPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[], int *newrank);
+int MPI_Get_processor_name(char *name, int *resultlen);
+int MPI_Get_version(int *version, int *subversion);
+int MPI_Get_library_version(char *version, int *resultlen);
+int MPI_Errhandler_create(MPI_Handler_function *function, MPI_Errhandler *errhandler);
+int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler);
+int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler);
+int MPI_Errhandler_free(MPI_Errhandler *errhandler);
+int MPI_Error_string(int errorcode, char *string, int *resultlen);
+int MPI_Error_class(int errorcode, int *errorclass);
+double MPI_Wtime(void);
+double MPI_Wtick(void);
+int MPI_Init(int *argc, char ***argv);
+int MPI_Finalize(void);
+int MPI_Initialized(int *flag);
+int MPI_Abort(MPI_Comm comm, int errorcode);
 
 /* Note that we may need to define a @PCONTROL_LIST@ depending on whether
    stdargs are supported */
-int MPI_Pcontrol(const int level, ...) MPICH_ATTR_WEAK_ALIAS("PMPI_Pcontrol");
+int MPI_Pcontrol(const int level, ...);
 int MPI_DUP_FN(MPI_Comm oldcomm, int keyval, void *extra_state, void *attribute_val_in,
                void *attribute_val_out, int *flag);
 
 /* Process Creation and Management */
-int MPI_Close_port(const char *port_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Close_port");
+int MPI_Close_port(const char *port_name);
 int MPI_Comm_accept(const char *port_name, MPI_Info info, int root, MPI_Comm comm,
-                    MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_accept");
+                    MPI_Comm *newcomm);
 int MPI_Comm_connect(const char *port_name, MPI_Info info, int root, MPI_Comm comm,
-                     MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_connect");
-int MPI_Comm_disconnect(MPI_Comm *comm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_disconnect");
-int MPI_Comm_get_parent(MPI_Comm *parent) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_get_parent");
-int MPI_Comm_join(int fd, MPI_Comm *intercomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_join");
+                     MPI_Comm *newcomm);
+int MPI_Comm_disconnect(MPI_Comm *comm);
+int MPI_Comm_get_parent(MPI_Comm *parent);
+int MPI_Comm_join(int fd, MPI_Comm *intercomm);
 int MPI_Comm_spawn(const char *command, char *argv[], int maxprocs, MPI_Info info, int root,
-                   MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_spawn");
+                   MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]);
 int MPI_Comm_spawn_multiple(int count, char *array_of_commands[], char **array_of_argv[],
                             const int array_of_maxprocs[], const MPI_Info array_of_info[],
-                            int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_spawn_multiple");
-int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Lookup_name");
-int MPI_Open_port(MPI_Info info, char *port_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Open_port");
-int MPI_Publish_name(const char *service_name, MPI_Info info, const char *port_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Publish_name");
-int MPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Unpublish_name");
-int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_set_info");
-int MPI_Comm_get_info(MPI_Comm comm, MPI_Info *info) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_get_info");
+                            int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]);
+int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name);
+int MPI_Open_port(MPI_Info info, char *port_name);
+int MPI_Publish_name(const char *service_name, MPI_Info info, const char *port_name);
+int MPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port_name);
+int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info);
+int MPI_Comm_get_info(MPI_Comm comm, MPI_Info *info);
 
 /* One-Sided Communications */
 int MPI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
                    int target_rank, MPI_Aint target_disp, int target_count,
                    MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
-                   MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Accumulate");
+                   MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
             int target_rank, MPI_Aint target_disp, int target_count,
-            MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Get");
+            MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
             int target_rank, MPI_Aint target_disp, int target_count,
-            MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Put");
-int MPI_Win_complete(MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_complete");
+            MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Win_complete(MPI_Win win);
 int MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
-                   MPI_Win *win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_create");
-int MPI_Win_fence(int assert, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_fence");
-int MPI_Win_free(MPI_Win *win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_free");
-int MPI_Win_get_group(MPI_Win win, MPI_Group *group) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_get_group");
-int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_lock");
-int MPI_Win_post(MPI_Group group, int assert, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_post");
-int MPI_Win_start(MPI_Group group, int assert, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_start");
-int MPI_Win_test(MPI_Win win, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_test");
-int MPI_Win_unlock(int rank, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_unlock");
-int MPI_Win_wait(MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_wait");
+                   MPI_Win *win);
+int MPI_Win_fence(int assert, MPI_Win win);
+int MPI_Win_free(MPI_Win *win);
+int MPI_Win_get_group(MPI_Win win, MPI_Group *group);
+int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win);
+int MPI_Win_post(MPI_Group group, int assert, MPI_Win win);
+int MPI_Win_start(MPI_Group group, int assert, MPI_Win win);
+int MPI_Win_test(MPI_Win win, int *flag);
+int MPI_Win_unlock(int rank, MPI_Win win);
+int MPI_Win_wait(MPI_Win win);
 
 /* MPI-3 One-Sided Communication Routines */
 int MPI_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void *baseptr,
-                     MPI_Win *win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_allocate");
+                     MPI_Win *win);
 int MPI_Win_allocate_shared(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
-                            void *baseptr, MPI_Win *win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_allocate_shared");
-int MPI_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit, void *baseptr) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_shared_query");
-int MPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_create_dynamic");
-int MPI_Win_attach(MPI_Win win, void *base, MPI_Aint size) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_attach");
-int MPI_Win_detach(MPI_Win win, const void *base) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_detach");
-int MPI_Win_get_info(MPI_Win win, MPI_Info *info_used) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_get_info");
-int MPI_Win_set_info(MPI_Win win, MPI_Info info) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_set_info");
+                            void *baseptr, MPI_Win *win);
+int MPI_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit, void *baseptr);
+int MPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win);
+int MPI_Win_attach(MPI_Win win, void *base, MPI_Aint size);
+int MPI_Win_detach(MPI_Win win, const void *base);
+int MPI_Win_get_info(MPI_Win win, MPI_Info *info_used);
+int MPI_Win_set_info(MPI_Win win, MPI_Info info);
 int MPI_Get_accumulate(const void *origin_addr, int origin_count,
                         MPI_Datatype origin_datatype, void *result_addr, int result_count,
                         MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
                         int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
                         MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
-                        MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_accumulate");
+                        MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
 int MPI_Fetch_and_op(const void *origin_addr, void *result_addr,
                       MPI_Datatype datatype, int target_rank, MPI_Aint target_disp,
                       MPI_Op op, MPI_Win win)
-                      MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Fetch_and_op");
+                      MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Compare_and_swap(const void *origin_addr, const void *compare_addr,
                           void *result_addr, MPI_Datatype datatype, int target_rank,
                           MPI_Aint target_disp, MPI_Win win)
                           MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
                           MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4)
-                          MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Compare_and_swap");
+                          MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,4);
 int MPI_Rput(const void *origin_addr, int origin_count,
               MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
               int target_count, MPI_Datatype target_datatype, MPI_Win win,
               MPI_Request *request)
-              MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Rput");
+              MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Rget(void *origin_addr, int origin_count,
               MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
               int target_count, MPI_Datatype target_datatype, MPI_Win win,
               MPI_Request *request)
-              MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Rget");
+              MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Raccumulate(const void *origin_addr, int origin_count,
                      MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
                      int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
                      MPI_Request *request)
-                     MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Raccumulate");
+                     MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Rget_accumulate(const void *origin_addr, int origin_count,
                          MPI_Datatype origin_datatype, void *result_addr, int result_count,
                          MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
                          int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
                          MPI_Request *request)
                          MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
-                         MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Rget_accumulate");
-int MPI_Win_lock_all(int assert, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_lock_all");
-int MPI_Win_unlock_all(MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_unlock_all");
-int MPI_Win_flush(int rank, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_flush");
-int MPI_Win_flush_all(MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_flush_all");
-int MPI_Win_flush_local(int rank, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_flush_local");
-int MPI_Win_flush_local_all(MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_flush_local_all");
-int MPI_Win_sync(MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_sync");
+                         MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+int MPI_Win_lock_all(int assert, MPI_Win win);
+int MPI_Win_unlock_all(MPI_Win win);
+int MPI_Win_flush(int rank, MPI_Win win);
+int MPI_Win_flush_all(MPI_Win win);
+int MPI_Win_flush_local(int rank, MPI_Win win);
+int MPI_Win_flush_local_all(MPI_Win win);
+int MPI_Win_sync(MPI_Win win);
  
 /* External Interfaces */
-int MPI_Add_error_class(int *errorclass) MPICH_ATTR_WEAK_ALIAS("PMPI_Add_error_class");
-int MPI_Add_error_code(int errorclass, int *errorcode) MPICH_ATTR_WEAK_ALIAS("PMPI_Add_error_code");
-int MPI_Add_error_string(int errorcode, const char *string) MPICH_ATTR_WEAK_ALIAS("PMPI_Add_error_string");
-int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_call_errhandler");
+int MPI_Add_error_class(int *errorclass);
+int MPI_Add_error_code(int errorclass, int *errorcode);
+int MPI_Add_error_string(int errorcode, const char *string);
+int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode);
 int MPI_Comm_create_keyval(MPI_Comm_copy_attr_function *comm_copy_attr_fn,
                            MPI_Comm_delete_attr_function *comm_delete_attr_fn, int *comm_keyval,
-                           void *extra_state) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_create_keyval");
-int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_delete_attr");
-int MPI_Comm_free_keyval(int *comm_keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_free_keyval");
-int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_get_attr");
-int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_get_name");
-int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_set_attr");
-int MPI_Comm_set_name(MPI_Comm comm, const char *comm_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_set_name");
-int MPI_File_call_errhandler(MPI_File fh, int errorcode) MPICH_ATTR_WEAK_ALIAS("PMPI_File_call_errhandler");
-int MPI_Grequest_complete(MPI_Request request) MPICH_ATTR_WEAK_ALIAS("PMPI_Grequest_complete");
+                           void *extra_state);
+int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval);
+int MPI_Comm_free_keyval(int *comm_keyval);
+int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag);
+int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen);
+int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val);
+int MPI_Comm_set_name(MPI_Comm comm, const char *comm_name);
+int MPI_File_call_errhandler(MPI_File fh, int errorcode);
+int MPI_Grequest_complete(MPI_Request request);
 int MPI_Grequest_start(MPI_Grequest_query_function *query_fn, MPI_Grequest_free_function *free_fn,
                        MPI_Grequest_cancel_function *cancel_fn, void *extra_state,
-                       MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Grequest_start");
-int MPI_Init_thread(int *argc, char ***argv, int required, int *provided) MPICH_ATTR_WEAK_ALIAS("PMPI_Init_thread");
-int MPI_Is_thread_main(int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Is_thread_main");
-int MPI_Query_thread(int *provided) MPICH_ATTR_WEAK_ALIAS("PMPI_Query_thread");
-int MPI_Status_set_cancelled(MPI_Status *status, int flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Status_set_cancelled");
-int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, int count) MPICH_ATTR_WEAK_ALIAS("PMPI_Status_set_elements");
+                       MPI_Request *request);
+int MPI_Init_thread(int *argc, char ***argv, int required, int *provided);
+int MPI_Is_thread_main(int *flag);
+int MPI_Query_thread(int *provided);
+int MPI_Status_set_cancelled(MPI_Status *status, int flag);
+int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, int count);
 int MPI_Type_create_keyval(MPI_Type_copy_attr_function *type_copy_attr_fn,
                            MPI_Type_delete_attr_function *type_delete_attr_fn,
-                           int *type_keyval, void *extra_state) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_keyval");
-int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_delete_attr");
-int MPI_Type_dup(MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_dup");
-int MPI_Type_free_keyval(int *type_keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_free_keyval");
-int MPI_Type_get_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_attr");
+                           int *type_keyval, void *extra_state);
+int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval);
+int MPI_Type_dup(MPI_Datatype oldtype, MPI_Datatype *newtype);
+int MPI_Type_free_keyval(int *type_keyval);
+int MPI_Type_get_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val, int *flag);
 int MPI_Type_get_contents(MPI_Datatype datatype, int max_integers, int max_addresses,
                           int max_datatypes, int array_of_integers[],
-                          MPI_Aint array_of_addresses[], MPI_Datatype array_of_datatypes[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_contents");
+                          MPI_Aint array_of_addresses[], MPI_Datatype array_of_datatypes[]);
 int MPI_Type_get_envelope(MPI_Datatype datatype, int *num_integers, int *num_addresses,
-                          int *num_datatypes, int *combiner) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_envelope");
-int MPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_name");
-int MPI_Type_set_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_set_attr");
-int MPI_Type_set_name(MPI_Datatype datatype, const char *type_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_set_name");
-int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_match_size");
-int MPI_Win_call_errhandler(MPI_Win win, int errorcode) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_call_errhandler");
+                          int *num_datatypes, int *combiner);
+int MPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen);
+int MPI_Type_set_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val);
+int MPI_Type_set_name(MPI_Datatype datatype, const char *type_name);
+int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype);
+int MPI_Win_call_errhandler(MPI_Win win, int errorcode);
 int MPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn,
                           MPI_Win_delete_attr_function *win_delete_attr_fn, int *win_keyval,
-                          void *extra_state) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_create_keyval");
-int MPI_Win_delete_attr(MPI_Win win, int win_keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_delete_attr");
-int MPI_Win_free_keyval(int *win_keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_free_keyval");
-int MPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_get_attr");
-int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_get_name");
-int MPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_set_attr");
-int MPI_Win_set_name(MPI_Win win, const char *win_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_set_name");
-
-int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr) MPICH_ATTR_WEAK_ALIAS("PMPI_Alloc_mem");
+                          void *extra_state);
+int MPI_Win_delete_attr(MPI_Win win, int win_keyval);
+int MPI_Win_free_keyval(int *win_keyval);
+int MPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val, int *flag);
+int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen);
+int MPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val);
+int MPI_Win_set_name(MPI_Win win, const char *win_name);
+
+int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr);
 int MPI_Comm_create_errhandler(MPI_Comm_errhandler_function *comm_errhandler_fn,
-                               MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_create_errhandler");
-int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_get_errhandler");
-int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_set_errhandler");
+                               MPI_Errhandler *errhandler);
+int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler);
+int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler);
 int MPI_File_create_errhandler(MPI_File_errhandler_function *file_errhandler_fn,
-                               MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_File_create_errhandler");
-int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_errhandler");
-int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_File_set_errhandler");
-int MPI_Finalized(int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Finalized");
-int MPI_Free_mem(void *base) MPICH_ATTR_WEAK_ALIAS("PMPI_Free_mem");
-int MPI_Get_address(const void *location, MPI_Aint *address) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_address");
-int MPI_Info_create(MPI_Info *info) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_create");
-int MPI_Info_delete(MPI_Info info, const char *key) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_delete");
-int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_dup");
-int MPI_Info_free(MPI_Info *info) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_free");
-int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_get");
-int MPI_Info_get_nkeys(MPI_Info info, int *nkeys) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_get_nkeys");
-int MPI_Info_get_nthkey(MPI_Info info, int n, char *key) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_get_nthkey");
-int MPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_get_valuelen");
-int MPI_Info_set(MPI_Info info, const char *key, const char *value) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_set");
+                               MPI_Errhandler *errhandler);
+int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler);
+int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler);
+int MPI_Finalized(int *flag);
+int MPI_Free_mem(void *base);
+int MPI_Get_address(const void *location, MPI_Aint *address);
+int MPI_Info_create(MPI_Info *info);
+int MPI_Info_delete(MPI_Info info, const char *key);
+int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo);
+int MPI_Info_free(MPI_Info *info);
+int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int *flag);
+int MPI_Info_get_nkeys(MPI_Info info, int *nkeys);
+int MPI_Info_get_nthkey(MPI_Info info, int n, char *key);
+int MPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *flag);
+int MPI_Info_set(MPI_Info info, const char *key, const char *value);
 int MPI_Pack_external(const char datarep[], const void *inbuf, int incount,
                       MPI_Datatype datatype, void *outbuf, MPI_Aint outsize, MPI_Aint *position)
-                      MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Pack_external");
+                      MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_Pack_external_size(const char datarep[], int incount, MPI_Datatype datatype,
-                           MPI_Aint *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Pack_external_size");
-int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Request_get_status");
-int MPI_Status_c2f(const MPI_Status *c_status, MPI_Fint *f_status) MPICH_ATTR_WEAK_ALIAS("PMPI_Status_c2f");
-int MPI_Status_f2c(const MPI_Fint *f_status, MPI_Status *c_status) MPICH_ATTR_WEAK_ALIAS("PMPI_Status_f2c");
+                           MPI_Aint *size);
+int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status);
+int MPI_Status_c2f(const MPI_Status *c_status, MPI_Fint *f_status);
+int MPI_Status_f2c(const MPI_Fint *f_status, MPI_Status *c_status);
 int MPI_Type_create_darray(int size, int rank, int ndims, const int array_of_gsizes[],
                            const int array_of_distribs[], const int array_of_dargs[],
                            const int array_of_psizes[], int order, MPI_Datatype oldtype,
-                           MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_darray");
+                           MPI_Datatype *newtype);
 int MPI_Type_create_hindexed(int count, const int array_of_blocklengths[],
                              const MPI_Aint array_of_displacements[], MPI_Datatype oldtype,
-                             MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_hindexed");
+                             MPI_Datatype *newtype);
 int MPI_Type_create_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype,
-                            MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_hvector");
+                            MPI_Datatype *newtype);
 int MPI_Type_create_indexed_block(int count, int blocklength, const int array_of_displacements[],
-                                  MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_indexed_block");
+                                  MPI_Datatype oldtype, MPI_Datatype *newtype);
 int MPI_Type_create_hindexed_block(int count, int blocklength,
                                    const MPI_Aint array_of_displacements[],
-                                   MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_hindexed_block");
+                                   MPI_Datatype oldtype, MPI_Datatype *newtype);
 int MPI_Type_create_resized(MPI_Datatype oldtype, MPI_Aint lb, MPI_Aint extent,
-                            MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_resized");
+                            MPI_Datatype *newtype);
 int MPI_Type_create_struct(int count, const int array_of_blocklengths[],
                            const MPI_Aint array_of_displacements[],
-                           const MPI_Datatype array_of_types[], MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_struct");
+                           const MPI_Datatype array_of_types[], MPI_Datatype *newtype);
 int MPI_Type_create_subarray(int ndims, const int array_of_sizes[],
                              const int array_of_subsizes[], const int array_of_starts[],
-                             int order, MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_subarray");
-int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_extent");
-int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb, MPI_Aint *true_extent) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_true_extent");
+                             int order, MPI_Datatype oldtype, MPI_Datatype *newtype);
+int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent);
+int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb, MPI_Aint *true_extent);
 int MPI_Unpack_external(const char datarep[], const void *inbuf, MPI_Aint insize,
                         MPI_Aint *position, void *outbuf, int outcount, MPI_Datatype datatype)
-                        MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Unpack_external");
+                        MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
 int MPI_Win_create_errhandler(MPI_Win_errhandler_function *win_errhandler_fn,
-                              MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_create_errhandler");
-int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_get_errhandler");
-int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_set_errhandler");
+                              MPI_Errhandler *errhandler);
+int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler);
+int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler);
 
 /* Fortran 90-related functions.  These routines are available only if
    Fortran 90 support is enabled 
 */
-int MPI_Type_create_f90_integer(int range, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_f90_integer");
-int MPI_Type_create_f90_real(int precision, int range, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_f90_real");
-int MPI_Type_create_f90_complex(int precision, int range, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_f90_complex");
+int MPI_Type_create_f90_integer(int range, MPI_Datatype *newtype);
+int MPI_Type_create_f90_real(int precision, int range, MPI_Datatype *newtype);
+int MPI_Type_create_f90_complex(int precision, int range, MPI_Datatype *newtype);
 
 int MPI_Reduce_local(const void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype,
                      MPI_Op op)
-                     MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Reduce_local");
-int MPI_Op_commutative(MPI_Op op, int *commute) MPICH_ATTR_WEAK_ALIAS("PMPI_Op_commutative");
+                     MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_Op_commutative(MPI_Op op, int *commute);
 int MPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
                              MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
                              MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
-                             MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Reduce_scatter_block");
+                             MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old, int indegree, const int sources[],
                                    const int sourceweights[], int outdegree,
                                    const int destinations[], const int destweights[],
-                                   MPI_Info info, int reorder, MPI_Comm *comm_dist_graph) MPICH_ATTR_WEAK_ALIAS("PMPI_Dist_graph_create_adjacent");
+                                   MPI_Info info, int reorder, MPI_Comm *comm_dist_graph);
 int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[], const int degrees[],
                           const int destinations[], const int weights[], MPI_Info info,
-                          int reorder, MPI_Comm *comm_dist_graph) MPICH_ATTR_WEAK_ALIAS("PMPI_Dist_graph_create");
-int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted) MPICH_ATTR_WEAK_ALIAS("PMPI_Dist_graph_neighbors_count");
+                          int reorder, MPI_Comm *comm_dist_graph);
+int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted);
 int MPI_Dist_graph_neighbors(MPI_Comm comm, int maxindegree, int sources[], int sourceweights[],
-                             int maxoutdegree, int destinations[], int destweights[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Dist_graph_neighbors");
+                             int maxoutdegree, int destinations[], int destweights[]);
 
 /* Matched probe functionality */
 int MPI_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPI_Message *message,
-                MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Improbe");
+                MPI_Status *status);
 int MPI_Imrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
-               MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Imrecv");
-int MPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Mprobe");
+               MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Status *status);
 int MPI_Mrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
-              MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Mrecv");
+              MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 
 /* Nonblocking collectives */
-int MPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_idup");
-int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Ibarrier");
+int MPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request);
+int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request);
 int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm,
-               MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Ibcast");
+               MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
 int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
                 int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm,
                 MPI_Request *request)
-                MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Igather");
+                MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
 int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
                  const int recvcounts[], const int displs[], MPI_Datatype recvtype, int root,
                  MPI_Comm comm, MPI_Request *request)
-                 MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Igatherv");
+                 MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
 int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
                  int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm,
                  MPI_Request *request)
-                 MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Iscatter");
+                 MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
 int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[],
                   MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
                   int root, MPI_Comm comm, MPI_Request *request)
-                  MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Iscatterv");
+                  MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
 int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
                    int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
-                   MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Iallgather");
+                   MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
 int MPI_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
                     const int recvcounts[], const int displs[], MPI_Datatype recvtype,
                     MPI_Comm comm, MPI_Request *request)
-                    MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Iallgatherv");
+                    MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
 int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
                   int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
-                  MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Ialltoall");
+                  MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
 int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
                    MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
                    const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm,
                    MPI_Request *request)
-                   MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_ATTR_WEAK_ALIAS("PMPI_Ialltoallv");
+                   MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
 int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
                    const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
                    const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm,
-                   MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Ialltoallw");
+                   MPI_Request *request);
 int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
                 MPI_Op op, int root, MPI_Comm comm, MPI_Request *request)
-                MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Ireduce");
+                MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
                    MPI_Op op, MPI_Comm comm, MPI_Request *request)
-                   MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Iallreduce");
+                   MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
                         MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
-                        MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Ireduce_scatter");
+                        MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
                               MPI_Datatype datatype, MPI_Op op, MPI_Comm comm,
                               MPI_Request *request)
                               MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
-                              MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Ireduce_scatter_block");
+                              MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
               MPI_Comm comm, MPI_Request *request)
-              MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Iscan");
+              MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
                 MPI_Op op, MPI_Comm comm, MPI_Request *request)
-                MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Iexscan");
+                MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 
 /* Neighborhood collectives */
 int MPI_Ineighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
                             void *recvbuf, int recvcount, MPI_Datatype recvtype,
                             MPI_Comm comm, MPI_Request *request)
                             MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
-                            MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Ineighbor_allgather");
+                            MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
 int MPI_Ineighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
                              void *recvbuf, const int recvcounts[], const int displs[],
                              MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
                              MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
-                             MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Ineighbor_allgatherv");
+                             MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
 int MPI_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
                            void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm,
                            MPI_Request *request)
                            MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
-                           MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Ineighbor_alltoall");
+                           MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
 int MPI_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
                             MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
                             const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm,
                             MPI_Request *request)
                             MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
-                            MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_ATTR_WEAK_ALIAS("PMPI_Ineighbor_alltoallv");
+                            MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
 int MPI_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
                             const MPI_Aint sdispls[], const MPI_Datatype sendtypes[],
                             void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[],
-                            const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Ineighbor_alltoallw");
+                            const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Request *request);
 int MPI_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
                            void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
                            MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
-                           MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Neighbor_allgather");
+                           MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
 int MPI_Neighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
                             void *recvbuf, const int recvcounts[], const int displs[],
                             MPI_Datatype recvtype, MPI_Comm comm)
                             MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
-                            MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Neighbor_allgatherv");
+                            MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
 int MPI_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
                           void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
                           MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
-                          MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Neighbor_alltoall");
+                          MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
 int MPI_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
                            MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
                            const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm)
                            MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
-                           MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_ATTR_WEAK_ALIAS("PMPI_Neighbor_alltoallv");
+                           MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
 int MPI_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[],
                            const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
-                           const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm) MPICH_ATTR_WEAK_ALIAS("PMPI_Neighbor_alltoallw");
+                           const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm);
 
 /* Shared memory */
-int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_split_type");
+int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm);
 
 /* MPI-3 "large count" routines */
-int MPI_Get_elements_x(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *count) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_elements_x");
-int MPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Count count) MPICH_ATTR_WEAK_ALIAS("PMPI_Status_set_elements_x");
-int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_extent_x");
-int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_true_extent_x");
-int MPI_Type_size_x(MPI_Datatype datatype, MPI_Count *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_size_x");
+int MPI_Get_elements_x(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *count);
+int MPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Count count);
+int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent);
+int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent);
+int MPI_Type_size_x(MPI_Datatype datatype, MPI_Count *size);
 
 /* Noncollective communicator creation */
-int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_create_group");
+int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm *newcomm);
 
 
 /* Non-standard but public extensions to MPI */
 /* Fault Tolerance Extensions */
-int MPIX_Comm_group_failed(MPI_Comm comm, MPI_Group *failed_group) MPICH_ATTR_WEAK_ALIAS("PMPIX_Comm_group_failed");
-int MPIX_Comm_remote_group_failed(MPI_Comm comm, MPI_Group *failed_group) MPICH_ATTR_WEAK_ALIAS("PMPIX_Comm_remote_group_failed");
-int MPIX_Comm_reenable_anysource(MPI_Comm comm, MPI_Group *failed_group) MPICH_ATTR_WEAK_ALIAS("PMPIX_Comm_reenable_anysource");
+int MPIX_Comm_group_failed(MPI_Comm comm, MPI_Group *failed_group);
+int MPIX_Comm_remote_group_failed(MPI_Comm comm, MPI_Group *failed_group);
+int MPIX_Comm_reenable_anysource(MPI_Comm comm, MPI_Group *failed_group);
 
 
 /* MPI_T interface */
 /* The MPI_T routines are available only in C bindings - tell tools that they
    can skip these prototypes */
 /* Begin Skip Prototypes */
-int MPI_T_init_thread(int required, int *provided) MPICH_ATTR_WEAK_ALIAS("PMPI_T_init_thread");
-int MPI_T_finalize(void) MPICH_ATTR_WEAK_ALIAS("PMPI_T_finalize");
-int MPI_T_enum_get_info(MPI_T_enum enumtype, int *num, char *name, int *name_len) MPICH_ATTR_WEAK_ALIAS("PMPI_T_enum_get_info");
-int MPI_T_enum_get_item(MPI_T_enum enumtype, int indx, int *value, char *name, int *name_len) MPICH_ATTR_WEAK_ALIAS("PMPI_T_enum_get_item");
-int MPI_T_cvar_get_num(int *num_cvar) MPICH_ATTR_WEAK_ALIAS("PMPI_T_cvar_get_num");
+int MPI_T_init_thread(int required, int *provided);
+int MPI_T_finalize(void);
+int MPI_T_enum_get_info(MPI_T_enum enumtype, int *num, char *name, int *name_len);
+int MPI_T_enum_get_item(MPI_T_enum enumtype, int indx, int *value, char *name, int *name_len);
+int MPI_T_cvar_get_num(int *num_cvar);
 int MPI_T_cvar_get_info(int cvar_index, char *name, int *name_len, int *verbosity,
                         MPI_Datatype *datatype, MPI_T_enum *enumtype, char *desc, int *desc_len,
-                        int *binding, int *scope) MPICH_ATTR_WEAK_ALIAS("PMPI_T_cvar_get_info");
+                        int *binding, int *scope);
 int MPI_T_cvar_handle_alloc(int cvar_index, void *obj_handle, MPI_T_cvar_handle *handle,
-                            int *count) MPICH_ATTR_WEAK_ALIAS("PMPI_T_cvar_handle_alloc");
-int MPI_T_cvar_handle_free(MPI_T_cvar_handle *handle) MPICH_ATTR_WEAK_ALIAS("PMPI_T_cvar_handle_free");
-int MPI_T_cvar_read(MPI_T_cvar_handle handle, void *buf) MPICH_ATTR_WEAK_ALIAS("PMPI_T_cvar_read");
-int MPI_T_cvar_write(MPI_T_cvar_handle handle, void *buf) MPICH_ATTR_WEAK_ALIAS("PMPI_T_cvar_write");
-int MPI_T_pvar_get_num(int *num_pvar) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_get_num");
+                            int *count);
+int MPI_T_cvar_handle_free(MPI_T_cvar_handle *handle);
+int MPI_T_cvar_read(MPI_T_cvar_handle handle, void *buf);
+int MPI_T_cvar_write(MPI_T_cvar_handle handle, void *buf);
+int MPI_T_pvar_get_num(int *num_pvar);
 int MPI_T_pvar_get_info(int pvar_index, char *name, int *name_len, int *verbosity, int *var_class,
                         MPI_Datatype *datatype, MPI_T_enum *enumtype, char *desc, int *desc_len,
-                        int *binding, int *readonly, int *continuous, int *atomic) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_get_info");
-int MPI_T_pvar_session_create(MPI_T_pvar_session *session) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_session_create");
-int MPI_T_pvar_session_free(MPI_T_pvar_session *session) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_session_free");
+                        int *binding, int *readonly, int *continuous, int *atomic);
+int MPI_T_pvar_session_create(MPI_T_pvar_session *session);
+int MPI_T_pvar_session_free(MPI_T_pvar_session *session);
 int MPI_T_pvar_handle_alloc(MPI_T_pvar_session session, int pvar_index, void *obj_handle,
-                            MPI_T_pvar_handle *handle, int *count) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_handle_alloc");
-int MPI_T_pvar_handle_free(MPI_T_pvar_session session, MPI_T_pvar_handle *handle) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_handle_free");
-int MPI_T_pvar_start(MPI_T_pvar_session session, MPI_T_pvar_handle handle) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_start");
-int MPI_T_pvar_stop(MPI_T_pvar_session session, MPI_T_pvar_handle handle) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_stop");
-int MPI_T_pvar_read(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_read");
-int MPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_write");
-int MPI_T_pvar_reset(MPI_T_pvar_session session, MPI_T_pvar_handle handle) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_reset");
-int MPI_T_pvar_readreset(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_readreset");
-int MPI_T_category_get_num(int *num_cat) MPICH_ATTR_WEAK_ALIAS("PMPI_T_category_get_num");
+                            MPI_T_pvar_handle *handle, int *count);
+int MPI_T_pvar_handle_free(MPI_T_pvar_session session, MPI_T_pvar_handle *handle);
+int MPI_T_pvar_start(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
+int MPI_T_pvar_stop(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
+int MPI_T_pvar_read(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
+int MPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
+int MPI_T_pvar_reset(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
+int MPI_T_pvar_readreset(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
+int MPI_T_category_get_num(int *num_cat);
 int MPI_T_category_get_info(int cat_index, char *name, int *name_len, char *desc, int *desc_len,
-                            int *num_cvars, int *num_pvars, int *num_categories) MPICH_ATTR_WEAK_ALIAS("PMPI_T_category_get_info");
-int MPI_T_category_get_cvars(int cat_index, int len, int indices[]) MPICH_ATTR_WEAK_ALIAS("PMPI_T_category_get_cvars");
-int MPI_T_category_get_pvars(int cat_index, int len, int indices[]) MPICH_ATTR_WEAK_ALIAS("PMPI_T_category_get_pvars");
-int MPI_T_category_get_categories(int cat_index, int len, int indices[]) MPICH_ATTR_WEAK_ALIAS("PMPI_T_category_get_categories");
-int MPI_T_category_changed(int *stamp) MPICH_ATTR_WEAK_ALIAS("PMPI_T_category_changed");
+                            int *num_cvars, int *num_pvars, int *num_categories);
+int MPI_T_category_get_cvars(int cat_index, int len, int indices[]);
+int MPI_T_category_get_pvars(int cat_index, int len, int indices[]);
+int MPI_T_category_get_categories(int cat_index, int len, int indices[]);
+int MPI_T_category_changed(int *stamp);
 /* End Skip Prototypes */
 /* End Prototypes */
 #endif /* MPICH_SUPPRESS_PROTOTYPES */
diff --git a/src/mpi/attr/attr_delete.c b/src/mpi/attr/attr_delete.c
index b9c72d8..7594dcc 100644
--- a/src/mpi/attr/attr_delete.c
+++ b/src/mpi/attr/attr_delete.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Attr_delete  MPI_Attr_delete
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Attr_delete as PMPI_Attr_delete
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Attr_delete(MPI_Comm comm, int keyval) __attribute__((weak,alias("PMPI_Attr_delete")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/attr_get.c b/src/mpi/attr/attr_get.c
index 122ed46..f02ac02 100644
--- a/src/mpi/attr/attr_get.c
+++ b/src/mpi/attr/attr_get.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Attr_get  MPI_Attr_get
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Attr_get as PMPI_Attr_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag) __attribute__((weak,alias("PMPI_Attr_get")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/attr_put.c b/src/mpi/attr/attr_put.c
index ee2a084..91b74fb 100644
--- a/src/mpi/attr/attr_put.c
+++ b/src/mpi/attr/attr_put.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Attr_put  MPI_Attr_put
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Attr_put as PMPI_Attr_put
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val) __attribute__((weak,alias("PMPI_Attr_put")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/comm_create_keyval.c b/src/mpi/attr/comm_create_keyval.c
index f145189..e2f5f28 100644
--- a/src/mpi/attr/comm_create_keyval.c
+++ b/src/mpi/attr/comm_create_keyval.c
@@ -24,6 +24,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_create_keyval  MPI_Comm_create_keyval
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_create_keyval as PMPI_Comm_create_keyval
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_create_keyval(MPI_Comm_copy_attr_function *comm_copy_attr_fn,
+                           MPI_Comm_delete_attr_function *comm_delete_attr_fn, int *comm_keyval,
+                           void *extra_state) __attribute__((weak,alias("PMPI_Comm_create_keyval")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/comm_delete_attr.c b/src/mpi/attr/comm_delete_attr.c
index 1c93453..683960e 100644
--- a/src/mpi/attr/comm_delete_attr.c
+++ b/src/mpi/attr/comm_delete_attr.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_delete_attr  MPI_Comm_delete_attr
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_delete_attr as PMPI_Comm_delete_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval) __attribute__((weak,alias("PMPI_Comm_delete_attr")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/comm_free_keyval.c b/src/mpi/attr/comm_free_keyval.c
index 6044d37..6536f76 100644
--- a/src/mpi/attr/comm_free_keyval.c
+++ b/src/mpi/attr/comm_free_keyval.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_free_keyval  MPI_Comm_free_keyval
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_free_keyval as PMPI_Comm_free_keyval
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_free_keyval(int *comm_keyval) __attribute__((weak,alias("PMPI_Comm_free_keyval")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/comm_get_attr.c b/src/mpi/attr/comm_get_attr.c
index e998200..0cc2c56 100644
--- a/src/mpi/attr/comm_get_attr.c
+++ b/src/mpi/attr/comm_get_attr.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_get_attr  MPI_Comm_get_attr
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_get_attr as PMPI_Comm_get_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag) __attribute__((weak,alias("PMPI_Comm_get_attr")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/comm_set_attr.c b/src/mpi/attr/comm_set_attr.c
index 161154f..71b4e6b 100644
--- a/src/mpi/attr/comm_set_attr.c
+++ b/src/mpi/attr/comm_set_attr.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_set_attr  MPI_Comm_set_attr
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_set_attr as PMPI_Comm_set_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val) __attribute__((weak,alias("PMPI_Comm_set_attr")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/keyval_create.c b/src/mpi/attr/keyval_create.c
index a65fc1a..27a194d 100644
--- a/src/mpi/attr/keyval_create.c
+++ b/src/mpi/attr/keyval_create.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Keyval_create  MPI_Keyval_create
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Keyval_create as PMPI_Keyval_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Keyval_create(MPI_Copy_function *copy_fn, MPI_Delete_function *delete_fn,
+                      int *keyval, void *extra_state) __attribute__((weak,alias("PMPI_Keyval_create")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/keyval_free.c b/src/mpi/attr/keyval_free.c
index fa700fe..e107af8 100644
--- a/src/mpi/attr/keyval_free.c
+++ b/src/mpi/attr/keyval_free.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Keyval_free  MPI_Keyval_free
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Keyval_free as PMPI_Keyval_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Keyval_free(int *keyval) __attribute__((weak,alias("PMPI_Keyval_free")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/type_create_keyval.c b/src/mpi/attr/type_create_keyval.c
index dd54e8f..1084696 100644
--- a/src/mpi/attr/type_create_keyval.c
+++ b/src/mpi/attr/type_create_keyval.c
@@ -24,6 +24,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_create_keyval  MPI_Type_create_keyval
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_create_keyval as PMPI_Type_create_keyval
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_keyval(MPI_Type_copy_attr_function *type_copy_attr_fn,
+                           MPI_Type_delete_attr_function *type_delete_attr_fn,
+                           int *type_keyval, void *extra_state) __attribute__((weak,alias("PMPI_Type_create_keyval")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/type_delete_attr.c b/src/mpi/attr/type_delete_attr.c
index 9f89d6a..0f77e00 100644
--- a/src/mpi/attr/type_delete_attr.c
+++ b/src/mpi/attr/type_delete_attr.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_delete_attr  MPI_Type_delete_attr
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_delete_attr as PMPI_Type_delete_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval) __attribute__((weak,alias("PMPI_Type_delete_attr")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/type_free_keyval.c b/src/mpi/attr/type_free_keyval.c
index 160cd83..c52dc3b 100644
--- a/src/mpi/attr/type_free_keyval.c
+++ b/src/mpi/attr/type_free_keyval.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_free_keyval  MPI_Type_free_keyval
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_free_keyval as PMPI_Type_free_keyval
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_free_keyval(int *type_keyval) __attribute__((weak,alias("PMPI_Type_free_keyval")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/type_get_attr.c b/src/mpi/attr/type_get_attr.c
index 3d6a44f..6190d90 100644
--- a/src/mpi/attr/type_get_attr.c
+++ b/src/mpi/attr/type_get_attr.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_get_attr  MPI_Type_get_attr
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_get_attr as PMPI_Type_get_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val, int *flag) __attribute__((weak,alias("PMPI_Type_get_attr")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/type_set_attr.c b/src/mpi/attr/type_set_attr.c
index 2623a00..c1a8f1a 100644
--- a/src/mpi/attr/type_set_attr.c
+++ b/src/mpi/attr/type_set_attr.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_set_attr  MPI_Type_set_attr
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_set_attr as PMPI_Type_set_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_set_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val) __attribute__((weak,alias("PMPI_Type_set_attr")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/win_create_keyval.c b/src/mpi/attr/win_create_keyval.c
index 7b5e6ab..b632701 100644
--- a/src/mpi/attr/win_create_keyval.c
+++ b/src/mpi/attr/win_create_keyval.c
@@ -24,6 +24,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_create_keyval  MPI_Win_create_keyval
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_create_keyval as PMPI_Win_create_keyval
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn,
+                          MPI_Win_delete_attr_function *win_delete_attr_fn, int *win_keyval,
+                          void *extra_state) __attribute__((weak,alias("PMPI_Win_create_keyval")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/win_delete_attr.c b/src/mpi/attr/win_delete_attr.c
index 0165fda..199aa3f 100644
--- a/src/mpi/attr/win_delete_attr.c
+++ b/src/mpi/attr/win_delete_attr.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_delete_attr  MPI_Win_delete_attr
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_delete_attr as PMPI_Win_delete_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_delete_attr(MPI_Win win, int win_keyval) __attribute__((weak,alias("PMPI_Win_delete_attr")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/win_free_keyval.c b/src/mpi/attr/win_free_keyval.c
index 2b8479e..5c58caa 100644
--- a/src/mpi/attr/win_free_keyval.c
+++ b/src/mpi/attr/win_free_keyval.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_free_keyval  MPI_Win_free_keyval
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_free_keyval as PMPI_Win_free_keyval
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_free_keyval(int *win_keyval) __attribute__((weak,alias("PMPI_Win_free_keyval")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/win_get_attr.c b/src/mpi/attr/win_get_attr.c
index ddb253e..b766058 100644
--- a/src/mpi/attr/win_get_attr.c
+++ b/src/mpi/attr/win_get_attr.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_get_attr  MPI_Win_get_attr
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_get_attr as PMPI_Win_get_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val, int *flag) __attribute__((weak,alias("PMPI_Win_get_attr")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/attr/win_set_attr.c b/src/mpi/attr/win_set_attr.c
index 8800e49..a211331 100644
--- a/src/mpi/attr/win_set_attr.c
+++ b/src/mpi/attr/win_set_attr.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_set_attr  MPI_Win_set_attr
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_set_attr as PMPI_Win_set_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val) __attribute__((weak,alias("PMPI_Win_set_attr")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/allgather.c b/src/mpi/coll/allgather.c
index 803ed85..216e601 100644
--- a/src/mpi/coll/allgather.c
+++ b/src/mpi/coll/allgather.c
@@ -45,6 +45,10 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Allgather  MPI_Allgather
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Allgather as PMPI_Allgather
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+                  int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
+                  __attribute__((weak,alias("PMPI_Allgather")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/allgatherv.c b/src/mpi/coll/allgatherv.c
index 82320a3..fe12f92 100644
--- a/src/mpi/coll/allgatherv.c
+++ b/src/mpi/coll/allgatherv.c
@@ -32,6 +32,10 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Allgatherv  MPI_Allgatherv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Allgatherv as PMPI_Allgatherv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+                   const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPI_Comm comm)
+                   __attribute__((weak,alias("PMPI_Allgatherv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/allreduce.c b/src/mpi/coll/allreduce.c
index 4087df6..bc55aaf 100644
--- a/src/mpi/coll/allreduce.c
+++ b/src/mpi/coll/allreduce.c
@@ -63,6 +63,10 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Allreduce  MPI_Allreduce
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Allreduce as PMPI_Allreduce
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+                  MPI_Op op, MPI_Comm comm)
+                  __attribute__((weak,alias("PMPI_Allreduce")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/alltoall.c b/src/mpi/coll/alltoall.c
index 28143cb..3c6ed8b 100644
--- a/src/mpi/coll/alltoall.c
+++ b/src/mpi/coll/alltoall.c
@@ -62,6 +62,10 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Alltoall  MPI_Alltoall
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Alltoall as PMPI_Alltoall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+                 int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
+                 __attribute__((weak,alias("PMPI_Alltoall")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/alltoallv.c b/src/mpi/coll/alltoallv.c
index 665c580..edfe401 100644
--- a/src/mpi/coll/alltoallv.c
+++ b/src/mpi/coll/alltoallv.c
@@ -14,6 +14,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Alltoallv  MPI_Alltoallv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Alltoallv as PMPI_Alltoallv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Alltoallv(const void *sendbuf, const int *sendcounts, const int *sdispls,
+                  MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
+                  const int *rdispls, MPI_Datatype recvtype, MPI_Comm comm)
+                  __attribute__((weak,alias("PMPI_Alltoallv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/alltoallw.c b/src/mpi/coll/alltoallw.c
index af6ac78..11758bb 100644
--- a/src/mpi/coll/alltoallw.c
+++ b/src/mpi/coll/alltoallw.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Alltoallw  MPI_Alltoallw
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Alltoallw as PMPI_Alltoallw
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Alltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
+                  const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
+                  const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm) __attribute__((weak,alias("PMPI_Alltoallw")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/barrier.c b/src/mpi/coll/barrier.c
index 2583a75..0e1ff06 100644
--- a/src/mpi/coll/barrier.c
+++ b/src/mpi/coll/barrier.c
@@ -30,6 +30,8 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Barrier  MPI_Barrier
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Barrier as PMPI_Barrier
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Barrier(MPI_Comm comm) __attribute__((weak,alias("PMPI_Barrier")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/bcast.c b/src/mpi/coll/bcast.c
index 59e0396..38f3757 100644
--- a/src/mpi/coll/bcast.c
+++ b/src/mpi/coll/bcast.c
@@ -103,6 +103,9 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Bcast  MPI_Bcast
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Bcast as PMPI_Bcast
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm)
+              __attribute__((weak,alias("PMPI_Bcast")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/exscan.c b/src/mpi/coll/exscan.c
index 6d143e4..573770f 100644
--- a/src/mpi/coll/exscan.c
+++ b/src/mpi/coll/exscan.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Exscan  MPI_Exscan
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Exscan as PMPI_Exscan
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+               MPI_Op op, MPI_Comm comm)
+               __attribute__((weak,alias("PMPI_Exscan")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/gather.c b/src/mpi/coll/gather.c
index 533c85b..d31af10 100644
--- a/src/mpi/coll/gather.c
+++ b/src/mpi/coll/gather.c
@@ -45,6 +45,10 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Gather  MPI_Gather
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Gather as PMPI_Gather
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+               int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
+               __attribute__((weak,alias("PMPI_Gather")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/gatherv.c b/src/mpi/coll/gatherv.c
index 7934d04..7134af3 100644
--- a/src/mpi/coll/gatherv.c
+++ b/src/mpi/coll/gatherv.c
@@ -34,6 +34,11 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Gatherv  MPI_Gatherv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Gatherv as PMPI_Gatherv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+                const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root,
+                MPI_Comm comm)
+                __attribute__((weak,alias("PMPI_Gatherv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/iallgather.c b/src/mpi/coll/iallgather.c
index 29b8cc1..38c9b32 100644
--- a/src/mpi/coll/iallgather.c
+++ b/src/mpi/coll/iallgather.c
@@ -13,6 +13,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Iallgather  MPI_Iallgather
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Iallgather as PMPI_Iallgather
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+                   int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+                   __attribute__((weak,alias("PMPI_Iallgather")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/iallgatherv.c b/src/mpi/coll/iallgatherv.c
index ce3e827..8fd90a2 100644
--- a/src/mpi/coll/iallgatherv.c
+++ b/src/mpi/coll/iallgatherv.c
@@ -13,6 +13,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Iallgatherv  MPI_Iallgatherv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Iallgatherv as PMPI_Iallgatherv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+                    const int recvcounts[], const int displs[], MPI_Datatype recvtype,
+                    MPI_Comm comm, MPI_Request *request)
+                    __attribute__((weak,alias("PMPI_Iallgatherv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/iallreduce.c b/src/mpi/coll/iallreduce.c
index 0acee0f..4edfeda 100644
--- a/src/mpi/coll/iallreduce.c
+++ b/src/mpi/coll/iallreduce.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Iallreduce  MPI_Iallreduce
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Iallreduce as PMPI_Iallreduce
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+                   MPI_Op op, MPI_Comm comm, MPI_Request *request)
+                   __attribute__((weak,alias("PMPI_Iallreduce")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/ialltoall.c b/src/mpi/coll/ialltoall.c
index 129c521..f83e716 100644
--- a/src/mpi/coll/ialltoall.c
+++ b/src/mpi/coll/ialltoall.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ialltoall  MPI_Ialltoall
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ialltoall as PMPI_Ialltoall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+                  int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+                  __attribute__((weak,alias("PMPI_Ialltoall")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/ialltoallv.c b/src/mpi/coll/ialltoallv.c
index e6bab8b..595fd79 100644
--- a/src/mpi/coll/ialltoallv.c
+++ b/src/mpi/coll/ialltoallv.c
@@ -13,6 +13,12 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ialltoallv  MPI_Ialltoallv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ialltoallv as PMPI_Ialltoallv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
+                   MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
+                   const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm,
+                   MPI_Request *request)
+                   __attribute__((weak,alias("PMPI_Ialltoallv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/ialltoallw.c b/src/mpi/coll/ialltoallw.c
index e0e3675..a6727a2 100644
--- a/src/mpi/coll/ialltoallw.c
+++ b/src/mpi/coll/ialltoallw.c
@@ -13,6 +13,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ialltoallw  MPI_Ialltoallw
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ialltoallw as PMPI_Ialltoallw
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
+                   const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
+                   const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm,
+                   MPI_Request *request) __attribute__((weak,alias("PMPI_Ialltoallw")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/ibarrier.c b/src/mpi/coll/ibarrier.c
index ac16943..7b558c7 100644
--- a/src/mpi/coll/ibarrier.c
+++ b/src/mpi/coll/ibarrier.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ibarrier  MPI_Ibarrier
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ibarrier as PMPI_Ibarrier
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Ibarrier")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/ibcast.c b/src/mpi/coll/ibcast.c
index d23792c..557dc20 100644
--- a/src/mpi/coll/ibcast.c
+++ b/src/mpi/coll/ibcast.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ibcast  MPI_Ibcast
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ibcast as PMPI_Ibcast
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm,
+               MPI_Request *request) __attribute__((weak,alias("PMPI_Ibcast")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/iexscan.c b/src/mpi/coll/iexscan.c
index 6f9eab0..a1f706e 100644
--- a/src/mpi/coll/iexscan.c
+++ b/src/mpi/coll/iexscan.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Iexscan  MPI_Iexscan
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Iexscan as PMPI_Iexscan
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+                MPI_Op op, MPI_Comm comm, MPI_Request *request)
+                __attribute__((weak,alias("PMPI_Iexscan")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/igather.c b/src/mpi/coll/igather.c
index 8a5c9ee..cc52f90 100644
--- a/src/mpi/coll/igather.c
+++ b/src/mpi/coll/igather.c
@@ -13,6 +13,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Igather  MPI_Igather
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Igather as PMPI_Igather
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+                int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm,
+                MPI_Request *request)
+                __attribute__((weak,alias("PMPI_Igather")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/igatherv.c b/src/mpi/coll/igatherv.c
index 88ac3b2..1c492b4 100644
--- a/src/mpi/coll/igatherv.c
+++ b/src/mpi/coll/igatherv.c
@@ -13,6 +13,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Igatherv  MPI_Igatherv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Igatherv as PMPI_Igatherv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+                 const int recvcounts[], const int displs[], MPI_Datatype recvtype, int root,
+                 MPI_Comm comm, MPI_Request *request)
+                 __attribute__((weak,alias("PMPI_Igatherv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/ired_scat.c b/src/mpi/coll/ired_scat.c
index d805195..bc74aac 100644
--- a/src/mpi/coll/ired_scat.c
+++ b/src/mpi/coll/ired_scat.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ireduce_scatter  MPI_Ireduce_scatter
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ireduce_scatter as PMPI_Ireduce_scatter
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
+                        MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
+                        __attribute__((weak,alias("PMPI_Ireduce_scatter")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/ired_scat_block.c b/src/mpi/coll/ired_scat_block.c
index e75fc36..04fa432 100644
--- a/src/mpi/coll/ired_scat_block.c
+++ b/src/mpi/coll/ired_scat_block.c
@@ -14,6 +14,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ireduce_scatter_block  MPI_Ireduce_scatter_block
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ireduce_scatter_block as PMPI_Ireduce_scatter_block
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
+                              MPI_Datatype datatype, MPI_Op op, MPI_Comm comm,
+                              MPI_Request *request)
+                              __attribute__((weak,alias("PMPI_Ireduce_scatter_block")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/ireduce.c b/src/mpi/coll/ireduce.c
index 94180c1..c9b0308 100644
--- a/src/mpi/coll/ireduce.c
+++ b/src/mpi/coll/ireduce.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ireduce  MPI_Ireduce
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ireduce as PMPI_Ireduce
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+                MPI_Op op, int root, MPI_Comm comm, MPI_Request *request)
+                __attribute__((weak,alias("PMPI_Ireduce")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/iscan.c b/src/mpi/coll/iscan.c
index 2c8f82c..9cbea55 100644
--- a/src/mpi/coll/iscan.c
+++ b/src/mpi/coll/iscan.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Iscan  MPI_Iscan
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Iscan as PMPI_Iscan
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+              MPI_Comm comm, MPI_Request *request)
+              __attribute__((weak,alias("PMPI_Iscan")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/iscatter.c b/src/mpi/coll/iscatter.c
index 32ff029..8c51ed4 100644
--- a/src/mpi/coll/iscatter.c
+++ b/src/mpi/coll/iscatter.c
@@ -13,6 +13,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Iscatter  MPI_Iscatter
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Iscatter as PMPI_Iscatter
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+                 int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm,
+                 MPI_Request *request)
+                 __attribute__((weak,alias("PMPI_Iscatter")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/iscatterv.c b/src/mpi/coll/iscatterv.c
index 71c01a2..eca8081 100644
--- a/src/mpi/coll/iscatterv.c
+++ b/src/mpi/coll/iscatterv.c
@@ -13,6 +13,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Iscatterv  MPI_Iscatterv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Iscatterv as PMPI_Iscatterv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[],
+                  MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
+                  int root, MPI_Comm comm, MPI_Request *request)
+                  __attribute__((weak,alias("PMPI_Iscatterv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/op_commutative.c b/src/mpi/coll/op_commutative.c
index 334a7b2..990fe59 100644
--- a/src/mpi/coll/op_commutative.c
+++ b/src/mpi/coll/op_commutative.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Op_commutative  MPI_Op_commutative
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Op_commutative as PMPI_Op_commutative
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Op_commutative(MPI_Op op, int *commute) __attribute__((weak,alias("PMPI_Op_commutative")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/op_create.c b/src/mpi/coll/op_create.c
index 3afeeaa..48e99b8 100644
--- a/src/mpi/coll/op_create.c
+++ b/src/mpi/coll/op_create.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Op_create  MPI_Op_create
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Op_create as PMPI_Op_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Op_create(MPI_User_function *user_fn, int commute, MPI_Op *op) __attribute__((weak,alias("PMPI_Op_create")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/op_free.c b/src/mpi/coll/op_free.c
index cc5de24..e929185 100644
--- a/src/mpi/coll/op_free.c
+++ b/src/mpi/coll/op_free.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Op_free  MPI_Op_free
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Op_free as PMPI_Op_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Op_free(MPI_Op *op) __attribute__((weak,alias("PMPI_Op_free")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/red_scat.c b/src/mpi/coll/red_scat.c
index ba58240..ebf63e8 100644
--- a/src/mpi/coll/red_scat.c
+++ b/src/mpi/coll/red_scat.c
@@ -33,6 +33,10 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Reduce_scatter  MPI_Reduce_scatter
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Reduce_scatter as PMPI_Reduce_scatter
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
+                       MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
+                       __attribute__((weak,alias("PMPI_Reduce_scatter")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/red_scat_block.c b/src/mpi/coll/red_scat_block.c
index b3a8757..2cd929e 100644
--- a/src/mpi/coll/red_scat_block.c
+++ b/src/mpi/coll/red_scat_block.c
@@ -21,6 +21,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Reduce_scatter_block  MPI_Reduce_scatter_block
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Reduce_scatter_block as PMPI_Reduce_scatter_block
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
+                             MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
+                             __attribute__((weak,alias("PMPI_Reduce_scatter_block")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/reduce.c b/src/mpi/coll/reduce.c
index c85fa53..41acffc 100644
--- a/src/mpi/coll/reduce.c
+++ b/src/mpi/coll/reduce.c
@@ -55,6 +55,10 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Reduce  MPI_Reduce
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Reduce as PMPI_Reduce
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+               MPI_Op op, int root, MPI_Comm comm)
+               __attribute__((weak,alias("PMPI_Reduce")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/reduce_local.c b/src/mpi/coll/reduce_local.c
index 113b47f..52b11b9 100644
--- a/src/mpi/coll/reduce_local.c
+++ b/src/mpi/coll/reduce_local.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Reduce_local  MPI_Reduce_local
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Reduce_local as PMPI_Reduce_local
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Reduce_local(const void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype,
+                     MPI_Op op)
+                     __attribute__((weak,alias("PMPI_Reduce_local")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/scan.c b/src/mpi/coll/scan.c
index da6cda3..8a6557b 100644
--- a/src/mpi/coll/scan.c
+++ b/src/mpi/coll/scan.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Scan  MPI_Scan
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Scan as PMPI_Scan
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+             MPI_Comm comm)
+             __attribute__((weak,alias("PMPI_Scan")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/scatter.c b/src/mpi/coll/scatter.c
index b7278a0..f3029ad 100644
--- a/src/mpi/coll/scatter.c
+++ b/src/mpi/coll/scatter.c
@@ -32,6 +32,10 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Scatter  MPI_Scatter
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Scatter as PMPI_Scatter
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+                int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
+                __attribute__((weak,alias("PMPI_Scatter")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/coll/scatterv.c b/src/mpi/coll/scatterv.c
index 1a23ec1..ce4b29e 100644
--- a/src/mpi/coll/scatterv.c
+++ b/src/mpi/coll/scatterv.c
@@ -14,6 +14,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Scatterv  MPI_Scatterv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Scatterv as PMPI_Scatterv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
+                 MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
+                 int root, MPI_Comm comm)
+                 __attribute__((weak,alias("PMPI_Scatterv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_compare.c b/src/mpi/comm/comm_compare.c
index 50d6cb2..37d5a5d 100644
--- a/src/mpi/comm/comm_compare.c
+++ b/src/mpi/comm/comm_compare.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_compare  MPI_Comm_compare
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_compare as PMPI_Comm_compare
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result) __attribute__((weak,alias("PMPI_Comm_compare")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_create.c b/src/mpi/comm/comm_create.c
index 375f5a3..4bb63bb 100644
--- a/src/mpi/comm/comm_create.c
+++ b/src/mpi/comm/comm_create.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_create  MPI_Comm_create
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_create as PMPI_Comm_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_create")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_create_group.c b/src/mpi/comm/comm_create_group.c
index ab946c9..2ce1419 100644
--- a/src/mpi/comm/comm_create_group.c
+++ b/src/mpi/comm/comm_create_group.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_create_group  MPI_Comm_create_group
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_create_group as PMPI_Comm_create_group
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_create_group")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_dup.c b/src/mpi/comm/comm_dup.c
index 00932de..aadba80 100644
--- a/src/mpi/comm/comm_dup.c
+++ b/src/mpi/comm/comm_dup.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_dup  MPI_Comm_dup
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_dup as PMPI_Comm_dup
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_dup")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_dup_with_info.c b/src/mpi/comm/comm_dup_with_info.c
index c3bfdb0..476a9fa 100644
--- a/src/mpi/comm/comm_dup_with_info.c
+++ b/src/mpi/comm/comm_dup_with_info.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_dup_with_info  MPI_Comm_dup_with_info
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_dup_with_info as PMPI_Comm_dup_with_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_dup_with_info")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_free.c b/src/mpi/comm/comm_free.c
index 6387b55..7e4eb9e 100644
--- a/src/mpi/comm/comm_free.c
+++ b/src/mpi/comm/comm_free.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_free  MPI_Comm_free
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_free as PMPI_Comm_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_free(MPI_Comm *comm) __attribute__((weak,alias("PMPI_Comm_free")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_get_info.c b/src/mpi/comm/comm_get_info.c
index c01a6f6..f3bc876 100644
--- a/src/mpi/comm/comm_get_info.c
+++ b/src/mpi/comm/comm_get_info.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_get_info  MPI_Comm_get_info
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_get_info as PMPI_Comm_get_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_get_info(MPI_Comm comm, MPI_Info *info) __attribute__((weak,alias("PMPI_Comm_get_info")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_get_name.c b/src/mpi/comm/comm_get_name.c
index d797f20..574f1dd 100644
--- a/src/mpi/comm/comm_get_name.c
+++ b/src/mpi/comm/comm_get_name.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_get_name  MPI_Comm_get_name
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_get_name as PMPI_Comm_get_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen) __attribute__((weak,alias("PMPI_Comm_get_name")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_group.c b/src/mpi/comm/comm_group.c
index 01d97b0..ba758e5 100644
--- a/src/mpi/comm/comm_group.c
+++ b/src/mpi/comm/comm_group.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_group  MPI_Comm_group
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_group as PMPI_Comm_group
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) __attribute__((weak,alias("PMPI_Comm_group")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_group_failed.c b/src/mpi/comm/comm_group_failed.c
index 25017b9..a5c3b72 100644
--- a/src/mpi/comm/comm_group_failed.c
+++ b/src/mpi/comm/comm_group_failed.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPIX_Comm_group_failed  MPIX_Comm_group_failed
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPIX_Comm_group_failed as PMPIX_Comm_group_failed
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPIX_Comm_group_failed(MPI_Comm comm, MPI_Group *failed_group) __attribute__((weak,alias("PMPIX_Comm_group_failed")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_idup.c b/src/mpi/comm/comm_idup.c
index bcac396..5ceecc1 100644
--- a/src/mpi/comm/comm_idup.c
+++ b/src/mpi/comm/comm_idup.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_idup  MPI_Comm_idup
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_idup as PMPI_Comm_idup
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request) __attribute__((weak,alias("PMPI_Comm_idup")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_rank.c b/src/mpi/comm/comm_rank.c
index a5e03d9..4694319 100644
--- a/src/mpi/comm/comm_rank.c
+++ b/src/mpi/comm/comm_rank.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_rank  MPI_Comm_rank
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_rank as PMPI_Comm_rank
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_rank(MPI_Comm comm, int *rank) __attribute__((weak,alias("PMPI_Comm_rank")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_reenable_anysource.c b/src/mpi/comm/comm_reenable_anysource.c
index 30e4cd5..05cf847 100644
--- a/src/mpi/comm/comm_reenable_anysource.c
+++ b/src/mpi/comm/comm_reenable_anysource.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPIX_Comm_reenable_anysource  MPIX_Comm_reenable_anysource
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPIX_Comm_reenable_anysource as PMPIX_Comm_reenable_anysource
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPIX_Comm_reenable_anysource(MPI_Comm comm, MPI_Group *failed_group) __attribute__((weak,alias("PMPIX_Comm_reenable_anysource")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_remote_group.c b/src/mpi/comm/comm_remote_group.c
index 4c2edd1..1a97702 100644
--- a/src/mpi/comm/comm_remote_group.c
+++ b/src/mpi/comm/comm_remote_group.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_remote_group  MPI_Comm_remote_group
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_remote_group as PMPI_Comm_remote_group
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group) __attribute__((weak,alias("PMPI_Comm_remote_group")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_remote_group_failed.c b/src/mpi/comm/comm_remote_group_failed.c
index a7616fb..30635e6 100644
--- a/src/mpi/comm/comm_remote_group_failed.c
+++ b/src/mpi/comm/comm_remote_group_failed.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPIX_Comm_remote_group_failed  MPIX_Comm_remote_group_failed
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPIX_Comm_remote_group_failed as PMPIX_Comm_remote_group_failed
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPIX_Comm_remote_group_failed(MPI_Comm comm, MPI_Group *failed_group) __attribute__((weak,alias("PMPIX_Comm_remote_group_failed")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_remote_size.c b/src/mpi/comm/comm_remote_size.c
index ebe9361..72e73e4 100644
--- a/src/mpi/comm/comm_remote_size.c
+++ b/src/mpi/comm/comm_remote_size.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_remote_size  MPI_Comm_remote_size
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_remote_size as PMPI_Comm_remote_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_remote_size(MPI_Comm comm, int *size) __attribute__((weak,alias("PMPI_Comm_remote_size")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_set_info.c b/src/mpi/comm/comm_set_info.c
index 18df251..2bf3c8f 100644
--- a/src/mpi/comm/comm_set_info.c
+++ b/src/mpi/comm/comm_set_info.c
@@ -16,6 +16,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_set_info  MPI_Comm_set_info
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_set_info as PMPI_Comm_set_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info) __attribute__((weak,alias("PMPI_Comm_set_info")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_set_name.c b/src/mpi/comm/comm_set_name.c
index 58bc286..75aa49a 100644
--- a/src/mpi/comm/comm_set_name.c
+++ b/src/mpi/comm/comm_set_name.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_set_name  MPI_Comm_set_name
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_set_name as PMPI_Comm_set_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_set_name(MPI_Comm comm, const char *comm_name) __attribute__((weak,alias("PMPI_Comm_set_name")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_size.c b/src/mpi/comm/comm_size.c
index c7ebe7d..7fc6276 100644
--- a/src/mpi/comm/comm_size.c
+++ b/src/mpi/comm/comm_size.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_size  MPI_Comm_size
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_size as PMPI_Comm_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_size(MPI_Comm comm, int *size) __attribute__((weak,alias("PMPI_Comm_size")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_split.c b/src/mpi/comm/comm_split.c
index 83658bb..02a8276 100644
--- a/src/mpi/comm/comm_split.c
+++ b/src/mpi/comm/comm_split.c
@@ -36,6 +36,8 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Comm_split  MPI_Comm_split
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_split as PMPI_Comm_split
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_split")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_split_type.c b/src/mpi/comm/comm_split_type.c
index 928b698..5e5d685 100644
--- a/src/mpi/comm/comm_split_type.c
+++ b/src/mpi/comm/comm_split_type.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_split_type  MPI_Comm_split_type
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_split_type as PMPI_Comm_split_type
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_split_type")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/comm_test_inter.c b/src/mpi/comm/comm_test_inter.c
index 152e3be..4297c2c 100644
--- a/src/mpi/comm/comm_test_inter.c
+++ b/src/mpi/comm/comm_test_inter.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_test_inter  MPI_Comm_test_inter
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_test_inter as PMPI_Comm_test_inter
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_test_inter(MPI_Comm comm, int *flag) __attribute__((weak,alias("PMPI_Comm_test_inter")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/intercomm_create.c b/src/mpi/comm/intercomm_create.c
index 04a4ab3..d38d61a 100644
--- a/src/mpi/comm/intercomm_create.c
+++ b/src/mpi/comm/intercomm_create.c
@@ -17,6 +17,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Intercomm_create  MPI_Intercomm_create
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Intercomm_create as PMPI_Intercomm_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm,
+                         int remote_leader, int tag, MPI_Comm *newintercomm) __attribute__((weak,alias("PMPI_Intercomm_create")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/comm/intercomm_merge.c b/src/mpi/comm/intercomm_merge.c
index 5c7b8ce..10b662a 100644
--- a/src/mpi/comm/intercomm_merge.c
+++ b/src/mpi/comm/intercomm_merge.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Intercomm_merge  MPI_Intercomm_merge
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Intercomm_merge as PMPI_Intercomm_merge
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm) __attribute__((weak,alias("PMPI_Intercomm_merge")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/address.c b/src/mpi/datatype/address.c
index 9dc8a01..866aef2 100644
--- a/src/mpi/datatype/address.c
+++ b/src/mpi/datatype/address.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Address  MPI_Address
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Address as PMPI_Address
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Address(const void *location, MPI_Aint *address) __attribute__((weak,alias("PMPI_Address")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/get_address.c b/src/mpi/datatype/get_address.c
index ea436ca..a53980c 100644
--- a/src/mpi/datatype/get_address.c
+++ b/src/mpi/datatype/get_address.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Get_address  MPI_Get_address
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Get_address as PMPI_Get_address
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_address(const void *location, MPI_Aint *address) __attribute__((weak,alias("PMPI_Get_address")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/get_count.c b/src/mpi/datatype/get_count.c
index 130f7ac..258fb86 100644
--- a/src/mpi/datatype/get_count.c
+++ b/src/mpi/datatype/get_count.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Get_count  MPI_Get_count
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Get_count as PMPI_Get_count
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_count(const MPI_Status *status, MPI_Datatype datatype, int *count) __attribute__((weak,alias("PMPI_Get_count")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/get_elements.c b/src/mpi/datatype/get_elements.c
index e02b5b3..1dcd949 100644
--- a/src/mpi/datatype/get_elements.c
+++ b/src/mpi/datatype/get_elements.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Get_elements  MPI_Get_elements
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Get_elements as PMPI_Get_elements
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count) __attribute__((weak,alias("PMPI_Get_elements")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/get_elements_x.c b/src/mpi/datatype/get_elements_x.c
index b15b7c2..092c1af 100644
--- a/src/mpi/datatype/get_elements_x.c
+++ b/src/mpi/datatype/get_elements_x.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Get_elements_x  MPI_Get_elements_x
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Get_elements_x as PMPI_Get_elements_x
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_elements_x(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *count) __attribute__((weak,alias("PMPI_Get_elements_x")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/pack.c b/src/mpi/datatype/pack.c
index fb5456c..21e00f7 100644
--- a/src/mpi/datatype/pack.c
+++ b/src/mpi/datatype/pack.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Pack  MPI_Pack
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Pack as PMPI_Pack
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Pack(const void *inbuf, int incount, MPI_Datatype datatype, void *outbuf,
+             int outsize, int *position, MPI_Comm comm) __attribute__((weak,alias("PMPI_Pack")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/pack_external.c b/src/mpi/datatype/pack_external.c
index 081f224..7cb36a4 100644
--- a/src/mpi/datatype/pack_external.c
+++ b/src/mpi/datatype/pack_external.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Pack_external  MPI_Pack_external
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Pack_external as PMPI_Pack_external
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Pack_external(const char datarep[], const void *inbuf, int incount,
+                      MPI_Datatype datatype, void *outbuf, MPI_Aint outsize, MPI_Aint *position)
+                      __attribute__((weak,alias("PMPI_Pack_external")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/pack_external_size.c b/src/mpi/datatype/pack_external_size.c
index cb0f797..7f5284d 100644
--- a/src/mpi/datatype/pack_external_size.c
+++ b/src/mpi/datatype/pack_external_size.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Pack_external_size  MPI_Pack_external_size
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Pack_external_size as PMPI_Pack_external_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Pack_external_size(const char datarep[], int incount, MPI_Datatype datatype,
+                           MPI_Aint *size) __attribute__((weak,alias("PMPI_Pack_external_size")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/pack_size.c b/src/mpi/datatype/pack_size.c
index a705c9e..aa48a5b 100644
--- a/src/mpi/datatype/pack_size.c
+++ b/src/mpi/datatype/pack_size.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Pack_size  MPI_Pack_size
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Pack_size as PMPI_Pack_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size) __attribute__((weak,alias("PMPI_Pack_size")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/status_set_elements.c b/src/mpi/datatype/status_set_elements.c
index ec60b65..cf8798c 100644
--- a/src/mpi/datatype/status_set_elements.c
+++ b/src/mpi/datatype/status_set_elements.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Status_set_elements  MPI_Status_set_elements
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Status_set_elements as PMPI_Status_set_elements
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, int count) __attribute__((weak,alias("PMPI_Status_set_elements")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/status_set_elements_x.c b/src/mpi/datatype/status_set_elements_x.c
index e2acee9..ce5a19c 100644
--- a/src/mpi/datatype/status_set_elements_x.c
+++ b/src/mpi/datatype/status_set_elements_x.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Status_set_elements_x  MPI_Status_set_elements_x
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Status_set_elements_x as PMPI_Status_set_elements_x
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Count count) __attribute__((weak,alias("PMPI_Status_set_elements_x")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_commit.c b/src/mpi/datatype/type_commit.c
index 90d7284..8ed3fcb 100644
--- a/src/mpi/datatype/type_commit.c
+++ b/src/mpi/datatype/type_commit.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_commit  MPI_Type_commit
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_commit as PMPI_Type_commit
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_commit(MPI_Datatype *datatype) __attribute__((weak,alias("PMPI_Type_commit")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_contiguous.c b/src/mpi/datatype/type_contiguous.c
index 343d307..91e6f00 100644
--- a/src/mpi/datatype/type_contiguous.c
+++ b/src/mpi/datatype/type_contiguous.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_contiguous  MPI_Type_contiguous
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_contiguous as PMPI_Type_contiguous
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_contiguous")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_create_darray.c b/src/mpi/datatype/type_create_darray.c
index bcb70c2..0047f38 100644
--- a/src/mpi/datatype/type_create_darray.c
+++ b/src/mpi/datatype/type_create_darray.c
@@ -14,6 +14,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_create_darray  MPI_Type_create_darray
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_create_darray as PMPI_Type_create_darray
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_darray(int size, int rank, int ndims, const int array_of_gsizes[],
+                           const int array_of_distribs[], const int array_of_dargs[],
+                           const int array_of_psizes[], int order, MPI_Datatype oldtype,
+                           MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_darray")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_create_hindexed.c b/src/mpi/datatype/type_create_hindexed.c
index 906af0b..b65dffc 100644
--- a/src/mpi/datatype/type_create_hindexed.c
+++ b/src/mpi/datatype/type_create_hindexed.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_create_hindexed  MPI_Type_create_hindexed
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_create_hindexed as PMPI_Type_create_hindexed
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_hindexed(int count, const int array_of_blocklengths[],
+                             const MPI_Aint array_of_displacements[], MPI_Datatype oldtype,
+                             MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_hindexed")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_create_hindexed_block.c b/src/mpi/datatype/type_create_hindexed_block.c
index 49ba529..3164e4d 100644
--- a/src/mpi/datatype/type_create_hindexed_block.c
+++ b/src/mpi/datatype/type_create_hindexed_block.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_create_hindexed_block  MPI_Type_create_hindexed_block
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_create_hindexed_block as PMPI_Type_create_hindexed_block
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_hindexed_block(int count, int blocklength,
+                                   const MPI_Aint array_of_displacements[],
+                                   MPI_Datatype oldtype, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_hindexed_block")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_create_hvector.c b/src/mpi/datatype/type_create_hvector.c
index d1adba8..d1b1cfb 100644
--- a/src/mpi/datatype/type_create_hvector.c
+++ b/src/mpi/datatype/type_create_hvector.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_create_hvector  MPI_Type_create_hvector
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_create_hvector as PMPI_Type_create_hvector
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype,
+                            MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_hvector")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_create_indexed_block.c b/src/mpi/datatype/type_create_indexed_block.c
index 81d0220..0107d0f 100644
--- a/src/mpi/datatype/type_create_indexed_block.c
+++ b/src/mpi/datatype/type_create_indexed_block.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_create_indexed_block  MPI_Type_create_indexed_block
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_create_indexed_block as PMPI_Type_create_indexed_block
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_indexed_block(int count, int blocklength, const int array_of_displacements[],
+                                  MPI_Datatype oldtype, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_indexed_block")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_create_resized.c b/src/mpi/datatype/type_create_resized.c
index 493948f..b6049b2 100644
--- a/src/mpi/datatype/type_create_resized.c
+++ b/src/mpi/datatype/type_create_resized.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_create_resized  MPI_Type_create_resized
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_create_resized as PMPI_Type_create_resized
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_resized(MPI_Datatype oldtype, MPI_Aint lb, MPI_Aint extent,
+                            MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_resized")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_create_struct.c b/src/mpi/datatype/type_create_struct.c
index ee5aa66..13e1bb0 100644
--- a/src/mpi/datatype/type_create_struct.c
+++ b/src/mpi/datatype/type_create_struct.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_create_struct  MPI_Type_create_struct
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_create_struct as PMPI_Type_create_struct
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_struct(int count, const int array_of_blocklengths[],
+                           const MPI_Aint array_of_displacements[],
+                           const MPI_Datatype array_of_types[], MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_struct")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_create_subarray.c b/src/mpi/datatype/type_create_subarray.c
index 4a61b66..0089f37 100644
--- a/src/mpi/datatype/type_create_subarray.c
+++ b/src/mpi/datatype/type_create_subarray.c
@@ -13,6 +13,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_create_subarray  MPI_Type_create_subarray
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_create_subarray as PMPI_Type_create_subarray
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_subarray(int ndims, const int array_of_sizes[],
+                             const int array_of_subsizes[], const int array_of_starts[],
+                             int order, MPI_Datatype oldtype, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_subarray")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_dup.c b/src/mpi/datatype/type_dup.c
index c9fbb38..f8626a1 100644
--- a/src/mpi/datatype/type_dup.c
+++ b/src/mpi/datatype/type_dup.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_dup  MPI_Type_dup
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_dup as PMPI_Type_dup
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_dup(MPI_Datatype oldtype, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_dup")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_extent.c b/src/mpi/datatype/type_extent.c
index 1ef9eb7..82caf09 100644
--- a/src/mpi/datatype/type_extent.c
+++ b/src/mpi/datatype/type_extent.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_extent  MPI_Type_extent
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_extent as PMPI_Type_extent
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent) __attribute__((weak,alias("PMPI_Type_extent")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_free.c b/src/mpi/datatype/type_free.c
index b8d8170..cb1c5f1 100644
--- a/src/mpi/datatype/type_free.c
+++ b/src/mpi/datatype/type_free.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_free  MPI_Type_free
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_free as PMPI_Type_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_free(MPI_Datatype *datatype) __attribute__((weak,alias("PMPI_Type_free")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_get_contents.c b/src/mpi/datatype/type_get_contents.c
index 279f416..c4b4230 100644
--- a/src/mpi/datatype/type_get_contents.c
+++ b/src/mpi/datatype/type_get_contents.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_get_contents  MPI_Type_get_contents
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_get_contents as PMPI_Type_get_contents
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_contents(MPI_Datatype datatype, int max_integers, int max_addresses,
+                          int max_datatypes, int array_of_integers[],
+                          MPI_Aint array_of_addresses[], MPI_Datatype array_of_datatypes[]) __attribute__((weak,alias("PMPI_Type_get_contents")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_get_envelope.c b/src/mpi/datatype/type_get_envelope.c
index 1c94153..486953d 100644
--- a/src/mpi/datatype/type_get_envelope.c
+++ b/src/mpi/datatype/type_get_envelope.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_get_envelope  MPI_Type_get_envelope
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_get_envelope as PMPI_Type_get_envelope
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_envelope(MPI_Datatype datatype, int *num_integers, int *num_addresses,
+                          int *num_datatypes, int *combiner) __attribute__((weak,alias("PMPI_Type_get_envelope")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_get_extent.c b/src/mpi/datatype/type_get_extent.c
index c3d3bc6..d378df0 100644
--- a/src/mpi/datatype/type_get_extent.c
+++ b/src/mpi/datatype/type_get_extent.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_get_extent  MPI_Type_get_extent
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_get_extent as PMPI_Type_get_extent
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent) __attribute__((weak,alias("PMPI_Type_get_extent")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_get_extent_x.c b/src/mpi/datatype/type_get_extent_x.c
index b59a740..a3fc110 100644
--- a/src/mpi/datatype/type_get_extent_x.c
+++ b/src/mpi/datatype/type_get_extent_x.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_get_extent_x  MPI_Type_get_extent_x
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_get_extent_x as PMPI_Type_get_extent_x
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent) __attribute__((weak,alias("PMPI_Type_get_extent_x")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_get_name.c b/src/mpi/datatype/type_get_name.c
index e550dfb..90c0b80 100644
--- a/src/mpi/datatype/type_get_name.c
+++ b/src/mpi/datatype/type_get_name.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_get_name  MPI_Type_get_name
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_get_name as PMPI_Type_get_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen) __attribute__((weak,alias("PMPI_Type_get_name")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_get_true_extent.c b/src/mpi/datatype/type_get_true_extent.c
index d0d0093..8cfcd57 100644
--- a/src/mpi/datatype/type_get_true_extent.c
+++ b/src/mpi/datatype/type_get_true_extent.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_get_true_extent  MPI_Type_get_true_extent
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_get_true_extent as PMPI_Type_get_true_extent
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb, MPI_Aint *true_extent) __attribute__((weak,alias("PMPI_Type_get_true_extent")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_get_true_extent_x.c b/src/mpi/datatype/type_get_true_extent_x.c
index 48c7778..3c5653d 100644
--- a/src/mpi/datatype/type_get_true_extent_x.c
+++ b/src/mpi/datatype/type_get_true_extent_x.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_get_true_extent_x  MPI_Type_get_true_extent_x
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_get_true_extent_x as PMPI_Type_get_true_extent_x
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent) __attribute__((weak,alias("PMPI_Type_get_true_extent_x")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_hindexed.c b/src/mpi/datatype/type_hindexed.c
index 6ec5474..f14a7cf 100644
--- a/src/mpi/datatype/type_hindexed.c
+++ b/src/mpi/datatype/type_hindexed.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_hindexed  MPI_Type_hindexed
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_hindexed as PMPI_Type_hindexed
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_hindexed(int count, const int *array_of_blocklengths,
+                      const MPI_Aint *array_of_displacements, MPI_Datatype oldtype,
+                      MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_hindexed")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_hvector.c b/src/mpi/datatype/type_hvector.c
index bea38b8..30f5903 100644
--- a/src/mpi/datatype/type_hvector.c
+++ b/src/mpi/datatype/type_hvector.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_hvector  MPI_Type_hvector
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_hvector as PMPI_Type_hvector
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype,
+                     MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_hvector")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_indexed.c b/src/mpi/datatype/type_indexed.c
index c162ef7..b78cb04 100644
--- a/src/mpi/datatype/type_indexed.c
+++ b/src/mpi/datatype/type_indexed.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_indexed  MPI_Type_indexed
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_indexed as PMPI_Type_indexed
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_indexed(int count, const int *array_of_blocklengths,
+                     const int *array_of_displacements, MPI_Datatype oldtype,
+                     MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_indexed")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_lb.c b/src/mpi/datatype/type_lb.c
index 09935b2..f357a81 100644
--- a/src/mpi/datatype/type_lb.c
+++ b/src/mpi/datatype/type_lb.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_lb  MPI_Type_lb
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_lb as PMPI_Type_lb
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement) __attribute__((weak,alias("PMPI_Type_lb")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_match_size.c b/src/mpi/datatype/type_match_size.c
index 4a318e8..755673d 100644
--- a/src/mpi/datatype/type_match_size.c
+++ b/src/mpi/datatype/type_match_size.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_match_size  MPI_Type_match_size
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_match_size as PMPI_Type_match_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype) __attribute__((weak,alias("PMPI_Type_match_size")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_set_name.c b/src/mpi/datatype/type_set_name.c
index 2a7dcd0..e050bf3 100644
--- a/src/mpi/datatype/type_set_name.c
+++ b/src/mpi/datatype/type_set_name.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_set_name  MPI_Type_set_name
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_set_name as PMPI_Type_set_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_set_name(MPI_Datatype datatype, const char *type_name) __attribute__((weak,alias("PMPI_Type_set_name")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_size.c b/src/mpi/datatype/type_size.c
index c1e57c5..2347e2f 100644
--- a/src/mpi/datatype/type_size.c
+++ b/src/mpi/datatype/type_size.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_size  MPI_Type_size
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_size as PMPI_Type_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_size(MPI_Datatype datatype, int *size) __attribute__((weak,alias("PMPI_Type_size")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_size_x.c b/src/mpi/datatype/type_size_x.c
index 8efcb97..2f3fa90 100644
--- a/src/mpi/datatype/type_size_x.c
+++ b/src/mpi/datatype/type_size_x.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_size_x  MPI_Type_size_x
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_size_x as PMPI_Type_size_x
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_size_x(MPI_Datatype datatype, MPI_Count *size) __attribute__((weak,alias("PMPI_Type_size_x")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_struct.c b/src/mpi/datatype/type_struct.c
index b40101a..6e7cedf 100644
--- a/src/mpi/datatype/type_struct.c
+++ b/src/mpi/datatype/type_struct.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_struct  MPI_Type_struct
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_struct as PMPI_Type_struct
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_struct(int count, const int *array_of_blocklengths,
+                    const MPI_Aint *array_of_displacements,
+                    const MPI_Datatype *array_of_types, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_struct")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_ub.c b/src/mpi/datatype/type_ub.c
index 5de72b0..afc6a45 100644
--- a/src/mpi/datatype/type_ub.c
+++ b/src/mpi/datatype/type_ub.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_ub  MPI_Type_ub
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_ub as PMPI_Type_ub
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement) __attribute__((weak,alias("PMPI_Type_ub")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/type_vector.c b/src/mpi/datatype/type_vector.c
index 7bb63c0..0ca1bbf 100644
--- a/src/mpi/datatype/type_vector.c
+++ b/src/mpi/datatype/type_vector.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Type_vector  MPI_Type_vector
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Type_vector as PMPI_Type_vector
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_vector(int count, int blocklength, int stride, MPI_Datatype oldtype,
+                    MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_vector")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/unpack.c b/src/mpi/datatype/unpack.c
index bb567a0..997c811 100644
--- a/src/mpi/datatype/unpack.c
+++ b/src/mpi/datatype/unpack.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Unpack  MPI_Unpack
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Unpack as PMPI_Unpack
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Unpack(const void *inbuf, int insize, int *position, void *outbuf, int outcount,
+               MPI_Datatype datatype, MPI_Comm comm) __attribute__((weak,alias("PMPI_Unpack")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/datatype/unpack_external.c b/src/mpi/datatype/unpack_external.c
index 283e6e3..df96ebe 100644
--- a/src/mpi/datatype/unpack_external.c
+++ b/src/mpi/datatype/unpack_external.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Unpack_external  MPI_Unpack_external
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Unpack_external as PMPI_Unpack_external
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Unpack_external(const char datarep[], const void *inbuf, MPI_Aint insize,
+                        MPI_Aint *position, void *outbuf, int outcount, MPI_Datatype datatype)
+                        __attribute__((weak,alias("PMPI_Unpack_external")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/add_error_class.c b/src/mpi/errhan/add_error_class.c
index 5ee91ff..1f4622f 100644
--- a/src/mpi/errhan/add_error_class.c
+++ b/src/mpi/errhan/add_error_class.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Add_error_class  MPI_Add_error_class
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Add_error_class as PMPI_Add_error_class
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Add_error_class(int *errorclass) __attribute__((weak,alias("PMPI_Add_error_class")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/add_error_code.c b/src/mpi/errhan/add_error_code.c
index 6f856fe..39b49ea 100644
--- a/src/mpi/errhan/add_error_code.c
+++ b/src/mpi/errhan/add_error_code.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Add_error_code  MPI_Add_error_code
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Add_error_code as PMPI_Add_error_code
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Add_error_code(int errorclass, int *errorcode) __attribute__((weak,alias("PMPI_Add_error_code")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/add_error_string.c b/src/mpi/errhan/add_error_string.c
index 930d8f0..493bed3 100644
--- a/src/mpi/errhan/add_error_string.c
+++ b/src/mpi/errhan/add_error_string.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Add_error_string  MPI_Add_error_string
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Add_error_string as PMPI_Add_error_string
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Add_error_string(int errorcode, const char *string) __attribute__((weak,alias("PMPI_Add_error_string")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/comm_call_errhandler.c b/src/mpi/errhan/comm_call_errhandler.c
index a79610e..36144f6 100644
--- a/src/mpi/errhan/comm_call_errhandler.c
+++ b/src/mpi/errhan/comm_call_errhandler.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_call_errhandler  MPI_Comm_call_errhandler
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_call_errhandler as PMPI_Comm_call_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode) __attribute__((weak,alias("PMPI_Comm_call_errhandler")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/comm_create_errhandler.c b/src/mpi/errhan/comm_create_errhandler.c
index 7ceb8a9..c0b3828 100644
--- a/src/mpi/errhan/comm_create_errhandler.c
+++ b/src/mpi/errhan/comm_create_errhandler.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_create_errhandler  MPI_Comm_create_errhandler
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_create_errhandler as PMPI_Comm_create_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_create_errhandler(MPI_Comm_errhandler_function *comm_errhandler_fn,
+                               MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Comm_create_errhandler")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/comm_get_errhandler.c b/src/mpi/errhan/comm_get_errhandler.c
index dc84f8a..c57fdf0 100644
--- a/src/mpi/errhan/comm_get_errhandler.c
+++ b/src/mpi/errhan/comm_get_errhandler.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_get_errhandler  MPI_Comm_get_errhandler
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_get_errhandler as PMPI_Comm_get_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Comm_get_errhandler")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/comm_set_errhandler.c b/src/mpi/errhan/comm_set_errhandler.c
index e86f925..65812e4 100644
--- a/src/mpi/errhan/comm_set_errhandler.c
+++ b/src/mpi/errhan/comm_set_errhandler.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_set_errhandler  MPI_Comm_set_errhandler
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_set_errhandler as PMPI_Comm_set_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler) __attribute__((weak,alias("PMPI_Comm_set_errhandler")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/errhandler_create.c b/src/mpi/errhan/errhandler_create.c
index 0dbcc5e..32f1721 100644
--- a/src/mpi/errhan/errhandler_create.c
+++ b/src/mpi/errhan/errhandler_create.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Errhandler_create  MPI_Errhandler_create
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Errhandler_create as PMPI_Errhandler_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Errhandler_create(MPI_Handler_function *function, MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Errhandler_create")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/errhandler_free.c b/src/mpi/errhan/errhandler_free.c
index c5d6ec0..312262b 100644
--- a/src/mpi/errhan/errhandler_free.c
+++ b/src/mpi/errhan/errhandler_free.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Errhandler_free  MPI_Errhandler_free
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Errhandler_free as PMPI_Errhandler_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Errhandler_free(MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Errhandler_free")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/errhandler_get.c b/src/mpi/errhan/errhandler_get.c
index c4b9846..bbbe345 100644
--- a/src/mpi/errhan/errhandler_get.c
+++ b/src/mpi/errhan/errhandler_get.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Errhandler_get  MPI_Errhandler_get
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Errhandler_get as PMPI_Errhandler_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Errhandler_get")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/errhandler_set.c b/src/mpi/errhan/errhandler_set.c
index 243f83a..63c85c8 100644
--- a/src/mpi/errhan/errhandler_set.c
+++ b/src/mpi/errhan/errhandler_set.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Errhandler_set  MPI_Errhandler_set
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Errhandler_set as PMPI_Errhandler_set
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler) __attribute__((weak,alias("PMPI_Errhandler_set")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/error_class.c b/src/mpi/errhan/error_class.c
index d50001f..44b309b 100644
--- a/src/mpi/errhan/error_class.c
+++ b/src/mpi/errhan/error_class.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Error_class  MPI_Error_class
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Error_class as PMPI_Error_class
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Error_class(int errorcode, int *errorclass) __attribute__((weak,alias("PMPI_Error_class")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/error_string.c b/src/mpi/errhan/error_string.c
index dca8634..e967c66 100644
--- a/src/mpi/errhan/error_string.c
+++ b/src/mpi/errhan/error_string.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Error_string  MPI_Error_string
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Error_string as PMPI_Error_string
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Error_string(int errorcode, char *string, int *resultlen) __attribute__((weak,alias("PMPI_Error_string")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/file_call_errhandler.c b/src/mpi/errhan/file_call_errhandler.c
index 60a2765..e132b24 100644
--- a/src/mpi/errhan/file_call_errhandler.c
+++ b/src/mpi/errhan/file_call_errhandler.c
@@ -17,6 +17,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_File_call_errhandler  MPI_File_call_errhandler
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_call_errhandler as PMPI_File_call_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_call_errhandler(MPI_File fh, int errorcode) __attribute__((weak,alias("PMPI_File_call_errhandler")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/file_create_errhandler.c b/src/mpi/errhan/file_create_errhandler.c
index bdcd91b..8560ff3 100644
--- a/src/mpi/errhan/file_create_errhandler.c
+++ b/src/mpi/errhan/file_create_errhandler.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_File_create_errhandler  MPI_File_create_errhandler
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_create_errhandler as PMPI_File_create_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_create_errhandler(MPI_File_errhandler_function *file_errhandler_fn,
+                               MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_File_create_errhandler")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/file_get_errhandler.c b/src/mpi/errhan/file_get_errhandler.c
index e970e9a..e03a830 100644
--- a/src/mpi/errhan/file_get_errhandler.c
+++ b/src/mpi/errhan/file_get_errhandler.c
@@ -18,6 +18,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_File_get_errhandler  MPI_File_get_errhandler
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_get_errhandler as PMPI_File_get_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_File_get_errhandler")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/file_set_errhandler.c b/src/mpi/errhan/file_set_errhandler.c
index 1161b8a..d2ff503 100644
--- a/src/mpi/errhan/file_set_errhandler.c
+++ b/src/mpi/errhan/file_set_errhandler.c
@@ -18,6 +18,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_File_set_errhandler  MPI_File_set_errhandler
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_set_errhandler as PMPI_File_set_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler) __attribute__((weak,alias("PMPI_File_set_errhandler")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/win_call_errhandler.c b/src/mpi/errhan/win_call_errhandler.c
index 574ce71..0499a93 100644
--- a/src/mpi/errhan/win_call_errhandler.c
+++ b/src/mpi/errhan/win_call_errhandler.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_call_errhandler  MPI_Win_call_errhandler
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_call_errhandler as PMPI_Win_call_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_call_errhandler(MPI_Win win, int errorcode) __attribute__((weak,alias("PMPI_Win_call_errhandler")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/win_create_errhandler.c b/src/mpi/errhan/win_create_errhandler.c
index 99cb92a..10f7d01 100644
--- a/src/mpi/errhan/win_create_errhandler.c
+++ b/src/mpi/errhan/win_create_errhandler.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_create_errhandler  MPI_Win_create_errhandler
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_create_errhandler as PMPI_Win_create_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_create_errhandler(MPI_Win_errhandler_function *win_errhandler_fn,
+                              MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Win_create_errhandler")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/win_get_errhandler.c b/src/mpi/errhan/win_get_errhandler.c
index 6b493e6..89950eb 100644
--- a/src/mpi/errhan/win_get_errhandler.c
+++ b/src/mpi/errhan/win_get_errhandler.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_get_errhandler  MPI_Win_get_errhandler
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_get_errhandler as PMPI_Win_get_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Win_get_errhandler")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/errhan/win_set_errhandler.c b/src/mpi/errhan/win_set_errhandler.c
index 4841de3..49e53cc 100644
--- a/src/mpi/errhan/win_set_errhandler.c
+++ b/src/mpi/errhan/win_set_errhandler.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_set_errhandler  MPI_Win_set_errhandler
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_set_errhandler as PMPI_Win_set_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler) __attribute__((weak,alias("PMPI_Win_set_errhandler")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/group/group_compare.c b/src/mpi/group/group_compare.c
index 077c793..ca361bf 100644
--- a/src/mpi/group/group_compare.c
+++ b/src/mpi/group/group_compare.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Group_compare  MPI_Group_compare
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Group_compare as PMPI_Group_compare
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result) __attribute__((weak,alias("PMPI_Group_compare")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/group/group_difference.c b/src/mpi/group/group_difference.c
index f5f2350..2232eea 100644
--- a/src/mpi/group/group_difference.c
+++ b/src/mpi/group/group_difference.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Group_difference  MPI_Group_difference
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Group_difference as PMPI_Group_difference
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_difference")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/group/group_excl.c b/src/mpi/group/group_excl.c
index 3c4cdb2..c81cbd9 100644
--- a/src/mpi/group/group_excl.c
+++ b/src/mpi/group/group_excl.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Group_excl  MPI_Group_excl
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Group_excl as PMPI_Group_excl
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_excl")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/group/group_free.c b/src/mpi/group/group_free.c
index bfc632c..f292449 100644
--- a/src/mpi/group/group_free.c
+++ b/src/mpi/group/group_free.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Group_free  MPI_Group_free
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Group_free as PMPI_Group_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_free(MPI_Group *group) __attribute__((weak,alias("PMPI_Group_free")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/group/group_incl.c b/src/mpi/group/group_incl.c
index 3d46d9d..913dc27 100644
--- a/src/mpi/group/group_incl.c
+++ b/src/mpi/group/group_incl.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Group_incl  MPI_Group_incl
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Group_incl as PMPI_Group_incl
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_incl")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/group/group_intersection.c b/src/mpi/group/group_intersection.c
index 9026623..7f662d7 100644
--- a/src/mpi/group/group_intersection.c
+++ b/src/mpi/group/group_intersection.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Group_intersection  MPI_Group_intersection
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Group_intersection as PMPI_Group_intersection
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_intersection")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/group/group_range_excl.c b/src/mpi/group/group_range_excl.c
index 13d1ae3..9950217 100644
--- a/src/mpi/group/group_range_excl.c
+++ b/src/mpi/group/group_range_excl.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Group_range_excl  MPI_Group_range_excl
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Group_range_excl as PMPI_Group_range_excl
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_range_excl")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/group/group_range_incl.c b/src/mpi/group/group_range_incl.c
index 50a0e93..9cace13 100644
--- a/src/mpi/group/group_range_incl.c
+++ b/src/mpi/group/group_range_incl.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Group_range_incl  MPI_Group_range_incl
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Group_range_incl as PMPI_Group_range_incl
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_range_incl")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/group/group_rank.c b/src/mpi/group/group_rank.c
index 396ed33..6d6c2ef 100644
--- a/src/mpi/group/group_rank.c
+++ b/src/mpi/group/group_rank.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Group_rank  MPI_Group_rank
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Group_rank as PMPI_Group_rank
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_rank(MPI_Group group, int *rank) __attribute__((weak,alias("PMPI_Group_rank")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/group/group_size.c b/src/mpi/group/group_size.c
index b44df12..eddb427 100644
--- a/src/mpi/group/group_size.c
+++ b/src/mpi/group/group_size.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Group_size  MPI_Group_size
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Group_size as PMPI_Group_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_size(MPI_Group group, int *size) __attribute__((weak,alias("PMPI_Group_size")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/group/group_translate_ranks.c b/src/mpi/group/group_translate_ranks.c
index dd5d900..d0f9e3f 100644
--- a/src/mpi/group/group_translate_ranks.c
+++ b/src/mpi/group/group_translate_ranks.c
@@ -15,6 +15,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Group_translate_ranks  MPI_Group_translate_ranks
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Group_translate_ranks as PMPI_Group_translate_ranks
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_translate_ranks(MPI_Group group1, int n, const int ranks1[], MPI_Group group2,
+                              int ranks2[]) __attribute__((weak,alias("PMPI_Group_translate_ranks")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/group/group_union.c b/src/mpi/group/group_union.c
index 2194a7c..bf655ad 100644
--- a/src/mpi/group/group_union.c
+++ b/src/mpi/group/group_union.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Group_union  MPI_Group_union
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Group_union as PMPI_Group_union
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_union")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/info/info_create.c b/src/mpi/info/info_create.c
index d1d2711..c974b9a 100644
--- a/src/mpi/info/info_create.c
+++ b/src/mpi/info/info_create.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Info_create  MPI_Info_create
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Info_create as PMPI_Info_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_create(MPI_Info *info) __attribute__((weak,alias("PMPI_Info_create")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/info/info_delete.c b/src/mpi/info/info_delete.c
index c2b2be0..6571e0f 100644
--- a/src/mpi/info/info_delete.c
+++ b/src/mpi/info/info_delete.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Info_delete  MPI_Info_delete
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Info_delete as PMPI_Info_delete
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_delete(MPI_Info info, const char *key) __attribute__((weak,alias("PMPI_Info_delete")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/info/info_dup.c b/src/mpi/info/info_dup.c
index f838fd3..cc4d67b 100644
--- a/src/mpi/info/info_dup.c
+++ b/src/mpi/info/info_dup.c
@@ -16,6 +16,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Info_dup  MPI_Info_dup
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Info_dup as PMPI_Info_dup
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo) __attribute__((weak,alias("PMPI_Info_dup")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/info/info_free.c b/src/mpi/info/info_free.c
index 5fabb32..7bf31d7 100644
--- a/src/mpi/info/info_free.c
+++ b/src/mpi/info/info_free.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Info_free  MPI_Info_free
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Info_free as PMPI_Info_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_free(MPI_Info *info) __attribute__((weak,alias("PMPI_Info_free")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/info/info_get.c b/src/mpi/info/info_get.c
index 11f3aaa..690c38a 100644
--- a/src/mpi/info/info_get.c
+++ b/src/mpi/info/info_get.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Info_get  MPI_Info_get
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Info_get as PMPI_Info_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int *flag) __attribute__((weak,alias("PMPI_Info_get")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/info/info_getn.c b/src/mpi/info/info_getn.c
index 23c4b6c..fa1a699 100644
--- a/src/mpi/info/info_getn.c
+++ b/src/mpi/info/info_getn.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Info_get_nkeys  MPI_Info_get_nkeys
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Info_get_nkeys as PMPI_Info_get_nkeys
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_get_nkeys(MPI_Info info, int *nkeys) __attribute__((weak,alias("PMPI_Info_get_nkeys")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/info/info_getnth.c b/src/mpi/info/info_getnth.c
index 77199c1..5c17bf1 100644
--- a/src/mpi/info/info_getnth.c
+++ b/src/mpi/info/info_getnth.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Info_get_nthkey  MPI_Info_get_nthkey
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Info_get_nthkey as PMPI_Info_get_nthkey
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_get_nthkey(MPI_Info info, int n, char *key) __attribute__((weak,alias("PMPI_Info_get_nthkey")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/info/info_getvallen.c b/src/mpi/info/info_getvallen.c
index 02e5ac9..546ee4b 100644
--- a/src/mpi/info/info_getvallen.c
+++ b/src/mpi/info/info_getvallen.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Info_get_valuelen  MPI_Info_get_valuelen
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Info_get_valuelen as PMPI_Info_get_valuelen
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *flag) __attribute__((weak,alias("PMPI_Info_get_valuelen")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/info/info_set.c b/src/mpi/info/info_set.c
index 39d2055..18adebd 100644
--- a/src/mpi/info/info_set.c
+++ b/src/mpi/info/info_set.c
@@ -16,6 +16,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Info_set  MPI_Info_set
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Info_set as PMPI_Info_set
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_set(MPI_Info info, const char *key, const char *value) __attribute__((weak,alias("PMPI_Info_set")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/init/abort.c b/src/mpi/init/abort.c
index bb1a63b..fabc013 100644
--- a/src/mpi/init/abort.c
+++ b/src/mpi/init/abort.c
@@ -33,6 +33,8 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Abort  MPI_Abort
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Abort as PMPI_Abort
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Abort(MPI_Comm comm, int errorcode) __attribute__((weak,alias("PMPI_Abort")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/init/finalize.c b/src/mpi/init/finalize.c
index e22d0ff..97a4439 100644
--- a/src/mpi/init/finalize.c
+++ b/src/mpi/init/finalize.c
@@ -37,6 +37,8 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Finalize  MPI_Finalize
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Finalize as PMPI_Finalize
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Finalize(void) __attribute__((weak,alias("PMPI_Finalize")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/init/finalized.c b/src/mpi/init/finalized.c
index b80f668..12adc24 100644
--- a/src/mpi/init/finalized.c
+++ b/src/mpi/init/finalized.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Finalized  MPI_Finalized
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Finalized as PMPI_Finalized
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Finalized(int *flag) __attribute__((weak,alias("PMPI_Finalized")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/init/init.c b/src/mpi/init/init.c
index a5af3da..9bea820 100644
--- a/src/mpi/init/init.c
+++ b/src/mpi/init/init.c
@@ -56,6 +56,8 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Init  MPI_Init
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Init as PMPI_Init
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Init(int *argc, char ***argv) __attribute__((weak,alias("PMPI_Init")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/init/initialized.c b/src/mpi/init/initialized.c
index 8fdb7cf..07c3a4b 100644
--- a/src/mpi/init/initialized.c
+++ b/src/mpi/init/initialized.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Initialized  MPI_Initialized
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Initialized as PMPI_Initialized
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Initialized(int *flag) __attribute__((weak,alias("PMPI_Initialized")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/init/initthread.c b/src/mpi/init/initthread.c
index fd13043..7b3f32d 100644
--- a/src/mpi/init/initthread.c
+++ b/src/mpi/init/initthread.c
@@ -68,6 +68,8 @@ cvars:
 #pragma _HP_SECONDARY_DEF PMPI_Init_thread  MPI_Init_thread
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Init_thread as PMPI_Init_thread
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Init_thread(int *argc, char ***argv, int required, int *provided) __attribute__((weak,alias("PMPI_Init_thread")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/init/ismain.c b/src/mpi/init/ismain.c
index 612ed24..47a1295 100644
--- a/src/mpi/init/ismain.c
+++ b/src/mpi/init/ismain.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Is_thread_main  MPI_Is_thread_main
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Is_thread_main as PMPI_Is_thread_main
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Is_thread_main(int *flag) __attribute__((weak,alias("PMPI_Is_thread_main")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/init/querythread.c b/src/mpi/init/querythread.c
index c9966e8..ae281d8 100644
--- a/src/mpi/init/querythread.c
+++ b/src/mpi/init/querythread.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Query_thread  MPI_Query_thread
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Query_thread as PMPI_Query_thread
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Query_thread(int *provided) __attribute__((weak,alias("PMPI_Query_thread")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/misc/getpname.c b/src/mpi/misc/getpname.c
index 17f9a31..26042c8 100644
--- a/src/mpi/misc/getpname.c
+++ b/src/mpi/misc/getpname.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Get_processor_name  MPI_Get_processor_name
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Get_processor_name as PMPI_Get_processor_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_processor_name(char *name, int *resultlen) __attribute__((weak,alias("PMPI_Get_processor_name")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/misc/library_version.c b/src/mpi/misc/library_version.c
index fdf7ef7..3fa210c 100644
--- a/src/mpi/misc/library_version.c
+++ b/src/mpi/misc/library_version.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Get_library_version  MPI_Get_library_version
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Get_library_version as PMPI_Get_library_version
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_library_version(char *version, int *resultlen) __attribute__((weak,alias("PMPI_Get_library_version")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/misc/pcontrol.c b/src/mpi/misc/pcontrol.c
index bd3bc4f..02627aa 100644
--- a/src/mpi/misc/pcontrol.c
+++ b/src/mpi/misc/pcontrol.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Pcontrol  MPI_Pcontrol
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Pcontrol as PMPI_Pcontrol
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Pcontrol(const int level, ...) __attribute__((weak,alias("PMPI_Pcontrol")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/misc/version.c b/src/mpi/misc/version.c
index a839c87..995f065 100644
--- a/src/mpi/misc/version.c
+++ b/src/mpi/misc/version.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Get_version  MPI_Get_version
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Get_version as PMPI_Get_version
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_version(int *version, int *subversion) __attribute__((weak,alias("PMPI_Get_version")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/bsend.c b/src/mpi/pt2pt/bsend.c
index f432a2e..7049ced 100644
--- a/src/mpi/pt2pt/bsend.c
+++ b/src/mpi/pt2pt/bsend.c
@@ -15,6 +15,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Bsend  MPI_Bsend
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Bsend as PMPI_Bsend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+              MPI_Comm comm) __attribute__((weak,alias("PMPI_Bsend")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/bsend_init.c b/src/mpi/pt2pt/bsend_init.c
index 2ad2319..b6e6e63 100644
--- a/src/mpi/pt2pt/bsend_init.c
+++ b/src/mpi/pt2pt/bsend_init.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Bsend_init  MPI_Bsend_init
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Bsend_init as PMPI_Bsend_init
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Bsend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+                   MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Bsend_init")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/bufattach.c b/src/mpi/pt2pt/bufattach.c
index 96d0267..3dbf3ea 100644
--- a/src/mpi/pt2pt/bufattach.c
+++ b/src/mpi/pt2pt/bufattach.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Buffer_attach  MPI_Buffer_attach
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Buffer_attach as PMPI_Buffer_attach
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Buffer_attach(void *buffer, int size) __attribute__((weak,alias("PMPI_Buffer_attach")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/buffree.c b/src/mpi/pt2pt/buffree.c
index 2c65e40..29ba64e 100644
--- a/src/mpi/pt2pt/buffree.c
+++ b/src/mpi/pt2pt/buffree.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Buffer_detach  MPI_Buffer_detach
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Buffer_detach as PMPI_Buffer_detach
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Buffer_detach(void *buffer_addr, int *size) __attribute__((weak,alias("PMPI_Buffer_detach")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/cancel.c b/src/mpi/pt2pt/cancel.c
index cdfa810..b16c156 100644
--- a/src/mpi/pt2pt/cancel.c
+++ b/src/mpi/pt2pt/cancel.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Cancel  MPI_Cancel
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Cancel as PMPI_Cancel
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cancel(MPI_Request *request) __attribute__((weak,alias("PMPI_Cancel")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/greq_complete.c b/src/mpi/pt2pt/greq_complete.c
index 376369a..eba269c 100644
--- a/src/mpi/pt2pt/greq_complete.c
+++ b/src/mpi/pt2pt/greq_complete.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Grequest_complete  MPI_Grequest_complete
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Grequest_complete as PMPI_Grequest_complete
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Grequest_complete(MPI_Request request) __attribute__((weak,alias("PMPI_Grequest_complete")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/greq_start.c b/src/mpi/pt2pt/greq_start.c
index 12dcf03..3bd9a77 100644
--- a/src/mpi/pt2pt/greq_start.c
+++ b/src/mpi/pt2pt/greq_start.c
@@ -13,6 +13,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Grequest_start  MPI_Grequest_start
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Grequest_start as PMPI_Grequest_start
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Grequest_start(MPI_Grequest_query_function *query_fn, MPI_Grequest_free_function *free_fn,
+                       MPI_Grequest_cancel_function *cancel_fn, void *extra_state,
+                       MPI_Request *request) __attribute__((weak,alias("PMPI_Grequest_start")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/ibsend.c b/src/mpi/pt2pt/ibsend.c
index 9bced9a..9fc7560 100644
--- a/src/mpi/pt2pt/ibsend.c
+++ b/src/mpi/pt2pt/ibsend.c
@@ -15,6 +15,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ibsend  MPI_Ibsend
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ibsend as PMPI_Ibsend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+               MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Ibsend")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/improbe.c b/src/mpi/pt2pt/improbe.c
index 34a1692..80cd187 100644
--- a/src/mpi/pt2pt/improbe.c
+++ b/src/mpi/pt2pt/improbe.c
@@ -13,6 +13,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Improbe  MPI_Improbe
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Improbe as PMPI_Improbe
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPI_Message *message,
+                MPI_Status *status) __attribute__((weak,alias("PMPI_Improbe")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/imrecv.c b/src/mpi/pt2pt/imrecv.c
index 22e1496..3fad7c6 100644
--- a/src/mpi/pt2pt/imrecv.c
+++ b/src/mpi/pt2pt/imrecv.c
@@ -13,6 +13,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Imrecv  MPI_Imrecv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Imrecv as PMPI_Imrecv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Imrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
+               MPI_Request *request) __attribute__((weak,alias("PMPI_Imrecv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/iprobe.c b/src/mpi/pt2pt/iprobe.c
index 02a7a8e..7bfc17c 100644
--- a/src/mpi/pt2pt/iprobe.c
+++ b/src/mpi/pt2pt/iprobe.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Iprobe  MPI_Iprobe
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Iprobe as PMPI_Iprobe
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status) __attribute__((weak,alias("PMPI_Iprobe")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/irecv.c b/src/mpi/pt2pt/irecv.c
index 89afa37..c9b832b 100644
--- a/src/mpi/pt2pt/irecv.c
+++ b/src/mpi/pt2pt/irecv.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Irecv  MPI_Irecv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Irecv as PMPI_Irecv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
+              MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Irecv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/irsend.c b/src/mpi/pt2pt/irsend.c
index f7959cd..3035910 100644
--- a/src/mpi/pt2pt/irsend.c
+++ b/src/mpi/pt2pt/irsend.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Irsend  MPI_Irsend
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Irsend as PMPI_Irsend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Irsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+               MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Irsend")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/isend.c b/src/mpi/pt2pt/isend.c
index a0bb094..dc37463 100644
--- a/src/mpi/pt2pt/isend.c
+++ b/src/mpi/pt2pt/isend.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Isend  MPI_Isend
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Isend as PMPI_Isend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+              MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Isend")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/issend.c b/src/mpi/pt2pt/issend.c
index b693c13..4924583 100644
--- a/src/mpi/pt2pt/issend.c
+++ b/src/mpi/pt2pt/issend.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Issend  MPI_Issend
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Issend as PMPI_Issend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+               MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Issend")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/mprobe.c b/src/mpi/pt2pt/mprobe.c
index 18c5e9a..ec88688 100644
--- a/src/mpi/pt2pt/mprobe.c
+++ b/src/mpi/pt2pt/mprobe.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Mprobe  MPI_Mprobe
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Mprobe as PMPI_Mprobe
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Status *status) __attribute__((weak,alias("PMPI_Mprobe")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/mrecv.c b/src/mpi/pt2pt/mrecv.c
index 683b51f..5a2f1b6 100644
--- a/src/mpi/pt2pt/mrecv.c
+++ b/src/mpi/pt2pt/mrecv.c
@@ -13,6 +13,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Mrecv  MPI_Mrecv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Mrecv as PMPI_Mrecv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Mrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
+              MPI_Status *status) __attribute__((weak,alias("PMPI_Mrecv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/probe.c b/src/mpi/pt2pt/probe.c
index 1c79009..840258d 100644
--- a/src/mpi/pt2pt/probe.c
+++ b/src/mpi/pt2pt/probe.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Probe  MPI_Probe
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Probe as PMPI_Probe
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status) __attribute__((weak,alias("PMPI_Probe")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/recv.c b/src/mpi/pt2pt/recv.c
index 62cc222..bede1e0 100644
--- a/src/mpi/pt2pt/recv.c
+++ b/src/mpi/pt2pt/recv.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Recv  MPI_Recv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Recv as PMPI_Recv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
+             MPI_Comm comm, MPI_Status *status) __attribute__((weak,alias("PMPI_Recv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/recv_init.c b/src/mpi/pt2pt/recv_init.c
index eea0e73..23556ce 100644
--- a/src/mpi/pt2pt/recv_init.c
+++ b/src/mpi/pt2pt/recv_init.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Recv_init  MPI_Recv_init
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Recv_init as PMPI_Recv_init
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source, int tag,
+                  MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Recv_init")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/request_free.c b/src/mpi/pt2pt/request_free.c
index d2bfa9b..cbc9c74 100644
--- a/src/mpi/pt2pt/request_free.c
+++ b/src/mpi/pt2pt/request_free.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Request_free  MPI_Request_free
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Request_free as PMPI_Request_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Request_free(MPI_Request *request) __attribute__((weak,alias("PMPI_Request_free")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/request_get_status.c b/src/mpi/pt2pt/request_get_status.c
index ef67bb2..4712ebf 100644
--- a/src/mpi/pt2pt/request_get_status.c
+++ b/src/mpi/pt2pt/request_get_status.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Request_get_status  MPI_Request_get_status
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Request_get_status as PMPI_Request_get_status
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status) __attribute__((weak,alias("PMPI_Request_get_status")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/rsend.c b/src/mpi/pt2pt/rsend.c
index fe41c99..82394f1 100644
--- a/src/mpi/pt2pt/rsend.c
+++ b/src/mpi/pt2pt/rsend.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Rsend  MPI_Rsend
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Rsend as PMPI_Rsend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+              MPI_Comm comm) __attribute__((weak,alias("PMPI_Rsend")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/rsend_init.c b/src/mpi/pt2pt/rsend_init.c
index 61942ab..3061168 100644
--- a/src/mpi/pt2pt/rsend_init.c
+++ b/src/mpi/pt2pt/rsend_init.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Rsend_init  MPI_Rsend_init
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Rsend_init as PMPI_Rsend_init
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Rsend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+                   MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Rsend_init")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/send.c b/src/mpi/pt2pt/send.c
index e0a72fb..4671235 100644
--- a/src/mpi/pt2pt/send.c
+++ b/src/mpi/pt2pt/send.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Send  MPI_Send
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Send as PMPI_Send
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+             MPI_Comm comm) __attribute__((weak,alias("PMPI_Send")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/send_init.c b/src/mpi/pt2pt/send_init.c
index af5ab90..3002fa9 100644
--- a/src/mpi/pt2pt/send_init.c
+++ b/src/mpi/pt2pt/send_init.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Send_init  MPI_Send_init
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Send_init as PMPI_Send_init
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Send_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+                  MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Send_init")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/sendrecv.c b/src/mpi/pt2pt/sendrecv.c
index d49c4a9..e8a1b9f 100644
--- a/src/mpi/pt2pt/sendrecv.c
+++ b/src/mpi/pt2pt/sendrecv.c
@@ -14,6 +14,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Sendrecv  MPI_Sendrecv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Sendrecv as PMPI_Sendrecv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest,
+                 int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype,
+                 int source, int recvtag, MPI_Comm comm, MPI_Status *status)
+                 __attribute__((weak,alias("PMPI_Sendrecv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/sendrecv_rep.c b/src/mpi/pt2pt/sendrecv_rep.c
index dda4dd7..c928bec 100644
--- a/src/mpi/pt2pt/sendrecv_rep.c
+++ b/src/mpi/pt2pt/sendrecv_rep.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Sendrecv_replace  MPI_Sendrecv_replace
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Sendrecv_replace as PMPI_Sendrecv_replace
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype, int dest,
+                         int sendtag, int source, int recvtag, MPI_Comm comm,
+                         MPI_Status *status) __attribute__((weak,alias("PMPI_Sendrecv_replace")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/ssend.c b/src/mpi/pt2pt/ssend.c
index 9b14f1b..197a4fd 100644
--- a/src/mpi/pt2pt/ssend.c
+++ b/src/mpi/pt2pt/ssend.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ssend  MPI_Ssend
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ssend as PMPI_Ssend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ssend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+              MPI_Comm comm) __attribute__((weak,alias("PMPI_Ssend")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/ssend_init.c b/src/mpi/pt2pt/ssend_init.c
index 0796c8d..92470a6 100644
--- a/src/mpi/pt2pt/ssend_init.c
+++ b/src/mpi/pt2pt/ssend_init.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ssend_init  MPI_Ssend_init
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ssend_init as PMPI_Ssend_init
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ssend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+                   MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Ssend_init")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/start.c b/src/mpi/pt2pt/start.c
index 6e82688..0ff9a9c 100644
--- a/src/mpi/pt2pt/start.c
+++ b/src/mpi/pt2pt/start.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Start  MPI_Start
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Start as PMPI_Start
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Start(MPI_Request *request) __attribute__((weak,alias("PMPI_Start")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/startall.c b/src/mpi/pt2pt/startall.c
index 734f032..27b9148 100644
--- a/src/mpi/pt2pt/startall.c
+++ b/src/mpi/pt2pt/startall.c
@@ -18,6 +18,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Startall  MPI_Startall
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Startall as PMPI_Startall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Startall(int count, MPI_Request array_of_requests[]) __attribute__((weak,alias("PMPI_Startall")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/status_set_cancelled.c b/src/mpi/pt2pt/status_set_cancelled.c
index db1cae0..05ff76c 100644
--- a/src/mpi/pt2pt/status_set_cancelled.c
+++ b/src/mpi/pt2pt/status_set_cancelled.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Status_set_cancelled  MPI_Status_set_cancelled
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Status_set_cancelled as PMPI_Status_set_cancelled
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Status_set_cancelled(MPI_Status *status, int flag) __attribute__((weak,alias("PMPI_Status_set_cancelled")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/test.c b/src/mpi/pt2pt/test.c
index 3602dbe..5b5d325 100644
--- a/src/mpi/pt2pt/test.c
+++ b/src/mpi/pt2pt/test.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Test  MPI_Test
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Test as PMPI_Test
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status) __attribute__((weak,alias("PMPI_Test")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/test_cancelled.c b/src/mpi/pt2pt/test_cancelled.c
index 216ba24..f73a474 100644
--- a/src/mpi/pt2pt/test_cancelled.c
+++ b/src/mpi/pt2pt/test_cancelled.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Test_cancelled  MPI_Test_cancelled
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Test_cancelled as PMPI_Test_cancelled
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Test_cancelled(const MPI_Status *status, int *flag) __attribute__((weak,alias("PMPI_Test_cancelled")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/testall.c b/src/mpi/pt2pt/testall.c
index f797d30..8bd65fe 100644
--- a/src/mpi/pt2pt/testall.c
+++ b/src/mpi/pt2pt/testall.c
@@ -18,6 +18,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Testall  MPI_Testall
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Testall as PMPI_Testall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
+                MPI_Status array_of_statuses[]) __attribute__((weak,alias("PMPI_Testall")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/testany.c b/src/mpi/pt2pt/testany.c
index 7cc9da7..a3f0595 100644
--- a/src/mpi/pt2pt/testany.c
+++ b/src/mpi/pt2pt/testany.c
@@ -18,6 +18,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Testany  MPI_Testany
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Testany as PMPI_Testany
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx, int *flag,
+                MPI_Status *status) __attribute__((weak,alias("PMPI_Testany")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/testsome.c b/src/mpi/pt2pt/testsome.c
index fd1c15c..58c1275 100644
--- a/src/mpi/pt2pt/testsome.c
+++ b/src/mpi/pt2pt/testsome.c
@@ -18,6 +18,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Testsome  MPI_Testsome
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Testsome as PMPI_Testsome
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
+                 int array_of_indices[], MPI_Status array_of_statuses[]) __attribute__((weak,alias("PMPI_Testsome")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/wait.c b/src/mpi/pt2pt/wait.c
index e4322cc..2d609ac 100644
--- a/src/mpi/pt2pt/wait.c
+++ b/src/mpi/pt2pt/wait.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Wait  MPI_Wait
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Wait as PMPI_Wait
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Wait(MPI_Request *request, MPI_Status *status) __attribute__((weak,alias("PMPI_Wait")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/waitall.c b/src/mpi/pt2pt/waitall.c
index 6c27cce..ccdd329 100644
--- a/src/mpi/pt2pt/waitall.c
+++ b/src/mpi/pt2pt/waitall.c
@@ -19,6 +19,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Waitall  MPI_Waitall
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Waitall as PMPI_Waitall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_statuses[]) __attribute__((weak,alias("PMPI_Waitall")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/waitany.c b/src/mpi/pt2pt/waitany.c
index 4345786..7bb37d7 100644
--- a/src/mpi/pt2pt/waitany.c
+++ b/src/mpi/pt2pt/waitany.c
@@ -18,6 +18,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Waitany  MPI_Waitany
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Waitany as PMPI_Waitany
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx, MPI_Status *status) __attribute__((weak,alias("PMPI_Waitany")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/pt2pt/waitsome.c b/src/mpi/pt2pt/waitsome.c
index e171b2b..00b9449 100644
--- a/src/mpi/pt2pt/waitsome.c
+++ b/src/mpi/pt2pt/waitsome.c
@@ -18,6 +18,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Waitsome  MPI_Waitsome
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Waitsome as PMPI_Waitsome
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Waitsome(int incount, MPI_Request array_of_requests[], int *outcount,
+                 int array_of_indices[], MPI_Status array_of_statuses[]) __attribute__((weak,alias("PMPI_Waitsome")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/accumulate.c b/src/mpi/rma/accumulate.c
index 5ca38d8..93ff2f9 100644
--- a/src/mpi/rma/accumulate.c
+++ b/src/mpi/rma/accumulate.c
@@ -14,6 +14,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Accumulate  MPI_Accumulate
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Accumulate as PMPI_Accumulate
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
+                   int target_rank, MPI_Aint target_disp, int target_count,
+                   MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
+                   __attribute__((weak,alias("PMPI_Accumulate")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/alloc_mem.c b/src/mpi/rma/alloc_mem.c
index f6dd1e4..cdfad3f 100644
--- a/src/mpi/rma/alloc_mem.c
+++ b/src/mpi/rma/alloc_mem.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Alloc_mem  MPI_Alloc_mem
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Alloc_mem as PMPI_Alloc_mem
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr) __attribute__((weak,alias("PMPI_Alloc_mem")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/compare_and_swap.c b/src/mpi/rma/compare_and_swap.c
index 04bf12e..ecd4921 100644
--- a/src/mpi/rma/compare_and_swap.c
+++ b/src/mpi/rma/compare_and_swap.c
@@ -14,6 +14,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Compare_and_swap  MPI_Compare_and_swap
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Compare_and_swap as PMPI_Compare_and_swap
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Compare_and_swap(const void *origin_addr, const void *compare_addr,
+                          void *result_addr, MPI_Datatype datatype, int target_rank,
+                          MPI_Aint target_disp, MPI_Win win)
+                          __attribute__((weak,alias("PMPI_Compare_and_swap")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/fetch_and_op.c b/src/mpi/rma/fetch_and_op.c
index db40704..4ce6f8f 100644
--- a/src/mpi/rma/fetch_and_op.c
+++ b/src/mpi/rma/fetch_and_op.c
@@ -14,6 +14,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Fetch_and_op  MPI_Fetch_and_op
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Fetch_and_op as PMPI_Fetch_and_op
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Fetch_and_op(const void *origin_addr, void *result_addr,
+                      MPI_Datatype datatype, int target_rank, MPI_Aint target_disp,
+                      MPI_Op op, MPI_Win win)
+                      __attribute__((weak,alias("PMPI_Fetch_and_op")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/free_mem.c b/src/mpi/rma/free_mem.c
index 32320d7..313da39 100644
--- a/src/mpi/rma/free_mem.c
+++ b/src/mpi/rma/free_mem.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Free_mem  MPI_Free_mem
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Free_mem as PMPI_Free_mem
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Free_mem(void *base) __attribute__((weak,alias("PMPI_Free_mem")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/get.c b/src/mpi/rma/get.c
index ae3d568..e8ba531 100644
--- a/src/mpi/rma/get.c
+++ b/src/mpi/rma/get.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Get  MPI_Get
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Get as PMPI_Get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
+            int target_rank, MPI_Aint target_disp, int target_count,
+            MPI_Datatype target_datatype, MPI_Win win) __attribute__((weak,alias("PMPI_Get")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/get_accumulate.c b/src/mpi/rma/get_accumulate.c
index 4660212..8f58b20 100644
--- a/src/mpi/rma/get_accumulate.c
+++ b/src/mpi/rma/get_accumulate.c
@@ -14,6 +14,12 @@
 #pragma _HP_SECONDARY_DEF PMPI_Get_accumulate  MPI_Get_accumulate
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Get_accumulate as PMPI_Get_accumulate
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_accumulate(const void *origin_addr, int origin_count,
+                        MPI_Datatype origin_datatype, void *result_addr, int result_count,
+                        MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
+                        int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
+                        __attribute__((weak,alias("PMPI_Get_accumulate")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/put.c b/src/mpi/rma/put.c
index 9444011..1d4dc75 100644
--- a/src/mpi/rma/put.c
+++ b/src/mpi/rma/put.c
@@ -14,6 +14,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Put  MPI_Put
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Put as PMPI_Put
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
+            int target_rank, MPI_Aint target_disp, int target_count,
+            MPI_Datatype target_datatype, MPI_Win win) __attribute__((weak,alias("PMPI_Put")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/raccumulate.c b/src/mpi/rma/raccumulate.c
index 4906991..6f5f5da 100644
--- a/src/mpi/rma/raccumulate.c
+++ b/src/mpi/rma/raccumulate.c
@@ -14,6 +14,12 @@
 #pragma _HP_SECONDARY_DEF PMPI_Raccumulate  MPI_Raccumulate
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Raccumulate as PMPI_Raccumulate
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Raccumulate(const void *origin_addr, int origin_count,
+                     MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
+                     int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
+                     MPI_Request *request)
+                     __attribute__((weak,alias("PMPI_Raccumulate")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/rget.c b/src/mpi/rma/rget.c
index 33edc79..3536d1b 100644
--- a/src/mpi/rma/rget.c
+++ b/src/mpi/rma/rget.c
@@ -14,6 +14,12 @@
 #pragma _HP_SECONDARY_DEF PMPI_Rget  MPI_Rget
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Rget as PMPI_Rget
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Rget(void *origin_addr, int origin_count,
+              MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
+              int target_count, MPI_Datatype target_datatype, MPI_Win win,
+              MPI_Request *request)
+              __attribute__((weak,alias("PMPI_Rget")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/rget_accumulate.c b/src/mpi/rma/rget_accumulate.c
index b3a47be..55196ba 100644
--- a/src/mpi/rma/rget_accumulate.c
+++ b/src/mpi/rma/rget_accumulate.c
@@ -14,6 +14,13 @@
 #pragma _HP_SECONDARY_DEF PMPI_Rget_accumulate  MPI_Rget_accumulate
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Rget_accumulate as PMPI_Rget_accumulate
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Rget_accumulate(const void *origin_addr, int origin_count,
+                         MPI_Datatype origin_datatype, void *result_addr, int result_count,
+                         MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
+                         int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
+                         MPI_Request *request)
+                         __attribute__((weak,alias("PMPI_Rget_accumulate")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/rput.c b/src/mpi/rma/rput.c
index 48c3052..a6f79aa 100644
--- a/src/mpi/rma/rput.c
+++ b/src/mpi/rma/rput.c
@@ -14,6 +14,12 @@
 #pragma _HP_SECONDARY_DEF PMPI_Rput  MPI_Rput
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Rput as PMPI_Rput
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Rput(const void *origin_addr, int origin_count,
+              MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
+              int target_count, MPI_Datatype target_datatype, MPI_Win win,
+              MPI_Request *request)
+              __attribute__((weak,alias("PMPI_Rput")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_allocate.c b/src/mpi/rma/win_allocate.c
index e39a15d..47c797a 100644
--- a/src/mpi/rma/win_allocate.c
+++ b/src/mpi/rma/win_allocate.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_allocate  MPI_Win_allocate
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_allocate as PMPI_Win_allocate
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void *baseptr,
+                     MPI_Win *win) __attribute__((weak,alias("PMPI_Win_allocate")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_allocate_shared.c b/src/mpi/rma/win_allocate_shared.c
index 828c216..fac911f 100644
--- a/src/mpi/rma/win_allocate_shared.c
+++ b/src/mpi/rma/win_allocate_shared.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_allocate_shared  MPI_Win_allocate_shared
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_allocate_shared as PMPI_Win_allocate_shared
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_allocate_shared(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
+                            void *baseptr, MPI_Win *win) __attribute__((weak,alias("PMPI_Win_allocate_shared")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_attach.c b/src/mpi/rma/win_attach.c
index a86cbc8..06164cc 100644
--- a/src/mpi/rma/win_attach.c
+++ b/src/mpi/rma/win_attach.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_attach  MPI_Win_attach
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_attach as PMPI_Win_attach
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_attach(MPI_Win win, void *base, MPI_Aint size) __attribute__((weak,alias("PMPI_Win_attach")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_complete.c b/src/mpi/rma/win_complete.c
index d5a302c..0787e64 100644
--- a/src/mpi/rma/win_complete.c
+++ b/src/mpi/rma/win_complete.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_complete  MPI_Win_complete
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_complete as PMPI_Win_complete
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_complete(MPI_Win win) __attribute__((weak,alias("PMPI_Win_complete")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_create.c b/src/mpi/rma/win_create.c
index b921532..5cb8d73 100644
--- a/src/mpi/rma/win_create.c
+++ b/src/mpi/rma/win_create.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_create  MPI_Win_create
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_create as PMPI_Win_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
+                   MPI_Win *win) __attribute__((weak,alias("PMPI_Win_create")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_create_dynamic.c b/src/mpi/rma/win_create_dynamic.c
index 51bb279..a0d9ba3 100644
--- a/src/mpi/rma/win_create_dynamic.c
+++ b/src/mpi/rma/win_create_dynamic.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_create_dynamic  MPI_Win_create_dynamic
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_create_dynamic as PMPI_Win_create_dynamic
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win) __attribute__((weak,alias("PMPI_Win_create_dynamic")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_detach.c b/src/mpi/rma/win_detach.c
index 48ea14c..13812ce 100644
--- a/src/mpi/rma/win_detach.c
+++ b/src/mpi/rma/win_detach.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_detach  MPI_Win_detach
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_detach as PMPI_Win_detach
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_detach(MPI_Win win, const void *base) __attribute__((weak,alias("PMPI_Win_detach")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_fence.c b/src/mpi/rma/win_fence.c
index 601f1b8..5314ee5 100644
--- a/src/mpi/rma/win_fence.c
+++ b/src/mpi/rma/win_fence.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_fence  MPI_Win_fence
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_fence as PMPI_Win_fence
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_fence(int assert, MPI_Win win) __attribute__((weak,alias("PMPI_Win_fence")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_flush.c b/src/mpi/rma/win_flush.c
index 6bad81e..2a58fbc 100644
--- a/src/mpi/rma/win_flush.c
+++ b/src/mpi/rma/win_flush.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_flush  MPI_Win_flush
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_flush as PMPI_Win_flush
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_flush(int rank, MPI_Win win) __attribute__((weak,alias("PMPI_Win_flush")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_flush_all.c b/src/mpi/rma/win_flush_all.c
index 52f28b5..60da14d 100644
--- a/src/mpi/rma/win_flush_all.c
+++ b/src/mpi/rma/win_flush_all.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_flush_all  MPI_Win_flush_all
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_flush_all as PMPI_Win_flush_all
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_flush_all(MPI_Win win) __attribute__((weak,alias("PMPI_Win_flush_all")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_flush_local.c b/src/mpi/rma/win_flush_local.c
index b089edc..68c7370 100644
--- a/src/mpi/rma/win_flush_local.c
+++ b/src/mpi/rma/win_flush_local.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_flush_local  MPI_Win_flush_local
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_flush_local as PMPI_Win_flush_local
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_flush_local(int rank, MPI_Win win) __attribute__((weak,alias("PMPI_Win_flush_local")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_flush_local_all.c b/src/mpi/rma/win_flush_local_all.c
index ccf0975..3ef129e 100644
--- a/src/mpi/rma/win_flush_local_all.c
+++ b/src/mpi/rma/win_flush_local_all.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_flush_local_all  MPI_Win_flush_local_all
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_flush_local_all as PMPI_Win_flush_local_all
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_flush_local_all(MPI_Win win) __attribute__((weak,alias("PMPI_Win_flush_local_all")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_free.c b/src/mpi/rma/win_free.c
index 3c45447..bb36778 100644
--- a/src/mpi/rma/win_free.c
+++ b/src/mpi/rma/win_free.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_free  MPI_Win_free
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_free as PMPI_Win_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_free(MPI_Win *win) __attribute__((weak,alias("PMPI_Win_free")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_get_group.c b/src/mpi/rma/win_get_group.c
index 2421351..5db66d5 100644
--- a/src/mpi/rma/win_get_group.c
+++ b/src/mpi/rma/win_get_group.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_get_group  MPI_Win_get_group
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_get_group as PMPI_Win_get_group
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_get_group(MPI_Win win, MPI_Group *group) __attribute__((weak,alias("PMPI_Win_get_group")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_get_info.c b/src/mpi/rma/win_get_info.c
index 69a3d34..31cb305 100644
--- a/src/mpi/rma/win_get_info.c
+++ b/src/mpi/rma/win_get_info.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_get_info  MPI_Win_get_info
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_get_info as PMPI_Win_get_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_get_info(MPI_Win win, MPI_Info *info_used) __attribute__((weak,alias("PMPI_Win_get_info")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_get_name.c b/src/mpi/rma/win_get_name.c
index f0206d6..10900d1 100644
--- a/src/mpi/rma/win_get_name.c
+++ b/src/mpi/rma/win_get_name.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_get_name  MPI_Win_get_name
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_get_name as PMPI_Win_get_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen) __attribute__((weak,alias("PMPI_Win_get_name")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_lock.c b/src/mpi/rma/win_lock.c
index 604c19a..c1cc4e1 100644
--- a/src/mpi/rma/win_lock.c
+++ b/src/mpi/rma/win_lock.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_lock  MPI_Win_lock
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_lock as PMPI_Win_lock
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win) __attribute__((weak,alias("PMPI_Win_lock")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_lock_all.c b/src/mpi/rma/win_lock_all.c
index 233505b..4175330 100644
--- a/src/mpi/rma/win_lock_all.c
+++ b/src/mpi/rma/win_lock_all.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_lock_all  MPI_Win_lock_all
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_lock_all as PMPI_Win_lock_all
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_lock_all(int assert, MPI_Win win) __attribute__((weak,alias("PMPI_Win_lock_all")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_post.c b/src/mpi/rma/win_post.c
index fa7a76d..cdc8593 100644
--- a/src/mpi/rma/win_post.c
+++ b/src/mpi/rma/win_post.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_post  MPI_Win_post
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_post as PMPI_Win_post
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_post(MPI_Group group, int assert, MPI_Win win) __attribute__((weak,alias("PMPI_Win_post")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_set_info.c b/src/mpi/rma/win_set_info.c
index bfcb5b2..bab6f18 100644
--- a/src/mpi/rma/win_set_info.c
+++ b/src/mpi/rma/win_set_info.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_set_info  MPI_Win_set_info
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_set_info as PMPI_Win_set_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_set_info(MPI_Win win, MPI_Info info) __attribute__((weak,alias("PMPI_Win_set_info")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_set_name.c b/src/mpi/rma/win_set_name.c
index 806f584..b04f415 100644
--- a/src/mpi/rma/win_set_name.c
+++ b/src/mpi/rma/win_set_name.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_set_name  MPI_Win_set_name
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_set_name as PMPI_Win_set_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_set_name(MPI_Win win, const char *win_name) __attribute__((weak,alias("PMPI_Win_set_name")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_shared_query.c b/src/mpi/rma/win_shared_query.c
index 75f8a30..e699dd6 100644
--- a/src/mpi/rma/win_shared_query.c
+++ b/src/mpi/rma/win_shared_query.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_shared_query  MPI_Win_shared_query
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_shared_query as PMPI_Win_shared_query
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit, void *baseptr) __attribute__((weak,alias("PMPI_Win_shared_query")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_start.c b/src/mpi/rma/win_start.c
index 50e7fed..9c54e57 100644
--- a/src/mpi/rma/win_start.c
+++ b/src/mpi/rma/win_start.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_start  MPI_Win_start
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_start as PMPI_Win_start
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_start(MPI_Group group, int assert, MPI_Win win) __attribute__((weak,alias("PMPI_Win_start")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_sync.c b/src/mpi/rma/win_sync.c
index f3e2f08..624fd04 100644
--- a/src/mpi/rma/win_sync.c
+++ b/src/mpi/rma/win_sync.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_sync  MPI_Win_sync
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_sync as PMPI_Win_sync
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_sync(MPI_Win win) __attribute__((weak,alias("PMPI_Win_sync")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_test.c b/src/mpi/rma/win_test.c
index ad36927..a89d903 100644
--- a/src/mpi/rma/win_test.c
+++ b/src/mpi/rma/win_test.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_test  MPI_Win_test
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_test as PMPI_Win_test
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_test(MPI_Win win, int *flag) __attribute__((weak,alias("PMPI_Win_test")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_unlock.c b/src/mpi/rma/win_unlock.c
index cbb8be7..cb5ed14 100644
--- a/src/mpi/rma/win_unlock.c
+++ b/src/mpi/rma/win_unlock.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_unlock  MPI_Win_unlock
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_unlock as PMPI_Win_unlock
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_unlock(int rank, MPI_Win win) __attribute__((weak,alias("PMPI_Win_unlock")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_unlock_all.c b/src/mpi/rma/win_unlock_all.c
index 7661918..c7577c5 100644
--- a/src/mpi/rma/win_unlock_all.c
+++ b/src/mpi/rma/win_unlock_all.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_unlock_all  MPI_Win_unlock_all
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_unlock_all as PMPI_Win_unlock_all
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_unlock_all(MPI_Win win) __attribute__((weak,alias("PMPI_Win_unlock_all")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/rma/win_wait.c b/src/mpi/rma/win_wait.c
index 5fca70d..0b5b0e2 100644
--- a/src/mpi/rma/win_wait.c
+++ b/src/mpi/rma/win_wait.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Win_wait  MPI_Win_wait
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Win_wait as PMPI_Win_wait
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_wait(MPI_Win win) __attribute__((weak,alias("PMPI_Win_wait")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/romio/include/mpio.h.in b/src/mpi/romio/include/mpio.h.in
index 5ad085f..d4c7ed7 100644
--- a/src/mpi/romio/include/mpio.h.in
+++ b/src/mpi/romio/include/mpio.h.in
@@ -120,122 +120,122 @@ typedef int MPI_Fint;
 
 /* Section 9.2 */
 /* Begin Prototypes */
-int MPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh) MPICH_ATTR_WEAK_ALIAS("PMPI_File_open");
-int MPI_File_close(MPI_File *fh) MPICH_ATTR_WEAK_ALIAS("PMPI_File_close");
-int MPI_File_delete(const char *filename, MPI_Info info) MPICH_ATTR_WEAK_ALIAS("PMPI_File_delete");
-int MPI_File_set_size(MPI_File fh, MPI_Offset size) MPICH_ATTR_WEAK_ALIAS("PMPI_File_set_size");
-int MPI_File_preallocate(MPI_File fh, MPI_Offset size) MPICH_ATTR_WEAK_ALIAS("PMPI_File_preallocate");
-int MPI_File_get_size(MPI_File fh, MPI_Offset *size) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_size");
-int MPI_File_get_group(MPI_File fh, MPI_Group *group) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_group");
-int MPI_File_get_amode(MPI_File fh, int *amode) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_amode");
-int MPI_File_set_info(MPI_File fh, MPI_Info info) MPICH_ATTR_WEAK_ALIAS("PMPI_File_set_info");
-int MPI_File_get_info(MPI_File fh, MPI_Info *info_used) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_info");
+int MPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh);
+int MPI_File_close(MPI_File *fh);
+int MPI_File_delete(const char *filename, MPI_Info info);
+int MPI_File_set_size(MPI_File fh, MPI_Offset size);
+int MPI_File_preallocate(MPI_File fh, MPI_Offset size);
+int MPI_File_get_size(MPI_File fh, MPI_Offset *size);
+int MPI_File_get_group(MPI_File fh, MPI_Group *group);
+int MPI_File_get_amode(MPI_File fh, int *amode);
+int MPI_File_set_info(MPI_File fh, MPI_Info info);
+int MPI_File_get_info(MPI_File fh, MPI_Info *info_used);
 
 /* Section 9.3 */
 int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype,
-                      const char *datarep, MPI_Info info) MPICH_ATTR_WEAK_ALIAS("PMPI_File_set_view");
+                      const char *datarep, MPI_Info info);
 int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype,
-                      char *datarep) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_view");
+                      char *datarep);
 
 /* Section 9.4.2 */
 int MPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype,
-                     MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_at");
+                     MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 int MPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void * buf, int count,
                          MPI_Datatype datatype, MPI_Status *status)
-    MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_at_all");
+    MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 int MPI_File_write_at(MPI_File fh, MPI_Offset offset, const void * buf, int count,
                       MPI_Datatype datatype, MPI_Status *status)
-    MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_at");
+    MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 int MPI_File_write_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count,
                           MPI_Datatype datatype, MPI_Status *status)
-    MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_at_all");
+    MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 
 /* nonblocking calls currently use MPIO_Request, because generalized
    requests not yet implemented. For the same reason, MPIO_Test and 
    MPIO_Wait are used to test and wait on nonblocking I/O requests */ 
 int MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype,
-                      MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_iread_at");
+                      MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 int MPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, const void *buf, int count,
                        MPI_Datatype datatype, MPIO_Request *request)
-    MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_iwrite_at");
+    MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
 
 /* Section 9.4.3 */
 int MPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
-    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read");
+    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_File_read_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
-    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_all");
+    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_File_write(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
-                   MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write");
+                   MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_File_write_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
-                       MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_all");
+                       MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 
 /* nonblocking calls currently use MPIO_Request, because generalized
    requests not yet implemented. For the same reason, MPIO_Test and 
    MPIO_Wait are used to test and wait on nonblocking I/O requests */ 
 
 int MPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request)
-    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_iread");
+    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_File_iwrite(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
-                    MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_iwrite");
+                    MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 
-int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence) MPICH_ATTR_WEAK_ALIAS("PMPI_File_seek");
-int MPI_File_get_position(MPI_File fh, MPI_Offset *offset) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_position");
-int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, MPI_Offset *disp) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_byte_offset");
+int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence);
+int MPI_File_get_position(MPI_File fh, MPI_Offset *offset);
+int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, MPI_Offset *disp);
 
 /* Section 9.4.4 */
 int MPI_File_read_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
-                         MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_shared");
+                         MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_File_write_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
-                          MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_shared");
+                          MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_File_iread_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
-                          MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_iread_shared");
+                          MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_File_iwrite_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
-                           MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_iwrite_shared");
+                           MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_File_read_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
-                          MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_ordered");
+                          MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
 int MPI_File_write_ordered(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
-                           MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_ordered");
-int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence) MPICH_ATTR_WEAK_ALIAS("PMPI_File_seek_shared");
-int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_position_shared");
+                           MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence);
+int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset);
 
 /* Section 9.4.5 */
 int MPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count,
-                               MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_at_all_begin");
-int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_at_all_end");
+                               MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status);
 int MPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, const void *buf, int count,
-                                MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_at_all_begin");
-int MPI_File_write_at_all_end(MPI_File fh, const void *buf, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_at_all_end");
+                                MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+int MPI_File_write_at_all_end(MPI_File fh, const void *buf, MPI_Status *status);
 int MPI_File_read_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
-    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_all_begin");
-int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_all_end");
+    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status);
 int MPI_File_write_all_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype)
-    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_all_begin");
-int MPI_File_write_all_end(MPI_File fh, const void *buf, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_all_end");
+    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_File_write_all_end(MPI_File fh, const void *buf, MPI_Status *status);
 int MPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
-    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_ordered_begin");
-int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_ordered_end");
+    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status);
 int MPI_File_write_ordered_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype)
-    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_ordered_begin");
-int MPI_File_write_ordered_end(MPI_File fh, const void *buf, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_ordered_end");
+    MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_File_write_ordered_end(MPI_File fh, const void *buf, MPI_Status *status);
 
 /* Section 9.5.1 */
-int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, MPI_Aint *extent) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_type_extent");
+int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, MPI_Aint *extent);
 
 /* Section 9.5.3 */
 int MPI_Register_datarep(const char *datarep, MPI_Datarep_conversion_function *read_conversion_fn,
 			 MPI_Datarep_conversion_function *write_conversion_fn,
-			 MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state) MPICH_ATTR_WEAK_ALIAS("PMPI_Register_datarep");
+			 MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state);
 
 /* Section 9.6.1 */
-int MPI_File_set_atomicity(MPI_File fh, int flag) MPICH_ATTR_WEAK_ALIAS("PMPI_File_set_atomicity");
-int MPI_File_get_atomicity(MPI_File fh, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_atomicity");
-int MPI_File_sync(MPI_File fh) MPICH_ATTR_WEAK_ALIAS("PMPI_File_sync");
+int MPI_File_set_atomicity(MPI_File fh, int flag);
+int MPI_File_get_atomicity(MPI_File fh, int *flag);
+int MPI_File_sync(MPI_File fh);
 
 /* Section 4.13.3 */
 #ifndef MPICH
 /* MPICH provides these definitions */
-int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_File_set_errhandler");
-int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_errhandler");
+int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler);
+int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler);
 #endif
 /* End Prototypes */
 
@@ -265,8 +265,8 @@ int MPI_Type_create_darray(int size, int rank, int ndims, const int array_of_gsi
 #endif
 #endif
 /* above needed for some versions of mpi.h in MPICH!! */
-MPI_File MPI_File_f2c(MPI_Fint file) MPICH_ATTR_WEAK_ALIAS("PMPI_File_f2c");
-MPI_Fint MPI_File_c2f(MPI_File file) MPICH_ATTR_WEAK_ALIAS("PMPI_File_c2f");
+MPI_File MPI_File_f2c(MPI_Fint file);
+MPI_Fint MPI_File_c2f(MPI_File file);
 
 
 #ifndef HAVE_MPI_GREQUEST
diff --git a/src/mpi/romio/mpi-io/close.c b/src/mpi/romio/mpi-io/close.c
index 4b277c2..cb1df99 100644
--- a/src/mpi/romio/mpi-io/close.c
+++ b/src/mpi/romio/mpi-io/close.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_close as PMPI_File_close
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_close(MPI_File *fh) __attribute__((weak,alias("PMPI_File_close")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/delete.c b/src/mpi/romio/mpi-io/delete.c
index ed49e44..7335136 100644
--- a/src/mpi/romio/mpi-io/delete.c
+++ b/src/mpi/romio/mpi-io/delete.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_delete as PMPI_File_delete
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_delete(const char *filename, MPI_Info info) __attribute__((weak,alias("PMPI_File_delete")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/file_c2f.c b/src/mpi/romio/mpi-io/file_c2f.c
index 236cceb..4eaae9f 100644
--- a/src/mpi/romio/mpi-io/file_c2f.c
+++ b/src/mpi/romio/mpi-io/file_c2f.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_c2f as PMPI_File_c2f
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+MPI_Fint MPI_File_c2f(MPI_File fh) __attribute__((weak,alias("PMPI_File_c2f")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/file_f2c.c b/src/mpi/romio/mpi-io/file_f2c.c
index 68d89cc..b6b4896 100644
--- a/src/mpi/romio/mpi-io/file_f2c.c
+++ b/src/mpi/romio/mpi-io/file_f2c.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_f2c as PMPI_File_f2c
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+MPI_File MPI_File_f2c(MPI_Fint fh) __attribute__((weak,alias("PMPI_File_f2c")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/fsync.c b/src/mpi/romio/mpi-io/fsync.c
index 0e55ab3..d9ffe3f 100644
--- a/src/mpi/romio/mpi-io/fsync.c
+++ b/src/mpi/romio/mpi-io/fsync.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_sync as PMPI_File_sync
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_sync(MPI_File fh) __attribute__((weak,alias("PMPI_File_sync")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_amode.c b/src/mpi/romio/mpi-io/get_amode.c
index 395b034..4770c83 100644
--- a/src/mpi/romio/mpi-io/get_amode.c
+++ b/src/mpi/romio/mpi-io/get_amode.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_get_amode as PMPI_File_get_amode
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_amode(MPI_File fh, int *amode) __attribute__((weak,alias("PMPI_File_get_amode")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_atom.c b/src/mpi/romio/mpi-io/get_atom.c
index 37d2f8d..1a9eae1 100644
--- a/src/mpi/romio/mpi-io/get_atom.c
+++ b/src/mpi/romio/mpi-io/get_atom.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_get_atomicity as PMPI_File_get_atomicity
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_atomicity(MPI_File fh, int *flag) __attribute__((weak,alias("PMPI_File_get_atomicity")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_bytoff.c b/src/mpi/romio/mpi-io/get_bytoff.c
index 7c95ed8..f5cb452 100644
--- a/src/mpi/romio/mpi-io/get_bytoff.c
+++ b/src/mpi/romio/mpi-io/get_bytoff.c
@@ -17,6 +17,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_get_byte_offset as PMPI_File_get_byte_offset
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, MPI_Offset *disp) __attribute__((weak,alias("PMPI_File_get_byte_offset")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_errh.c b/src/mpi/romio/mpi-io/get_errh.c
index 80ee428..5a4d9ee 100644
--- a/src/mpi/romio/mpi-io/get_errh.c
+++ b/src/mpi/romio/mpi-io/get_errh.c
@@ -17,6 +17,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_get_errhandler as PMPI_File_get_errhandler
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_File_get_errhandler")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_extent.c b/src/mpi/romio/mpi-io/get_extent.c
index 60dcd57..31a841c 100644
--- a/src/mpi/romio/mpi-io/get_extent.c
+++ b/src/mpi/romio/mpi-io/get_extent.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_get_type_extent as PMPI_File_get_type_extent
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, MPI_Aint *extent) __attribute__((weak,alias("PMPI_File_get_type_extent")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_group.c b/src/mpi/romio/mpi-io/get_group.c
index dbc6e8d..4d82ed8 100644
--- a/src/mpi/romio/mpi-io/get_group.c
+++ b/src/mpi/romio/mpi-io/get_group.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_get_group as PMPI_File_get_group
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_group(MPI_File fh, MPI_Group *group) __attribute__((weak,alias("PMPI_File_get_group")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_info.c b/src/mpi/romio/mpi-io/get_info.c
index 334cd58..1d0b397 100644
--- a/src/mpi/romio/mpi-io/get_info.c
+++ b/src/mpi/romio/mpi-io/get_info.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_get_info as PMPI_File_get_info
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_info(MPI_File fh, MPI_Info *info_used) __attribute__((weak,alias("PMPI_File_get_info")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_posn.c b/src/mpi/romio/mpi-io/get_posn.c
index 0c7a54f..49d8e49 100644
--- a/src/mpi/romio/mpi-io/get_posn.c
+++ b/src/mpi/romio/mpi-io/get_posn.c
@@ -17,6 +17,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_get_position as PMPI_File_get_position
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_position(MPI_File fh, MPI_Offset *offset) __attribute__((weak,alias("PMPI_File_get_position")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_posn_sh.c b/src/mpi/romio/mpi-io/get_posn_sh.c
index 051ea65..c6172c9 100644
--- a/src/mpi/romio/mpi-io/get_posn_sh.c
+++ b/src/mpi/romio/mpi-io/get_posn_sh.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_get_position_shared as PMPI_File_get_position_shared
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset) __attribute__((weak,alias("PMPI_File_get_position_shared")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_size.c b/src/mpi/romio/mpi-io/get_size.c
index 1582380..d7836c2 100644
--- a/src/mpi/romio/mpi-io/get_size.c
+++ b/src/mpi/romio/mpi-io/get_size.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_get_size as PMPI_File_get_size
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_size(MPI_File fh, MPI_Offset *size) __attribute__((weak,alias("PMPI_File_get_size")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_view.c b/src/mpi/romio/mpi-io/get_view.c
index 8829090..f2d2889 100644
--- a/src/mpi/romio/mpi-io/get_view.c
+++ b/src/mpi/romio/mpi-io/get_view.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_get_view as PMPI_File_get_view
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype,
+                      char *datarep) __attribute__((weak,alias("PMPI_File_get_view")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/iread.c b/src/mpi/romio/mpi-io/iread.c
index 861e7eb..beca4aa 100644
--- a/src/mpi/romio/mpi-io/iread.c
+++ b/src/mpi/romio/mpi-io/iread.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_iread as PMPI_File_iread
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request)
+    __attribute__((weak,alias("PMPI_File_iread")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/iread_at.c b/src/mpi/romio/mpi-io/iread_at.c
index 8e9b0b2..29bda84 100644
--- a/src/mpi/romio/mpi-io/iread_at.c
+++ b/src/mpi/romio/mpi-io/iread_at.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_iread_at as PMPI_File_iread_at
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype,
+                      MPIO_Request *request) __attribute__((weak,alias("PMPI_File_iread_at")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/iread_sh.c b/src/mpi/romio/mpi-io/iread_sh.c
index a9564ed..b671346 100644
--- a/src/mpi/romio/mpi-io/iread_sh.c
+++ b/src/mpi/romio/mpi-io/iread_sh.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_iread_shared as PMPI_File_iread_shared
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_iread_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
+                          MPIO_Request *request) __attribute__((weak,alias("PMPI_File_iread_shared")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/iwrite.c b/src/mpi/romio/mpi-io/iwrite.c
index fa50fbe..cd4f69f 100644
--- a/src/mpi/romio/mpi-io/iwrite.c
+++ b/src/mpi/romio/mpi-io/iwrite.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_iwrite as PMPI_File_iwrite
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_iwrite(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+                    MPIO_Request *request) __attribute__((weak,alias("PMPI_File_iwrite")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/iwrite_at.c b/src/mpi/romio/mpi-io/iwrite_at.c
index 05f0b39..10862bd 100644
--- a/src/mpi/romio/mpi-io/iwrite_at.c
+++ b/src/mpi/romio/mpi-io/iwrite_at.c
@@ -16,6 +16,10 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_iwrite_at as PMPI_File_iwrite_at
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, const void *buf, int count,
+                       MPI_Datatype datatype, MPIO_Request *request)
+    __attribute__((weak,alias("PMPI_File_iwrite_at")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/iwrite_sh.c b/src/mpi/romio/mpi-io/iwrite_sh.c
index 4221d33..c436221 100644
--- a/src/mpi/romio/mpi-io/iwrite_sh.c
+++ b/src/mpi/romio/mpi-io/iwrite_sh.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_iwrite_shared as PMPI_File_iwrite_shared
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_iwrite_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+                           MPIO_Request *request) __attribute__((weak,alias("PMPI_File_iwrite_shared")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/open.c b/src/mpi/romio/mpi-io/open.c
index 2d72dae..27a3e84 100644
--- a/src/mpi/romio/mpi-io/open.c
+++ b/src/mpi/romio/mpi-io/open.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_open as PMPI_File_open
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh) __attribute__((weak,alias("PMPI_File_open")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/prealloc.c b/src/mpi/romio/mpi-io/prealloc.c
index 9e5d2c6..3853f8d 100644
--- a/src/mpi/romio/mpi-io/prealloc.c
+++ b/src/mpi/romio/mpi-io/prealloc.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_preallocate as PMPI_File_preallocate
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_preallocate(MPI_File fh, MPI_Offset size) __attribute__((weak,alias("PMPI_File_preallocate")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/rd_atallb.c b/src/mpi/romio/mpi-io/rd_atallb.c
index 44f54e4..a7120b3 100644
--- a/src/mpi/romio/mpi-io/rd_atallb.c
+++ b/src/mpi/romio/mpi-io/rd_atallb.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_read_at_all_begin as PMPI_File_read_at_all_begin
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count,
+                               MPI_Datatype datatype) __attribute__((weak,alias("PMPI_File_read_at_all_begin")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/rd_atalle.c b/src/mpi/romio/mpi-io/rd_atalle.c
index 0715e6a..207d5ba 100644
--- a/src/mpi/romio/mpi-io/rd_atalle.c
+++ b/src/mpi/romio/mpi-io/rd_atalle.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_read_at_all_end as PMPI_File_read_at_all_end
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status) __attribute__((weak,alias("PMPI_File_read_at_all_end")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read.c b/src/mpi/romio/mpi-io/read.c
index d531a47..ff109bd 100644
--- a/src/mpi/romio/mpi-io/read.c
+++ b/src/mpi/romio/mpi-io/read.c
@@ -15,6 +15,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_read as PMPI_File_read
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
+    __attribute__((weak,alias("PMPI_File_read")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_all.c b/src/mpi/romio/mpi-io/read_all.c
index 641d58d..72ea518 100644
--- a/src/mpi/romio/mpi-io/read_all.c
+++ b/src/mpi/romio/mpi-io/read_all.c
@@ -15,6 +15,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_read_all as PMPI_File_read_all
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
+    __attribute__((weak,alias("PMPI_File_read_all")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_allb.c b/src/mpi/romio/mpi-io/read_allb.c
index 743424d..3f0fd90 100644
--- a/src/mpi/romio/mpi-io/read_allb.c
+++ b/src/mpi/romio/mpi-io/read_allb.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_read_all_begin as PMPI_File_read_all_begin
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
+    __attribute__((weak,alias("PMPI_File_read_all_begin")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_alle.c b/src/mpi/romio/mpi-io/read_alle.c
index 820cab6..a86c465 100644
--- a/src/mpi/romio/mpi-io/read_alle.c
+++ b/src/mpi/romio/mpi-io/read_alle.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_read_all_end as PMPI_File_read_all_end
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status) __attribute__((weak,alias("PMPI_File_read_all_end")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_at.c b/src/mpi/romio/mpi-io/read_at.c
index 72e593d..53dc8c4 100644
--- a/src/mpi/romio/mpi-io/read_at.c
+++ b/src/mpi/romio/mpi-io/read_at.c
@@ -15,6 +15,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_read_at as PMPI_File_read_at
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype,
+                     MPI_Status *status) __attribute__((weak,alias("PMPI_File_read_at")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_atall.c b/src/mpi/romio/mpi-io/read_atall.c
index 13932b1..2bed66b 100644
--- a/src/mpi/romio/mpi-io/read_atall.c
+++ b/src/mpi/romio/mpi-io/read_atall.c
@@ -16,6 +16,10 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_read_at_all as PMPI_File_read_at_all
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void * buf, int count,
+                         MPI_Datatype datatype, MPI_Status *status)
+    __attribute__((weak,alias("PMPI_File_read_at_all")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_ord.c b/src/mpi/romio/mpi-io/read_ord.c
index 5dc5abd..5bfe77c 100644
--- a/src/mpi/romio/mpi-io/read_ord.c
+++ b/src/mpi/romio/mpi-io/read_ord.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_read_ordered as PMPI_File_read_ordered
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
+                          MPI_Status *status) __attribute__((weak,alias("PMPI_File_read_ordered")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_ordb.c b/src/mpi/romio/mpi-io/read_ordb.c
index 5dd9772..32971f1 100644
--- a/src/mpi/romio/mpi-io/read_ordb.c
+++ b/src/mpi/romio/mpi-io/read_ordb.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_read_ordered_begin as PMPI_File_read_ordered_begin
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
+    __attribute__((weak,alias("PMPI_File_read_ordered_begin")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_orde.c b/src/mpi/romio/mpi-io/read_orde.c
index 4d2db52..5bf853e 100644
--- a/src/mpi/romio/mpi-io/read_orde.c
+++ b/src/mpi/romio/mpi-io/read_orde.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_read_ordered_end as PMPI_File_read_ordered_end
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status) __attribute__((weak,alias("PMPI_File_read_ordered_end")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_sh.c b/src/mpi/romio/mpi-io/read_sh.c
index 952180e..8f2ed6d 100644
--- a/src/mpi/romio/mpi-io/read_sh.c
+++ b/src/mpi/romio/mpi-io/read_sh.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_read_shared as PMPI_File_read_shared
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
+                         MPI_Status *status) __attribute__((weak,alias("PMPI_File_read_shared")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/register_datarep.c b/src/mpi/romio/mpi-io/register_datarep.c
index c2dba7b..b6f1d68 100644
--- a/src/mpi/romio/mpi-io/register_datarep.c
+++ b/src/mpi/romio/mpi-io/register_datarep.c
@@ -16,6 +16,10 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Register_datarep as PMPI_Register_datarep
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Register_datarep(const char *datarep, MPI_Datarep_conversion_function *read_conversion_fn,
+			 MPI_Datarep_conversion_function *write_conversion_fn,
+			 MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state) __attribute__((weak,alias("PMPI_Register_datarep")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/seek.c b/src/mpi/romio/mpi-io/seek.c
index a67c119..c4ed20f 100644
--- a/src/mpi/romio/mpi-io/seek.c
+++ b/src/mpi/romio/mpi-io/seek.c
@@ -17,6 +17,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_seek as PMPI_File_seek
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence) __attribute__((weak,alias("PMPI_File_seek")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/seek_sh.c b/src/mpi/romio/mpi-io/seek_sh.c
index d104be5..772852c 100644
--- a/src/mpi/romio/mpi-io/seek_sh.c
+++ b/src/mpi/romio/mpi-io/seek_sh.c
@@ -15,6 +15,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_seek_shared as PMPI_File_seek_shared
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence) __attribute__((weak,alias("PMPI_File_seek_shared")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/set_atom.c b/src/mpi/romio/mpi-io/set_atom.c
index 55be27f..2012116 100644
--- a/src/mpi/romio/mpi-io/set_atom.c
+++ b/src/mpi/romio/mpi-io/set_atom.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_set_atomicity as PMPI_File_set_atomicity
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_set_atomicity(MPI_File fh, int flag) __attribute__((weak,alias("PMPI_File_set_atomicity")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/set_errh.c b/src/mpi/romio/mpi-io/set_errh.c
index 3e2d879..793f480 100644
--- a/src/mpi/romio/mpi-io/set_errh.c
+++ b/src/mpi/romio/mpi-io/set_errh.c
@@ -17,6 +17,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_set_errhandler as PMPI_File_set_errhandler
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler) __attribute__((weak,alias("PMPI_File_set_errhandler")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/set_info.c b/src/mpi/romio/mpi-io/set_info.c
index 13437cc..1d95f2c 100644
--- a/src/mpi/romio/mpi-io/set_info.c
+++ b/src/mpi/romio/mpi-io/set_info.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_set_info as PMPI_File_set_info
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_set_info(MPI_File fh, MPI_Info info) __attribute__((weak,alias("PMPI_File_set_info")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/set_size.c b/src/mpi/romio/mpi-io/set_size.c
index b5c4e93..74c3f6c 100644
--- a/src/mpi/romio/mpi-io/set_size.c
+++ b/src/mpi/romio/mpi-io/set_size.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_set_size as PMPI_File_set_size
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_set_size(MPI_File fh, MPI_Offset size) __attribute__((weak,alias("PMPI_File_set_size")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/set_view.c b/src/mpi/romio/mpi-io/set_view.c
index 482b9ac..7f871c7 100644
--- a/src/mpi/romio/mpi-io/set_view.c
+++ b/src/mpi/romio/mpi-io/set_view.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_set_view as PMPI_File_set_view
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype,
+                      const char *datarep, MPI_Info info) __attribute__((weak,alias("PMPI_File_set_view")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/wr_atallb.c b/src/mpi/romio/mpi-io/wr_atallb.c
index 17de197..83eb28b 100644
--- a/src/mpi/romio/mpi-io/wr_atallb.c
+++ b/src/mpi/romio/mpi-io/wr_atallb.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_write_at_all_begin as PMPI_File_write_at_all_begin
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, const void *buf, int count,
+                                MPI_Datatype datatype) __attribute__((weak,alias("PMPI_File_write_at_all_begin")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/wr_atalle.c b/src/mpi/romio/mpi-io/wr_atalle.c
index 50b4732..fa2ab51 100644
--- a/src/mpi/romio/mpi-io/wr_atalle.c
+++ b/src/mpi/romio/mpi-io/wr_atalle.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_write_at_all_end as PMPI_File_write_at_all_end
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_at_all_end(MPI_File fh, const void *buf, MPI_Status *status) __attribute__((weak,alias("PMPI_File_write_at_all_end")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write.c b/src/mpi/romio/mpi-io/write.c
index 2544db3..899991d 100644
--- a/src/mpi/romio/mpi-io/write.c
+++ b/src/mpi/romio/mpi-io/write.c
@@ -15,6 +15,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_write as PMPI_File_write
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+                   MPI_Status *status) __attribute__((weak,alias("PMPI_File_write")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_all.c b/src/mpi/romio/mpi-io/write_all.c
index f4307bb..ab77a95 100644
--- a/src/mpi/romio/mpi-io/write_all.c
+++ b/src/mpi/romio/mpi-io/write_all.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_write_all as PMPI_File_write_all
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+                       MPI_Status *status) __attribute__((weak,alias("PMPI_File_write_all")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_allb.c b/src/mpi/romio/mpi-io/write_allb.c
index adeeeee..4678477 100644
--- a/src/mpi/romio/mpi-io/write_allb.c
+++ b/src/mpi/romio/mpi-io/write_allb.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_write_all_begin as PMPI_File_write_all_begin
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_all_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype)
+    __attribute__((weak,alias("PMPI_File_write_all_begin")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_alle.c b/src/mpi/romio/mpi-io/write_alle.c
index 28972f1..8b999a1 100644
--- a/src/mpi/romio/mpi-io/write_alle.c
+++ b/src/mpi/romio/mpi-io/write_alle.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_write_all_end as PMPI_File_write_all_end
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_all_end(MPI_File fh, const void *buf, MPI_Status *status) __attribute__((weak,alias("PMPI_File_write_all_end")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_at.c b/src/mpi/romio/mpi-io/write_at.c
index db1066d..4362322 100644
--- a/src/mpi/romio/mpi-io/write_at.c
+++ b/src/mpi/romio/mpi-io/write_at.c
@@ -15,6 +15,10 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_write_at as PMPI_File_write_at
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_at(MPI_File fh, MPI_Offset offset, const void * buf, int count,
+                      MPI_Datatype datatype, MPI_Status *status)
+    __attribute__((weak,alias("PMPI_File_write_at")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_atall.c b/src/mpi/romio/mpi-io/write_atall.c
index 8f8328d..6f815cd 100644
--- a/src/mpi/romio/mpi-io/write_atall.c
+++ b/src/mpi/romio/mpi-io/write_atall.c
@@ -16,6 +16,10 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_write_at_all as PMPI_File_write_at_all
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count,
+                          MPI_Datatype datatype, MPI_Status *status)
+    __attribute__((weak,alias("PMPI_File_write_at_all")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_ord.c b/src/mpi/romio/mpi-io/write_ord.c
index 3bd45ee..60c14f3 100644
--- a/src/mpi/romio/mpi-io/write_ord.c
+++ b/src/mpi/romio/mpi-io/write_ord.c
@@ -17,6 +17,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_write_ordered as PMPI_File_write_ordered
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_ordered(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+                           MPI_Status *status) __attribute__((weak,alias("PMPI_File_write_ordered")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_ordb.c b/src/mpi/romio/mpi-io/write_ordb.c
index 1f16f45..77bbab0 100644
--- a/src/mpi/romio/mpi-io/write_ordb.c
+++ b/src/mpi/romio/mpi-io/write_ordb.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_write_ordered_begin as PMPI_File_write_ordered_begin
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_ordered_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype)
+    __attribute__((weak,alias("PMPI_File_write_ordered_begin")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_orde.c b/src/mpi/romio/mpi-io/write_orde.c
index c8db36c..a0a6eea 100644
--- a/src/mpi/romio/mpi-io/write_orde.c
+++ b/src/mpi/romio/mpi-io/write_orde.c
@@ -16,6 +16,8 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_write_ordered_end as PMPI_File_write_ordered_end
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_ordered_end(MPI_File fh, const void *buf, MPI_Status *status) __attribute__((weak,alias("PMPI_File_write_ordered_end")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_sh.c b/src/mpi/romio/mpi-io/write_sh.c
index 622dd27..fc2b7b2 100644
--- a/src/mpi/romio/mpi-io/write_sh.c
+++ b/src/mpi/romio/mpi-io/write_sh.c
@@ -16,6 +16,9 @@
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_File_write_shared as PMPI_File_write_shared
 /* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+                          MPI_Status *status) __attribute__((weak,alias("PMPI_File_write_shared")));
 #endif
 
 /* Include mapping from MPI->PMPI */
diff --git a/src/mpi/spawn/close_port.c b/src/mpi/spawn/close_port.c
index 209a09a..8f23382 100644
--- a/src/mpi/spawn/close_port.c
+++ b/src/mpi/spawn/close_port.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Close_port  MPI_Close_port
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Close_port as PMPI_Close_port
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Close_port(const char *port_name) __attribute__((weak,alias("PMPI_Close_port")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/spawn/comm_accept.c b/src/mpi/spawn/comm_accept.c
index d28d31a..dccf247 100644
--- a/src/mpi/spawn/comm_accept.c
+++ b/src/mpi/spawn/comm_accept.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_accept  MPI_Comm_accept
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_accept as PMPI_Comm_accept
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_accept(const char *port_name, MPI_Info info, int root, MPI_Comm comm,
+                    MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_accept")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/spawn/comm_connect.c b/src/mpi/spawn/comm_connect.c
index a4da953..141f3b4 100644
--- a/src/mpi/spawn/comm_connect.c
+++ b/src/mpi/spawn/comm_connect.c
@@ -13,6 +13,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_connect  MPI_Comm_connect
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_connect as PMPI_Comm_connect
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_connect(const char *port_name, MPI_Info info, int root, MPI_Comm comm,
+                     MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_connect")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/spawn/comm_disconnect.c b/src/mpi/spawn/comm_disconnect.c
index d3f932d..8a50774 100644
--- a/src/mpi/spawn/comm_disconnect.c
+++ b/src/mpi/spawn/comm_disconnect.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_disconnect  MPI_Comm_disconnect
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_disconnect as PMPI_Comm_disconnect
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_disconnect(MPI_Comm *comm) __attribute__((weak,alias("PMPI_Comm_disconnect")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/spawn/comm_get_parent.c b/src/mpi/spawn/comm_get_parent.c
index b16a624..b851a96 100644
--- a/src/mpi/spawn/comm_get_parent.c
+++ b/src/mpi/spawn/comm_get_parent.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_get_parent  MPI_Comm_get_parent
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_get_parent as PMPI_Comm_get_parent
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_get_parent(MPI_Comm *parent) __attribute__((weak,alias("PMPI_Comm_get_parent")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/spawn/comm_join.c b/src/mpi/spawn/comm_join.c
index bf00d7c..2bbccf6 100644
--- a/src/mpi/spawn/comm_join.c
+++ b/src/mpi/spawn/comm_join.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_join  MPI_Comm_join
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_join as PMPI_Comm_join
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_join(int fd, MPI_Comm *intercomm) __attribute__((weak,alias("PMPI_Comm_join")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/spawn/comm_spawn.c b/src/mpi/spawn/comm_spawn.c
index 9c5bf9d..49c307d 100644
--- a/src/mpi/spawn/comm_spawn.c
+++ b/src/mpi/spawn/comm_spawn.c
@@ -13,6 +13,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_spawn  MPI_Comm_spawn
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_spawn as PMPI_Comm_spawn
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_spawn(const char *command, char *argv[], int maxprocs, MPI_Info info, int root,
+                   MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) __attribute__((weak,alias("PMPI_Comm_spawn")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/spawn/comm_spawn_multiple.c b/src/mpi/spawn/comm_spawn_multiple.c
index ac5ff47..4d22ee4 100644
--- a/src/mpi/spawn/comm_spawn_multiple.c
+++ b/src/mpi/spawn/comm_spawn_multiple.c
@@ -13,6 +13,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Comm_spawn_multiple  MPI_Comm_spawn_multiple
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Comm_spawn_multiple as PMPI_Comm_spawn_multiple
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_spawn_multiple(int count, char *array_of_commands[], char **array_of_argv[],
+                            const int array_of_maxprocs[], const MPI_Info array_of_info[],
+                            int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) __attribute__((weak,alias("PMPI_Comm_spawn_multiple")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/spawn/lookup_name.c b/src/mpi/spawn/lookup_name.c
index abb5ebc..8204688 100644
--- a/src/mpi/spawn/lookup_name.c
+++ b/src/mpi/spawn/lookup_name.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Lookup_name  MPI_Lookup_name
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Lookup_name as PMPI_Lookup_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name) __attribute__((weak,alias("PMPI_Lookup_name")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/spawn/open_port.c b/src/mpi/spawn/open_port.c
index 486d070..37699d1 100644
--- a/src/mpi/spawn/open_port.c
+++ b/src/mpi/spawn/open_port.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Open_port  MPI_Open_port
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Open_port as PMPI_Open_port
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Open_port(MPI_Info info, char *port_name) __attribute__((weak,alias("PMPI_Open_port")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/spawn/publish_name.c b/src/mpi/spawn/publish_name.c
index ce6157a..c804caa 100644
--- a/src/mpi/spawn/publish_name.c
+++ b/src/mpi/spawn/publish_name.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Publish_name  MPI_Publish_name
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Publish_name as PMPI_Publish_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Publish_name(const char *service_name, MPI_Info info, const char *port_name) __attribute__((weak,alias("PMPI_Publish_name")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/spawn/unpublish_name.c b/src/mpi/spawn/unpublish_name.c
index 2074741..fba560e 100644
--- a/src/mpi/spawn/unpublish_name.c
+++ b/src/mpi/spawn/unpublish_name.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Unpublish_name  MPI_Unpublish_name
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Unpublish_name as PMPI_Unpublish_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port_name) __attribute__((weak,alias("PMPI_Unpublish_name")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/timer/wtick.c b/src/mpi/timer/wtick.c
index da61d58..1aff3c2 100644
--- a/src/mpi/timer/wtick.c
+++ b/src/mpi/timer/wtick.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Wtick  MPI_Wtick
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Wtick as PMPI_Wtick
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+double MPI_Wtick(void) __attribute__((weak,alias("PMPI_Wtick")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/timer/wtime.c b/src/mpi/timer/wtime.c
index c5ab6ed..a0338f0 100644
--- a/src/mpi/timer/wtime.c
+++ b/src/mpi/timer/wtime.c
@@ -12,6 +12,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Wtime  MPI_Wtime
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Wtime as PMPI_Wtime
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+double MPI_Wtime(void) __attribute__((weak,alias("PMPI_Wtime")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/cart_coords.c b/src/mpi/topo/cart_coords.c
index 948b9a6..6b3a3c5 100644
--- a/src/mpi/topo/cart_coords.c
+++ b/src/mpi/topo/cart_coords.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Cart_coords  MPI_Cart_coords
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Cart_coords as PMPI_Cart_coords
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[]) __attribute__((weak,alias("PMPI_Cart_coords")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/cart_create.c b/src/mpi/topo/cart_create.c
index 8fab4ae..494557a 100644
--- a/src/mpi/topo/cart_create.c
+++ b/src/mpi/topo/cart_create.c
@@ -15,6 +15,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Cart_create  MPI_Cart_create
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Cart_create as PMPI_Cart_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_create(MPI_Comm comm_old, int ndims, const int dims[], const int periods[],
+                    int reorder, MPI_Comm *comm_cart) __attribute__((weak,alias("PMPI_Cart_create")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/cart_get.c b/src/mpi/topo/cart_get.c
index 96eab9c..8b0c95b 100644
--- a/src/mpi/topo/cart_get.c
+++ b/src/mpi/topo/cart_get.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Cart_get  MPI_Cart_get
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Cart_get as PMPI_Cart_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[], int coords[]) __attribute__((weak,alias("PMPI_Cart_get")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/cart_map.c b/src/mpi/topo/cart_map.c
index 641b36c..000df13 100644
--- a/src/mpi/topo/cart_map.c
+++ b/src/mpi/topo/cart_map.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Cart_map  MPI_Cart_map
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Cart_map as PMPI_Cart_map
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[], int *newrank) __attribute__((weak,alias("PMPI_Cart_map")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/cart_rank.c b/src/mpi/topo/cart_rank.c
index 2984045..c730bb2 100644
--- a/src/mpi/topo/cart_rank.c
+++ b/src/mpi/topo/cart_rank.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Cart_rank  MPI_Cart_rank
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Cart_rank as PMPI_Cart_rank
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_rank(MPI_Comm comm, const int coords[], int *rank) __attribute__((weak,alias("PMPI_Cart_rank")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/cart_shift.c b/src/mpi/topo/cart_shift.c
index 723c8df..66d4007 100644
--- a/src/mpi/topo/cart_shift.c
+++ b/src/mpi/topo/cart_shift.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Cart_shift  MPI_Cart_shift
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Cart_shift as PMPI_Cart_shift
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest) __attribute__((weak,alias("PMPI_Cart_shift")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/cart_sub.c b/src/mpi/topo/cart_sub.c
index 8baf90d..551ed89 100644
--- a/src/mpi/topo/cart_sub.c
+++ b/src/mpi/topo/cart_sub.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Cart_sub  MPI_Cart_sub
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Cart_sub as PMPI_Cart_sub
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Cart_sub")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/cartdim_get.c b/src/mpi/topo/cartdim_get.c
index 0119d20..7f28efb 100644
--- a/src/mpi/topo/cartdim_get.c
+++ b/src/mpi/topo/cartdim_get.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Cartdim_get  MPI_Cartdim_get
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Cartdim_get as PMPI_Cartdim_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cartdim_get(MPI_Comm comm, int *ndims) __attribute__((weak,alias("PMPI_Cartdim_get")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/dims_create.c b/src/mpi/topo/dims_create.c
index 0a04ac0..ba9ae91 100644
--- a/src/mpi/topo/dims_create.c
+++ b/src/mpi/topo/dims_create.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Dims_create  MPI_Dims_create
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Dims_create as PMPI_Dims_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Dims_create(int nnodes, int ndims, int dims[]) __attribute__((weak,alias("PMPI_Dims_create")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/dist_gr_create.c b/src/mpi/topo/dist_gr_create.c
index 76e13ba..1252087 100644
--- a/src/mpi/topo/dist_gr_create.c
+++ b/src/mpi/topo/dist_gr_create.c
@@ -15,6 +15,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Dist_graph_create  MPI_Dist_graph_create
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Dist_graph_create as PMPI_Dist_graph_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[], const int degrees[],
+                          const int destinations[], const int weights[], MPI_Info info,
+                          int reorder, MPI_Comm *comm_dist_graph) __attribute__((weak,alias("PMPI_Dist_graph_create")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/dist_gr_create_adj.c b/src/mpi/topo/dist_gr_create_adj.c
index b5c84bc..215c18a 100644
--- a/src/mpi/topo/dist_gr_create_adj.c
+++ b/src/mpi/topo/dist_gr_create_adj.c
@@ -15,6 +15,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Dist_graph_create_adjacent  MPI_Dist_graph_create_adjacent
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Dist_graph_create_adjacent as PMPI_Dist_graph_create_adjacent
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old, int indegree, const int sources[],
+                                   const int sourceweights[], int outdegree,
+                                   const int destinations[], const int destweights[],
+                                   MPI_Info info, int reorder, MPI_Comm *comm_dist_graph) __attribute__((weak,alias("PMPI_Dist_graph_create_adjacent")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/dist_gr_neighb.c b/src/mpi/topo/dist_gr_neighb.c
index 56d2c72..d9cb333 100644
--- a/src/mpi/topo/dist_gr_neighb.c
+++ b/src/mpi/topo/dist_gr_neighb.c
@@ -15,6 +15,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Dist_graph_neighbors  MPI_Dist_graph_neighbors
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Dist_graph_neighbors as PMPI_Dist_graph_neighbors
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Dist_graph_neighbors(MPI_Comm comm, int maxindegree, int sources[], int sourceweights[],
+                             int maxoutdegree, int destinations[], int destweights[]) __attribute__((weak,alias("PMPI_Dist_graph_neighbors")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/dist_gr_neighb_count.c b/src/mpi/topo/dist_gr_neighb_count.c
index 78b4488..b0da3af 100644
--- a/src/mpi/topo/dist_gr_neighb_count.c
+++ b/src/mpi/topo/dist_gr_neighb_count.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Dist_graph_neighbors_count  MPI_Dist_graph_neighbors_count
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Dist_graph_neighbors_count as PMPI_Dist_graph_neighbors_count
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted) __attribute__((weak,alias("PMPI_Dist_graph_neighbors_count")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/graph_get.c b/src/mpi/topo/graph_get.c
index 79a48f4..7b8d97a 100644
--- a/src/mpi/topo/graph_get.c
+++ b/src/mpi/topo/graph_get.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Graph_get  MPI_Graph_get
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Graph_get as PMPI_Graph_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int indx[], int edges[]) __attribute__((weak,alias("PMPI_Graph_get")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/graph_map.c b/src/mpi/topo/graph_map.c
index b693bd4..a518e17 100644
--- a/src/mpi/topo/graph_map.c
+++ b/src/mpi/topo/graph_map.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Graph_map  MPI_Graph_map
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Graph_map as PMPI_Graph_map
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[], int *newrank) __attribute__((weak,alias("PMPI_Graph_map")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/graph_nbr.c b/src/mpi/topo/graph_nbr.c
index 2e0fd56..2b0aaa1 100644
--- a/src/mpi/topo/graph_nbr.c
+++ b/src/mpi/topo/graph_nbr.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Graph_neighbors  MPI_Graph_neighbors
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Graph_neighbors as PMPI_Graph_neighbors
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int neighbors[]) __attribute__((weak,alias("PMPI_Graph_neighbors")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/graphcreate.c b/src/mpi/topo/graphcreate.c
index ed70c1f..4cb4ff5 100644
--- a/src/mpi/topo/graphcreate.c
+++ b/src/mpi/topo/graphcreate.c
@@ -15,6 +15,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_Graph_create  MPI_Graph_create
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Graph_create as PMPI_Graph_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Graph_create(MPI_Comm comm_old, int nnodes, const int indx[], const int edges[],
+                     int reorder, MPI_Comm *comm_graph) __attribute__((weak,alias("PMPI_Graph_create")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/graphdimsget.c b/src/mpi/topo/graphdimsget.c
index 08f3797..cdf7e00 100644
--- a/src/mpi/topo/graphdimsget.c
+++ b/src/mpi/topo/graphdimsget.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Graphdims_get  MPI_Graphdims_get
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Graphdims_get as PMPI_Graphdims_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges) __attribute__((weak,alias("PMPI_Graphdims_get")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/graphnbrcnt.c b/src/mpi/topo/graphnbrcnt.c
index 7c227b8..c601520 100644
--- a/src/mpi/topo/graphnbrcnt.c
+++ b/src/mpi/topo/graphnbrcnt.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Graph_neighbors_count  MPI_Graph_neighbors_count
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Graph_neighbors_count as PMPI_Graph_neighbors_count
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors) __attribute__((weak,alias("PMPI_Graph_neighbors_count")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/inhb_allgather.c b/src/mpi/topo/inhb_allgather.c
index e911408..8729486 100644
--- a/src/mpi/topo/inhb_allgather.c
+++ b/src/mpi/topo/inhb_allgather.c
@@ -14,6 +14,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ineighbor_allgather  MPI_Ineighbor_allgather
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ineighbor_allgather as PMPI_Ineighbor_allgather
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ineighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+                            void *recvbuf, int recvcount, MPI_Datatype recvtype,
+                            MPI_Comm comm, MPI_Request *request)
+                            __attribute__((weak,alias("PMPI_Ineighbor_allgather")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/inhb_allgatherv.c b/src/mpi/topo/inhb_allgatherv.c
index a8f663f..5ea2111 100644
--- a/src/mpi/topo/inhb_allgatherv.c
+++ b/src/mpi/topo/inhb_allgatherv.c
@@ -14,6 +14,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ineighbor_allgatherv  MPI_Ineighbor_allgatherv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ineighbor_allgatherv as PMPI_Ineighbor_allgatherv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ineighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+                             void *recvbuf, const int recvcounts[], const int displs[],
+                             MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+                             __attribute__((weak,alias("PMPI_Ineighbor_allgatherv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/inhb_alltoall.c b/src/mpi/topo/inhb_alltoall.c
index 1bc1d0e..9d94772 100644
--- a/src/mpi/topo/inhb_alltoall.c
+++ b/src/mpi/topo/inhb_alltoall.c
@@ -14,6 +14,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ineighbor_alltoall  MPI_Ineighbor_alltoall
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ineighbor_alltoall as PMPI_Ineighbor_alltoall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+                           void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm,
+                           MPI_Request *request)
+                           __attribute__((weak,alias("PMPI_Ineighbor_alltoall")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/inhb_alltoallv.c b/src/mpi/topo/inhb_alltoallv.c
index 0066fa7..330fdf4 100644
--- a/src/mpi/topo/inhb_alltoallv.c
+++ b/src/mpi/topo/inhb_alltoallv.c
@@ -14,6 +14,12 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ineighbor_alltoallv  MPI_Ineighbor_alltoallv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ineighbor_alltoallv as PMPI_Ineighbor_alltoallv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
+                            MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
+                            const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm,
+                            MPI_Request *request)
+                            __attribute__((weak,alias("PMPI_Ineighbor_alltoallv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/inhb_alltoallw.c b/src/mpi/topo/inhb_alltoallw.c
index d3ffba4..1d0dc2f 100644
--- a/src/mpi/topo/inhb_alltoallw.c
+++ b/src/mpi/topo/inhb_alltoallw.c
@@ -14,6 +14,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Ineighbor_alltoallw  MPI_Ineighbor_alltoallw
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Ineighbor_alltoallw as PMPI_Ineighbor_alltoallw
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+                            const MPI_Aint sdispls[], const MPI_Datatype sendtypes[],
+                            void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[],
+                            const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Ineighbor_alltoallw")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/nhb_allgather.c b/src/mpi/topo/nhb_allgather.c
index 32c031a..2d0c91d 100644
--- a/src/mpi/topo/nhb_allgather.c
+++ b/src/mpi/topo/nhb_allgather.c
@@ -13,6 +13,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Neighbor_allgather  MPI_Neighbor_allgather
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Neighbor_allgather as PMPI_Neighbor_allgather
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+                           void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
+                           __attribute__((weak,alias("PMPI_Neighbor_allgather")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/nhb_allgatherv.c b/src/mpi/topo/nhb_allgatherv.c
index 1800b5f..2b91abb 100644
--- a/src/mpi/topo/nhb_allgatherv.c
+++ b/src/mpi/topo/nhb_allgatherv.c
@@ -13,6 +13,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Neighbor_allgatherv  MPI_Neighbor_allgatherv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Neighbor_allgatherv as PMPI_Neighbor_allgatherv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Neighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+                            void *recvbuf, const int recvcounts[], const int displs[],
+                            MPI_Datatype recvtype, MPI_Comm comm)
+                            __attribute__((weak,alias("PMPI_Neighbor_allgatherv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/nhb_alltoall.c b/src/mpi/topo/nhb_alltoall.c
index 13b4be9..b5c9520 100644
--- a/src/mpi/topo/nhb_alltoall.c
+++ b/src/mpi/topo/nhb_alltoall.c
@@ -13,6 +13,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Neighbor_alltoall  MPI_Neighbor_alltoall
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Neighbor_alltoall as PMPI_Neighbor_alltoall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+                          void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
+                          __attribute__((weak,alias("PMPI_Neighbor_alltoall")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/nhb_alltoallv.c b/src/mpi/topo/nhb_alltoallv.c
index da8b6f7..9451ba1 100644
--- a/src/mpi/topo/nhb_alltoallv.c
+++ b/src/mpi/topo/nhb_alltoallv.c
@@ -13,6 +13,11 @@
 #pragma _HP_SECONDARY_DEF PMPI_Neighbor_alltoallv  MPI_Neighbor_alltoallv
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Neighbor_alltoallv as PMPI_Neighbor_alltoallv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
+                           MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
+                           const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm)
+                           __attribute__((weak,alias("PMPI_Neighbor_alltoallv")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/nhb_alltoallw.c b/src/mpi/topo/nhb_alltoallw.c
index cba1ff8..9ebe2ce 100644
--- a/src/mpi/topo/nhb_alltoallw.c
+++ b/src/mpi/topo/nhb_alltoallw.c
@@ -13,6 +13,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_Neighbor_alltoallw  MPI_Neighbor_alltoallw
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Neighbor_alltoallw as PMPI_Neighbor_alltoallw
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[],
+                           const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
+                           const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm) __attribute__((weak,alias("PMPI_Neighbor_alltoallw")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi/topo/topo_test.c b/src/mpi/topo/topo_test.c
index 952a1b5..e9f1a6c 100644
--- a/src/mpi/topo/topo_test.c
+++ b/src/mpi/topo/topo_test.c
@@ -15,6 +15,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_Topo_test  MPI_Topo_test
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_Topo_test as PMPI_Topo_test
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Topo_test(MPI_Comm comm, int *status) __attribute__((weak,alias("PMPI_Topo_test")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/cat_changed.c b/src/mpi_t/cat_changed.c
index 27f8746..2ca22fc 100644
--- a/src/mpi_t/cat_changed.c
+++ b/src/mpi_t/cat_changed.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_category_changed  MPI_T_category_changed
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_category_changed as PMPI_T_category_changed
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_category_changed(int *stamp) __attribute__((weak,alias("PMPI_T_category_changed")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/cat_get_categories.c b/src/mpi_t/cat_get_categories.c
index fae2981..eaf94a3 100644
--- a/src/mpi_t/cat_get_categories.c
+++ b/src/mpi_t/cat_get_categories.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_category_get_categories  MPI_T_category_get_categories
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_category_get_categories as PMPI_T_category_get_categories
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_category_get_categories(int cat_index, int len, int indices[]) __attribute__((weak,alias("PMPI_T_category_get_categories")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/cat_get_cvars.c b/src/mpi_t/cat_get_cvars.c
index 61450f4..0bb525f 100644
--- a/src/mpi_t/cat_get_cvars.c
+++ b/src/mpi_t/cat_get_cvars.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_category_get_cvars  MPI_T_category_get_cvars
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_category_get_cvars as PMPI_T_category_get_cvars
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_category_get_cvars(int cat_index, int len, int indices[]) __attribute__((weak,alias("PMPI_T_category_get_cvars")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/cat_get_info.c b/src/mpi_t/cat_get_info.c
index cf31801..782cbe5 100644
--- a/src/mpi_t/cat_get_info.c
+++ b/src/mpi_t/cat_get_info.c
@@ -13,6 +13,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_category_get_info  MPI_T_category_get_info
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_category_get_info as PMPI_T_category_get_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_category_get_info(int cat_index, char *name, int *name_len, char *desc, int *desc_len,
+                            int *num_cvars, int *num_pvars, int *num_categories) __attribute__((weak,alias("PMPI_T_category_get_info")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/cat_get_num.c b/src/mpi_t/cat_get_num.c
index 8a3efca..beda624 100644
--- a/src/mpi_t/cat_get_num.c
+++ b/src/mpi_t/cat_get_num.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_category_get_num  MPI_T_category_get_num
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_category_get_num as PMPI_T_category_get_num
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_category_get_num(int *num_cat) __attribute__((weak,alias("PMPI_T_category_get_num")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/cat_get_pvars.c b/src/mpi_t/cat_get_pvars.c
index 39ed836..c189097 100644
--- a/src/mpi_t/cat_get_pvars.c
+++ b/src/mpi_t/cat_get_pvars.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_category_get_pvars  MPI_T_category_get_pvars
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_category_get_pvars as PMPI_T_category_get_pvars
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_category_get_pvars(int cat_index, int len, int indices[]) __attribute__((weak,alias("PMPI_T_category_get_pvars")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/cvar_get_info.c b/src/mpi_t/cvar_get_info.c
index 31ec7b1..dc5fef0 100644
--- a/src/mpi_t/cvar_get_info.c
+++ b/src/mpi_t/cvar_get_info.c
@@ -13,6 +13,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_cvar_get_info  MPI_T_cvar_get_info
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_cvar_get_info as PMPI_T_cvar_get_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_cvar_get_info(int cvar_index, char *name, int *name_len, int *verbosity,
+                        MPI_Datatype *datatype, MPI_T_enum *enumtype, char *desc, int *desc_len,
+                        int *binding, int *scope) __attribute__((weak,alias("PMPI_T_cvar_get_info")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/cvar_get_num.c b/src/mpi_t/cvar_get_num.c
index 0ff8aab..bd55221 100644
--- a/src/mpi_t/cvar_get_num.c
+++ b/src/mpi_t/cvar_get_num.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_cvar_get_num  MPI_T_cvar_get_num
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_cvar_get_num as PMPI_T_cvar_get_num
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_cvar_get_num(int *num_cvar) __attribute__((weak,alias("PMPI_T_cvar_get_num")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/cvar_handle_alloc.c b/src/mpi_t/cvar_handle_alloc.c
index 9232915..e0ea9fa 100644
--- a/src/mpi_t/cvar_handle_alloc.c
+++ b/src/mpi_t/cvar_handle_alloc.c
@@ -13,6 +13,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_cvar_handle_alloc  MPI_T_cvar_handle_alloc
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_cvar_handle_alloc as PMPI_T_cvar_handle_alloc
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_cvar_handle_alloc(int cvar_index, void *obj_handle, MPI_T_cvar_handle *handle,
+                            int *count) __attribute__((weak,alias("PMPI_T_cvar_handle_alloc")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/cvar_handle_free.c b/src/mpi_t/cvar_handle_free.c
index 271be20..d5fe45e 100644
--- a/src/mpi_t/cvar_handle_free.c
+++ b/src/mpi_t/cvar_handle_free.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_cvar_handle_free  MPI_T_cvar_handle_free
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_cvar_handle_free as PMPI_T_cvar_handle_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_cvar_handle_free(MPI_T_cvar_handle *handle) __attribute__((weak,alias("PMPI_T_cvar_handle_free")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/cvar_read.c b/src/mpi_t/cvar_read.c
index c71e524..19413ae 100644
--- a/src/mpi_t/cvar_read.c
+++ b/src/mpi_t/cvar_read.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_cvar_read  MPI_T_cvar_read
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_cvar_read as PMPI_T_cvar_read
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_cvar_read(MPI_T_cvar_handle handle, void *buf) __attribute__((weak,alias("PMPI_T_cvar_read")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/cvar_write.c b/src/mpi_t/cvar_write.c
index d571680..519f11f 100644
--- a/src/mpi_t/cvar_write.c
+++ b/src/mpi_t/cvar_write.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_cvar_write  MPI_T_cvar_write
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_cvar_write as PMPI_T_cvar_write
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_cvar_write(MPI_T_cvar_handle handle, void *buf) __attribute__((weak,alias("PMPI_T_cvar_write")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/enum_get_info.c b/src/mpi_t/enum_get_info.c
index afd134e..0a85c64 100644
--- a/src/mpi_t/enum_get_info.c
+++ b/src/mpi_t/enum_get_info.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_enum_get_info  MPI_T_enum_get_info
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_enum_get_info as PMPI_T_enum_get_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_enum_get_info(MPI_T_enum enumtype, int *num, char *name, int *name_len) __attribute__((weak,alias("PMPI_T_enum_get_info")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/enum_get_item.c b/src/mpi_t/enum_get_item.c
index dda7433..4820b8e 100644
--- a/src/mpi_t/enum_get_item.c
+++ b/src/mpi_t/enum_get_item.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_enum_get_item  MPI_T_enum_get_item
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_enum_get_item as PMPI_T_enum_get_item
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_enum_get_item(MPI_T_enum enumtype, int indx, int *value, char *name, int *name_len) __attribute__((weak,alias("PMPI_T_enum_get_item")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/mpit_finalize.c b/src/mpi_t/mpit_finalize.c
index 0321cd0..5e2e1aa 100644
--- a/src/mpi_t/mpit_finalize.c
+++ b/src/mpi_t/mpit_finalize.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_finalize  MPI_T_finalize
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_finalize as PMPI_T_finalize
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_finalize(void) __attribute__((weak,alias("PMPI_T_finalize")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/mpit_initthread.c b/src/mpi_t/mpit_initthread.c
index 1e7fcba..7b09dfe 100644
--- a/src/mpi_t/mpit_initthread.c
+++ b/src/mpi_t/mpit_initthread.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_init_thread  MPI_T_init_thread
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_init_thread as PMPI_T_init_thread
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_init_thread(int required, int *provided) __attribute__((weak,alias("PMPI_T_init_thread")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/pvar_get_info.c b/src/mpi_t/pvar_get_info.c
index 3dcd179..a229edf 100644
--- a/src/mpi_t/pvar_get_info.c
+++ b/src/mpi_t/pvar_get_info.c
@@ -13,6 +13,10 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_pvar_get_info  MPI_T_pvar_get_info
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_pvar_get_info as PMPI_T_pvar_get_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_get_info(int pvar_index, char *name, int *name_len, int *verbosity, int *var_class,
+                        MPI_Datatype *datatype, MPI_T_enum *enumtype, char *desc, int *desc_len,
+                        int *binding, int *readonly, int *continuous, int *atomic) __attribute__((weak,alias("PMPI_T_pvar_get_info")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/pvar_get_num.c b/src/mpi_t/pvar_get_num.c
index 4e66600..858c1b4 100644
--- a/src/mpi_t/pvar_get_num.c
+++ b/src/mpi_t/pvar_get_num.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_pvar_get_num  MPI_T_pvar_get_num
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_pvar_get_num as PMPI_T_pvar_get_num
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_get_num(int *num_pvar) __attribute__((weak,alias("PMPI_T_pvar_get_num")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/pvar_handle_alloc.c b/src/mpi_t/pvar_handle_alloc.c
index ec1883a..31edd9a 100644
--- a/src/mpi_t/pvar_handle_alloc.c
+++ b/src/mpi_t/pvar_handle_alloc.c
@@ -14,6 +14,9 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_pvar_handle_alloc  MPI_T_pvar_handle_alloc
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_pvar_handle_alloc as PMPI_T_pvar_handle_alloc
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_handle_alloc(MPI_T_pvar_session session, int pvar_index, void *obj_handle,
+                            MPI_T_pvar_handle *handle, int *count) __attribute__((weak,alias("PMPI_T_pvar_handle_alloc")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/pvar_handle_free.c b/src/mpi_t/pvar_handle_free.c
index bc7a6de..0aa5117 100644
--- a/src/mpi_t/pvar_handle_free.c
+++ b/src/mpi_t/pvar_handle_free.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_pvar_handle_free  MPI_T_pvar_handle_free
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_pvar_handle_free as PMPI_T_pvar_handle_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_handle_free(MPI_T_pvar_session session, MPI_T_pvar_handle *handle) __attribute__((weak,alias("PMPI_T_pvar_handle_free")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/pvar_read.c b/src/mpi_t/pvar_read.c
index 3c3ba7f..54956ab 100644
--- a/src/mpi_t/pvar_read.c
+++ b/src/mpi_t/pvar_read.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_pvar_read  MPI_T_pvar_read
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_pvar_read as PMPI_T_pvar_read
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_read(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) __attribute__((weak,alias("PMPI_T_pvar_read")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/pvar_readreset.c b/src/mpi_t/pvar_readreset.c
index bd87dd4..23751aa 100644
--- a/src/mpi_t/pvar_readreset.c
+++ b/src/mpi_t/pvar_readreset.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_pvar_readreset  MPI_T_pvar_readreset
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_pvar_readreset as PMPI_T_pvar_readreset
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_readreset(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) __attribute__((weak,alias("PMPI_T_pvar_readreset")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/pvar_reset.c b/src/mpi_t/pvar_reset.c
index c835e64..aea3655 100644
--- a/src/mpi_t/pvar_reset.c
+++ b/src/mpi_t/pvar_reset.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_pvar_reset  MPI_T_pvar_reset
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_pvar_reset as PMPI_T_pvar_reset
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_reset(MPI_T_pvar_session session, MPI_T_pvar_handle handle) __attribute__((weak,alias("PMPI_T_pvar_reset")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/pvar_session_create.c b/src/mpi_t/pvar_session_create.c
index db59286..1777cd5 100644
--- a/src/mpi_t/pvar_session_create.c
+++ b/src/mpi_t/pvar_session_create.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_pvar_session_create  MPI_T_pvar_session_create
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_pvar_session_create as PMPI_T_pvar_session_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_session_create(MPI_T_pvar_session *session) __attribute__((weak,alias("PMPI_T_pvar_session_create")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/pvar_session_free.c b/src/mpi_t/pvar_session_free.c
index 9a2064d..3cade54 100644
--- a/src/mpi_t/pvar_session_free.c
+++ b/src/mpi_t/pvar_session_free.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_pvar_session_free  MPI_T_pvar_session_free
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_pvar_session_free as PMPI_T_pvar_session_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_session_free(MPI_T_pvar_session *session) __attribute__((weak,alias("PMPI_T_pvar_session_free")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/pvar_start.c b/src/mpi_t/pvar_start.c
index 84ac78c..3a700ad 100644
--- a/src/mpi_t/pvar_start.c
+++ b/src/mpi_t/pvar_start.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_pvar_start  MPI_T_pvar_start
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_pvar_start as PMPI_T_pvar_start
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_start(MPI_T_pvar_session session, MPI_T_pvar_handle handle) __attribute__((weak,alias("PMPI_T_pvar_start")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/pvar_stop.c b/src/mpi_t/pvar_stop.c
index 10a2081..8473316 100644
--- a/src/mpi_t/pvar_stop.c
+++ b/src/mpi_t/pvar_stop.c
@@ -14,6 +14,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_pvar_stop  MPI_T_pvar_stop
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_pvar_stop as PMPI_T_pvar_stop
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_stop(MPI_T_pvar_session session, MPI_T_pvar_handle handle) __attribute__((weak,alias("PMPI_T_pvar_stop")));
 #endif
 /* -- End Profiling Symbol Block */
 
diff --git a/src/mpi_t/pvar_write.c b/src/mpi_t/pvar_write.c
index 309f7ba..23ff0e2 100644
--- a/src/mpi_t/pvar_write.c
+++ b/src/mpi_t/pvar_write.c
@@ -13,6 +13,8 @@
 #pragma _HP_SECONDARY_DEF PMPI_T_pvar_write  MPI_T_pvar_write
 #elif defined(HAVE_PRAGMA_CRI_DUP)
 #pragma _CRI duplicate MPI_T_pvar_write as PMPI_T_pvar_write
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) __attribute__((weak,alias("PMPI_T_pvar_write")));
 #endif
 /* -- End Profiling Symbol Block */
 

http://git.mpich.org/mpich.git/commitdiff/0011344aee9fadd4c2e879da9b14e764bfbf837a

commit 0011344aee9fadd4c2e879da9b14e764bfbf837a
Author: Antonio J. Pena <apenya at mcs.anl.gov>
Date:   Mon Mar 17 16:22:19 2014 -0500

    Fix weak alias support detection
    
    Since GCC4, it is required that when declaring a function alias,
    the target function is defined in the same compilation unit.
    
    See #2002
    
    Signed-off-by: Ken Raffenetti <raffenet at mcs.anl.gov>

diff --git a/confdb/aclocal_cc.m4 b/confdb/aclocal_cc.m4
index c706151..e2dd692 100644
--- a/confdb/aclocal_cc.m4
+++ b/confdb/aclocal_cc.m4
@@ -368,7 +368,7 @@ pac_cv_attr_weak_alias,[
 PAC_PUSH_FLAG([CFLAGS])
 # force an error exit if the weak attribute isn't understood
 CFLAGS=-Werror
-AC_TRY_COMPILE([int foo(int) __attribute__((weak,alias("__foo")));],[int a;],
+AC_TRY_COMPILE([int __foo(int a){return 0;} int foo(int) __attribute__((weak,alias("__foo")));],[int a;],
 pac_cv_attr_weak_alias=yes,pac_cv_attr_weak_alias=no)
 # Restore original CFLAGS
 PAC_POP_FLAG([CFLAGS])])

-----------------------------------------------------------------------

Summary of changes:
 confdb/aclocal_cc.m4                               |    2 +-
 configure.ac                                       |    5 -
 src/binding/fortran/mpif_h/buildiface              |    6 +-
 src/binding/fortran/use_mpi/create_f90_complex.c   |    2 +
 src/binding/fortran/use_mpi/create_f90_int.c       |    2 +
 src/binding/fortran/use_mpi/create_f90_real.c      |    2 +
 .../fortran/use_mpi_f08/wrappers_c/buildiface      |    1 -
 src/glue/romio/all_romio_symbols                   |    1 -
 src/include/mpi.h.in                               |  682 ++++++++++----------
 src/mpi/attr/attr_delete.c                         |    2 +
 src/mpi/attr/attr_get.c                            |    2 +
 src/mpi/attr/attr_put.c                            |    2 +
 src/mpi/attr/comm_create_keyval.c                  |    4 +
 src/mpi/attr/comm_delete_attr.c                    |    2 +
 src/mpi/attr/comm_free_keyval.c                    |    2 +
 src/mpi/attr/comm_get_attr.c                       |    2 +
 src/mpi/attr/comm_set_attr.c                       |    2 +
 src/mpi/attr/keyval_create.c                       |    3 +
 src/mpi/attr/keyval_free.c                         |    2 +
 src/mpi/attr/type_create_keyval.c                  |    4 +
 src/mpi/attr/type_delete_attr.c                    |    2 +
 src/mpi/attr/type_free_keyval.c                    |    2 +
 src/mpi/attr/type_get_attr.c                       |    2 +
 src/mpi/attr/type_set_attr.c                       |    2 +
 src/mpi/attr/win_create_keyval.c                   |    4 +
 src/mpi/attr/win_delete_attr.c                     |    2 +
 src/mpi/attr/win_free_keyval.c                     |    2 +
 src/mpi/attr/win_get_attr.c                        |    2 +
 src/mpi/attr/win_set_attr.c                        |    2 +
 src/mpi/coll/allgather.c                           |    4 +
 src/mpi/coll/allgatherv.c                          |    4 +
 src/mpi/coll/allreduce.c                           |    4 +
 src/mpi/coll/alltoall.c                            |    4 +
 src/mpi/coll/alltoallv.c                           |    5 +
 src/mpi/coll/alltoallw.c                           |    4 +
 src/mpi/coll/barrier.c                             |    2 +
 src/mpi/coll/bcast.c                               |    3 +
 src/mpi/coll/exscan.c                              |    4 +
 src/mpi/coll/gather.c                              |    4 +
 src/mpi/coll/gatherv.c                             |    5 +
 src/mpi/coll/iallgather.c                          |    4 +
 src/mpi/coll/iallgatherv.c                         |    5 +
 src/mpi/coll/iallreduce.c                          |    4 +
 src/mpi/coll/ialltoall.c                           |    4 +
 src/mpi/coll/ialltoallv.c                          |    6 +
 src/mpi/coll/ialltoallw.c                          |    5 +
 src/mpi/coll/ibarrier.c                            |    2 +
 src/mpi/coll/ibcast.c                              |    3 +
 src/mpi/coll/iexscan.c                             |    4 +
 src/mpi/coll/igather.c                             |    5 +
 src/mpi/coll/igatherv.c                            |    5 +
 src/mpi/coll/ired_scat.c                           |    4 +
 src/mpi/coll/ired_scat_block.c                     |    5 +
 src/mpi/coll/ireduce.c                             |    4 +
 src/mpi/coll/iscan.c                               |    4 +
 src/mpi/coll/iscatter.c                            |    5 +
 src/mpi/coll/iscatterv.c                           |    5 +
 src/mpi/coll/op_commutative.c                      |    2 +
 src/mpi/coll/op_create.c                           |    2 +
 src/mpi/coll/op_free.c                             |    2 +
 src/mpi/coll/red_scat.c                            |    4 +
 src/mpi/coll/red_scat_block.c                      |    4 +
 src/mpi/coll/reduce.c                              |    4 +
 src/mpi/coll/reduce_local.c                        |    4 +
 src/mpi/coll/scan.c                                |    4 +
 src/mpi/coll/scatter.c                             |    4 +
 src/mpi/coll/scatterv.c                            |    5 +
 src/mpi/comm/comm_compare.c                        |    2 +
 src/mpi/comm/comm_create.c                         |    2 +
 src/mpi/comm/comm_create_group.c                   |    2 +
 src/mpi/comm/comm_dup.c                            |    2 +
 src/mpi/comm/comm_dup_with_info.c                  |    2 +
 src/mpi/comm/comm_free.c                           |    2 +
 src/mpi/comm/comm_get_info.c                       |    2 +
 src/mpi/comm/comm_get_name.c                       |    2 +
 src/mpi/comm/comm_group.c                          |    2 +
 src/mpi/comm/comm_group_failed.c                   |    2 +
 src/mpi/comm/comm_idup.c                           |    2 +
 src/mpi/comm/comm_rank.c                           |    2 +
 src/mpi/comm/comm_reenable_anysource.c             |    2 +
 src/mpi/comm/comm_remote_group.c                   |    2 +
 src/mpi/comm/comm_remote_group_failed.c            |    2 +
 src/mpi/comm/comm_remote_size.c                    |    2 +
 src/mpi/comm/comm_set_info.c                       |    2 +
 src/mpi/comm/comm_set_name.c                       |    2 +
 src/mpi/comm/comm_size.c                           |    2 +
 src/mpi/comm/comm_split.c                          |    2 +
 src/mpi/comm/comm_split_type.c                     |    2 +
 src/mpi/comm/comm_test_inter.c                     |    2 +
 src/mpi/comm/intercomm_create.c                    |    3 +
 src/mpi/comm/intercomm_merge.c                     |    2 +
 src/mpi/datatype/address.c                         |    2 +
 src/mpi/datatype/get_address.c                     |    2 +
 src/mpi/datatype/get_count.c                       |    2 +
 src/mpi/datatype/get_elements.c                    |    2 +
 src/mpi/datatype/get_elements_x.c                  |    2 +
 src/mpi/datatype/pack.c                            |    3 +
 src/mpi/datatype/pack_external.c                   |    4 +
 src/mpi/datatype/pack_external_size.c              |    3 +
 src/mpi/datatype/pack_size.c                       |    2 +
 src/mpi/datatype/status_set_elements.c             |    2 +
 src/mpi/datatype/status_set_elements_x.c           |    2 +
 src/mpi/datatype/type_commit.c                     |    2 +
 src/mpi/datatype/type_contiguous.c                 |    2 +
 src/mpi/datatype/type_create_darray.c              |    5 +
 src/mpi/datatype/type_create_hindexed.c            |    4 +
 src/mpi/datatype/type_create_hindexed_block.c      |    4 +
 src/mpi/datatype/type_create_hvector.c             |    3 +
 src/mpi/datatype/type_create_indexed_block.c       |    3 +
 src/mpi/datatype/type_create_resized.c             |    3 +
 src/mpi/datatype/type_create_struct.c              |    4 +
 src/mpi/datatype/type_create_subarray.c            |    4 +
 src/mpi/datatype/type_dup.c                        |    2 +
 src/mpi/datatype/type_extent.c                     |    2 +
 src/mpi/datatype/type_free.c                       |    2 +
 src/mpi/datatype/type_get_contents.c               |    4 +
 src/mpi/datatype/type_get_envelope.c               |    3 +
 src/mpi/datatype/type_get_extent.c                 |    2 +
 src/mpi/datatype/type_get_extent_x.c               |    2 +
 src/mpi/datatype/type_get_name.c                   |    2 +
 src/mpi/datatype/type_get_true_extent.c            |    2 +
 src/mpi/datatype/type_get_true_extent_x.c          |    2 +
 src/mpi/datatype/type_hindexed.c                   |    4 +
 src/mpi/datatype/type_hvector.c                    |    3 +
 src/mpi/datatype/type_indexed.c                    |    4 +
 src/mpi/datatype/type_lb.c                         |    2 +
 src/mpi/datatype/type_match_size.c                 |    2 +
 src/mpi/datatype/type_set_name.c                   |    2 +
 src/mpi/datatype/type_size.c                       |    2 +
 src/mpi/datatype/type_size_x.c                     |    2 +
 src/mpi/datatype/type_struct.c                     |    4 +
 src/mpi/datatype/type_ub.c                         |    2 +
 src/mpi/datatype/type_vector.c                     |    3 +
 src/mpi/datatype/unpack.c                          |    3 +
 src/mpi/datatype/unpack_external.c                 |    4 +
 src/mpi/errhan/add_error_class.c                   |    2 +
 src/mpi/errhan/add_error_code.c                    |    2 +
 src/mpi/errhan/add_error_string.c                  |    2 +
 src/mpi/errhan/comm_call_errhandler.c              |    2 +
 src/mpi/errhan/comm_create_errhandler.c            |    3 +
 src/mpi/errhan/comm_get_errhandler.c               |    2 +
 src/mpi/errhan/comm_set_errhandler.c               |    2 +
 src/mpi/errhan/errhandler_create.c                 |    2 +
 src/mpi/errhan/errhandler_free.c                   |    2 +
 src/mpi/errhan/errhandler_get.c                    |    2 +
 src/mpi/errhan/errhandler_set.c                    |    2 +
 src/mpi/errhan/error_class.c                       |    2 +
 src/mpi/errhan/error_string.c                      |    2 +
 src/mpi/errhan/file_call_errhandler.c              |    2 +
 src/mpi/errhan/file_create_errhandler.c            |    3 +
 src/mpi/errhan/file_get_errhandler.c               |    2 +
 src/mpi/errhan/file_set_errhandler.c               |    2 +
 src/mpi/errhan/win_call_errhandler.c               |    2 +
 src/mpi/errhan/win_create_errhandler.c             |    3 +
 src/mpi/errhan/win_get_errhandler.c                |    2 +
 src/mpi/errhan/win_set_errhandler.c                |    2 +
 src/mpi/group/group_compare.c                      |    2 +
 src/mpi/group/group_difference.c                   |    2 +
 src/mpi/group/group_excl.c                         |    2 +
 src/mpi/group/group_free.c                         |    2 +
 src/mpi/group/group_incl.c                         |    2 +
 src/mpi/group/group_intersection.c                 |    2 +
 src/mpi/group/group_range_excl.c                   |    2 +
 src/mpi/group/group_range_incl.c                   |    2 +
 src/mpi/group/group_rank.c                         |    2 +
 src/mpi/group/group_size.c                         |    2 +
 src/mpi/group/group_translate_ranks.c              |    3 +
 src/mpi/group/group_union.c                        |    2 +
 src/mpi/info/info_create.c                         |    2 +
 src/mpi/info/info_delete.c                         |    2 +
 src/mpi/info/info_dup.c                            |    2 +
 src/mpi/info/info_free.c                           |    2 +
 src/mpi/info/info_get.c                            |    2 +
 src/mpi/info/info_getn.c                           |    2 +
 src/mpi/info/info_getnth.c                         |    2 +
 src/mpi/info/info_getvallen.c                      |    2 +
 src/mpi/info/info_set.c                            |    2 +
 src/mpi/init/abort.c                               |    2 +
 src/mpi/init/finalize.c                            |    2 +
 src/mpi/init/finalized.c                           |    2 +
 src/mpi/init/init.c                                |    2 +
 src/mpi/init/initialized.c                         |    2 +
 src/mpi/init/initthread.c                          |    2 +
 src/mpi/init/ismain.c                              |    2 +
 src/mpi/init/querythread.c                         |    2 +
 src/mpi/misc/getpname.c                            |    2 +
 src/mpi/misc/library_version.c                     |    2 +
 src/mpi/misc/pcontrol.c                            |    2 +
 src/mpi/misc/version.c                             |    2 +
 src/mpi/pt2pt/bsend.c                              |    3 +
 src/mpi/pt2pt/bsend_init.c                         |    3 +
 src/mpi/pt2pt/bufattach.c                          |    2 +
 src/mpi/pt2pt/buffree.c                            |    2 +
 src/mpi/pt2pt/cancel.c                             |    2 +
 src/mpi/pt2pt/greq_complete.c                      |    2 +
 src/mpi/pt2pt/greq_start.c                         |    4 +
 src/mpi/pt2pt/ibsend.c                             |    3 +
 src/mpi/pt2pt/improbe.c                            |    3 +
 src/mpi/pt2pt/imrecv.c                             |    3 +
 src/mpi/pt2pt/iprobe.c                             |    2 +
 src/mpi/pt2pt/irecv.c                              |    3 +
 src/mpi/pt2pt/irsend.c                             |    3 +
 src/mpi/pt2pt/isend.c                              |    3 +
 src/mpi/pt2pt/issend.c                             |    3 +
 src/mpi/pt2pt/mprobe.c                             |    2 +
 src/mpi/pt2pt/mrecv.c                              |    3 +
 src/mpi/pt2pt/probe.c                              |    2 +
 src/mpi/pt2pt/recv.c                               |    3 +
 src/mpi/pt2pt/recv_init.c                          |    3 +
 src/mpi/pt2pt/request_free.c                       |    2 +
 src/mpi/pt2pt/request_get_status.c                 |    2 +
 src/mpi/pt2pt/rsend.c                              |    3 +
 src/mpi/pt2pt/rsend_init.c                         |    3 +
 src/mpi/pt2pt/send.c                               |    3 +
 src/mpi/pt2pt/send_init.c                          |    3 +
 src/mpi/pt2pt/sendrecv.c                           |    5 +
 src/mpi/pt2pt/sendrecv_rep.c                       |    4 +
 src/mpi/pt2pt/ssend.c                              |    3 +
 src/mpi/pt2pt/ssend_init.c                         |    3 +
 src/mpi/pt2pt/start.c                              |    2 +
 src/mpi/pt2pt/startall.c                           |    2 +
 src/mpi/pt2pt/status_set_cancelled.c               |    2 +
 src/mpi/pt2pt/test.c                               |    2 +
 src/mpi/pt2pt/test_cancelled.c                     |    2 +
 src/mpi/pt2pt/testall.c                            |    3 +
 src/mpi/pt2pt/testany.c                            |    3 +
 src/mpi/pt2pt/testsome.c                           |    3 +
 src/mpi/pt2pt/wait.c                               |    2 +
 src/mpi/pt2pt/waitall.c                            |    2 +
 src/mpi/pt2pt/waitany.c                            |    2 +
 src/mpi/pt2pt/waitsome.c                           |    3 +
 src/mpi/rma/accumulate.c                           |    5 +
 src/mpi/rma/alloc_mem.c                            |    2 +
 src/mpi/rma/compare_and_swap.c                     |    5 +
 src/mpi/rma/fetch_and_op.c                         |    5 +
 src/mpi/rma/free_mem.c                             |    2 +
 src/mpi/rma/get.c                                  |    4 +
 src/mpi/rma/get_accumulate.c                       |    6 +
 src/mpi/rma/put.c                                  |    4 +
 src/mpi/rma/raccumulate.c                          |    6 +
 src/mpi/rma/rget.c                                 |    6 +
 src/mpi/rma/rget_accumulate.c                      |    7 +
 src/mpi/rma/rput.c                                 |    6 +
 src/mpi/rma/win_allocate.c                         |    3 +
 src/mpi/rma/win_allocate_shared.c                  |    3 +
 src/mpi/rma/win_attach.c                           |    2 +
 src/mpi/rma/win_complete.c                         |    2 +
 src/mpi/rma/win_create.c                           |    3 +
 src/mpi/rma/win_create_dynamic.c                   |    2 +
 src/mpi/rma/win_detach.c                           |    2 +
 src/mpi/rma/win_fence.c                            |    2 +
 src/mpi/rma/win_flush.c                            |    2 +
 src/mpi/rma/win_flush_all.c                        |    2 +
 src/mpi/rma/win_flush_local.c                      |    2 +
 src/mpi/rma/win_flush_local_all.c                  |    2 +
 src/mpi/rma/win_free.c                             |    2 +
 src/mpi/rma/win_get_group.c                        |    2 +
 src/mpi/rma/win_get_info.c                         |    2 +
 src/mpi/rma/win_get_name.c                         |    2 +
 src/mpi/rma/win_lock.c                             |    2 +
 src/mpi/rma/win_lock_all.c                         |    2 +
 src/mpi/rma/win_post.c                             |    2 +
 src/mpi/rma/win_set_info.c                         |    2 +
 src/mpi/rma/win_set_name.c                         |    2 +
 src/mpi/rma/win_shared_query.c                     |    2 +
 src/mpi/rma/win_start.c                            |    2 +
 src/mpi/rma/win_sync.c                             |    2 +
 src/mpi/rma/win_test.c                             |    2 +
 src/mpi/rma/win_unlock.c                           |    2 +
 src/mpi/rma/win_unlock_all.c                       |    2 +
 src/mpi/rma/win_wait.c                             |    2 +
 src/mpi/romio/include/mpio.h.in                    |  112 ++--
 src/mpi/romio/mpi-io/close.c                       |    2 +
 src/mpi/romio/mpi-io/delete.c                      |    2 +
 src/mpi/romio/mpi-io/file_c2f.c                    |    2 +
 src/mpi/romio/mpi-io/file_f2c.c                    |    2 +
 src/mpi/romio/mpi-io/fsync.c                       |    2 +
 src/mpi/romio/mpi-io/get_amode.c                   |    2 +
 src/mpi/romio/mpi-io/get_atom.c                    |    2 +
 src/mpi/romio/mpi-io/get_bytoff.c                  |    2 +
 src/mpi/romio/mpi-io/get_errh.c                    |    2 +
 src/mpi/romio/mpi-io/get_extent.c                  |    2 +
 src/mpi/romio/mpi-io/get_group.c                   |    2 +
 src/mpi/romio/mpi-io/get_info.c                    |    2 +
 src/mpi/romio/mpi-io/get_posn.c                    |    2 +
 src/mpi/romio/mpi-io/get_posn_sh.c                 |    2 +
 src/mpi/romio/mpi-io/get_size.c                    |    2 +
 src/mpi/romio/mpi-io/get_view.c                    |    3 +
 src/mpi/romio/mpi-io/iread.c                       |    3 +
 src/mpi/romio/mpi-io/iread_at.c                    |    3 +
 src/mpi/romio/mpi-io/iread_sh.c                    |    3 +
 src/mpi/romio/mpi-io/iwrite.c                      |    3 +
 src/mpi/romio/mpi-io/iwrite_at.c                   |    4 +
 src/mpi/romio/mpi-io/iwrite_sh.c                   |    3 +
 src/mpi/romio/mpi-io/open.c                        |    2 +
 src/mpi/romio/mpi-io/prealloc.c                    |    2 +
 src/mpi/romio/mpi-io/rd_atallb.c                   |    3 +
 src/mpi/romio/mpi-io/rd_atalle.c                   |    2 +
 src/mpi/romio/mpi-io/read.c                        |    3 +
 src/mpi/romio/mpi-io/read_all.c                    |    3 +
 src/mpi/romio/mpi-io/read_allb.c                   |    3 +
 src/mpi/romio/mpi-io/read_alle.c                   |    2 +
 src/mpi/romio/mpi-io/read_at.c                     |    3 +
 src/mpi/romio/mpi-io/read_atall.c                  |    4 +
 src/mpi/romio/mpi-io/read_ord.c                    |    3 +
 src/mpi/romio/mpi-io/read_ordb.c                   |    3 +
 src/mpi/romio/mpi-io/read_orde.c                   |    2 +
 src/mpi/romio/mpi-io/read_sh.c                     |    3 +
 src/mpi/romio/mpi-io/register_datarep.c            |    4 +
 src/mpi/romio/mpi-io/seek.c                        |    2 +
 src/mpi/romio/mpi-io/seek_sh.c                     |    2 +
 src/mpi/romio/mpi-io/set_atom.c                    |    2 +
 src/mpi/romio/mpi-io/set_errh.c                    |    2 +
 src/mpi/romio/mpi-io/set_info.c                    |    2 +
 src/mpi/romio/mpi-io/set_size.c                    |    2 +
 src/mpi/romio/mpi-io/set_view.c                    |    3 +
 src/mpi/romio/mpi-io/wr_atallb.c                   |    3 +
 src/mpi/romio/mpi-io/wr_atalle.c                   |    2 +
 src/mpi/romio/mpi-io/write.c                       |    3 +
 src/mpi/romio/mpi-io/write_all.c                   |    3 +
 src/mpi/romio/mpi-io/write_allb.c                  |    3 +
 src/mpi/romio/mpi-io/write_alle.c                  |    2 +
 src/mpi/romio/mpi-io/write_at.c                    |    4 +
 src/mpi/romio/mpi-io/write_atall.c                 |    4 +
 src/mpi/romio/mpi-io/write_ord.c                   |    3 +
 src/mpi/romio/mpi-io/write_ordb.c                  |    3 +
 src/mpi/romio/mpi-io/write_orde.c                  |    2 +
 src/mpi/romio/mpi-io/write_sh.c                    |    3 +
 src/mpi/spawn/close_port.c                         |    2 +
 src/mpi/spawn/comm_accept.c                        |    3 +
 src/mpi/spawn/comm_connect.c                       |    3 +
 src/mpi/spawn/comm_disconnect.c                    |    2 +
 src/mpi/spawn/comm_get_parent.c                    |    2 +
 src/mpi/spawn/comm_join.c                          |    2 +
 src/mpi/spawn/comm_spawn.c                         |    3 +
 src/mpi/spawn/comm_spawn_multiple.c                |    4 +
 src/mpi/spawn/lookup_name.c                        |    2 +
 src/mpi/spawn/open_port.c                          |    2 +
 src/mpi/spawn/publish_name.c                       |    2 +
 src/mpi/spawn/unpublish_name.c                     |    2 +
 src/mpi/timer/wtick.c                              |    2 +
 src/mpi/timer/wtime.c                              |    2 +
 src/mpi/topo/cart_coords.c                         |    2 +
 src/mpi/topo/cart_create.c                         |    3 +
 src/mpi/topo/cart_get.c                            |    2 +
 src/mpi/topo/cart_map.c                            |    2 +
 src/mpi/topo/cart_rank.c                           |    2 +
 src/mpi/topo/cart_shift.c                          |    2 +
 src/mpi/topo/cart_sub.c                            |    2 +
 src/mpi/topo/cartdim_get.c                         |    2 +
 src/mpi/topo/dims_create.c                         |    2 +
 src/mpi/topo/dist_gr_create.c                      |    4 +
 src/mpi/topo/dist_gr_create_adj.c                  |    5 +
 src/mpi/topo/dist_gr_neighb.c                      |    3 +
 src/mpi/topo/dist_gr_neighb_count.c                |    2 +
 src/mpi/topo/graph_get.c                           |    2 +
 src/mpi/topo/graph_map.c                           |    2 +
 src/mpi/topo/graph_nbr.c                           |    2 +
 src/mpi/topo/graphcreate.c                         |    3 +
 src/mpi/topo/graphdimsget.c                        |    2 +
 src/mpi/topo/graphnbrcnt.c                         |    2 +
 src/mpi/topo/inhb_allgather.c                      |    5 +
 src/mpi/topo/inhb_allgatherv.c                     |    5 +
 src/mpi/topo/inhb_alltoall.c                       |    5 +
 src/mpi/topo/inhb_alltoallv.c                      |    6 +
 src/mpi/topo/inhb_alltoallw.c                      |    5 +
 src/mpi/topo/nhb_allgather.c                       |    4 +
 src/mpi/topo/nhb_allgatherv.c                      |    5 +
 src/mpi/topo/nhb_alltoall.c                        |    4 +
 src/mpi/topo/nhb_alltoallv.c                       |    5 +
 src/mpi/topo/nhb_alltoallw.c                       |    4 +
 src/mpi/topo/topo_test.c                           |    2 +
 src/mpi_t/cat_changed.c                            |    2 +
 src/mpi_t/cat_get_categories.c                     |    2 +
 src/mpi_t/cat_get_cvars.c                          |    2 +
 src/mpi_t/cat_get_info.c                           |    3 +
 src/mpi_t/cat_get_num.c                            |    2 +
 src/mpi_t/cat_get_pvars.c                          |    2 +
 src/mpi_t/cvar_get_info.c                          |    4 +
 src/mpi_t/cvar_get_num.c                           |    2 +
 src/mpi_t/cvar_handle_alloc.c                      |    3 +
 src/mpi_t/cvar_handle_free.c                       |    2 +
 src/mpi_t/cvar_read.c                              |    2 +
 src/mpi_t/cvar_write.c                             |    2 +
 src/mpi_t/enum_get_info.c                          |    2 +
 src/mpi_t/enum_get_item.c                          |    2 +
 src/mpi_t/mpit_finalize.c                          |    2 +
 src/mpi_t/mpit_initthread.c                        |    2 +
 src/mpi_t/pvar_get_info.c                          |    4 +
 src/mpi_t/pvar_get_num.c                           |    2 +
 src/mpi_t/pvar_handle_alloc.c                      |    3 +
 src/mpi_t/pvar_handle_free.c                       |    2 +
 src/mpi_t/pvar_read.c                              |    2 +
 src/mpi_t/pvar_readreset.c                         |    2 +
 src/mpi_t/pvar_reset.c                             |    2 +
 src/mpi_t/pvar_session_create.c                    |    2 +
 src/mpi_t/pvar_session_free.c                      |    2 +
 src/mpi_t/pvar_start.c                             |    2 +
 src/mpi_t/pvar_stop.c                              |    2 +
 src/mpi_t/pvar_write.c                             |    2 +
 400 files changed, 1452 insertions(+), 409 deletions(-)


hooks/post-receive
-- 
MPICH primary repository


More information about the commits mailing list