1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
/* COVERAGE: lookup_dcookie */
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <sys/syscall.h>
#define LENGTH 255
// lookup_dcookie() is a special-purpose system call, currently
// used only by the oprofile profiler. Used by v0.4 <= opcontrol <= v0.9.
// http://oprofile.sourceforge.net/doc/internals/sample-file-generation.html
// from oprofile 0.9 source (daemon/opd_cookie.h):
typedef unsigned long long cookie_t;
// from oprofile 0.9 source (daemon/opd_cookie.c):
#if (defined(__powerpc__) && !defined(__powerpc64__)) || defined(__hppa__)\
|| (defined(__s390__) && !defined(__s390x__)) \
|| (defined(__mips__) && (_MIPS_SIM == _MIPS_SIM_ABI32) \
&& defined(__MIPSEB__)) \
|| (defined(__arm__) && defined(__ARM_EABI__) \
&& defined(__ARMEB__))
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)) \
|| (defined(__arm__) && defined(__ARM_EABI__)) \
|| (defined(__tile__) && !defined(__LP64__))
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)
{
return syscall(__NR_lookup_dcookie, cookie, buf, size);
}
#endif
int main()
{
char buf[LENGTH];
cookie_t c = 0;
lookup_dcookie(0x12345678abcdefabLL, (char *)0x11223344, LENGTH);
//staptest// lookup_dcookie (0x12345678abcdefab, 0x11223344, 0xff) = -NNNN
lookup_dcookie(-1, (char *)0, 0);
//staptest// lookup_dcookie (0xffffffffffffffff, 0x0, 0x0) = -NNNN
lookup_dcookie(0, (char *)-1, 0);
#ifdef __s390__
//staptest// lookup_dcookie (0x0, 0x[7]?[f]+, 0x0) = -NNNN
#else
//staptest// lookup_dcookie (0x0, 0x[f]+, 0x0) = -NNNN
#endif
lookup_dcookie(0, (char *)0, -1);
//staptest// lookup_dcookie (0x0, 0x0, 0x[f]+) = -NNNN
return 0;
}
|