@@ -1891,7 +1891,25 @@ int synth_event_trace(struct trace_event_file *file, unsigned int n_vals, ...)
1891
1891
strscpy (str_field , str_val , STR_VAR_LEN_MAX );
1892
1892
n_u64 += STR_VAR_LEN_MAX / sizeof (u64 );
1893
1893
} else {
1894
- state .entry -> fields [n_u64 ] = val ;
1894
+ struct synth_field * field = state .event -> fields [i ];
1895
+
1896
+ switch (field -> size ) {
1897
+ case 1 :
1898
+ * (u8 * )& state .entry -> fields [n_u64 ] = (u8 )val ;
1899
+ break ;
1900
+
1901
+ case 2 :
1902
+ * (u16 * )& state .entry -> fields [n_u64 ] = (u16 )val ;
1903
+ break ;
1904
+
1905
+ case 4 :
1906
+ * (u32 * )& state .entry -> fields [n_u64 ] = (u32 )val ;
1907
+ break ;
1908
+
1909
+ default :
1910
+ state .entry -> fields [n_u64 ] = val ;
1911
+ break ;
1912
+ }
1895
1913
n_u64 ++ ;
1896
1914
}
1897
1915
}
@@ -1943,7 +1961,26 @@ int synth_event_trace_array(struct trace_event_file *file, u64 *vals,
1943
1961
strscpy (str_field , str_val , STR_VAR_LEN_MAX );
1944
1962
n_u64 += STR_VAR_LEN_MAX / sizeof (u64 );
1945
1963
} else {
1946
- state .entry -> fields [n_u64 ] = vals [i ];
1964
+ struct synth_field * field = state .event -> fields [i ];
1965
+ u64 val = vals [i ];
1966
+
1967
+ switch (field -> size ) {
1968
+ case 1 :
1969
+ * (u8 * )& state .entry -> fields [n_u64 ] = (u8 )val ;
1970
+ break ;
1971
+
1972
+ case 2 :
1973
+ * (u16 * )& state .entry -> fields [n_u64 ] = (u16 )val ;
1974
+ break ;
1975
+
1976
+ case 4 :
1977
+ * (u32 * )& state .entry -> fields [n_u64 ] = (u32 )val ;
1978
+ break ;
1979
+
1980
+ default :
1981
+ state .entry -> fields [n_u64 ] = val ;
1982
+ break ;
1983
+ }
1947
1984
n_u64 ++ ;
1948
1985
}
1949
1986
}
@@ -2062,8 +2099,25 @@ static int __synth_event_add_val(const char *field_name, u64 val,
2062
2099
2063
2100
str_field = (char * )& entry -> fields [field -> offset ];
2064
2101
strscpy (str_field , str_val , STR_VAR_LEN_MAX );
2065
- } else
2066
- entry -> fields [field -> offset ] = val ;
2102
+ } else {
2103
+ switch (field -> size ) {
2104
+ case 1 :
2105
+ * (u8 * )& trace_state -> entry -> fields [field -> offset ] = (u8 )val ;
2106
+ break ;
2107
+
2108
+ case 2 :
2109
+ * (u16 * )& trace_state -> entry -> fields [field -> offset ] = (u16 )val ;
2110
+ break ;
2111
+
2112
+ case 4 :
2113
+ * (u32 * )& trace_state -> entry -> fields [field -> offset ] = (u32 )val ;
2114
+ break ;
2115
+
2116
+ default :
2117
+ trace_state -> entry -> fields [field -> offset ] = val ;
2118
+ break ;
2119
+ }
2120
+ }
2067
2121
out :
2068
2122
return ret ;
2069
2123
}
0 commit comments