1 | ; |
---|
2 | ; RTEMS Trace Linker Printf and Prink configuration. |
---|
3 | ; |
---|
4 | ; Copyright 2014 Chris Johns <chrisj@rtems.org> |
---|
5 | ; |
---|
6 | |
---|
7 | ; |
---|
8 | ; A printf generator prints to stdout the trace functions. |
---|
9 | ; |
---|
10 | [printf-generator] |
---|
11 | headers = printf-generator-headers |
---|
12 | entry-trace = "rtld_pg_printf_entry(@FUNC_NAME@, (void*) &@FUNC_LABEL@);" |
---|
13 | arg-trace = "rtld_pg_printf_arg(@ARG_NUM@, @ARG_TYPE@, @ARG_SIZE@, (void*) &@ARG_LABEL@);" |
---|
14 | exit-trace = "rtld_pg_printf_exit(@FUNC_NAME@, (void*) &@FUNC_LABEL@);" |
---|
15 | ret-trace = "rtld_pg_printf_ret(@RET_TYPE@, @RET_SIZE@, (void*) &@RET_LABEL@);" |
---|
16 | code = <<<CODE |
---|
17 | static inline void rtld_pg_printf_entry(const char* func_name, |
---|
18 | void* func_addr) |
---|
19 | { |
---|
20 | printf (">>> %s (0x%08x)\n", func_name, func_addr); |
---|
21 | } |
---|
22 | static inline void rtld_pg_printf_arg(int arg_num, |
---|
23 | const char* arg_type, |
---|
24 | int arg_size, |
---|
25 | void* arg) |
---|
26 | { |
---|
27 | const unsigned char* p = arg; |
---|
28 | int i; |
---|
29 | printf (" %2d] %s(%d) = ", arg_num, arg_type, arg_size); |
---|
30 | for (i = 0; i < arg_size; ++i, ++p) printf ("%02x", (unsigned int) *p); |
---|
31 | printf ("\n"); |
---|
32 | } |
---|
33 | static inline void rtld_pg_printf_exit(const char* func_name, |
---|
34 | void* func_addr) |
---|
35 | { |
---|
36 | printf ("<<< %s (0x%08x)\n", func_name, func_addr); |
---|
37 | } |
---|
38 | static inline void rtld_pg_printf_ret(const char* ret_type, |
---|
39 | int ret_size, |
---|
40 | void* ret) |
---|
41 | { |
---|
42 | const unsigned char* p = ret; |
---|
43 | int i; |
---|
44 | printf (" rt] %s(%d) = ", ret_type, ret_size); |
---|
45 | for (i = 0; i < ret_size; ++i, ++p) printf ("%02x", (unsigned int) *p); |
---|
46 | printf ("\n"); |
---|
47 | } |
---|
48 | CODE |
---|
49 | |
---|
50 | [printf-generator-headers] |
---|
51 | header = "#include <stdio.h>" |
---|
52 | |
---|
53 | [printk-generator] |
---|
54 | headers = printk-generator-headers |
---|
55 | entry-trace = "rtld_pg_printk_entry(@FUNC_NAME@, (void*) &@FUNC_LABEL@);" |
---|
56 | arg-trace = "rtld_pg_printk_arg(@ARG_NUM@, @ARG_TYPE@, @ARG_SIZE@, (void*) &@ARG_LABEL@);" |
---|
57 | exit-trace = "rtld_pg_printk_exit(@FUNC_NAME@, (void*) &@FUNC_LABEL@);" |
---|
58 | ret-trace = "rtld_pg_printk_ret(@RET_TYPE@, @RET_SIZE@, (void*) &@RET_LABEL@);" |
---|
59 | code = <<<CODE |
---|
60 | static inline void rtld_pg_printk_entry(const char* func_name, |
---|
61 | void* func_addr) |
---|
62 | { |
---|
63 | printk (">>> %s (0x%08x)\n", func_name, func_addr); |
---|
64 | } |
---|
65 | static inline void rtld_pg_printk_arg(int arg_num, |
---|
66 | const char* arg_type, |
---|
67 | int arg_size, |
---|
68 | void* arg) |
---|
69 | { |
---|
70 | const unsigned char* p = arg; |
---|
71 | int i; |
---|
72 | printk (" %2d] %s(%d) = ", arg_num, arg_type, arg_size); |
---|
73 | for (i = 0; i < arg_size; ++i, ++p) printk ("%02x", (unsigned int) *p); |
---|
74 | printk ("\n"); |
---|
75 | } |
---|
76 | static inline void rtld_pg_printk_exit(const char* func_name, |
---|
77 | void* func_addr) |
---|
78 | { |
---|
79 | printk ("<<< %s (0x%08x)\n", func_name, func_addr); |
---|
80 | } |
---|
81 | static inline void rtld_pg_printk_ret(const char* ret_type, |
---|
82 | int ret_size, |
---|
83 | void* ret) |
---|
84 | { |
---|
85 | const unsigned char* p = ret; |
---|
86 | int i; |
---|
87 | printk (" rt] %s(%d) = ", ret_type, ret_size); |
---|
88 | for (i = 0; i < ret_size; ++i, ++p) printk ("%02x", (unsigned int) *p); |
---|
89 | printk ("\n"); |
---|
90 | } |
---|
91 | CODE |
---|
92 | |
---|
93 | [printk-generator-headers] |
---|
94 | header = "#include <stdio.h>" |
---|