diff --git a/libgo/configure b/libgo/configure
index 7e8a38d37b4cc523b32d134d3b7ae5f550798c67..8c8fe38bc8e92dfafbf4e9ee66ec57f21d2708d8 100755
--- a/libgo/configure
+++ b/libgo/configure
@@ -13467,6 +13467,7 @@ is_darwin=no
 is_freebsd=no
 is_irix=no
 is_linux=no
+is_netbsd=no
 is_rtems=no
 is_solaris=no
 GOOS=unknown
diff --git a/libgo/configure.ac b/libgo/configure.ac
index 81326557afa350efa426c427d16ca2164a7d9a7b..cd6b1a9ac82463a8e69d6bccb9ed975c7d78485f 100644
--- a/libgo/configure.ac
+++ b/libgo/configure.ac
@@ -126,6 +126,7 @@ is_darwin=no
 is_freebsd=no
 is_irix=no
 is_linux=no
+is_netbsd=no
 is_rtems=no
 is_solaris=no
 GOOS=unknown
diff --git a/libgo/runtime/go-map-delete.c b/libgo/runtime/go-map-delete.c
index cb10d8dcdc0e45c5846453d3a3bafff9c705b6e2..b25760fc8204b601f1207ab828b38a4c3aeaef85 100644
--- a/libgo/runtime/go-map-delete.c
+++ b/libgo/runtime/go-map-delete.c
@@ -20,7 +20,7 @@ __go_map_delete (struct __go_map *map, const void *key)
   const struct __go_map_descriptor *descriptor;
   const struct __go_type_descriptor *key_descriptor;
   uintptr_t key_offset;
-  _Bool (*equalfn) (const void*, const void*, size_t);
+  _Bool (*equalfn) (const void*, const void*, uintptr_t);
   size_t key_hash;
   size_t key_size;
   size_t bucket_index;
diff --git a/libgo/runtime/go-map-index.c b/libgo/runtime/go-map-index.c
index ffb532bee88849fbe0f82be5eb9cc8d1118aac6b..a602d2ad04a678adb8df7ca1c91b6efb29c2e633 100644
--- a/libgo/runtime/go-map-index.c
+++ b/libgo/runtime/go-map-index.c
@@ -21,7 +21,7 @@ __go_map_rehash (struct __go_map *map)
   const struct __go_type_descriptor *key_descriptor;
   uintptr_t key_offset;
   size_t key_size;
-  size_t (*hashfn) (const void *, size_t);
+  uintptr_t (*hashfn) (const void *, uintptr_t);
   uintptr_t old_bucket_count;
   void **old_buckets;
   uintptr_t new_bucket_count;
@@ -80,7 +80,7 @@ __go_map_index (struct __go_map *map, const void *key, _Bool insert)
   const struct __go_map_descriptor *descriptor;
   const struct __go_type_descriptor *key_descriptor;
   uintptr_t key_offset;
-  _Bool (*equalfn) (const void*, const void*, size_t);
+  _Bool (*equalfn) (const void*, const void*, uintptr_t);
   size_t key_hash;
   size_t key_size;
   size_t bucket_index;
diff --git a/libgo/runtime/mem.c b/libgo/runtime/mem.c
index 04fca2c65b1a680d8dae10f3530cf3328c696f32..a1c5eaa36d7feb21d3decdb0e4a99f025815edd2 100644
--- a/libgo/runtime/mem.c
+++ b/libgo/runtime/mem.c
@@ -1,3 +1,7 @@
+/* Defining _XOPEN_SOURCE hides the declaration of madvise() on Solaris <
+   11 and the MADV_DONTNEED definition on IRIX 6.5.  */
+#undef _XOPEN_SOURCE
+
 #include <errno.h>
 #include <unistd.h>
 
@@ -67,7 +71,7 @@ runtime_SysAlloc(uintptr n)
 }
 
 void
-runtime_SysUnused(void *v, uintptr n)
+runtime_SysUnused(void *v __attribute__ ((unused)), uintptr n __attribute__ ((unused)))
 {
 #ifdef MADV_DONTNEED
 	runtime_madvise(v, n, MADV_DONTNEED);