@@ -77,10 +77,12 @@ DEFINE_HIST_FIELD_FN(u8);
77
77
#define HIST_KEY_SIZE_MAX (MAX_FILTER_STR_VAL + sizeof(u64))
78
78
79
79
enum hist_field_flags {
80
- HIST_FIELD_FL_HITCOUNT = 1 ,
81
- HIST_FIELD_FL_KEY = 2 ,
82
- HIST_FIELD_FL_STRING = 4 ,
83
- HIST_FIELD_FL_HEX = 8 ,
80
+ HIST_FIELD_FL_HITCOUNT = 1 ,
81
+ HIST_FIELD_FL_KEY = 2 ,
82
+ HIST_FIELD_FL_STRING = 4 ,
83
+ HIST_FIELD_FL_HEX = 8 ,
84
+ HIST_FIELD_FL_SYM = 16 ,
85
+ HIST_FIELD_FL_SYM_OFFSET = 32 ,
84
86
};
85
87
86
88
struct hist_trigger_attrs {
@@ -397,6 +399,10 @@ static int create_key_field(struct hist_trigger_data *hist_data,
397
399
if (field_str ) {
398
400
if (strcmp (field_str , "hex" ) == 0 )
399
401
flags |= HIST_FIELD_FL_HEX ;
402
+ else if (strcmp (field_str , "sym" ) == 0 )
403
+ flags |= HIST_FIELD_FL_SYM ;
404
+ else if (strcmp (field_str , "sym-offset" ) == 0 )
405
+ flags |= HIST_FIELD_FL_SYM_OFFSET ;
400
406
else {
401
407
ret = - EINVAL ;
402
408
goto out ;
@@ -726,6 +732,7 @@ hist_trigger_entry_print(struct seq_file *m,
726
732
struct tracing_map_elt * elt )
727
733
{
728
734
struct hist_field * key_field ;
735
+ char str [KSYM_SYMBOL_LEN ];
729
736
unsigned int i ;
730
737
u64 uval ;
731
738
@@ -741,6 +748,16 @@ hist_trigger_entry_print(struct seq_file *m,
741
748
uval = * (u64 * )(key + key_field -> offset );
742
749
seq_printf (m , "%s: %llx" ,
743
750
key_field -> field -> name , uval );
751
+ } else if (key_field -> flags & HIST_FIELD_FL_SYM ) {
752
+ uval = * (u64 * )(key + key_field -> offset );
753
+ sprint_symbol_no_offset (str , uval );
754
+ seq_printf (m , "%s: [%llx] %-45s" ,
755
+ key_field -> field -> name , uval , str );
756
+ } else if (key_field -> flags & HIST_FIELD_FL_SYM_OFFSET ) {
757
+ uval = * (u64 * )(key + key_field -> offset );
758
+ sprint_symbol (str , uval );
759
+ seq_printf (m , "%s: [%llx] %-55s" ,
760
+ key_field -> field -> name , uval , str );
744
761
} else if (key_field -> flags & HIST_FIELD_FL_STRING ) {
745
762
seq_printf (m , "%s: %-50s" , key_field -> field -> name ,
746
763
(char * )(key + key_field -> offset ));
@@ -856,6 +873,10 @@ static const char *get_hist_field_flags(struct hist_field *hist_field)
856
873
857
874
if (hist_field -> flags & HIST_FIELD_FL_HEX )
858
875
flags_str = "hex" ;
876
+ else if (hist_field -> flags & HIST_FIELD_FL_SYM )
877
+ flags_str = "sym" ;
878
+ else if (hist_field -> flags & HIST_FIELD_FL_SYM_OFFSET )
879
+ flags_str = "sym-offset" ;
859
880
860
881
return flags_str ;
861
882
}
0 commit comments