On 09/26/2012 07:35 PM, Takuo Koguchi wrote:
> As already suggested by Glenn, syscall_983042 seems to be an ARM private 
> cacheflush syscall. The number is assigned in arch/arm/include/asm/unistd.h
> In the case of EABI, __ARM_NR_cacheflush is 0x0f0002(=982042)
> /*
> * The following SWIs are ARM private.
> */
> #define __ARM_NR_BASE (__NR_SYSCALL_BASE+0x0f0000) #define 
> __ARM_NR_breakpoint (__ARM_NR_BASE+1)
> #define __ARM_NR_cacheflush (__ARM_NR_BASE+2)
> #define __ARM_NR_usr26 (__ARM_NR_BASE+3)
> #define __ARM_NR_usr32 (__ARM_NR_BASE+4)
> #define __ARM_NR_set_tls (__ARM_NR_BASE+5)
> 
> The strace command used here has no knowledge about the syscall and seems to 
> print the contents of registers from R0. syscall_983042(0x47a8e074, 
> 0x47a8e078, 0, 0xfff, 0x4086d118, 0x47a8e074,
> 0x47a4a905, 0xf0002, 0, 0x47a8e078, 0xfc46f7bc, 0x413d4630, 0, 0xbeb43678, 
> 0x40841ac3, 0x40011454, 0x40000010, 0x47a8e074, 0xb691, 0, 0x7461642f, 
> 0x61642f61, 0x632f6174, 0x682e6d6f, 0x63646e61,
> 0x2e746e65, 0x7478656e, 0x2f736d73, 0x755f6368, 0x61, 0, 0) = 0
> The syscall number 0xf0002 is stored in R7 as expected.
> 
> ARM private cacheflush syscall actually takes only 3 args, start(0x47a8e074), 
> end(0x47a8e078), flags(0). 0 is the only valid value for the syscall.
> 
> So the log entry says, the application requested to write back 4 bytes of 
> data to the memory and it succeded. Hope this will help.

Well, you learn something new every day!

I didn't know ARM *had* private syscalls.  Thanks for this info.

BTW - this is used in the bionic routine cacheflush(), located
in bionic/libc/arch-arm/syscalls/cacheflush.S
I couldn't find any callers of cacheflush() in bionic.

It's also called via the syscall() syscall in valgrind, but with cursory
poking about I couldn't find any other references in AOSP.

Presumably the original app knows what it's doing, or some library
routine is invoking this.  It seems like a lot of overhead to go to the
kernel to guarantee a cache flush.  Maybe this is related to some kind
of user-space locking primitive.

Interesting diversion...
 -- Tim


=============================
Tim Bird
Architecture Group Chair, CE Workgroup of the Linux Foundation
Senior Staff Engineer, Sony Network Entertainment
=============================

-- 
unsubscribe: [email protected]
website: http://groups.google.com/group/android-kernel

Reply via email to