aboutsummaryrefslogtreecommitdiff
path: root/driver/gator_annotate_kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/gator_annotate_kernel.c')
-rw-r--r--driver/gator_annotate_kernel.c107
1 files changed, 75 insertions, 32 deletions
diff --git a/driver/gator_annotate_kernel.c b/driver/gator_annotate_kernel.c
index 4715f64..a406e48 100644
--- a/driver/gator_annotate_kernel.c
+++ b/driver/gator_annotate_kernel.c
@@ -29,11 +29,27 @@ static void kannotate_write(const char *ptr, unsigned int size)
}
}
+static void marshal_u16(char *buf, u16 val) {
+ buf[0] = val & 0xff;
+ buf[1] = (val >> 8) & 0xff;
+}
+
+static void marshal_u32(char *buf, u32 val) {
+ buf[0] = val & 0xff;
+ buf[1] = (val >> 8) & 0xff;
+ buf[2] = (val >> 16) & 0xff;
+ buf[3] = (val >> 24) & 0xff;
+}
+
void gator_annotate_channel(int channel, const char *str)
{
- int str_size = strlen(str) & 0xffff;
- long long header = ESCAPE_CODE | (STRING_ANNOTATION << 8) | (channel << 16) | ((long long)str_size << 48);
- kannotate_write((char *)&header, sizeof(header));
+ const u16 str_size = strlen(str) & 0xffff;
+ char header[8];
+ header[0] = ESCAPE_CODE;
+ header[1] = STRING_ANNOTATION;
+ marshal_u32(header + 2, channel);
+ marshal_u16(header + 6, str_size);
+ kannotate_write(header, sizeof(header));
kannotate_write(str, str_size);
}
@@ -48,14 +64,14 @@ EXPORT_SYMBOL(gator_annotate);
void gator_annotate_channel_color(int channel, int color, const char *str)
{
- int str_size = (strlen(str) + 4) & 0xffff;
+ const u16 str_size = (strlen(str) + 4) & 0xffff;
char header[12];
header[0] = ESCAPE_CODE;
header[1] = STRING_ANNOTATION;
- *(u32 *)(&header[2]) = channel;
- *(u16 *)(&header[6]) = str_size;
- *(u32 *)(&header[8]) = color;
- kannotate_write((char *)&header, sizeof(header));
+ marshal_u32(header + 2, channel);
+ marshal_u16(header + 6, str_size);
+ marshal_u32(header + 8, color);
+ kannotate_write(header, sizeof(header));
kannotate_write(str, str_size - 4);
}
@@ -70,8 +86,12 @@ EXPORT_SYMBOL(gator_annotate_color);
void gator_annotate_channel_end(int channel)
{
- long long header = ESCAPE_CODE | (STRING_ANNOTATION << 8) | (channel << 16);
- kannotate_write((char *)&header, sizeof(header));
+ char header[8];
+ header[0] = ESCAPE_CODE;
+ header[1] = STRING_ANNOTATION;
+ marshal_u32(header + 2, channel);
+ marshal_u16(header + 6, 0);
+ kannotate_write(header, sizeof(header));
}
EXPORT_SYMBOL(gator_annotate_channel_end);
@@ -85,14 +105,14 @@ EXPORT_SYMBOL(gator_annotate_end);
void gator_annotate_name_channel(int channel, int group, const char* str)
{
- int str_size = strlen(str) & 0xffff;
+ const u16 str_size = strlen(str) & 0xffff;
char header[12];
header[0] = ESCAPE_CODE;
header[1] = NAME_CHANNEL_ANNOTATION;
- *(u32 *)(&header[2]) = channel;
- *(u32 *)(&header[6]) = group;
- *(u16 *)(&header[10]) = str_size;
- kannotate_write((char *)&header, sizeof(header));
+ marshal_u32(header + 2, channel);
+ marshal_u32(header + 6, group);
+ marshal_u16(header + 10, str_size);
+ kannotate_write(header, sizeof(header));
kannotate_write(str, str_size);
}
@@ -100,9 +120,13 @@ EXPORT_SYMBOL(gator_annotate_name_channel);
void gator_annotate_name_group(int group, const char* str)
{
- int str_size = strlen(str) & 0xffff;
- long long header = ESCAPE_CODE | (NAME_GROUP_ANNOTATION << 8) | (group << 16) | ((long long)str_size << 48);
- kannotate_write((char *)&header, sizeof(header));
+ const u16 str_size = strlen(str) & 0xffff;
+ char header[8];
+ header[0] = ESCAPE_CODE;
+ header[1] = NAME_GROUP_ANNOTATION;
+ marshal_u32(header + 2, group);
+ marshal_u16(header + 6, str_size);
+ kannotate_write(header, sizeof(header));
kannotate_write(str, str_size);
}
@@ -110,11 +134,16 @@ EXPORT_SYMBOL(gator_annotate_name_group);
void gator_annotate_visual(const char *data, unsigned int length, const char *str)
{
- int str_size = strlen(str) & 0xffff;
- int visual_annotation = ESCAPE_CODE | (VISUAL_ANNOTATION << 8) | (str_size << 16);
- kannotate_write((char *)&visual_annotation, sizeof(visual_annotation));
+ const u16 str_size = strlen(str) & 0xffff;
+ char header[4];
+ char header_length[4];
+ header[0] = ESCAPE_CODE;
+ header[1] = VISUAL_ANNOTATION;
+ marshal_u16(header + 2, str_size);
+ marshal_u32(header_length, length);
+ kannotate_write(header, sizeof(header));
kannotate_write(str, str_size);
- kannotate_write((char *)&length, sizeof(length));
+ kannotate_write(header_length, sizeof(header_length));
kannotate_write(data, length);
}
@@ -122,17 +151,23 @@ EXPORT_SYMBOL(gator_annotate_visual);
void gator_annotate_marker(void)
{
- int header = ESCAPE_CODE | (MARKER_ANNOTATION << 8);
- kannotate_write((char *)&header, sizeof(header));
+ char header[4];
+ header[0] = ESCAPE_CODE;
+ header[1] = MARKER_ANNOTATION;
+ marshal_u16(header + 2, 0);
+ kannotate_write(header, sizeof(header));
}
EXPORT_SYMBOL(gator_annotate_marker);
void gator_annotate_marker_str(const char *str)
{
- int str_size = strlen(str) & 0xffff;
- int header = ESCAPE_CODE | (MARKER_ANNOTATION << 8) | (str_size << 16);
- kannotate_write((char *)&header, sizeof(header));
+ const u16 str_size = strlen(str) & 0xffff;
+ char header[4];
+ header[0] = ESCAPE_CODE;
+ header[1] = MARKER_ANNOTATION;
+ marshal_u16(header + 2, str_size);
+ kannotate_write(header, sizeof(header));
kannotate_write(str, str_size);
}
@@ -140,17 +175,25 @@ EXPORT_SYMBOL(gator_annotate_marker_str);
void gator_annotate_marker_color(int color)
{
- long long header = (ESCAPE_CODE | (MARKER_ANNOTATION << 8) | 0x00040000 | ((long long)color << 32));
- kannotate_write((char *)&header, sizeof(header));
+ char header[8];
+ header[0] = ESCAPE_CODE;
+ header[1] = MARKER_ANNOTATION;
+ marshal_u16(header + 2, 4);
+ marshal_u32(header + 4, color);
+ kannotate_write(header, sizeof(header));
}
EXPORT_SYMBOL(gator_annotate_marker_color);
void gator_annotate_marker_color_str(int color, const char *str)
{
- int str_size = (strlen(str) + 4) & 0xffff;
- long long header = ESCAPE_CODE | (MARKER_ANNOTATION << 8) | (str_size << 16) | ((long long)color << 32);
- kannotate_write((char *)&header, sizeof(header));
+ const u16 str_size = (strlen(str) + 4) & 0xffff;
+ char header[8];
+ header[0] = ESCAPE_CODE;
+ header[1] = MARKER_ANNOTATION;
+ marshal_u16(header + 2, str_size);
+ marshal_u32(header + 4, color);
+ kannotate_write(header, sizeof(header));
kannotate_write(str, str_size - 4);
}