ipc semaphore calls not getting tracked properly on ARM

Trent Piepho xyzzy at speakeasy.org
Fri May 13 23:49:30 UTC 2011


Calls like semop() weren't getting traced correctly.

The number of arguments for the calls in linux/arm/syscallent.h doesn't
match the kernel.  And arm was set to use "indirect syscalls" for ipc. 
Which at least for the EABI it doesn't do.  I don't know if the old ABI did
or not.

There's another set of semaphore syscalls in the 400 range in the
syscallent.h, but I don't see where these are defined in the kernel.  I've
got no idea why they are there.

Here is a patch that makes semop traces work on arm.

commit cf7babf7234ae0711701d4113c5115f85f232fd4
Author: Trent Piepho <Trent.A.Piepho at delphi.com>
Date:   Fri May 13 20:44:14 2011 -0400

     Adjust argument count for semaphore ipc calls on ARM to match kernel.
     Turn off indirect_ipccall() on ARM, as at least the EABI does not use
     it.

diff --git a/ipc.c b/ipc.c
index 4c902bf..55c9426 100644
--- a/ipc.c
+++ b/ipc.c
@@ -193,7 +193,7 @@ struct tcb *tcp;
  #if defined IA64
  	return tcp->scno < 1024; /* ia32 emulation syscalls are low */
  #endif
-#if !defined MIPS && !defined HPPA
+#if !defined MIPS && !defined HPPA && !defined ARM
  	return 1;
  #endif
  #endif	/* LINUX */
diff --git a/linux/arm/syscallent.h b/linux/arm/syscallent.h
index b914ca0..4495ac2 100644
--- a/linux/arm/syscallent.h
+++ b/linux/arm/syscallent.h
@@ -328,8 +328,8 @@
  	{ 5,	TN,	sys_getsockopt,		"getsockopt"	}, /* 295 */
  	{ 3,	TN,	sys_sendmsg,		"sendmsg"	}, /* 296 */
  	{ 3,	TN,	sys_recvmsg,		"recvmsg"	}, /* 297 */
-	{ 4,	TI,	sys_semop,		"semop"		}, /* 298 */
-	{ 4,	TI,	sys_semget,		"semget"	}, /* 299 */
+	{ 3,	TI,	sys_semop,		"semop"		}, /* 298 */
+	{ 3,	TI,	sys_semget,		"semget"	}, /* 299 */
  	{ 4,	TI,	sys_semctl,		"semctl"	}, /* 300 */
  	{ 4,	TI,	sys_msgsnd,		"msgsnd"	}, /* 301 */
  	{ 4,	TI,	sys_msgrcv,		"msgrcv"	}, /* 302 */
@@ -342,7 +342,7 @@
  	{ 5,	0,	printargs,		"add_key"	}, /* 309 */
  	{ 4,	0,	printargs,		"request_key"	}, /* 310 */
  	{ 5,	0,	printargs,		"keyctl"	}, /* 311 */
-	{ 5,	TI,	sys_semtimedop,		"semtimedop"	}, /* 312 */
+	{ 4,	TI,	sys_semtimedop,		"semtimedop"	}, /* 312 */
  	{ 5,	0,	printargs,		"vserver"	}, /* 313 */
  	{ 3,	0,	printargs,		"ioprio_set"	}, /* 314 */
  	{ 2,	0,	printargs,		"ioprio_get"	}, /* 315 */




More information about the Strace-devel mailing list