This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Improving SystemTap ARM Architecture Support


On 07/19/2011 05:48 PM, William Cohen wrote:
> With the ARM architecture becoming a more common architecture for
> Linux SystemTap should be improve to better support the ARM
> architecture.  There are currently Ubuntu and Fedora images available
> for the ARM architecture.
> 
> For this work has been concentrating on getting things working on the
> Fedora 13 release candidate with SystemTap running in an a self hosted
> manner.  The variations in the ARM platforms make it difficult to have
> a single binary kernel RPM for all the arm platforms (kernel-debuginfo
> and kernel-devel rpms are rare).  This work has been using a locally
> built linux kernel to make all the kernel debuginfo and devel
> information available.
> 
> The goal is to be able to run the systemtap testsuite to find to what
> tests work and fail on the ARM architecture. In the past people have
> just cross compiled an individual script on one machine and transfered
> them over to the target ARM machine. The testsuite is not designed to
> run in cross-compiled manner.
> 
> Reviewing early test results and the code the following is an
> incomplete list of improvements:
> 
> -created aux_syscalls.stp (FIXED)
>   "make installcheck" uses debuginfo smoke test
>   needs _arch_ptrace_argstr(), aux_syscalls.stp
> -map arm variants (armv7l and armv5tel) to arm (PR4186)
> -provide tapset/arm/registers.stp
>   -map register name to/from sruct
>   -functions for nd probe argument access
> -add any arm specific syscalls in tapset/arm/syscalls.stp
> -provide high-resolution timer for gettimeofday_ns()
>   -this may be complicated by the variety of arm high-res timer mechanisms
> 
> Right now the "make installcheck" tests are running. The ARM machine
> is rather slow, but once the results are available will mail them to
> dejazilla so have a reference point for the ARM architecture.
> 
> -Will

I have been working on improving the test results for the arm. I found that loc2c-runtime.h had some problem on arm:

-arm misses handling 64-bit get, so has the same restrictions as 32-bit i386
-asm statement for __stp_put_user_asm_dword() appeared to be wrong (wondering if can eliminate entirely)

I have taken an attempt at making a tapset/arm/registers.stp file. It still needs some work. The first 4 args are passed in registers on arm, but it doesn't handle arg 5 or 6. Feedback on it would be appreciated.

These changes improved the test results. Went from 190 failures down to 114:

		=== systemtap Summary ===

# of expected passes		1107
# of unexpected failures	114
# of unexpected successes	9
# of expected failures		232
# of known failures		2
# of untested testcases		187
# of unsupported tests		5



-Will


diff --git a/runtime/loc2c-runtime.h b/runtime/loc2c-runtime.h
index 968045f..f8ed19a 100644
--- a/runtime/loc2c-runtime.h
+++ b/runtime/loc2c-runtime.h
@@ -789,8 +789,8 @@ extern void __store_deref_bad(void);
 	"	.long	1b, 4b\n"				\
 	"	.long	2b, 4b\n"				\
 	"	.previous"					\
-	: "+r" (err), "+r" (__pu_addr)				\
-	: "r" (x), "i" (-EFAULT)				\
+	: "+r" (err)						\
+	: "r" (x), "r" (__pu_addr), "i" (-EFAULT)		\
 	: "cc")
 
 #define deref(size, addr)						\
@@ -939,9 +939,9 @@ extern void __store_deref_bad(void);
 #endif /* (s390) || (s390x) */
 
 
-#if defined __i386__
+#if defined (__i386__) || defined (__arm__)
 
-/* x86 can't do 8-byte put/get_user_asm, so we have to split it */
+/* x86 and arm can't do 8-byte put/get_user_asm, so we have to split it */
 
 #define kread(ptr)					\
   ((sizeof(*(ptr)) == 8) ?				\

Attachment: registers.stp
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]