Confirmed that this patch eliminates

[Bug libgomp/64625] ___OFFLOAD_TABLE__ symbol not produced on x86_64 darwin

and thus exposes

[Bug libgomp/64635] New: darwin produces
libgomp-plugin-host_nonshm.1.dylib but tries to load
libgomp-plugin-host_nonshm.so.1

The additional hack (which should be fixed with configure/Makefile.
changes to detect SHLIBEXT)...

@@ -1055,7 +1054,7 @@ static void
 gomp_target_init (void)
 {
   const char *prefix ="libgomp-plugin-";
-  const char *suffix = ".so.1";
+  const char *suffix = ".1.dylib";
   const char *cur, *next;
   char *plugin_name;

to target.c in libgomp eliminates the second bug.

Native configuration is x86_64-apple-darwin14.1.0

=== libgomp tests ===

Schedule of variations:
    unix/-m32
    unix/-m64

Running target unix/-m32
Using /sw/share/dejagnu/baseboards/unix.exp as board description file
for target.
Using /sw/share/dejagnu/config/unix.exp as generic interface file for target.
Using 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/config/default.exp
as tool-and-target-specific interface file.
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.c/c.exp
...
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.c++/c++.exp
...
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.fortran/fortran.exp
...
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.graphite/graphite.exp
...
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.oacc-c/c.exp
...
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.oacc-c++/c++.exp
...
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.oacc-fortran/fortran.exp
...

=== libgomp Summary for unix/-m32 ===

# of expected passes 5715
# of unsupported tests 281
Running target unix/-m64
Using /sw/share/dejagnu/baseboards/unix.exp as board description file
for target.
Using /sw/share/dejagnu/config/unix.exp as generic interface file for target.
Using 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/config/default.exp
as tool-and-target-specific interface file.
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.c/c.exp
...
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.c++/c++.exp
...
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.fortran/fortran.exp
...
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.graphite/graphite.exp
...
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.oacc-c/c.exp
...
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.oacc-c++/c++.exp
...
Running 
/sw/src/fink.build/gcc50-5.0.0-1000/gcc-5-20150116/libgomp/testsuite/libgomp.oacc-fortran/fortran.exp
...

=== libgomp Summary for unix/-m64 ===

# of expected passes 5715
# of unsupported tests 281

=== libgomp Summary ===

# of expected passes 11430
# of unsupported tests 562


On Fri, Jan 16, 2015 at 3:34 PM, Thomas Schwinge
<tho...@codesourcery.com> wrote:
> Hi!
>
> On Thu, 15 Jan 2015 21:20:07 +0100, I wrote:
>> In r219682, I have committed to trunk our current set of OpenACC changes,
>
> Here is a patch to remove the __OFFLOAD_SYMBOL__ variable/formal
> parameter, as discussed in <https://gcc.gnu.org/PR64625>.
>
> But -- I now wonder whether that's actually the issue that has been
> reported in the PR; doesn't that more look like a problem with the
> __OFFLOAD_TABLE__ symbol defined in libgcc/offloadstuff.c, and used in
> the mkoffload tools (such as gcc/config/i386/intelmic-mkoffload.c)?  Can
> anyone guess what's going on?
>
> Anyway, as discussed in <https://gcc.gnu.org/PR64625>, I'd like to commit
> this patch either way, OK?
>
> commit 4409d0129118479c1cd1adbcfa96316ac4e734b0
> Author: Thomas Schwinge <tho...@codesourcery.com>
> Date:   Fri Jan 16 20:12:12 2015 +0100
>
>     [PR libgomp/64625] Remove __OFFLOAD_TABLE__ variable/formal parameter.
>
>         gcc/
>         * omp-low.c (offload_symbol_decl): Remove variable.
>         (get_offload_symbol_decl): Remove function.
>         (expand_omp_target): For BUILT_IN_GOMP_TARGET,
>         BUILT_IN_GOMP_TARGET_DATA, BUILT_IN_GOMP_TARGET_UPDATE pass NULL
>         instead of &__OFFLOAD_TABLE__, for BUILT_IN_GOACC_DATA_START,
>         BUILT_IN_GOACC_ENTER_EXIT_DATA, BUILT_IN_GOACC_PARALLEL,
>         BUILT_IN_GOACC_UPDATE don't pass it at all.
>         libgomp/
>         * libgomp_g.h (GOACC_data_start, GOACC_enter_exit_data)
>         (GOACC_parallel, GOACC_update): Remove const_void *offload_table
>         formal parameter.  Update all users.
>         * target.c (GOMP_target, GOMP_target_data, GOMP_target_update):
>         Document unused formal parameter.
> ---
>  gcc/omp-low.c           | 45 ++++++++++++++++++---------------------------
>  libgomp/libgomp_g.h     | 10 +++++-----
>  libgomp/oacc-parallel.c |  8 ++++----
>  libgomp/target.c        | 11 +++++------
>  4 files changed, 32 insertions(+), 42 deletions(-)
>
> diff --git gcc/omp-low.c gcc/omp-low.c
> index b7bf338..1589310 100644
> --- gcc/omp-low.c
> +++ gcc/omp-low.c
> @@ -340,30 +340,6 @@ oacc_max_threads (omp_context *ctx)
>  /* Holds offload tables with decls.  */
>  vec<tree, va_gc> *offload_funcs, *offload_vars;
>
> -/* Holds a decl for __OFFLOAD_TABLE__.  */
> -static GTY(()) tree offload_symbol_decl;
> -
> -/* Get the __OFFLOAD_TABLE__ symbol.  */
> -static tree
> -get_offload_symbol_decl (void)
> -{
> -  if (!offload_symbol_decl)
> -    {
> -      tree decl = build_decl (UNKNOWN_LOCATION, VAR_DECL,
> -                             get_identifier ("__OFFLOAD_TABLE__"),
> -                             ptr_type_node);
> -      TREE_ADDRESSABLE (decl) = 1;
> -      TREE_PUBLIC (decl) = 1;
> -      DECL_EXTERNAL (decl) = 1;
> -      DECL_WEAK (decl) = 1;
> -      DECL_ATTRIBUTES (decl)
> -       = tree_cons (get_identifier ("weak"),
> -                    NULL_TREE, DECL_ATTRIBUTES (decl));
> -      offload_symbol_decl = decl;
> -    }
> -  return offload_symbol_decl;
> -}
> -
>  /* Convenience function for calling scan_omp_1_op on tree operands.  */
>
>  static inline tree
> @@ -9119,16 +9095,31 @@ expand_omp_target (struct omp_region *region)
>      }
>
>    gimple g;
> -  tree offload_table = get_offload_symbol_decl ();
>    vec<tree> *args;
>    /* The maximum number used by any start_ix, without varargs.  */
> -  unsigned int argcnt = 12;
> +  unsigned int argcnt = 11;
>
>    vec_alloc (args, argcnt);
>    args->quick_push (device);
>    if (offloaded)
>      args->quick_push (build_fold_addr_expr (child_fn));
> -  args->quick_push (build_fold_addr_expr (offload_table));
> +  switch (start_ix)
> +    {
> +    case BUILT_IN_GOMP_TARGET:
> +    case BUILT_IN_GOMP_TARGET_DATA:
> +    case BUILT_IN_GOMP_TARGET_UPDATE:
> +      /* This const void * is part of the current ABI, but we're not actually
> +        using it.  */
> +      args->quick_push (build_zero_cst (ptr_type_node));
> +      break;
> +    case BUILT_IN_GOACC_DATA_START:
> +    case BUILT_IN_GOACC_ENTER_EXIT_DATA:
> +    case BUILT_IN_GOACC_PARALLEL:
> +    case BUILT_IN_GOACC_UPDATE:
> +      break;
> +    default:
> +      gcc_unreachable ();
> +    }
>    args->quick_push (t1);
>    args->quick_push (t2);
>    args->quick_push (t3);
> diff --git libgomp/libgomp_g.h libgomp/libgomp_g.h
> index c1e4e63..5e88d45 100644
> --- libgomp/libgomp_g.h
> +++ libgomp/libgomp_g.h
> @@ -217,15 +217,15 @@ extern void GOMP_teams (unsigned int, unsigned int);
>
>  /* oacc-parallel.c */
>
> -extern void GOACC_data_start (int, const void *,
> -                             size_t, void **, size_t *, unsigned short *);
> +extern void GOACC_data_start (int, size_t, void **, size_t *,
> +                             unsigned short *);
>  extern void GOACC_data_end (void);
> -extern void GOACC_enter_exit_data (int, const void *, size_t, void **,
> +extern void GOACC_enter_exit_data (int, size_t, void **,
>                                    size_t *, unsigned short *, int, int, ...);
> -extern void GOACC_parallel (int, void (*) (void *), const void *, size_t,
> +extern void GOACC_parallel (int, void (*) (void *), size_t,
>                             void **, size_t *, unsigned short *, int, int, 
> int,
>                             int, int, ...);
> -extern void GOACC_update (int, const void *, size_t, void **, size_t *,
> +extern void GOACC_update (int, size_t, void **, size_t *,
>                           unsigned short *, int, int, ...);
>  extern void GOACC_wait (int, int, ...);
>  extern int GOACC_get_num_threads (void);
> diff --git libgomp/oacc-parallel.c libgomp/oacc-parallel.c
> index b5e8060..a300742 100644
> --- libgomp/oacc-parallel.c
> +++ libgomp/oacc-parallel.c
> @@ -75,7 +75,7 @@ select_acc_device (int device_type)
>  static void goacc_wait (int async, int num_waits, va_list ap);
>
>  void
> -GOACC_parallel (int device, void (*fn) (void *), const void *offload_table,
> +GOACC_parallel (int device, void (*fn) (void *),
>                 size_t mapnum, void **hostaddrs, size_t *sizes,
>                 unsigned short *kinds,
>                 int num_gangs, int num_workers, int vector_length,
> @@ -172,7 +172,7 @@ GOACC_parallel (int device, void (*fn) (void *), const 
> void *offload_table,
>  }
>
>  void
> -GOACC_data_start (int device, const void *offload_table, size_t mapnum,
> +GOACC_data_start (int device, size_t mapnum,
>                   void **hostaddrs, size_t *sizes, unsigned short *kinds)
>  {
>    bool host_fallback = device == GOMP_DEVICE_HOST_FALLBACK;
> @@ -218,7 +218,7 @@ GOACC_data_end (void)
>  }
>
>  void
> -GOACC_enter_exit_data (int device, const void *offload_table, size_t mapnum,
> +GOACC_enter_exit_data (int device, size_t mapnum,
>                        void **hostaddrs, size_t *sizes, unsigned short *kinds,
>                        int async, int num_waits, ...)
>  {
> @@ -408,7 +408,7 @@ goacc_wait (int async, int num_waits, va_list ap)
>  }
>
>  void
> -GOACC_update (int device, const void *offload_table, size_t mapnum,
> +GOACC_update (int device, size_t mapnum,
>               void **hostaddrs, size_t *sizes, unsigned short *kinds,
>               int async, int num_waits, ...)
>  {
> diff --git libgomp/target.c libgomp/target.c
> index 72d64fc..ebff55e 100644
> --- libgomp/target.c
> +++ libgomp/target.c
> @@ -738,15 +738,14 @@ gomp_fini_device (struct gomp_device_descr *devicep)
>     is GOMP_DEVICE_ICV, it means use device-var ICV.  If it is
>     GOMP_DEVICE_HOST_FALLBACK (or any value
>     larger than last available hw device), use host fallback.
> -   FN is address of host code, OFFLOAD_TABLE contains value of the
> -   __OFFLOAD_TABLE__ symbol in the shared library or binary that invokes
> -   GOMP_target.  HOSTADDRS, SIZES and KINDS are arrays
> +   FN is address of host code, UNUSED is part of the current ABI, but
> +   we're not actually using it.  HOSTADDRS, SIZES and KINDS are arrays
>     with MAPNUM entries, with addresses of the host objects,
>     sizes of the host objects (resp. for pointer kind pointer bias
>     and assumed sizeof (void *) size) and kinds.  */
>
>  void
> -GOMP_target (int device, void (*fn) (void *), const void *offload_table,
> +GOMP_target (int device, void (*fn) (void *), const void *unused,
>              size_t mapnum, void **hostaddrs, size_t *sizes,
>              unsigned char *kinds)
>  {
> @@ -817,7 +816,7 @@ GOMP_target (int device, void (*fn) (void *), const void 
> *offload_table,
>  }
>
>  void
> -GOMP_target_data (int device, const void *offload_table, size_t mapnum,
> +GOMP_target_data (int device, const void *unused, size_t mapnum,
>                   void **hostaddrs, size_t *sizes, unsigned char *kinds)
>  {
>    struct gomp_device_descr *devicep = resolve_device (device);
> @@ -873,7 +872,7 @@ GOMP_target_end_data (void)
>  }
>
>  void
> -GOMP_target_update (int device, const void *offload_table, size_t mapnum,
> +GOMP_target_update (int device, const void *unused, size_t mapnum,
>                     void **hostaddrs, size_t *sizes, unsigned char *kinds)
>  {
>    struct gomp_device_descr *devicep = resolve_device (device);
>
>
> Grüße,
>  Thomas

Reply via email to