On Mon, Feb 22, 2016 at 16:13:07 +0100, Thomas Schwinge wrote: > (..., and similar for others.) The if-exists spec function only works > for absolute paths (I have not researched, why?), so it won't locate the > files for relative -Bbuild-gcc/[...] prefixes, and linking will fail: > > /tmp/ccGajPD4.crtoffloadtable.o:(.rodata+0x0): undefined reference to > `__offload_func_table' > /tmp/ccGajPD4.crtoffloadtable.o:(.rodata+0x8): undefined reference to > `__offload_funcs_end' > /tmp/ccGajPD4.crtoffloadtable.o:(.rodata+0x10): undefined reference to > `__offload_var_table' > /tmp/ccGajPD4.crtoffloadtable.o:(.rodata+0x18): undefined reference to > `__offload_vars_end' > > If I use the absolute -B$PWD/build-gcc/[...], it works. (But there is no > requirement for -B prefixes to be absolute, as far as I know.) Why not > make it a hard error, though, if these files are missing? Can we use > something like (untested pseudo-patch): > > +#ifdef ENABLE_OFFLOADING > +# define CRTOFFLOADBEGIN "%{fopenacc|fopenmp:%:crtoffloadbegin%O%s}" > +#else > +# define CRTOFFLOADBEGIN "" > +#endif > > @@ -49,14 +49,16 @@ see the files COPYING3 and COPYING.RUNTIME > respectively. If not, see > %{" NO_PIE_SPEC ":crtbegin.o%s}} \ > %{fvtable-verify=none:%s; \ > fvtable-verify=preinit:vtv_start_preinit.o%s; \ > - fvtable-verify=std:vtv_start.o%s}" > + fvtable-verify=std:vtv_start.o%s} \ > + " CRTOFFLOADBEGIN ")}"
Fixed. Actually ENABLE_OFFLOADING is always defined (to 0 or to 1). > To the casual reader, skipping the first offload_files looks like a > off-by-one error, so I suggest you add a comment "Skip the dummy item at > the start of the list.", or similar. Done. > Ilya, then please remove > libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c as part of > your patch, unless Tom thinks it should be changed to a -flto test, but > without -fno-use-linker-plugin? Done. Here is a follow up patch. OK for trunk? Bootstrapped and regtested. Unfortunately I'm unable to run bootstrap-lto: libdecnumber/dpd/decimal32.c:53:0: error: type of ‘decDigitsFromDPD’ does not match original declaration [-Werror=lto-type-mismatch] [...] diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h index 2fdb63c..b0bf40a 100644 --- a/gcc/config/gnu-user.h +++ b/gcc/config/gnu-user.h @@ -35,6 +35,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #undef ASM_APP_OFF #define ASM_APP_OFF "#NO_APP\n" +#if ENABLE_OFFLOADING == 1 +#define CRTOFFLOADBEGIN "%{fopenacc|fopenmp:crtoffloadbegin%O%s}" +#define CRTOFFLOADEND "%{fopenacc|fopenmp:crtoffloadend%O%s}" +#else +#define CRTOFFLOADBEGIN "" +#define CRTOFFLOADEND "" +#endif + /* Provide a STARTFILE_SPEC appropriate for GNU userspace. Here we add the GNU userspace magical crtbegin.o file (see crtstuff.c) which provides part of the support for getting C++ file-scope static @@ -50,7 +58,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see %{fvtable-verify=none:%s; \ fvtable-verify=preinit:vtv_start_preinit.o%s; \ fvtable-verify=std:vtv_start.o%s} \ - %{fopenacc|fopenmp:%:if-exists(crtoffloadbegin%O%s)}" + " CRTOFFLOADBEGIN #else #define GNU_USER_TARGET_STARTFILE_SPEC \ "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ @@ -58,7 +66,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see %{fvtable-verify=none:%s; \ fvtable-verify=preinit:vtv_start_preinit.o%s; \ fvtable-verify=std:vtv_start.o%s} \ - %{fopenacc|fopenmp:%:if-exists(crtoffloadbegin%O%s)}" + " CRTOFFLOADBEGIN #endif #undef STARTFILE_SPEC #define STARTFILE_SPEC GNU_USER_TARGET_STARTFILE_SPEC @@ -76,14 +84,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see fvtable-verify=std:vtv_end.o%s} \ %{shared:crtendS.o%s;: %{" PIE_SPEC ":crtendS.o%s} \ %{" NO_PIE_SPEC ":crtend.o%s}} crtn.o%s \ - %{fopenacc|fopenmp:%:if-exists(crtoffloadend%O%s)}" + " CRTOFFLOADEND #else #define GNU_USER_TARGET_ENDFILE_SPEC \ "%{fvtable-verify=none:%s; \ fvtable-verify=preinit:vtv_end_preinit.o%s; \ fvtable-verify=std:vtv_end.o%s} \ %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s \ - %{fopenacc|fopenmp:%:if-exists(crtoffloadend%O%s)}" + " CRTOFFLOADEND #endif #undef ENDFILE_SPEC #define ENDFILE_SPEC GNU_USER_TARGET_ENDFILE_SPEC diff --git a/libgcc/offloadstuff.c b/libgcc/offloadstuff.c index a4ea3ac..4ab6397 100644 --- a/libgcc/offloadstuff.c +++ b/libgcc/offloadstuff.c @@ -40,7 +40,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "tm.h" #include "libgcc_tm.h" -#if defined(HAVE_GAS_HIDDEN) && defined(ENABLE_OFFLOADING) +#if defined(HAVE_GAS_HIDDEN) && ENABLE_OFFLOADING == 1 #define OFFLOAD_FUNC_TABLE_SECTION_NAME ".gnu.offload_funcs" #define OFFLOAD_VAR_TABLE_SECTION_NAME ".gnu.offload_vars" diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c index 35cb63a..51afc52 100644 --- a/lto-plugin/lto-plugin.c +++ b/lto-plugin/lto-plugin.c @@ -696,6 +696,7 @@ all_symbols_read_handler (void) check (f, LDPL_FATAL, "could not open file with offload objects"); fprintf (f, "%u\n", num_offload_files); + /* Skip the dummy item at the start of the list. */ ofld = offload_files->next; while (ofld) { diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c deleted file mode 100644 index eea8c7e..0000000 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c +++ /dev/null @@ -1,19 +0,0 @@ -/* { dg-do run { target { openacc_nvidia_accel_selected && lto } } } */ -/* { dg-additional-options "-flto -fno-use-linker-plugin" } */ - -/* Worker and vector size checks. Picked an outrageously large - value. */ - -int main () -{ -#pragma acc parallel num_workers (2<<20) /* { dg-error "using num_workers" } */ - { - } - -#pragma acc parallel vector_length (2<<20) /* { dg-error "using vector_length" } */ - { - } - - return 0; -} - -- Ilya