libphobos/libdruntime changes were contributed upstream:
https://github.com/dlang/druntime/pull/2472
(caveat: pending a change to netbsd/execinfo.d)

One missing patch is needed for GDC to work.

gcc/config.gcc (*-*-netbsd*): add netbsd-d.o
gcc/config/t-netbsd: add netbsd-d.o

gcc/d/d-builtins.cc: add NetBSD
gcc/d/d-system.h: NetBSD is POSIX
gcc/d/dmd/globals.h: add isNetBSD

libphobos/configure.tgt: Mark netbsd/x86 as supported

---
 gcc/config.gcc          | 2 ++
 gcc/config/t-netbsd     | 4 ++++
 gcc/d/d-builtins.cc     | 2 ++
 gcc/d/d-system.h        | 3 ++-
 gcc/d/dmd/globals.h     | 1 +
 libphobos/configure.tgt | 2 ++
 6 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/gcc/config.gcc b/gcc/config.gcc
index a189cb19f63..c5d3044b017 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -839,6 +839,7 @@ case ${target} in
   tm_p_file="${tm_p_file} netbsd-protos.h"
   tmake_file="t-netbsd t-slibgcc"
   extra_objs="${extra_objs} netbsd.o"
+  d_target_objs="${d_target_objs} netbsd-d.o"
   gas=yes
   gnu_ld=yes
   use_gcc_stdint=wrap
@@ -847,6 +848,7 @@ case ${target} in
   esac
   nbsd_tm_file="netbsd.h netbsd-stdint.h netbsd-elf.h"
   default_use_cxa_atexit=yes
+  target_has_targetdm=yes
   ;;
 *-*-openbsd*)
   tmake_file="t-openbsd"
diff --git a/gcc/config/t-netbsd b/gcc/config/t-netbsd
index 4626e963ebf..716a94f86c6 100644
--- a/gcc/config/t-netbsd
+++ b/gcc/config/t-netbsd
@@ -19,3 +19,7 @@
 netbsd.o: $(srcdir)/config/netbsd.c
        $(COMPILE) $<
        $(POSTCOMPILE)
+
+netbsd-d.o: $(srcdir)/config/netbsd-d.c
+       $(COMPILE) $<
+       $(POSTCOMPILE)
diff --git a/gcc/d/d-builtins.cc b/gcc/d/d-builtins.cc
index b0a315a3ed9..ca105c7635d 100644
--- a/gcc/d/d-builtins.cc
+++ b/gcc/d/d-builtins.cc
@@ -382,6 +382,8 @@ d_add_builtin_version (const char* ident)
     global.params.isWindows = true;
   else if (strcmp (ident, "FreeBSD") == 0)
     global.params.isFreeBSD = true;
+  else if (strcmp (ident, "NetBSD") == 0)
+    global.params.isNetBSD = true;
   else if (strcmp (ident, "OpenBSD") == 0)
     global.params.isOpenBSD = true;
   else if (strcmp (ident, "Solaris") == 0)
diff --git a/gcc/d/d-system.h b/gcc/d/d-system.h
index cd59b827812..c32825d4ad1 100644
--- a/gcc/d/d-system.h
+++ b/gcc/d/d-system.h
@@ -24,7 +24,8 @@
 
 /* Used by the dmd front-end to determine if we have POSIX-style IO.  */
 #define POSIX (__linux__ || __GLIBC__ || __gnu_hurd__ || __APPLE__ \
-              || __FreeBSD__ || __OpenBSD__ || __DragonFly__ || __sun)
+              || __FreeBSD__ || __NetBSD__ || __OpenBSD__ || __DragonFly__ \
+              || __sun)
 
 /* Forward assert invariants to gcc_assert.  */
 #undef assert
diff --git a/gcc/d/dmd/globals.h b/gcc/d/dmd/globals.h
index 6c37cca3236..4fb96fecef4 100644
--- a/gcc/d/dmd/globals.h
+++ b/gcc/d/dmd/globals.h
@@ -84,6 +84,7 @@ struct Param
     bool isOSX;         // generate code for Mac OSX
     bool isWindows;     // generate code for Windows
     bool isFreeBSD;     // generate code for FreeBSD
+    bool isNetBSD;      // generate code for NetBSD
     bool isOpenBSD;     // generate code for OpenBSD
     bool isSolaris;     // generate code for Solaris
     bool hasObjectiveC; // target supports Objective-C
diff --git a/libphobos/configure.tgt b/libphobos/configure.tgt
index 2b2a9746811..0471bfd816b 100644
--- a/libphobos/configure.tgt
+++ b/libphobos/configure.tgt
@@ -30,6 +30,8 @@ case "${target}" in
        ;;
   x86_64-*-linux* | i?86-*-linux*)
        ;;
+  x86_64-*-netbsd* | i?86-*-netbsd*)
+       ;;
   *)
        UNSUPPORTED=1
        ;;
-- 
2.20.1

Reply via email to