diff options
author | Chris Metcalf <cmetcalf@tilera.com> | 2009-12-28 10:00:15 -0500 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2010-02-05 22:09:30 +0000 |
commit | c8c6698ef7cde83a496b273672a51ec2a8f14fb3 (patch) | |
tree | f629705476566bc7351e2a483c5e71f0281e891a /mem.c | |
parent | e5e60858063f214fcd7860f50f8bcb46f951f9ab (diff) | |
download | strace-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.c | 44 |
1 files changed, 44 insertions, 0 deletions
@@ -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 |