diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2016-08-06 00:36:33 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2016-08-06 00:36:33 +0000 |
commit | e0f69f36ea1e068cb9aa48ea0d274b98530f2488 (patch) | |
tree | 8925fdf222aa5a7635a6eb748602b694043eafb7 /libgo/runtime | |
parent | d712e9a7e2ec4de5e6e9f72b85b620e719757ee3 (diff) | |
download | gcc-e0f69f36ea1e068cb9aa48ea0d274b98530f2488.zip gcc-e0f69f36ea1e068cb9aa48ea0d274b98530f2488.tar.gz gcc-e0f69f36ea1e068cb9aa48ea0d274b98530f2488.tar.bz2 |
libgo: change build procedure to use build tags
Previously the libgo Makefile explicitly listed the set of files to
compile for each package. For packages that use build tags, this
required a lot of awkward automake conditionals in the Makefile.
This CL changes the build to look at the build tags in the files.
The new shell script libgo/match.sh does the matching. This required
adjusting a lot of build tags, and removing some files that are never
used. I verified that the exact same sets of files are compiled on
amd64 GNU/Linux. I also tested the build on i386 Solaris.
Writing match.sh revealed some bugs in the build tag handling that
already exists, in a slightly different form, in the gotest shell
script. This CL fixes those problems as well.
The old code used automake conditionals to handle systems that were
missing strerror_r and wait4. Rather than deal with those in Go, those
functions are now implemented in runtime/go-nosys.c when necessary, so
the Go code can simply assume that they exist.
The os testsuite looked for dir_unix.go, which was never built for gccgo
and has now been removed. I changed the testsuite to look for dir.go
instead.
Reviewed-on: https://go-review.googlesource.com/25546
From-SVN: r239189
Diffstat (limited to 'libgo/runtime')
-rw-r--r-- | libgo/runtime/go-nosys.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/libgo/runtime/go-nosys.c b/libgo/runtime/go-nosys.c index 0a94de0..be8fb3e 100644 --- a/libgo/runtime/go-nosys.c +++ b/libgo/runtime/go-nosys.c @@ -14,11 +14,16 @@ #include <errno.h> #include <fcntl.h> #include <math.h> +#include <pthread.h> #include <stdint.h> +#include <stdlib.h> +#include <string.h> #include <sys/types.h> +#include <sys/resource.h> #include <sys/socket.h> #include <sys/stat.h> #include <sys/time.h> +#include <sys/wait.h> #include <time.h> #include <unistd.h> @@ -448,3 +453,54 @@ log1pl (long double a) return (long double) log1p ((double) a); } #endif + +#ifndef HAVE_STRERROR_R + +/* Some old systems do not have strerror_r. This is a replacement. + It assumes that nothing else in the program calls strerror. */ + +static pthread_mutex_t strerror_lock = PTHREAD_MUTEX_INITIALIZER; + +int +strerror_r (int errnum, char *buf, size_t buflen) +{ + int i; + char *errmsg; + size_t len; + int ret; + + i = pthread_mutex_lock (&strerror_lock); + if (i != 0) + abort (); + + errmsg = strerror (errnum); + len = strlen (errmsg); + if (len >= buflen) + ret = ERANGE; + else + { + memcpy (buf, errmsg, len + 1); + ret = 0; + } + + i = pthread_mutex_unlock (&strerror_lock); + if (i != 0) + abort (); + + return ret; +} + +#endif /* ! HAVE_STRERROR_R */ + +#ifndef HAVE_WAIT4 + +/* Some old systems do not have wait4. This is a replacement that + uses waitpid. */ + +pid_t +wait4 (pid_t pid, int *status, int options, struct rusage *rusage __attribute__ ((unused))) +{ + return waitpid (pid, status, options); +} + +#endif |