@@ -63,26 +63,72 @@ static char dyn_str_data[] = {
};
static void *dyn_str_event_data = (void *)dyn_str_data;
+static const char dyn_str_old_event[] =
+ "name: irq_handler_entry\n"
+ "ID: 2\n"
+ "format:\n"
+ "\tfield:unsigned short common_type;\toffset:0;\tsize:2;\n"
+ "\tfield:unsigned char common_flags;\toffset:2;\tsize:1;\n"
+ "\tfield:unsigned char common_preempt_count;\toffset:3;\tsize:1;\n"
+ "\tfield:int common_pid;\toffset:4;\tsize:4;\n"
+ "\n"
+ "\tfield:int irq;\toffset:8;\tsize:4;\n"
+ "\tfield:__data_loc name;\toffset:12;\tsize:2;\n"
+ "\n"
+ "print fmt: \"irq=%d handler=%s\", REC->irq, __get_str(name)\n";
+
+static char dyn_str_old_data[] = {
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ /* common type */ 2, 0x00,
+#else
+ /* common type */ 0x00, 2
+#endif
+ /* common flags */ 0x00,
+ /* common_preempt_count */ 0x00,
+ /* common_pid */ 0x00, 0x00, 0x00, 0x00,
+ /* irq */ 0x00, 0x00, 0x00, 0x00,
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ /* name : offset */ 16, 0x00,
+#else
+ /* name : offset */ 0x00, 16,
+#endif
+ /* padding */ 0x00, 0x00,
+ /* name */ 'h', 'e', 'l', 'l', 'o', '\0',
+ /* padding */ 0x00, 0x00, 0x00
+};
+static void *dyn_str_old_event_data = (void *)dyn_str_old_data;
+
static struct tep_handle *test_tep;
static struct trace_seq *test_seq;
static struct trace_seq seq_storage;
-static void test_parse_dyn_str_event(void)
+static void parse_dyn_str(const char *dyn_str, void *data)
{
struct tep_format_field *field;
struct tep_event *event;
CU_TEST(tep_parse_format(test_tep, &event,
- dyn_str_event, strlen(dyn_str_event),
+ dyn_str, strlen(dyn_str),
DYN_STR_EVENT_SYSTEM) == TEP_ERRNO__SUCCESS);
field = tep_find_any_field(event, DYN_STR_FIELD);
CU_TEST(field != NULL);
trace_seq_reset(test_seq);
- tep_print_field(test_seq, dyn_str_event_data, field);
+ tep_print_field(test_seq, data, field);
CU_TEST(strcmp(test_seq->buffer, DYN_STRING) == 0);
}
+static void test_parse_dyn_str_event(void)
+{
+ parse_dyn_str(dyn_str_event, dyn_str_event_data);
+}
+
+static void test_parse_dyn_str_old_event(void)
+{
+ parse_dyn_str(dyn_str_old_event, dyn_str_old_event_data);
+}
+
static int test_suite_destroy(void)
{
tep_free(test_tep);
@@ -111,4 +157,6 @@ void test_traceevent_lib(void)
}
CU_add_test(suite, "parse dynamic string event",
test_parse_dyn_str_event);
+ CU_add_test(suite, "parse old dynamic string event",
+ test_parse_dyn_str_old_event);
}