1 #include <stdio.h>
2 #include <string.h>
3 #include <inttypes.h>
4 #include <endian.h>
5 #include "event-parse.h"
6 
7 /*
8  * From glibc endian.h, for older systems where it is not present, e.g.: RHEL5,
9  * Fedora6.
10  */
11 #ifndef le16toh
12 # if __BYTE_ORDER == __LITTLE_ENDIAN
13 #  define le16toh(x) (x)
14 # else
15 #  define le16toh(x) __bswap_16 (x)
16 # endif
17 #endif
18 
19 
20 static unsigned long long
process___le16_to_cpup(struct trace_seq * s,unsigned long long * args)21 process___le16_to_cpup(struct trace_seq *s, unsigned long long *args)
22 {
23 	uint16_t *val = (uint16_t *) (unsigned long) args[0];
24 	return val ? (long long) le16toh(*val) : 0;
25 }
26 
PEVENT_PLUGIN_LOADER(struct pevent * pevent)27 int PEVENT_PLUGIN_LOADER(struct pevent *pevent)
28 {
29 	pevent_register_print_function(pevent,
30 				       process___le16_to_cpup,
31 				       PEVENT_FUNC_ARG_INT,
32 				       "__le16_to_cpup",
33 				       PEVENT_FUNC_ARG_PTR,
34 				       PEVENT_FUNC_ARG_VOID);
35 	return 0;
36 }
37 
PEVENT_PLUGIN_UNLOADER(struct pevent * pevent)38 void PEVENT_PLUGIN_UNLOADER(struct pevent *pevent)
39 {
40 	pevent_unregister_print_function(pevent, process___le16_to_cpup,
41 					 "__le16_to_cpup");
42 }
43