diff options
author | Ilya Verbin <ilya.verbin@intel.com> | 2016-02-25 12:23:52 +0000 |
---|---|---|
committer | Ilya Verbin <iverbin@gcc.gnu.org> | 2016-02-25 12:23:52 +0000 |
commit | e6861a99f8c95aae9e0088c30b574efe03a790d9 (patch) | |
tree | f080211fbe21bc4592195a286afa017b06b0bbba /libgcc/offloadstuff.c | |
parent | cf1fcb76fb5e8064316ef40d3c563c8d8e3fdc36 (diff) |
re PR driver/68463 (Offloading fails when some objects are compiled with LTO and some without)
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.
From-SVN: r233712
Diffstat (limited to 'libgcc/offloadstuff.c')
-rw-r--r-- | libgcc/offloadstuff.c | 14 |
1 files changed, 9 insertions, 5 deletions
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 |