currently in the z/OS specific implementation of dso.c it is returning errno directly asis on several functions.
 It should be setting the returned status to expected values consistent with the unix and other implementations.
This will also get testdso to pass on z/OS too.
 

Index: dso.c
===================================================================
--- dso.c       (revision 601360)
+++ dso.c       (working copy)
@@ -54,7 +54,7 @@
         return APR_SUCCESS;
     }
     dso->failing_errno = errno;
-    return errno;
+    return APR_EINIT;
 }

 APR_DECLARE(apr_status_t) apr_dso_load(apr_dso_handle_t **res_handle,
@@ -72,7 +72,7 @@
     }

     (*res_handle)->failing_errno = errno;
-    return errno;
+    return APR_EDSOOPEN;
 }

 APR_DECLARE(apr_status_t) apr_dso_unload(apr_dso_handle_t *handle)
@@ -96,7 +96,7 @@
         return APR_SUCCESS;
     }
     handle->failing_errno = errno;
-    return errno;
+    return APR_ESYMNOTFOUND;
 }

 APR_DECLARE(const char *) apr_dso_error(apr_dso_handle_t *handle, char *buffer,