2015-08-03 Nathan Sidwell libgomp/ * plugin/plugin-nvptx.c: Don't include dlfcn.h. (cuda_errlist): Constify. (errmsg): Move into ... (cuda_error): ... here. Make smaller. (_XSTR, _STR): Delete. (cuda_synames): Delete. (verify_device_library): Delete. (nvptx_init): Don't call it. Index: libgomp/plugin/plugin-nvptx.c =================================================================== --- libgomp/plugin/plugin-nvptx.c (revision 226533) +++ libgomp/plugin/plugin-nvptx.c (working copy) @@ -43,16 +43,15 @@ #include #include #include -#include #include #include #define ARRAYSIZE(X) (sizeof (X) / sizeof ((X)[0])) -static struct +static const struct { CUresult r; - char *m; + const char *m; } cuda_errlist[]= { { CUDA_ERROR_INVALID_VALUE, "invalid value" }, @@ -109,9 +108,7 @@ static struct { CUDA_ERROR_UNKNOWN, "unknown" } }; -static char errmsg[128]; - -static char * +static const char * cuda_error (CUresult r) { int i; @@ -119,12 +116,14 @@ cuda_error (CUresult r) for (i = 0; i < ARRAYSIZE (cuda_errlist); i++) { if (cuda_errlist[i].r == r) - return &cuda_errlist[i].m[0]; + return cuda_errlist[i].m; } - sprintf (&errmsg[0], "unknown result code: %5d", r); + static char errmsg[30]; + + snprintf (errmsg, sizeof (errmsg), "unknown error code: %d", r); - return &errmsg[0]; + return errmsg; } static unsigned int instantiated_devices = 0; @@ -383,74 +382,6 @@ static struct ptx_event *ptx_events; static struct ptx_device **ptx_devices; -#define _XSTR(s) _STR(s) -#define _STR(s) #s - -static struct _synames -{ - char *n; -} cuda_symnames[] = -{ - { _XSTR (cuCtxCreate) }, - { _XSTR (cuCtxDestroy) }, - { _XSTR (cuCtxGetCurrent) }, - { _XSTR (cuCtxPushCurrent) }, - { _XSTR (cuCtxSynchronize) }, - { _XSTR (cuDeviceGet) }, - { _XSTR (cuDeviceGetAttribute) }, - { _XSTR (cuDeviceGetCount) }, - { _XSTR (cuEventCreate) }, - { _XSTR (cuEventDestroy) }, - { _XSTR (cuEventQuery) }, - { _XSTR (cuEventRecord) }, - { _XSTR (cuInit) }, - { _XSTR (cuLaunchKernel) }, - { _XSTR (cuLinkAddData) }, - { _XSTR (cuLinkComplete) }, - { _XSTR (cuLinkCreate) }, - { _XSTR (cuMemAlloc) }, - { _XSTR (cuMemAllocHost) }, - { _XSTR (cuMemcpy) }, - { _XSTR (cuMemcpyDtoH) }, - { _XSTR (cuMemcpyDtoHAsync) }, - { _XSTR (cuMemcpyHtoD) }, - { _XSTR (cuMemcpyHtoDAsync) }, - { _XSTR (cuMemFree) }, - { _XSTR (cuMemFreeHost) }, - { _XSTR (cuMemGetAddressRange) }, - { _XSTR (cuMemHostGetDevicePointer) }, - { _XSTR (cuMemHostRegister) }, - { _XSTR (cuMemHostUnregister) }, - { _XSTR (cuModuleGetFunction) }, - { _XSTR (cuModuleLoadData) }, - { _XSTR (cuStreamDestroy) }, - { _XSTR (cuStreamQuery) }, - { _XSTR (cuStreamSynchronize) }, - { _XSTR (cuStreamWaitEvent) } -}; - -static int -verify_device_library (void) -{ - int i; - void *dh, *ds; - - dh = dlopen ("libcuda.so", RTLD_LAZY); - if (!dh) - return -1; - - for (i = 0; i < ARRAYSIZE (cuda_symnames); i++) - { - ds = dlsym (dh, cuda_symnames[i].n); - if (!ds) - return -1; - } - - dlclose (dh); - - return 0; -} - static inline struct nvptx_thread * nvptx_thread (void) { @@ -631,16 +562,11 @@ static bool nvptx_init (void) { CUresult r; - int rc; int ndevs; if (instantiated_devices != 0) return true; - rc = verify_device_library (); - if (rc < 0) - return false; - r = cuInit (0); if (r != CUDA_SUCCESS) GOMP_PLUGIN_fatal ("cuInit error: %s", cuda_error (r));