diff options
Diffstat (limited to 'driver/gator_annotate_kernel.c')
-rw-r--r-- | driver/gator_annotate_kernel.c | 107 |
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); } |