diff options
author | iverbin <iverbin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-02-25 12:23:52 +0000 |
---|---|---|
committer | iverbin <iverbin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-02-25 12:23:52 +0000 |
commit | e59c8b12d1b97d903ca288e6f0f5a5d9d152786a (patch) | |
tree | f080211fbe21bc4592195a286afa017b06b0bbba /libgcc | |
parent | da041ce6e9d7e780f1c94372c4591aaed03cf478 (diff) |
gcc/
PR driver/68463
* config/gnu-user.h (CRTOFFLOADBEGIN): Define. Add crtoffloadbegin.o if
offloading is enabled and -fopenacc or -fopenmp is specified.
(CRTOFFLOADEND): Likewise.
(GNU_USER_TARGET_STARTFILE_SPEC): Add CRTOFFLOADBEGIN.
(GNU_USER_TARGET_ENDFILE_SPEC): Add CRTOFFLOADEND.
* lto-wrapper.c (offloadbegin, offloadend): Remove static vars.
(offload_objects_file_name): New static var.
(tool_cleanup): Remove offload_objects_file_name file.
(find_offloadbeginend): Replace with ...
(find_crtoffloadtable): ... this.
(run_gcc): Remove offload_argc and offload_argv.
Get offload_objects_file_name from -foffload-objects=... option.
Read names of object files with offload from this file, pass them to
compile_images_for_offload_targets. Don't call find_offloadbeginend and
don't pass offloadbegin and offloadend to the linker. Don't pass
offload non-LTO files to the linker, because now they're not claimed.
libgcc/
PR driver/68463
* Makefile.in (crtoffloadtable$(objext)): New rule.
* configure.ac (extra_parts): Add crtoffloadtable$(objext) if
enable_offload_targets is not empty.
* configure: Regenerate.
* offloadstuff.c: Move __OFFLOAD_TABLE__ from crtoffloadend to
crtoffloadtable.
libgomp/
PR driver/68463
* testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c: Remove.
lto-plugin/
PR driver/68463
* lto-plugin.c (struct plugin_offload_file): New.
(offload_files): Change type.
(offload_files_last, offload_files_last_obj): New.
(offload_files_last_lto): New.
(free_2): Adjust accordingly.
(all_symbols_read_handler): Don't add offload files to lto_arg_ptr.
Don't call free_1 for offload_files. Write names of object files with
offloading to the temporary file. Add new option to lto_arg_ptr.
(claim_file_handler): Don't claim file if it contains offload sections
without LTO sections. If it contains offload sections, add to the list.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@233712 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/ChangeLog | 10 | ||||
-rw-r--r-- | libgcc/Makefile.in | 6 | ||||
-rw-r--r-- | libgcc/configure | 2 | ||||
-rw-r--r-- | libgcc/configure.ac | 2 | ||||
-rw-r--r-- | libgcc/offloadstuff.c | 14 |
5 files changed, 26 insertions, 8 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 4020e235bf1..36d10b0450f 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,13 @@ +2016-02-25 Ilya Verbin <ilya.verbin@intel.com> + + PR driver/68463 + * Makefile.in (crtoffloadtable$(objext)): New rule. + * configure.ac (extra_parts): Add crtoffloadtable$(objext) if + enable_offload_targets is not empty. + * configure: Regenerate. + * offloadstuff.c: Move __OFFLOAD_TABLE__ from crtoffloadend to + crtoffloadtable. + 2016-02-17 Max Filippov <jcmvbkbc@gmail.com> * config/xtensa/ieee754-df.S (__muldf3_aux, __divdf3_aux): Add diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in index 570b1a7da07..f09b39b0e85 100644 --- a/libgcc/Makefile.in +++ b/libgcc/Makefile.in @@ -995,12 +995,16 @@ crtbeginT$(objext): $(srcdir)/crtstuff.c $(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_BEGIN -DCRTSTUFFT_O # crtoffloadbegin and crtoffloadend contain symbols, that mark the begin and -# the end of tables with addresses, required for offloading. +# the end of tables with addresses, required for offloading. crtoffloadtable +# contains the array with addresses of those symbols. crtoffloadbegin$(objext): $(srcdir)/offloadstuff.c $(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_BEGIN crtoffloadend$(objext): $(srcdir)/offloadstuff.c $(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_END + +crtoffloadtable$(objext): $(srcdir)/offloadstuff.c + $(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_TABLE endif ifeq ($(enable_vtable_verify),yes) diff --git a/libgcc/configure b/libgcc/configure index de8c13c4ba3..f3f360512c4 100644 --- a/libgcc/configure +++ b/libgcc/configure @@ -4835,7 +4835,7 @@ fi if test x"$enable_offload_targets" != x; then - extra_parts="${extra_parts} crtoffloadbegin.o crtoffloadend.o" + extra_parts="${extra_parts} crtoffloadbegin.o crtoffloadend.o crtoffloadtable.o" fi # Check if Solaris/x86 linker supports ZERO terminator unwind entries. diff --git a/libgcc/configure.ac b/libgcc/configure.ac index 860a5f58100..897259e62bc 100644 --- a/libgcc/configure.ac +++ b/libgcc/configure.ac @@ -418,7 +418,7 @@ AC_SUBST(accel_dir_suffix) AC_SUBST(real_host_noncanonical) if test x"$enable_offload_targets" != x; then - extra_parts="${extra_parts} crtoffloadbegin.o crtoffloadend.o" + extra_parts="${extra_parts} crtoffloadbegin.o crtoffloadend.o crtoffloadtable.o" fi # Check if Solaris/x86 linker supports ZERO terminator unwind entries. diff --git a/libgcc/offloadstuff.c b/libgcc/offloadstuff.c index 45e89cf9df1..4ab639721cb 100644 --- a/libgcc/offloadstuff.c +++ b/libgcc/offloadstuff.c @@ -40,23 +40,22 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "tm.h" #include "libgcc_tm.h" +#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" #ifdef CRT_BEGIN -#if defined(HAVE_GAS_HIDDEN) && defined(ENABLE_OFFLOADING) const void *const __offload_func_table[0] __attribute__ ((__used__, visibility ("hidden"), section (OFFLOAD_FUNC_TABLE_SECTION_NAME))) = { }; const void *const __offload_var_table[0] __attribute__ ((__used__, visibility ("hidden"), section (OFFLOAD_VAR_TABLE_SECTION_NAME))) = { }; -#endif #elif defined CRT_END -#if defined(HAVE_GAS_HIDDEN) && defined(ENABLE_OFFLOADING) const void *const __offload_funcs_end[0] __attribute__ ((__used__, visibility ("hidden"), section (OFFLOAD_FUNC_TABLE_SECTION_NAME))) = { }; @@ -64,8 +63,12 @@ const void *const __offload_vars_end[0] __attribute__ ((__used__, visibility ("hidden"), section (OFFLOAD_VAR_TABLE_SECTION_NAME))) = { }; +#elif defined CRT_TABLE + extern const void *const __offload_func_table[]; extern const void *const __offload_var_table[]; +extern const void *const __offload_funcs_end[]; +extern const void *const __offload_vars_end[]; const void *const __OFFLOAD_TABLE__[] __attribute__ ((__visibility__ ("hidden"))) = @@ -73,8 +76,9 @@ const void *const __OFFLOAD_TABLE__[] &__offload_func_table, &__offload_funcs_end, &__offload_var_table, &__offload_vars_end }; + +#else /* ! CRT_BEGIN && ! CRT_END && ! CRT_TABLE */ +#error "One of CRT_BEGIN, CRT_END or CRT_TABLE must be defined." #endif -#else /* ! CRT_BEGIN && ! CRT_END */ -#error "One of CRT_BEGIN or CRT_END must be defined." #endif |