mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-21 05:49:19 +08:00
6bb96d13a2
This patch to the libc/machine/nvptx port of newlib implements an approximation of "clock" and provides some additional stub routines. These changes not only reduce the number of (link) failures in the GCC testsuite when targeting nvptx-none, but also allow the NIST scimark4 benchmark to compile and run without modification. newlib already contains support for backends to provide their own clock implementations via -DCLOCK_PROVIDED. That functionality is used here to return an approximate elapsed time based on the NVidia GPU's clock64 cycle counter. Although not great, this is better than the current behaviour of link error from the unresolved symbol _times_r. The other part of the patch is to add a small number of stub functions to nvptx's misc.c. Adding isatty, for example, resolves linking problems in libc from the dependency in __smakebuf_r, and the sync stub, for example, fixes the failure with GCC's testsuite/gfortran.dg/ISO_Fortran_binding_14.f90 [which simply tests that gfortran can call a/any C function]. newlib/ configure.host: Add -DCLOCK_PROVIDED to newlib_cflags on nvptx*. newlib/libc/machine/nvptx Makefile.am: Add clock.c to lib_a_SOURCES. clock.c: New source file to implement/approximate clock(). misc.c: Add stubs for fstat, isatty, open, sync and unlink.
60 lines
1.2 KiB
C
60 lines
1.2 KiB
C
/*
|
|
* Support file for nvptx in newlib.
|
|
* Copyright (c) 2014-2018 Mentor Graphics.
|
|
*
|
|
* The authors hereby grant permission to use, copy, modify, distribute,
|
|
* and license this software and its documentation for any purpose, provided
|
|
* that existing copyright notices are retained in all copies and that this
|
|
* notice is included verbatim in any distributions. No written agreement,
|
|
* license, or royalty fee is required for any of the authorized uses.
|
|
* Modifications to this software may be copyrighted by their authors
|
|
* and need not follow the licensing terms described here, provided that
|
|
* the new terms are clearly indicated on the first page of each file where
|
|
* they apply.
|
|
*/
|
|
|
|
#include <errno.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#undef errno
|
|
extern int errno;
|
|
|
|
int
|
|
close(int fd) {
|
|
return -1;
|
|
}
|
|
|
|
int
|
|
fstat (int fd, struct stat *buf) {
|
|
return -1;
|
|
}
|
|
|
|
int
|
|
isatty (int fd) {
|
|
return fd == 1;
|
|
}
|
|
|
|
off_t
|
|
lseek(int fd, off_t offset, int whence) {
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
open (const char *pathname, int flags, ...) {
|
|
return -1;
|
|
}
|
|
|
|
int
|
|
read(int fd, void *buf, size_t count) {
|
|
return 0;
|
|
}
|
|
|
|
void
|
|
sync (void) {
|
|
}
|
|
|
|
int
|
|
unlink (const char *pathname) {
|
|
return -1;
|
|
}
|