From: nathan Date: Thu, 19 Nov 2015 22:05:03 +0000 (+0000) Subject: gcc/ X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c40a41439a0af1024d0f38a2ae30a48999aa0907;p=thirdparty%2Fgcc.git gcc/ * config/nvptx/nvptx.h (SUPPORTS_WEAK): Define. * config/nvptx/nvptx.c (nvptx_write_function_decl): Support DECL_WEAK. (nvptx_declare_objec_name): Likewise. gcc/testsuite/ * lib/target-supports.exp (check_weak_available): Add nvptx-*-*. * gcc.dg/attr-weakref-1.c: Skip for nvptx-*-* * gcc.dg/special/weak-2.c: Likewise. * gcc.dg/weak/weak-12.c: Likewise. * gcc.dg/weak/weak-15.c: Likewise. * gcc.dg/weak/weak-16.c: Likewise. * gcc.dg/weak/weak-1.c: Likewise. * gcc.dg/weak/weak-2.c: Likewise. * gcc.dg/weak/weak-4.c: Likewise. * gcc.dg/torture/pr53922.c: Likewise. * gcc.dg/torture/pr60092.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230628 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cf75f440b466..5fd82d2353f8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-11-19 Nathan Sidwell + + * config/nvptx/nvptx.h (SUPPORTS_WEAK): Define. + * config/nvptx/nvptx.c (nvptx_write_function_decl): Support + DECL_WEAK. + (nvptx_declare_objec_name): Likewise. + 2015-11-19 Aditya Kumar * graphite-isl-ast-to-gimple.c (get_true_edge_from_guard_bb): Move... diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c index 62c6faa9d034..044f54537847 100644 --- a/gcc/config/nvptx/nvptx.c +++ b/gcc/config/nvptx/nvptx.c @@ -379,7 +379,7 @@ nvptx_write_function_decl (std::stringstream &s, const char *name, const_tree de if (DECL_EXTERNAL (decl)) s << ".extern "; else if (TREE_PUBLIC (decl)) - s << ".visible "; + s << (DECL_WEAK (decl) ? ".weak " : ".visible "); if (kernel) s << ".entry "; @@ -1780,8 +1780,9 @@ nvptx_declare_object_name (FILE *file, const char *name, const_tree decl) size = tree_to_uhwi (DECL_SIZE_UNIT (decl)); const char *section = nvptx_section_for_decl (decl); fprintf (file, "\t%s%s .align %d .u%d ", - TREE_PUBLIC (decl) ? " .visible" : "", section, - DECL_ALIGN (decl) / BITS_PER_UNIT, + !TREE_PUBLIC (decl) ? "" + : DECL_WEAK (decl) ? ".weak" : ".visible", + section, DECL_ALIGN (decl) / BITS_PER_UNIT, decl_chunk_size * BITS_PER_UNIT); assemble_name (file, name); if (size > 0) diff --git a/gcc/config/nvptx/nvptx.h b/gcc/config/nvptx/nvptx.h index 018b844d8e0d..1a497be2b3fd 100644 --- a/gcc/config/nvptx/nvptx.h +++ b/gcc/config/nvptx/nvptx.h @@ -349,6 +349,7 @@ struct GTY(()) machine_function #define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \ ((VALUE) = GET_MODE_BITSIZE ((MODE)), 2) +#define SUPPORTS_WEAK 1 #define NO_DOT_IN_LABEL #define ASM_COMMENT_START "//" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 16a616794513..ebfe4f9fd709 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,17 @@ +2015-11-19 Nathan Sidwell + + * lib/target-supports.exp (check_weak_available): Add nvptx-*-*. + * gcc.dg/attr-weakref-1.c: Skip for nvptx-*-* + * gcc.dg/special/weak-2.c: Likewise. + * gcc.dg/weak/weak-12.c: Likewise. + * gcc.dg/weak/weak-15.c: Likewise. + * gcc.dg/weak/weak-16.c: Likewise. + * gcc.dg/weak/weak-1.c: Likewise. + * gcc.dg/weak/weak-2.c: Likewise. + * gcc.dg/weak/weak-4.c: Likewise. + * gcc.dg/torture/pr53922.c: Likewise. + * gcc.dg/torture/pr60092.c: Likewise. + 2015-11-19 Marek Polacek PR c/68412 diff --git a/gcc/testsuite/gcc.dg/attr-weakref-1.c b/gcc/testsuite/gcc.dg/attr-weakref-1.c index 9ed1c51b3abd..d327b40984fb 100644 --- a/gcc/testsuite/gcc.dg/attr-weakref-1.c +++ b/gcc/testsuite/gcc.dg/attr-weakref-1.c @@ -1,10 +1,12 @@ // { dg-do run } // { dg-require-weak "" } // On darwin, we use attr-weakref-1-darwin.c. + // This test requires support for undefined weak symbols. This support -// is not available on hppa*-*-hpux*. The test is skipped rather than +// is not available on the following targets. The test is skipped rather than // xfailed to suppress the warning that would otherwise arise. -// { dg-skip-if "" { "hppa*-*-hpux*" "*-*-aix*" } "*" { "" } } +// { dg-skip-if "" { "hppa*-*-hpux*" "*-*-aix*" "nvptx-*-*" } "*" { "" } } + // For kernel modules and static RTPs, the loader treats undefined weak // symbols in the same way as undefined strong symbols. The test // therefore fails to load, so skip it. diff --git a/gcc/testsuite/gcc.dg/special/weak-2.c b/gcc/testsuite/gcc.dg/special/weak-2.c index b93a8ef9a529..91a92e6ccc5d 100644 --- a/gcc/testsuite/gcc.dg/special/weak-2.c +++ b/gcc/testsuite/gcc.dg/special/weak-2.c @@ -2,6 +2,10 @@ /* { dg-require-weak "" } */ /* { dg-additional-sources "weak-2a.c weak-2b.c" } */ +/* NVPTX's implementation of weak is broken when a strong symbol is in + a later object file than the weak definition. */ +/* { dg-skip-if "" { "nvptx-*-*" } "*" { "" } } */ + #include extern int foo(void); diff --git a/gcc/testsuite/gcc.dg/torture/pr53922.c b/gcc/testsuite/gcc.dg/torture/pr53922.c index 3974dc660c36..fac054d9ce3f 100644 --- a/gcc/testsuite/gcc.dg/torture/pr53922.c +++ b/gcc/testsuite/gcc.dg/torture/pr53922.c @@ -3,6 +3,7 @@ /* { dg-skip-if "No undefined" { *-*-mingw* } { "*" } { "" } } */ /* { dg-skip-if "No undefined weak" { *-*-aix* } { "*" } { "" } } */ /* { dg-skip-if "No undefined weak" { hppa*-*-hpux* && { ! lp64 } } { "*" } { "" } } */ +/* { dg-skip-if "No undefined weak" { nvptx-*-* } { "*" } { "" } } */ /* { dg-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } */ /* { dg-additional-options "-Wl,-flat_namespace" { target *-*-darwin[89]* } } */ diff --git a/gcc/testsuite/gcc.dg/torture/pr60092.c b/gcc/testsuite/gcc.dg/torture/pr60092.c index 337ff52955a6..d66e3f2444e8 100644 --- a/gcc/testsuite/gcc.dg/torture/pr60092.c +++ b/gcc/testsuite/gcc.dg/torture/pr60092.c @@ -1,6 +1,7 @@ /* { dg-do run } */ /* { dg-require-weak "" } */ /* { dg-skip-if "No undefined weak" { hppa*-*-hpux* && { ! lp64 } } } */ +/* { dg-skip-if "No undefined weak" { nvptx-*-* } { "*" } { "" } } */ /* { dg-additional-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } */ /* { dg-additional-options "-Wl,-flat_namespace" { target *-*-darwin[89]* } } */ /* { dg-xfail-run-if "posix_memalign modifies first arg on error" { *-*-solaris2.11* } { "-O0" } } */ diff --git a/gcc/testsuite/gcc.dg/weak/weak-1.c b/gcc/testsuite/gcc.dg/weak/weak-1.c index 14e9de7acba1..dc34079b6501 100644 --- a/gcc/testsuite/gcc.dg/weak/weak-1.c +++ b/gcc/testsuite/gcc.dg/weak/weak-1.c @@ -2,6 +2,8 @@ /* { dg-require-weak "" } */ /* { dg-options "-fno-common" } */ /* { dg-skip-if "" { *-*-mingw* } { "*" } { "" } } */ +/* NVPTX's definition of weak looks different to normal. */ +/* { dg-skip-if "" { nvptx-*-* } { "*" } { "" } } */ /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?a" } } */ /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?b" } } */ diff --git a/gcc/testsuite/gcc.dg/weak/weak-12.c b/gcc/testsuite/gcc.dg/weak/weak-12.c index 72cc1445e4b7..72f8991cc982 100644 --- a/gcc/testsuite/gcc.dg/weak/weak-12.c +++ b/gcc/testsuite/gcc.dg/weak/weak-12.c @@ -2,6 +2,8 @@ /* { dg-do compile } */ /* { dg-require-weak "" } */ /* { dg-options "" } */ +/* NVPTX's weak is applied to the definition, not declaration. */ +/* { dg-skip-if "" { nvptx-*-* } { "*" } { "" } } */ /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?foo" } } */ diff --git a/gcc/testsuite/gcc.dg/weak/weak-15.c b/gcc/testsuite/gcc.dg/weak/weak-15.c index 34b089bda5b3..d656d2185801 100644 --- a/gcc/testsuite/gcc.dg/weak/weak-15.c +++ b/gcc/testsuite/gcc.dg/weak/weak-15.c @@ -2,6 +2,8 @@ /* { dg-require-weak "" } */ /* { dg-options "-fno-common" } */ /* { dg-skip-if "" { x86_64-*-mingw* } { "*" } { "" } } */ +/* NVPTX's weak is applied to the definition, not declaration. */ +/* { dg-skip-if "" { nvptx-*-* } { "*" } { "" } } */ /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?a" } } */ /* { dg-final { scan-assembler-not "weak\[^ \t\]*\[ \t\]_?b" } } */ diff --git a/gcc/testsuite/gcc.dg/weak/weak-16.c b/gcc/testsuite/gcc.dg/weak/weak-16.c index d557a6e45fb1..b1a08eadb09f 100644 --- a/gcc/testsuite/gcc.dg/weak/weak-16.c +++ b/gcc/testsuite/gcc.dg/weak/weak-16.c @@ -5,6 +5,8 @@ /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?kallsyms_token_index" } } */ /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?kallsyms_token_table" } } */ /* { dg-skip-if "" { x86_64-*-mingw* } { "*" } { "" } } */ +/* NVPTX's weak is applied to the definition, not declaration. */ +/* { dg-skip-if "" { nvptx-*-* } { "*" } { "" } } */ extern int kallsyms_token_index[] __attribute__((weak)); extern int kallsyms_token_table[] __attribute__((weak)); diff --git a/gcc/testsuite/gcc.dg/weak/weak-2.c b/gcc/testsuite/gcc.dg/weak/weak-2.c index b328c3c088be..cad6e7b166d4 100644 --- a/gcc/testsuite/gcc.dg/weak/weak-2.c +++ b/gcc/testsuite/gcc.dg/weak/weak-2.c @@ -2,6 +2,8 @@ /* { dg-require-weak "" } */ /* { dg-options "-fno-common" } */ /* { dg-skip-if "" { x86_64-*-mingw* } { "*" } { "" } } */ +/* NVPTX's definition of weak looks different to normal. */ +/* { dg-skip-if "" { nvptx-*-* } { "*" } { "" } } */ /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1a" } } */ /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1b" } } */ diff --git a/gcc/testsuite/gcc.dg/weak/weak-4.c b/gcc/testsuite/gcc.dg/weak/weak-4.c index a84f5808312c..d2d0e68b403c 100644 --- a/gcc/testsuite/gcc.dg/weak/weak-4.c +++ b/gcc/testsuite/gcc.dg/weak/weak-4.c @@ -2,6 +2,8 @@ /* { dg-require-weak "" } */ /* { dg-options "-fno-common" } */ /* { dg-skip-if "" { x86_64-*-mingw* } { "*" } { "" } } */ +/* NVPTX's definition of weak looks different to normal. */ +/* { dg-skip-if "" { nvptx-*-* } { "*" } { "" } } */ /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1a" } } */ /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1b" } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 4f2d815778bf..66fc10019c53 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -292,6 +292,12 @@ proc check_weak_available { } { return 0 } + # nvptx (nearly) supports it + + if { [istarget nvptx-*-*] } { + return 1 + } + # ELF and ECOFF support it. a.out does with gas/gld but may also with # other linkers, so we should try it