summaryrefslogtreecommitdiff
path: root/mem.c
diff options
context:
space:
mode:
authorChris Metcalf <cmetcalf@tilera.com>2009-12-28 10:00:15 -0500
committerDmitry V. Levin <ldv@altlinux.org>2010-02-05 22:09:30 +0000
commitc8c6698ef7cde83a496b273672a51ec2a8f14fb3 (patch)
treef629705476566bc7351e2a483c5e71f0281e891a /mem.c
parente5e60858063f214fcd7860f50f8bcb46f951f9ab (diff)
downloadstrace-c8c6698ef7cde83a496b273672a51ec2a8f14fb3.tar.gz
strace-c8c6698ef7cde83a496b273672a51ec2a8f14fb3.tar.bz2
strace-c8c6698ef7cde83a496b273672a51ec2a8f14fb3.tar.xz
Add support for the TILE architecture
* configure.ac: Add TILE to the list of supported architectures. * defs.h: Define TCB_WAITEXECVE for TILE. * linux/tile/syscallent.h: New file. * Makefile.am (EXTRA_DIST): Add linux/tile/syscallent.h * process.c (change_syscall, struct_user_offsets): Add TILE support. * syscall.c (get_scno, get_error, syscall_enter): Likewise. * mem.c (mmap_flags, print_mmap): Add MAP_CACHE_xxx TILE extensions support. * signal.c (sigact_flags): Add SA_NOPTRACE. (sys_sigreturn): Add TILE support. Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Diffstat (limited to 'mem.c')
-rw-r--r--mem.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/mem.c b/mem.c
index 49e3a1c..d55cd69 100644
--- a/mem.c
+++ b/mem.c
@@ -188,9 +188,49 @@ static const struct xlat mmap_flags[] = {
#ifdef MAP_NOCORE
{ MAP_NOCORE, "MAP_NOCORE" },
#endif
+#ifdef TILE
+ { MAP_CACHE_NO_LOCAL, "MAP_CACHE_NO_LOCAL" },
+ { MAP_CACHE_NO_L2, "MAP_CACHE_NO_L2" },
+ { MAP_CACHE_NO_L1, "MAP_CACHE_NO_L1" },
+#endif
{ 0, NULL },
};
+#ifdef TILE
+static
+int
+addtileflags(flags)
+long flags;
+{
+ long home = flags & _MAP_CACHE_MKHOME(_MAP_CACHE_HOME_MASK);
+ flags &= ~_MAP_CACHE_MKHOME(_MAP_CACHE_HOME_MASK);
+
+ if (flags & _MAP_CACHE_INCOHERENT) {
+ flags &= ~_MAP_CACHE_INCOHERENT;
+ if (home == MAP_CACHE_HOME_NONE) {
+ tprintf("|MAP_CACHE_INCOHERENT");
+ return flags;
+ }
+ tprintf("|_MAP_CACHE_INCOHERENT");
+ }
+
+ switch (home) {
+ case 0: break;
+ case MAP_CACHE_HOME_HERE: tprintf("|MAP_CACHE_HOME_HERE"); break;
+ case MAP_CACHE_HOME_NONE: tprintf("|MAP_CACHE_HOME_NONE"); break;
+ case MAP_CACHE_HOME_SINGLE: tprintf("|MAP_CACHE_HOME_SINGLE"); break;
+ case MAP_CACHE_HOME_TASK: tprintf("|MAP_CACHE_HOME_TASK"); break;
+ case MAP_CACHE_HOME_HASH: tprintf("|MAP_CACHE_HOME_HASH"); break;
+ default:
+ tprintf("|MAP_CACHE_HOME(%d)",
+ (home >> _MAP_CACHE_HOME_SHIFT) );
+ break;
+ }
+
+ return flags;
+}
+#endif
+
#if !HAVE_LONG_LONG_OFF_T
static
int
@@ -213,7 +253,11 @@ long long offset;
/* flags */
#ifdef MAP_TYPE
printxval(mmap_flags, u_arg[3] & MAP_TYPE, "MAP_???");
+#ifdef TILE
+ addflags(mmap_flags, addtileflags(u_arg[3] & ~MAP_TYPE));
+#else
addflags(mmap_flags, u_arg[3] & ~MAP_TYPE);
+#endif
#else
printflags(mmap_flags, u_arg[3], "MAP_???");
#endif