aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2018-12-13 18:04:05 +0000
committerTom de Vries <vries@gcc.gnu.org>2018-12-13 18:04:05 +0000
commitfe0827eed09d14064efe070dc0f4db71bc66bbd4 (patch)
tree1d57d9badd25c6a5f1a76878106124d6add57a25
parentb3147e59284d2a916eac1972f44bd9aff72178a4 (diff)
downloadgcc-fe0827eed09d14064efe070dc0f4db71bc66bbd4.zip
gcc-fe0827eed09d14064efe070dc0f4db71bc66bbd4.tar.gz
gcc-fe0827eed09d14064efe070dc0f4db71bc66bbd4.tar.bz2
[libgomp, nvptx] Fix libgomp.c/target-5.c compilation
Libgomp test-case libgomp.c/target-5.c is failing to compile when building for x86_64 with nvptx accelerator due to missing: - getpid - gethostname - isatty (pulled in by fwrite) in the nvptx newlib. This patch fixes the build failure by: - adding a function gomp_print_string which limits the use of fwrite to a single location (in affinity-fmt.c), and - creating an nvptx version of affinity-fmt.c, which: - overrides the configure test results HAVE_GETPID and HAVE_GETHOSTNAME, and - implements fwrite using write. Build and reg-tested on x86_64 with nvptx accelerator. 2018-12-13 Tom de Vries <tdevries@suse.de> * affinity-fmt.c (gomp_print_string): New function, factored out of ... (omp_display_affinity, gomp_display_affinity_thread): ... here, and ... * fortran.c (omp_display_affinity_): ... here. * libgomp.h (gomp_print_string): Declare. * config/nvptx/affinity-fmt.c: New file. Include affinity-fmt.c, undefining HAVE_GETPID and HAVE_GETHOSTNAME, and mapping fwrite to write. From-SVN: r267100
-rw-r--r--libgomp/ChangeLog10
-rw-r--r--libgomp/affinity-fmt.c14
-rw-r--r--libgomp/config/nvptx/affinity-fmt.c51
-rw-r--r--libgomp/fortran.c4
-rw-r--r--libgomp/libgomp.h1
5 files changed, 74 insertions, 6 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 3a50f39..7b42e87 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,13 @@
+2018-12-13 Tom de Vries <tdevries@suse.de>
+
+ * affinity-fmt.c (gomp_print_string): New function, factored out of ...
+ (omp_display_affinity, gomp_display_affinity_thread): ... here, and ...
+ * fortran.c (omp_display_affinity_): ... here.
+ * libgomp.h (gomp_print_string): Declare.
+ * config/nvptx/affinity-fmt.c: New file. Include affinity-fmt.c,
+ undefining HAVE_GETPID and HAVE_GETHOSTNAME, and mapping fwrite to
+ write.
+
2018-12-13 Jakub Jelinek <jakub@redhat.com>
PR libgomp/88460
diff --git a/libgomp/affinity-fmt.c b/libgomp/affinity-fmt.c
index 9e5c5f7..1447597 100644
--- a/libgomp/affinity-fmt.c
+++ b/libgomp/affinity-fmt.c
@@ -38,6 +38,12 @@
#endif
void
+gomp_print_string (const char *str, size_t len)
+{
+ fwrite (str, 1, len, stderr);
+}
+
+void
gomp_set_affinity_format (const char *format, size_t len)
{
if (len < gomp_affinity_format_len)
@@ -456,13 +462,13 @@ omp_display_affinity (const char *format)
if (ret < sizeof buf)
{
buf[ret] = '\n';
- fwrite (buf, 1, ret + 1, stderr);
+ gomp_print_string (buf, ret + 1);
return;
}
b = gomp_malloc (ret + 1);
ialias_call (omp_capture_affinity) (b, ret + 1, format);
b[ret] = '\n';
- fwrite (b, 1, ret + 1, stderr);
+ gomp_print_string (b, ret + 1);
free (b);
}
@@ -477,13 +483,13 @@ gomp_display_affinity_thread (gomp_thread_handle handle,
if (ret < sizeof buf)
{
buf[ret] = '\n';
- fwrite (buf, 1, ret + 1, stderr);
+ gomp_print_string (buf, ret + 1);
return;
}
b = gomp_malloc (ret + 1);
gomp_display_affinity (b, ret + 1, gomp_affinity_format_var,
handle, ts, place);
b[ret] = '\n';
- fwrite (b, 1, ret + 1, stderr);
+ gomp_print_string (b, ret + 1);
free (b);
}
diff --git a/libgomp/config/nvptx/affinity-fmt.c b/libgomp/config/nvptx/affinity-fmt.c
new file mode 100644
index 0000000..5e4a3fb
--- /dev/null
+++ b/libgomp/config/nvptx/affinity-fmt.c
@@ -0,0 +1,51 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+
+ This file is part of the GNU Offloading and Multi Processing Library
+ (libgomp).
+
+ Libgomp is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "libgomp.h"
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h> /* For PRIx64. */
+#endif
+#ifdef HAVE_UNAME
+#include <sys/utsname.h>
+#endif
+
+/* The HAVE_GETPID and HAVE_GETHOSTNAME configure tests are passing for nvptx,
+ while the nvptx newlib implementation does not support those functions.
+ Override the configure test results here. */
+#undef HAVE_GETPID
+#undef HAVE_GETHOSTNAME
+
+/* The nvptx newlib implementation does not support fwrite, but it does support
+ write. Map fwrite to write. */
+#undef fwrite
+#define fwrite(ptr, size, nmemb, stream) write (1, (ptr), (nmemb) * (size))
+
+#include "../../affinity-fmt.c"
+
diff --git a/libgomp/fortran.c b/libgomp/fortran.c
index 0157bae..328bf9c 100644
--- a/libgomp/fortran.c
+++ b/libgomp/fortran.c
@@ -626,7 +626,7 @@ omp_display_affinity_ (const char *format, size_t format_len)
if (ret < sizeof buf)
{
buf[ret] = '\n';
- fwrite (buf, 1, ret + 1, stderr);
+ gomp_print_string (buf, ret + 1);
}
else
{
@@ -635,7 +635,7 @@ omp_display_affinity_ (const char *format, size_t format_len)
format_len ? fmt : gomp_affinity_format_var,
gomp_thread_self (), &thr->ts, thr->place);
b[ret] = '\n';
- fwrite (b, 1, ret + 1, stderr);
+ gomp_print_string (b, ret + 1);
free (b);
}
if (fmt && fmt != fmt_buf)
diff --git a/libgomp/libgomp.h b/libgomp/libgomp.h
index 7eacb45..8105e64 100644
--- a/libgomp/libgomp.h
+++ b/libgomp/libgomp.h
@@ -751,6 +751,7 @@ extern void gomp_display_affinity_place (char *, size_t, size_t *, int);
/* affinity-fmt.c */
+extern void gomp_print_string (const char *str, size_t len);
extern void gomp_set_affinity_format (const char *, size_t);
extern void gomp_display_string (char *, size_t, size_t *, const char *,
size_t);