sim: bfin: implement stat_map for virtual environments (libgloss)
authorMike Frysinger <vapier@gentoo.org>
Fri, 1 Jul 2011 21:53:03 +0000 (21:53 +0000)
committerMike Frysinger <vapier@gentoo.org>
Fri, 1 Jul 2011 21:53:03 +0000 (21:53 +0000)
The stat syscalls cannot work without a stat map, so declare one that
matches libgloss for virtual environments.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
sim/bfin/ChangeLog
sim/bfin/interp.c

index a504f7a38ea99d36bdc6aab36f212c649440e451..bb79cde2dbfa0a9fb623ad8bb2596d5e3b63814a 100644 (file)
@@ -1,3 +1,14 @@
+2011-07-01  Mike Frysinger  <vapier@gentoo.org>
+
+       * interp.c (cb_linux_stat_map_32, cb_linux_stat_map_64): Rename from
+       stat_map_32 and stat_map_64.
+       (cb_libgloss_stat_map_32): New stat map.
+       (stat_map_32, stat_map_64): New stat map pointers.
+       (bfin_user_init): Assign stat_map_32 to cb_linux_stat_map_32 and
+       stat_map_64 to cb_linux_stat_map_64.
+       (bfin_virtual_init): New function.
+       (sim_create_inferior): Call bfin_virtual_init for all other envs.
+
 2011-06-22  Mike Frysinger  <vapier@gentoo.org>
 
        * interp.c (bfin_syscall): Delete old comment.  Set dreg 1 to
index 583b82e0e80537c2865fca19b2118097bb56d690..f22c378dc7e0dda016d460f76ca520637f06d362 100644 (file)
@@ -89,7 +89,7 @@
 # define setgid(gid) -1
 #endif
 
-static const char stat_map_32[] =
+static const char cb_linux_stat_map_32[] =
 /* Linux kernel 32bit layout:  */
 "st_dev,2:space,2:st_ino,4:st_mode,2:st_nlink,2:st_uid,2:st_gid,2:st_rdev,2:"
 "space,2:st_size,4:st_blksize,4:st_blocks,4:st_atime,4:st_atimensec,4:"
@@ -99,10 +99,15 @@ static const char stat_map_32[] =
 "st_rdev,8:space,2:space,2:st_size,4:st_blksiez,4:st_blocks,4:st_atime,4:"
 "st_atimensec,4:st_mtime,4:st_mtimensec,4:st_ctime,4:st_ctimensec,4:space,4:"
 "space,4";  */
-static const char stat_map_64[] =
+static const char cb_linux_stat_map_64[] =
 "st_dev,8:space,4:space,4:st_mode,4:st_nlink,4:st_uid,4:st_gid,4:st_rdev,8:"
 "space,4:st_size,8:st_blksize,4:st_blocks,8:st_atime,4:st_atimensec,4:"
 "st_mtime,4:st_mtimensec,4:st_ctime,4:st_ctimensec,4:st_ino,8";
+static const char cb_libgloss_stat_map_32[] =
+"st_dev,2:st_ino,2:st_mode,4:st_nlink,2:st_uid,2:st_gid,2:st_rdev,2:"
+"st_size,4:st_atime,4:space,4:st_mtime,4:space,4:st_ctime,4:"
+"space,4:st_blksize,4:st_blocks,4:space,8";
+static const char *stat_map_32, *stat_map_64;
 
 /* Count the number of arguments in an argv.  */
 static int
@@ -1173,7 +1178,8 @@ bfin_user_init (SIM_DESC sd, SIM_CPU *cpu, struct bfd *abfd,
   cb->errno_map = cb_linux_errno_map;
   cb->open_map = cb_linux_open_map;
   cb->signal_map = cb_linux_signal_map;
-  cb->stat_map = stat_map_32;
+  cb->stat_map = stat_map_32 = cb_linux_stat_map_32;
+  stat_map_64 = cb_linux_stat_map_64;
 }
 
 static void
@@ -1203,6 +1209,15 @@ bfin_os_init (SIM_DESC sd, SIM_CPU *cpu, const char * const *argv)
   sim_write (sd, cmdline, &byte, 1);
 }
 
+static void
+bfin_virtual_init (SIM_DESC sd, SIM_CPU *cpu)
+{
+  host_callback *cb = STATE_CALLBACK (sd);
+
+  cb->stat_map = stat_map_32 = cb_libgloss_stat_map_32;
+  stat_map_64 = NULL;
+}
+
 SIM_RC
 sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
                     char **argv, char **env)
@@ -1235,7 +1250,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
       bfin_os_init (sd, cpu, (void *)argv);
       break;
     default:
-      /* Nothing to do for virtual/all envs.  */
+      bfin_virtual_init (sd, cpu);
       break;
     }