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