Hi!

On Tue, 19 Apr 2016 10:24:36 +0200, Martin Liška <mli...@suse.cz> wrote:
> After brief discussions about packaging of an HSA runtime, we've decided to 
> load
> an HSA runtime via dlopen mechanism. Following patch introduces necessary 
> header
> files and all functions within the HSA plug-in are loaded via dlsym.
> 
> Patch survives HSA regression tests, installed to the HSA branch as r235189.

(And later pushed into trunk.)

> --- a/libgomp/plugin/plugin-hsa.c
> +++ b/libgomp/plugin/plugin-hsa.c

> +#define DLSYM_FN(function) \
> +  hsa_fns.function##_fn = dlsym (handle, #function); \
> +  if (hsa_fns.function##_fn == NULL) \
> +    return false;
> +
> +static bool
> +init_hsa_runtime_functions (void)
> +{
> +  void *handle = dlopen (hsa_runtime_lib, RTLD_LAZY);
> +  if (handle == NULL)
> +    return false;
> +
> +  DLSYM_FN (hsa_status_string)
> +[...]
> +  DLSYM_FN (hsa_ext_program_finalize)
> +  return true;
> +}

I ran into a case where the libgomp hsa plugin wouldn't load.  The
following patch helped me to quickly diagnose and then fix that.  OK for
trunk?

commit 54099202eb88464530dd3a55709c9afb85766ee0
Author: Thomas Schwinge <tho...@codesourcery.com>
Date:   Wed Apr 5 09:58:02 2017 +0200

    libgomp hsa plugin: debug output for HSA runtime library loading failure
    
            libgomp/
            * plugin/plugin-hsa.c (DLSYM_FN, init_hsa_runtime_functions):
            Debug output for failure.
---
 libgomp/plugin/plugin-hsa.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git libgomp/plugin/plugin-hsa.c libgomp/plugin/plugin-hsa.c
index 9cc243d..90ca247 100644
--- libgomp/plugin/plugin-hsa.c
+++ libgomp/plugin/plugin-hsa.c
@@ -491,14 +491,14 @@ static struct hsa_context_info hsa_context;
 #define DLSYM_FN(function) \
   hsa_fns.function##_fn = dlsym (handle, #function); \
   if (hsa_fns.function##_fn == NULL) \
-    return false;
+    goto dl_fail;
 
 static bool
 init_hsa_runtime_functions (void)
 {
   void *handle = dlopen (hsa_runtime_lib, RTLD_LAZY);
   if (handle == NULL)
-    return false;
+    goto dl_fail;
 
   DLSYM_FN (hsa_status_string)
   DLSYM_FN (hsa_agent_get_info)
@@ -530,6 +530,10 @@ init_hsa_runtime_functions (void)
   DLSYM_FN (hsa_ext_program_destroy)
   DLSYM_FN (hsa_ext_program_finalize)
   return true;
+
+ dl_fail:
+  HSA_DEBUG ("while loading %s: %s\n", hsa_runtime_lib, dlerror ());
+  return false;
 }
 
 /* Find kernel for an AGENT by name provided in KERNEL_NAME.  */


Grüße
 Thomas

Reply via email to