aboutsummaryrefslogtreecommitdiff
path: root/libgo/runtime
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2016-08-06 00:36:33 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2016-08-06 00:36:33 +0000
commite0f69f36ea1e068cb9aa48ea0d274b98530f2488 (patch)
tree8925fdf222aa5a7635a6eb748602b694043eafb7 /libgo/runtime
parentd712e9a7e2ec4de5e6e9f72b85b620e719757ee3 (diff)
downloadgcc-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.c56
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