[PATCH] Add micromips support to the MIPS simulator
[deliverable/binutils-gdb.git] / sim / mips / configure
index f073b2b86fb52307e2dbd6b001f3835c8272e345..67f7e090a5b2b4878c0871fb7586d4c4dbf953f3 100755 (executable)
@@ -609,6 +609,8 @@ sim_multi_src
 sim_multi_igen_configs
 sim_multi_flags
 sim_gen
+sim_micromips16_flags
+sim_micromips_flags
 sim_m16_flags
 sim_igen_flags
 SIM_SUBTARGET
@@ -12347,7 +12349,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12350 "configure"
+#line 12352 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12453,7 +12455,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12456 "configure"
+#line 12458 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -13674,11 +13676,11 @@ case "${target}" in
                        sim_multi_default=mips5000
                        ;;
   mips*-sde-elf* | mips*-mti-elf*)
-                       sim_gen=M16
-                       sim_igen_machine="-M mips64r2,mips3d,mips16,mips16e,mdmx,dsp,dsp2,smartmips"
-                       sim_m16_machine="-M mips16,mips16e,mips64r2"
-                       sim_igen_filter="32,64,f"
-                       sim_mach_default="mipsisa64r2"
+                       sim_gen=MULTI
+                       sim_multi_configs="\
+                         micromips:micromips64,micromipsdsp:32,64,f:mips_micromips\
+                         mips64r2:mips64r2,mips3d,mips16,mips16e,mdmx,dsp,dsp2,smartmips:32,64,f:mipsisa64r2"
+                       sim_multi_default=mipsisa64r2
                        ;;
   mips64*-*-*)         sim_igen_filter="32,64,f"
                        sim_gen=IGEN
@@ -13687,11 +13689,11 @@ case "${target}" in
                        sim_igen_filter="32,64,f"
                        sim_m16_filter="16"
                        ;;
-  mipsisa32r2*-*-*)    sim_gen=M16
-                       sim_igen_machine="-M mips32r2,mips16,mips16e,mdmx,dsp,dsp2,smartmips"
-                       sim_m16_machine="-M mips16,mips16e,mips32r2"
-                       sim_igen_filter="32,f"
-                       sim_mach_default="mipsisa32r2"
+  mipsisa32r2*-*-*)    sim_gen=MULTI
+                       sim_multi_configs="\
+                         micromips:micromips32,micromipsdsp:32,f:mips_micromips\
+                         mips32r2:mips32r2,mips3d,mips16,mips16e,mdmx,dsp,dsp2,smartmips:32,f:mipsisa32r2"
+                       sim_multi_default=mipsisa32r2
                        ;;
   mipsisa32*-*-*)      sim_gen=M16
                        sim_igen_machine="-M mips32,mips16,mips16e,smartmips"
@@ -13763,7 +13765,7 @@ if test ${sim_gen} = MULTI; then
   rm -f multi-include.h multi-run.c
   sim_multi_flags=
   sim_multi_src=
-  sim_multi_obj=multi-run.o
+  sim_multi_obj=
   sim_multi_igen_configs=
   sim_seen_default=no
 
@@ -13790,6 +13792,8 @@ if test ${sim_gen} = MULTI; then
 
 #include "sim-main.h"
 #include "multi-include.h"
+#include "elf-bfd.h"
+#include "elf/mips.h"
 
 #define SD sd
 #define CPU cpu
@@ -13804,6 +13808,9 @@ sim_engine_run (SIM_DESC sd,
 
   if (STATE_ARCHITECTURE (sd) == NULL)
     mach = bfd_mach_${sim_multi_default};
+  else if (elf_elfheader (sd->base.prog_bfd)->e_flags
+          & EF_MIPS_ARCH_ASE_MICROMIPS)
+    mach = bfd_mach_mips_micromips;
   else
     mach = STATE_ARCHITECTURE (SD)->mach;
 
@@ -13833,7 +13840,7 @@ __EOF__
     # the ${sim_multi_configs} entry.
     sim_multi_flags="${sim_multi_flags} -F ${filter} -M ${machine}"
 
-    # Check whether mips16 handling is needed.
+    # Check whether special handling is needed.
     case ${c} in
       *:*mips16*:*)
        # Run igen twice, once for normal mode and once for mips16.
@@ -13846,6 +13853,30 @@ __EOF__
        sim_multi_obj="${sim_multi_obj} m16${name}_run.o"
        sim_multi_flags="${sim_multi_flags} -F 16"
        ;;
+      *:*micromips32*:*)
+       # Run igen thrice, once for micromips32, once for micromips16,
+       # and once for m32.
+       ws="micromips_m32 micromips16 micromips32"
+
+       # The top-level function for the micromips simulator is
+       # in a file micromips${name}_run.c, generated by the
+       # tmp-run-multi Makefile rule.
+       sim_multi_src="${sim_multi_src} micromips${name}_run.c"
+       sim_multi_obj="${sim_multi_obj} micromips${name}_run.o"
+       sim_multi_flags="${sim_multi_flags} -F 16,32"
+       ;;
+      *:*micromips64*:*)
+       # Run igen thrice, once for micromips64, once for micromips16,
+       # and once for m64.
+       ws="micromips_m64 micromips16 micromips64"
+
+       # The top-level function for the micromips simulator is
+       # in a file micromips${name}_run.c, generated by the
+       # tmp-run-multi Makefile rule.
+       sim_multi_src="${sim_multi_src} micromips${name}_run.c"
+       sim_multi_obj="${sim_multi_obj} micromips${name}_run.o"
+       sim_multi_flags="${sim_multi_flags} -F 16,32,64"
+       ;;
       *)
        ws=m32
        ;;
@@ -13931,6 +13962,8 @@ else
 fi
 sim_igen_flags="-F ${sim_igen_filter} ${sim_igen_machine} ${sim_igen_smp}"
 sim_m16_flags=" -F ${sim_m16_filter}  ${sim_m16_machine}  ${sim_igen_smp}"
+sim_micromips16_flags=" -F ${sim_micromips16_filter}  ${sim_micromips16_machine}  ${sim_igen_smp}"
+sim_micromips_flags=" -F ${sim_micromips_filter}  ${sim_micromips_machine}  ${sim_igen_smp}"
 
 
 
This page took 0.025735 seconds and 4 git commands to generate.