+2015-11-19 Nathan Sidwell <nathan@acm.org>
+
+ * 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 <aditya.k7@samsung.com>
* graphite-isl-ast-to-gimple.c (get_true_edge_from_guard_bb): Move...
if (DECL_EXTERNAL (decl))
s << ".extern ";
else if (TREE_PUBLIC (decl))
- s << ".visible ";
+ s << (DECL_WEAK (decl) ? ".weak " : ".visible ");
if (kernel)
s << ".entry ";
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)
#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 "//"
+2015-11-19 Nathan Sidwell <nathan@acm.org>
+
+ * 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 <polacek@redhat.com>
PR c/68412
// { 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.
/* { 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 <stdlib.h>
extern int foo(void);
/* { 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]* } } */
/* { 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" } } */
/* { 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" } } */
/* { 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" } } */
/* { 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" } } */
/* { 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));
/* { 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" } } */
/* { 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" } } */
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