summaryrefslogtreecommitdiffstats
path: root/src/usr/trace/tracebuffer.H
blob: 90cc80f750218b3e695e374bebc9e07893d819ad (plain)
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
69
70
71
72
73
//  IBM_PROLOG_BEGIN_TAG
//  This is an automatically generated prolog.
//
//  $Source: src/usr/trace/tracebuffer.H $
//
//  IBM CONFIDENTIAL
//
//  COPYRIGHT International Business Machines Corp. 2011
//
//  p1
//
//  Object Code Only (OCO) source materials
//  Licensed Internal Code Source Materials
//  IBM HostBoot Licensed Internal Code
//
//  The source code for this program is not published or other-
//  wise divested of its trade secrets, irrespective of what has
//  been deposited with the U.S. Copyright Office.
//
//  Origin: 30
//
//  IBM_PROLOG_END
#ifndef __TRACE_TRACEBUFFER_H
#define __TRACE_TRACEBUFFER_H

#include <stdint.h>
#include <stdlib.h>
#include <new>
#include <limits.h>
#include <sys/task.h>

struct traceEntry
{
    uint64_t component;
    tid_t tid;
    uint16_t length;
    uint32_t hash;
    uint64_t timestamp;
    uint32_t line;
    uint64_t values[0];
};


class TracePage
{
    public:
        TracePage() : next(NULL), size(0) {};

        TracePage* setNext(TracePage*);
        TracePage* getNext() { return next; };
        traceEntry* claimEntry(size_t size);

    private:
        TracePage* volatile next;
        uint64_t size;
};

class TraceBuffer
{
    public:
        TraceBuffer()
            {
                first = last = new (malloc(PAGE_SIZE)) TracePage();
            }

        traceEntry* claimEntry(size_t size);

    private:
        TracePage* first;
        TracePage* volatile last;
};

#endif
OpenPOWER on IntegriCloud