diff options
author | Tom de Vries <tdevries@suse.de> | 2018-12-13 18:04:05 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2018-12-13 18:04:05 +0000 |
commit | fe0827eed09d14064efe070dc0f4db71bc66bbd4 (patch) | |
tree | 1d57d9badd25c6a5f1a76878106124d6add57a25 | |
parent | b3147e59284d2a916eac1972f44bd9aff72178a4 (diff) | |
download | gcc-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/ChangeLog | 10 | ||||
-rw-r--r-- | libgomp/affinity-fmt.c | 14 | ||||
-rw-r--r-- | libgomp/config/nvptx/affinity-fmt.c | 51 | ||||
-rw-r--r-- | libgomp/fortran.c | 4 | ||||
-rw-r--r-- | libgomp/libgomp.h | 1 |
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); |