diff --git a/sim/bfin/ChangeLog b/sim/bfin/ChangeLog
index 5599af6..744f5eb 100644
--- a/sim/bfin/ChangeLog
+++ b/sim/bfin/ChangeLog
@@ -1,5 +1,10 @@
 2015-12-25  Mike Frysinger  <vapier@gentoo.org>
 
+	* Makefile.in (SIM_OBJS): Delete sim-model.o.
+	* tconfig.h (SIM_HAVE_MODEL): Delete.
+
+2015-12-25  Mike Frysinger  <vapier@gentoo.org>
+
 	* machs.c: Rename MACH to SIM_MACH, MACH_IMP_PROPERTIES to
 	SIM_MACH_IMP_PROPERTIES, and MODEL to SIM_MODEL.
 
diff --git a/sim/bfin/Makefile.in b/sim/bfin/Makefile.in
index 817fecb..a2b6b0b 100644
--- a/sim/bfin/Makefile.in
+++ b/sim/bfin/Makefile.in
@@ -28,7 +28,6 @@ SIM_OBJS = \
 	interp.o \
 	machs.o \
 	sim-hload.o \
-	sim-model.o \
 	sim-resume.o
 
 INCLUDE = bfin-sim.h
diff --git a/sim/bfin/tconfig.h b/sim/bfin/tconfig.h
index 254aba9..3ecd174 100644
--- a/sim/bfin/tconfig.h
+++ b/sim/bfin/tconfig.h
@@ -3,6 +3,3 @@
 /* We use this so that we are passed the requesting CPU for HW acesses.
    Common sim core by default sets hw_system_cpu to NULL for WITH_HW.  */
 #define WITH_DEVICES 1
-
-/* ??? Temporary hack until model support unified.  */
-#define SIM_HAVE_MODEL
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index e36895a..09f29bb 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,5 +1,20 @@
 2015-12-25  Mike Frysinger  <vapier@gentoo.org>
 
+	* Make-common.in (SIM_NEW_COMMON_OBJS): Add sim-model.o.
+	* cgen-types.h (SIM_HAVE_MODEL): Delete.
+	* sim-base.h: Always include sim-model.h.
+	* sim-config.h (WITH_DEFAULT_MODEL): Delete.
+	* sim-cpu.h (sim_cpu_base): Always declare mach/model members.
+	* sim-model.c (sim_model_init): Return when !WITH_MODEL_P.
+	[!WITH_MODEL_P] (sim_machs): Define.
+	* sim-model.h: Add some developer docs.
+	[!WITH_DEFAULT_MODEL] (mach_attr, WITH_DEFAULT_MODEL): Define.
+	(WITH_MODEL_P): Define.
+	* sim-module.c (modules): Always include sim_model_install.
+	* sim-profile.h (WITH_PROFILE_MODEL_P): Delete.
+
+2015-12-25  Mike Frysinger  <vapier@gentoo.org>
+
 	* sim-cpu.h: Rename MACH to SIM_MACH and MODEL to SIM_MODEL.
 	* sim-model.c: Likewise.
 	* sim-model.h: Likewise.  Rename MACH_IMP_PROPERTIES to
diff --git a/sim/common/Make-common.in b/sim/common/Make-common.in
index 647ec80..2566bf4 100644
--- a/sim/common/Make-common.in
+++ b/sim/common/Make-common.in
@@ -190,6 +190,7 @@ SIM_NEW_COMMON_OBJS = \
 	sim-info.o \
 	sim-load.o \
 	sim-memopt.o \
+	sim-model.o \
 	sim-module.o \
 	sim-options.o \
 	sim-profile.o \
diff --git a/sim/common/cgen-types.h b/sim/common/cgen-types.h
index 74dc640..7779393 100644
--- a/sim/common/cgen-types.h
+++ b/sim/common/cgen-types.h
@@ -26,10 +26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 /* Miscellaneous cgen configury defined here as this file gets
    included soon enough.  */
 
-/* Indicate we support --profile-model.  */
-#undef SIM_HAVE_MODEL
-#define SIM_HAVE_MODEL
-
 /* Indicate we support --{profile,trace}-{range,function}.  */
 #undef SIM_HAVE_ADDR_RANGE
 #define SIM_HAVE_ADDR_RANGE
diff --git a/sim/common/sim-base.h b/sim/common/sim-base.h
index cfef6ec..3e15a85 100644
--- a/sim/common/sim-base.h
+++ b/sim/common/sim-base.h
@@ -82,9 +82,7 @@ typedef struct _sim_cpu sim_cpu;
 #include "sim-core.h"
 #include "sim-events.h"
 #include "sim-profile.h"
-#ifdef SIM_HAVE_MODEL
 #include "sim-model.h"
-#endif
 #include "sim-io.h"
 #include "sim-engine.h"
 #include "sim-watch.h"
diff --git a/sim/common/sim-config.h b/sim/common/sim-config.h
index 599b84c..064d936 100644
--- a/sim/common/sim-config.h
+++ b/sim/common/sim-config.h
@@ -524,10 +524,6 @@ extern int current_floating_point;
 		       ? WITH_MODEL	\
 		       : current_model)
 
-#ifndef WITH_DEFAULT_MODEL
-#define WITH_DEFAULT_MODEL		DEFAULT_MODEL
-#endif
-
 #define MODEL_ISSUE_IGNORE		(-1)
 #define MODEL_ISSUE_PROCESS		1
 
diff --git a/sim/common/sim-cpu.h b/sim/common/sim-cpu.h
index 20838e8..f998bef 100644
--- a/sim/common/sim-cpu.h
+++ b/sim/common/sim-cpu.h
@@ -100,7 +100,6 @@ typedef struct {
   PROFILE_DATA profile_data;
 #define CPU_PROFILE_DATA(cpu) (& (cpu)->base.profile_data)
 
-#ifdef SIM_HAVE_MODEL
   /* Machine tables for this cpu.  See sim-model.h.  */
   const SIM_MACH *mach;
 #define CPU_MACH(cpu) ((cpu)->base.mach)
@@ -110,7 +109,6 @@ typedef struct {
   /* Model data (profiling state, etc.).  */
   void *model_data;
 #define CPU_MODEL_DATA(cpu) ((cpu)->base.model_data)
-#endif
 
   /* Routines to fetch/store registers.  */
   CPUREG_FETCH_FN *reg_fetch;
diff --git a/sim/common/sim-model.c b/sim/common/sim-model.c
index 0d0c28d..054f0bc 100644
--- a/sim/common/sim-model.c
+++ b/sim/common/sim-model.c
@@ -190,6 +190,9 @@ sim_model_init (SIM_DESC sd)
 {
   SIM_CPU *cpu;
 
+  if (!WITH_MODEL_P)
+    return SIM_RC_OK;
+
   /* If both cpu model and state architecture are set, ensure they're
      compatible.  If only one is set, set the other.  If neither are set,
      use the default model.  STATE_ARCHITECTURE is the bfd_arch_info data
@@ -241,3 +244,12 @@ sim_model_init (SIM_DESC sd)
 
   return SIM_RC_OK;
 }
+
+#if !WITH_MODEL_P
+/* Set up basic model support.  This is a stub for ports that do not define
+   models.  See sim-model.h for more details.  */
+const SIM_MACH *sim_machs[] =
+{
+  NULL
+};
+#endif
diff --git a/sim/common/sim-model.h b/sim/common/sim-model.h
index 5baa5ce..a206626 100644
--- a/sim/common/sim-model.h
+++ b/sim/common/sim-model.h
@@ -21,6 +21,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
    architecture = one of sparc, mips, sh, etc.
    in the sparc architecture, mach = one of v6, v7, v8, sparclite, etc.
    in the v8 mach, model = one of supersparc, etc.
+
+   To use the model framework, your arch needs to do a few things:
+   (1) Call SIM_AC_OPTION_DEFAULT_MODEL() in configure.ac.
+   (2) Define enum mach_attr in sim-main.h.
+   (3) Define sim_machs array (and all the callbacks it uses).
 */
 
 /* This file is intended to be included by sim-basics.h.  */
@@ -42,6 +47,15 @@ typedef struct {
 #define MAX_UNITS 1
 #endif
 
+#ifndef WITH_DEFAULT_MODEL
+/* Just a stub for ports that do not define models.  */
+enum mach_attr { _MACH_NONE };
+# define WITH_DEFAULT_MODEL NULL
+# define WITH_MODEL_P 0
+#else
+# define WITH_MODEL_P 1
+#endif
+
 typedef int (MODEL_FN) (sim_cpu *, void *);
 
 typedef struct {
diff --git a/sim/common/sim-module.c b/sim/common/sim-module.c
index 4f23882..670225b 100644
--- a/sim/common/sim-module.c
+++ b/sim/common/sim-module.c
@@ -40,9 +40,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 static MODULE_INSTALL_FN * const modules[] = {
   standard_install,
   sim_events_install,
-#ifdef SIM_HAVE_MODEL
   sim_model_install,
-#endif
 #if WITH_ENGINE
   sim_engine_install,
 #endif
diff --git a/sim/common/sim-profile.h b/sim/common/sim-profile.h
index 3370f0c..b756af5 100644
--- a/sim/common/sim-profile.h
+++ b/sim/common/sim-profile.h
@@ -102,12 +102,6 @@ SIM_RC sim_profile_set_option (SIM_DESC sd_, const char *name_, int idx_,
 #define WITH_PROFILE_MEMORY_P 0
 #endif
 
-/* Only build MODEL code when the target simulator has support for it */
-#ifndef SIM_HAVE_MODEL
-#undef WITH_PROFILE_MODEL_P
-#define WITH_PROFILE_MODEL_P 0
-#endif
-
 /* Profiling install handler.  */
 MODULE_INSTALL_FN profile_install;
 
diff --git a/sim/cris/ChangeLog b/sim/cris/ChangeLog
index ff73db1..66ef461 100644
--- a/sim/cris/ChangeLog
+++ b/sim/cris/ChangeLog
@@ -1,5 +1,10 @@
 2015-12-25  Mike Frysinger  <vapier@gentoo.org>
 
+	* Makefile.in (SIM_OBJS): Delete sim-model.o.
+	* tconfig.h (SIM_HAVE_MODEL): Delete.
+
+2015-12-25  Mike Frysinger  <vapier@gentoo.org>
+
 	* arch.c: Rename MACH to SIM_MACH.
 	* cpuall.h: Likewise.
 	* modelv10.c: Rename MACH to SIM_MACH, MACH_IMP_PROPERTIES to
diff --git a/sim/cris/Makefile.in b/sim/cris/Makefile.in
index f7762dd..384922f 100644
--- a/sim/cris/Makefile.in
+++ b/sim/cris/Makefile.in
@@ -24,7 +24,6 @@ CRISV32F_OBJS = crisv32f.o cpuv32.o decodev32.o modelv32.o mloopv32f.o
 
 SIM_OBJS = \
 	$(SIM_NEW_COMMON_OBJS) \
-	sim-model.o \
 	cgen-utils.o cgen-trace.o cgen-scache.o \
 	cgen-run.o \
 	sim-if.o arch.o \
diff --git a/sim/cris/tconfig.h b/sim/cris/tconfig.h
index 05d8623..2ac6c5b 100644
--- a/sim/cris/tconfig.h
+++ b/sim/cris/tconfig.h
@@ -27,6 +27,4 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 /* For MSPR support.  FIXME: revisit.  */
 #define WITH_DEVICES 1
 
-#define SIM_HAVE_MODEL
-
 #endif /* CRIS_TCONFIG_H */
diff --git a/sim/frv/ChangeLog b/sim/frv/ChangeLog
index 6fca1e1..26caec4 100644
--- a/sim/frv/ChangeLog
+++ b/sim/frv/ChangeLog
@@ -1,5 +1,10 @@
 2015-12-25  Mike Frysinger  <vapier@gentoo.org>
 
+	* Makefile.in (SIM_OBJS): Delete sim-model.o.
+	* tconfig.h (SIM_HAVE_MODEL): Delete.
+
+2015-12-25  Mike Frysinger  <vapier@gentoo.org>
+
 	* arch.c: Rename MACH to SIM_MACH.
 	* cpuall.h: Likewise.
 	* model.c: Rename MACH to SIM_MACH, MACH_IMP_PROPERTIES to
diff --git a/sim/frv/Makefile.in b/sim/frv/Makefile.in
index 62e480a..86095ff 100644
--- a/sim/frv/Makefile.in
+++ b/sim/frv/Makefile.in
@@ -22,7 +22,6 @@ FRV_OBJS = frv.o cpu.o decode.o sem.o model.o mloop.o cgen-par.o
 SIM_OBJS = \
 	$(SIM_NEW_COMMON_OBJS) \
 	sim-hload.o \
-	sim-model.o \
 	cgen-utils.o cgen-trace.o cgen-scache.o cgen-fpu.o cgen-accfp.o \
 	cgen-run.o \
 	sim-if.o arch.o \
diff --git a/sim/frv/tconfig.h b/sim/frv/tconfig.h
index 1abdc61..e5db154 100644
--- a/sim/frv/tconfig.h
+++ b/sim/frv/tconfig.h
@@ -2,6 +2,3 @@
 
 /* For MSPR support.  FIXME: revisit.  */
 #define WITH_DEVICES 1
-
-/* ??? Temporary hack until model support unified.  */
-#define SIM_HAVE_MODEL
diff --git a/sim/iq2000/ChangeLog b/sim/iq2000/ChangeLog
index 03cc023..4ee5839 100644
--- a/sim/iq2000/ChangeLog
+++ b/sim/iq2000/ChangeLog
@@ -1,5 +1,10 @@
 2015-12-25  Mike Frysinger  <vapier@gentoo.org>
 
+	* Makefile.in (SIM_OBJS): Delete sim-model.o.
+	* tconfig.h: Delete file.
+
+2015-12-25  Mike Frysinger  <vapier@gentoo.org>
+
 	* arch.c: Rename MACH to SIM_MACH.
 	* cpuall.h: Likewise.
 	* model.c: Rename MACH to SIM_MACH, MACH_IMP_PROPERTIES to
diff --git a/sim/iq2000/Makefile.in b/sim/iq2000/Makefile.in
index 3ca3924..24c4a9b 100644
--- a/sim/iq2000/Makefile.in
+++ b/sim/iq2000/Makefile.in
@@ -22,7 +22,6 @@ IQ2000_OBJS = iq2000.o cpu.o decode.o sem.o model.o mloop.o
 SIM_OBJS = \
 	$(SIM_NEW_COMMON_OBJS) \
 	sim-hload.o \
-	sim-model.o \
 	cgen-utils.o cgen-trace.o cgen-scache.o \
 	cgen-run.o \
 	sim-if.o arch.o \
diff --git a/sim/iq2000/tconfig.h b/sim/iq2000/tconfig.h
deleted file mode 100644
index cf63d44..0000000
--- a/sim/iq2000/tconfig.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* IQ2000 target configuration file.  -*- C -*- */
-
-/* For MSPR support.  FIXME: revisit.  */
-#define WITH_DEVICES 0
-
-/* ??? Temporary hack until model support unified.  */
-#define SIM_HAVE_MODEL
diff --git a/sim/lm32/ChangeLog b/sim/lm32/ChangeLog
index 044ce0a..b94ef40 100644
--- a/sim/lm32/ChangeLog
+++ b/sim/lm32/ChangeLog
@@ -1,5 +1,9 @@
 2015-12-25  Mike Frysinger  <vapier@gentoo.org>
 
+	* Makefile.in (SIM_OBJS): Delete sim-model.o.
+
+2015-12-25  Mike Frysinger  <vapier@gentoo.org>
+
 	* arch.c: Rename MACH to SIM_MACH.
 	* cpuall.h: Likewise.
 	* model.c: Rename MACH to SIM_MACH, MACH_IMP_PROPERTIES to
diff --git a/sim/lm32/Makefile.in b/sim/lm32/Makefile.in
index 91b6278..7b71549 100644
--- a/sim/lm32/Makefile.in
+++ b/sim/lm32/Makefile.in
@@ -7,7 +7,6 @@
 SIM_OBJS = \
 	$(SIM_NEW_COMMON_OBJS) \
 	sim-hload.o \
-	sim-model.o \
         cgen-utils.o cgen-trace.o cgen-scache.o \
         cgen-run.o \
         sim-if.o arch.o \
diff --git a/sim/m32r/ChangeLog b/sim/m32r/ChangeLog
index ce71d30..f726c3e 100644
--- a/sim/m32r/ChangeLog
+++ b/sim/m32r/ChangeLog
@@ -1,5 +1,9 @@
 2015-12-25  Mike Frysinger  <vapier@gentoo.org>
 
+	* Makefile.in (SIM_OBJS): Delete sim-model.o.
+
+2015-12-25  Mike Frysinger  <vapier@gentoo.org>
+
 	* arch.c: Rename MACH to SIM_MACH.
 	* cpuall.h: Likewise.
 	* model.c: Rename MACH to SIM_MACH, MACH_IMP_PROPERTIES to
diff --git a/sim/m32r/Makefile.in b/sim/m32r/Makefile.in
index 801db48..ca5c49d 100644
--- a/sim/m32r/Makefile.in
+++ b/sim/m32r/Makefile.in
@@ -27,7 +27,6 @@ TRAPS_OBJ = @traps_obj@
 SIM_OBJS = \
 	$(SIM_NEW_COMMON_OBJS) \
 	sim-hload.o \
-	sim-model.o \
 	cgen-utils.o cgen-trace.o cgen-scache.o \
 	cgen-run.o \
 	sim-if.o arch.o \
diff --git a/sim/sh64/ChangeLog b/sim/sh64/ChangeLog
index 1601ff5..9a4d1f5 100644
--- a/sim/sh64/ChangeLog
+++ b/sim/sh64/ChangeLog
@@ -1,5 +1,10 @@
 2015-12-25  Mike Frysinger  <vapier@gentoo.org>
 
+	* Makefile.in (SIM_OBJS): Delete sim-model.o.
+	* tconfig.h: Delete file.
+
+2015-12-25  Mike Frysinger  <vapier@gentoo.org>
+
 	* arch.c: Rename MACH to SIM_MACH.
 	* cpuall.h: Likewise.
 	* sh64.c: Rename MACH to SIM_MACH, MACH_IMP_PROPERTIES to
diff --git a/sim/sh64/Makefile.in b/sim/sh64/Makefile.in
index d1847bd..aa84c8d 100644
--- a/sim/sh64/Makefile.in
+++ b/sim/sh64/Makefile.in
@@ -24,7 +24,6 @@ SH64_OBJS = sh64.o cpu.o sh-desc.o \
 SIM_OBJS = \
 	$(SIM_NEW_COMMON_OBJS) \
 	sim-hload.o \
-	sim-model.o \
 	cgen-utils.o cgen-trace.o cgen-scache.o \
 	cgen-run.o \
 	sim-if.o arch.o \
diff --git a/sim/sh64/tconfig.h b/sim/sh64/tconfig.h
deleted file mode 100644
index b4e256f..0000000
--- a/sim/sh64/tconfig.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* SH64 target configuration file.  -*- C -*- */
-
-/* For MSPR support.  FIXME: revisit.  */
-#define WITH_DEVICES 0
-
-/* ??? Temporary hack until model support unified.  */
-#define SIM_HAVE_MODEL
