linux-mips
[Top] [All Lists]

[Patch] Fix lookup_dcookie for MIPS o32

To: oprofile-list@lists.sourceforge.net
Subject: [Patch] Fix lookup_dcookie for MIPS o32
From: David Daney <ddaney@avtrex.com>
Date: Mon, 17 Oct 2005 14:44:07 -0700
Cc: linux-mips@linux-mips.org
Original-recipient: rfc822;linux-mips@linux-mips.org
Reply-to: ddaney@avtrex.com
Sender: linux-mips-bounce@linux-mips.org
This patch fixes the lookup_dcookie for the MIPS o32 ABI.  Although I
only tested with little-endian, the big-endian case needed fixing as
well but is untested (but what are the chances that this is not the
correct fix?).

This is the only patch I needed to get the user space oprofile
programs to work for mipsel-linux.

I am CCing the linux-mips list as this may be of interest there as well.

David Daney.


2005-10-17  David Daney  <ddaney@avtrex.com>

        * daemon/opd_cookie.c (lookup_dcookie): Handle MIPS o32 for both big
        and little endian.

Index: oprofile/daemon/opd_cookie.c
===================================================================
RCS file: /cvsroot/oprofile/oprofile/daemon/opd_cookie.c,v
retrieving revision 1.19
diff -p -a -u -r1.19 opd_cookie.c
--- oprofile/daemon/opd_cookie.c        26 May 2005 00:00:02 -0000      1.19
+++ oprofile/daemon/opd_cookie.c        17 Oct 2005 21:29:13 -0000
@@ -60,12 +60,21 @@
 #endif /* __NR_lookup_dcookie */
 
 #if (defined(__powerpc__) && !defined(__powerpc64__)) || defined(__hppa__)\
-       || (defined(__s390__) && !defined(__s390x__))
+       || (defined(__s390__) && !defined(__s390x__)) \
+       || (defined(__mips__) && (_MIPS_SIM == _MIPS_SIM_ABI32) \
+           && defined(_MIPSEB))
 static inline int lookup_dcookie(cookie_t cookie, char * buf, size_t size)
 {
        return syscall(__NR_lookup_dcookie, (unsigned long)(cookie >> 32),
                       (unsigned long)(cookie & 0xffffffff), buf, size);
 }
+#elif (defined(__mips__) && (_MIPS_SIM == _MIPS_SIM_ABI32)) /*_MIPSEL */
+static inline int lookup_dcookie(cookie_t cookie, char * buf, size_t size)
+{
+       return syscall(__NR_lookup_dcookie,
+                      (unsigned long)(cookie & 0xffffffff),
+                      (unsigned long)(cookie >> 32), buf, size);
+}
 #else
 static inline int lookup_dcookie(cookie_t cookie, char * buf, size_t size)
 {

<Prev in Thread] Current Thread [Next in Thread>