This patch includes the support for Tilera extensions to standard
kernel APIs (mmap and sigaction).  The mmap extensions require a bit
of extra code, rather than purely table extensions, since some of the
high bits in the mmap flags word are used as an enumeration to
override the kernel's normal choice of a "home cache" for coherence.

The extension for sigaction() is a flag that tells the kernel not
to notify a ptracer for a particular handled signal.  This is useful
if you want to use signals in a way that just confuses a ptracer,
i.e. an API that converts SEGV/BUS to error codes does not want to
dump the debugger user unexpectedly into its implementation.

diff -ru --new-file strace-4.5.19/mem.c tilera-source/mem.c
--- strace-4.5.19/mem.c 2009-01-23 11:10:22.000000000 -0500
+++ tilera-source/mem.c 2009-12-23 10:08:40.729414000 -0500
@@ -188,9 +188,49 @@
 #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 @@
                /* 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
diff -ru --new-file strace-4.5.19/signal.c tilera-source/signal.c
--- strace-4.5.19/signal.c      2009-10-12 15:54:21.000000000 -0400
+++ tilera-source/signal.c      2009-12-23 10:55:18.352554000 -0500
@@ -230,6 +230,9 @@
 #ifdef _SA_BSDCALL
        { _SA_BSDCALL,  "_SA_BSDCALL"   },
 #endif
+#ifdef SA_NOPTRACE
+       { SA_NOPTRACE,  "SA_NOPTRACE"   },
+#endif
        { 0,            NULL            },
 };
 

------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to