aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code
diff options
context:
space:
mode:
authorRichard Brooksby2012-08-22 08:41:42 +0100
committerRichard Brooksby2012-08-22 08:41:42 +0100
commit30283c6f11af8a8aea4dfb0f3b9617adfbd22771 (patch)
treef2ba14d89f8339116c2abfaf54f2feaeb4b41a19 /mps/code
parent5e96e53da6e45131a427e7a395b5e6cb9daec8cd (diff)
downloademacs-30283c6f11af8a8aea4dfb0f3b9617adfbd22771.tar.gz
emacs-30283c6f11af8a8aea4dfb0f3b9617adfbd22771.zip
Moving some common definitions to eventcom.h from event.h.
Fixing the types of EventCode etc. to use narrower types to compress things on 64-bit architectures. Fixing some warnings. Copied from Perforce Change: 179015 ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
-rw-r--r--mps/code/event.c8
-rw-r--r--mps/code/event.h35
-rw-r--r--mps/code/eventcom.h42
-rw-r--r--mps/code/eventpro.c2
4 files changed, 44 insertions, 43 deletions
diff --git a/mps/code/event.c b/mps/code/event.c
index d4b32f83a2c..0b4d16353b4 100644
--- a/mps/code/event.c
+++ b/mps/code/event.c
@@ -46,11 +46,15 @@ Word EventKindControl; /* Bit set used to control output. */
46Res EventFlush(void) 46Res EventFlush(void)
47{ 47{
48 Res res; 48 Res res;
49 size_t size;
49 50
50 AVER(eventInited); 51 AVER(eventInited);
51 52
52 res = (Res)mps_io_write(eventIO, (void *)eventBuffer, 53 AVER(eventBuffer <= EventNext);
53 EventNext - eventBuffer); 54 AVER(EventNext <= eventBuffer + EventBufferSIZE);
55 size = (size_t)(EventNext - eventBuffer);
56
57 res = (Res)mps_io_write(eventIO, (void *)eventBuffer, size);
54 EventNext = eventBuffer; 58 EventNext = eventBuffer;
55 if (res != ResOK) return res; 59 if (res != ResOK) return res;
56 60
diff --git a/mps/code/event.h b/mps/code/event.h
index 139460955fa..97e622b628d 100644
--- a/mps/code/event.h
+++ b/mps/code/event.h
@@ -35,43 +35,8 @@ extern void EventLabelAddr(Addr, Word);
35extern Res EventFlush(void); 35extern Res EventFlush(void);
36 36
37 37
38/* Event Kinds --- see <design/telemetry/>
39 *
40 * All events are classified as being of one event type.
41 * They are small enough to be able to be used as shifts within a word.
42 */
43
44#define EventKindArena ((EventKind)0) /* Per space or arena */
45#define EventKindPool ((EventKind)1) /* Per pool */
46#define EventKindTrace ((EventKind)2) /* Per trace or scan */
47#define EventKindSeg ((EventKind)3) /* Per seg */
48#define EventKindRef ((EventKind)4) /* Per ref or fix */
49#define EventKindObject ((EventKind)5) /* Per alloc or object */
50#define EventKindUser ((EventKind)6) /* User-invoked */
51
52#define EventKindNumber ((Count)7) /* Number of event kinds */
53
54
55/* Event type definitions
56 *
57 * Define various constants for each event type to describe them.
58 */
59
60/* Note that enum values can be up to fifteen bits long portably. */
61#define EVENT_ENUM(X, type, code, always, kind, count, format) \
62 enum { \
63 Event##type##High = ((code >> 8) & 0xFF), \
64 Event##type##Low = (code & 0xFF), \
65 Event##type##Always = always, \
66 Event##type##Kind = EventKind##kind \
67 };
68
69EVENT_LIST(EVENT_ENUM, X)
70
71
72/* Event writing support */ 38/* Event writing support */
73 39
74/* extern EventUnion EventMould; */
75extern char *EventNext, *EventLimit; 40extern char *EventNext, *EventLimit;
76extern Word EventKindControl; 41extern Word EventKindControl;
77 42
diff --git a/mps/code/eventcom.h b/mps/code/eventcom.h
index 7d372cdd47a..18bef8ec4ca 100644
--- a/mps/code/eventcom.h
+++ b/mps/code/eventcom.h
@@ -16,8 +16,8 @@
16/* Types for event fields */ 16/* Types for event fields */
17 17
18typedef Word EventType; 18typedef Word EventType;
19typedef size_t EventCode; 19typedef unsigned short EventCode;
20typedef Index EventKind; 20typedef unsigned EventKind;
21 21
22typedef Byte EventStringLen; 22typedef Byte EventStringLen;
23 23
@@ -33,6 +33,39 @@ typedef EventStringStruct *EventString;
33#define EventCodeMAX ((EventCode)0x0069) 33#define EventCodeMAX ((EventCode)0x0069)
34 34
35 35
36/* Event Kinds --- see <design/telemetry/>
37 *
38 * All events are classified as being of one event type.
39 * They are small enough to be able to be used as shifts within a word.
40 */
41
42enum {
43 EventKindArena, /* Per space or arena */
44 EventKindPool, /* Per pool */
45 EventKindTrace, /* Per trace or scan */
46 EventKindSeg, /* Per seg */
47 EventKindRef, /* Per ref or fix */
48 EventKindObject, /* Per alloc or object */
49 EventKindUser, /* User-invoked */
50 EventKindLIMIT
51};
52
53
54/* Event type definitions
55 *
56 * Define various constants for each event type to describe them.
57 */
58
59/* Note that enum values can be up to fifteen bits long portably. */
60#define EVENT_ENUM(X, name, code, always, kind, count, format) \
61 enum { \
62 Event##name##Always = always, \
63 Event##name##Kind = EventKind##kind \
64 };
65
66EVENT_LIST(EVENT_ENUM, X)
67
68
36/* Event*Struct -- Event Structures 69/* Event*Struct -- Event Structures
37 * 70 *
38 * Declare the structures that are used to encode events in the internal event 71 * Declare the structures that are used to encode events in the internal event
@@ -112,11 +145,11 @@ typedef union EventUnion {
112 BEGIN \ 145 BEGIN \
113 size_t _string_len = (length); \ 146 size_t _string_len = (length); \
114 size_t size; \ 147 size_t size; \
115 AVER(_string_len < EventStringLengthMAX); \
116 size = offsetof(Event##name##Struct, f1.str) + _string_len; \ 148 size = offsetof(Event##name##Struct, f1.str) + _string_len; \
117 EVENT_BEGIN(name, size) \ 149 EVENT_BEGIN(name, size) \
118 _event->f0 = (p0); \ 150 _event->f0 = (p0); \
119 _event->f1.len = _string_len; \ 151 AVER(_string_len < EventStringLengthMAX); \
152 _event->f1.len = (EventStringLen)_string_len; \
120 mps_lib_memcpy(_event->f1.str, (string), _string_len); \ 153 mps_lib_memcpy(_event->f1.str, (string), _string_len); \
121 EVENT_END(name, size); \ 154 EVENT_END(name, size); \
122 END 155 END
@@ -141,7 +174,6 @@ typedef union EventUnion {
141#define EVENT14(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); _event->f5 = (p5); _event->f6 = (p6); _event->f7 = (p7); _event->f8 = (p8); _event->f9 = (p9); _event->f10 = (p10); _event->f11 = (p11); _event->f12 = (p12); _event->f13 = (p13); EVENT_END(name, sizeof(Event##name##Struct)) 174#define EVENT14(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); _event->f5 = (p5); _event->f6 = (p6); _event->f7 = (p7); _event->f8 = (p8); _event->f9 = (p9); _event->f10 = (p10); _event->f11 = (p11); _event->f12 = (p12); _event->f13 = (p13); EVENT_END(name, sizeof(Event##name##Struct))
142 175
143 176
144
145#define EVENT0_FIELD_PTR(name, event, i) NULL 177#define EVENT0_FIELD_PTR(name, event, i) NULL
146 178
147/* 179/*
diff --git a/mps/code/eventpro.c b/mps/code/eventpro.c
index 07faea3226e..e66c76a69a9 100644
--- a/mps/code/eventpro.c
+++ b/mps/code/eventpro.c
@@ -72,7 +72,7 @@ struct EventProcStruct {
72typedef struct { 72typedef struct {
73 EventType type; 73 EventType type;
74 char *name; 74 char *name;
75 size_t code; 75 EventCode code;
76 size_t length; 76 size_t length;
77 char *format; 77 char *format;
78} eventRecord; 78} eventRecord;