File: dcookie.c

package info (click to toggle)
systemtap 4.8-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 39,000 kB
  • sloc: cpp: 78,785; ansic: 62,419; xml: 49,443; exp: 42,735; sh: 11,254; python: 3,062; perl: 2,252; tcl: 1,305; makefile: 1,072; lisp: 105; awk: 101; asm: 91; java: 56; sed: 16
file content (68 lines) | stat: -rw-r--r-- 2,248 bytes parent folder | download | duplicates (6)
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;
}