@@ -539,7 +539,7 @@ static const char *reg_type_str(struct bpf_verifier_env *env,
539539 char postfix [16 ] = {0 }, prefix [32 ] = {0 };
540540 static const char * const str [] = {
541541 [NOT_INIT ] = "?" ,
542- [SCALAR_VALUE ] = "inv " ,
542+ [SCALAR_VALUE ] = "" ,
543543 [PTR_TO_CTX ] = "ctx" ,
544544 [CONST_PTR_TO_MAP ] = "map_ptr" ,
545545 [PTR_TO_MAP_VALUE ] = "map_value" ,
@@ -693,66 +693,71 @@ static void print_verifier_state(struct bpf_verifier_env *env,
693693 /* reg->off should be 0 for SCALAR_VALUE */
694694 verbose (env , "%lld" , reg -> var_off .value + reg -> off );
695695 } else {
696+ const char * sep = "" ;
697+
696698 if (base_type (t ) == PTR_TO_BTF_ID ||
697699 base_type (t ) == PTR_TO_PERCPU_BTF_ID )
698700 verbose (env , "%s" , kernel_type_name (reg -> btf , reg -> btf_id ));
699- verbose (env , "(id=%d" , reg -> id );
700- if (reg_type_may_be_refcounted_or_null (t ))
701- verbose (env , ",ref_obj_id=%d" , reg -> ref_obj_id );
701+ verbose (env , "(" );
702+
703+ /*
704+ * _a stands for append, was shortened to avoid multiline statements below. this macro is used to
705+ * output a comma separated list of attributes
706+ */
707+ #define verbose_a (fmt , ...) ({ verbose(env, "%s" fmt, sep, __VA_ARGS__); sep = ","; })
708+
709+ if (reg -> id )
710+ verbose_a ("id=%d" , reg -> id );
711+ if (reg_type_may_be_refcounted_or_null (t ) && reg -> ref_obj_id )
712+ verbose_a ("ref_obj_id=%d" , reg -> ref_obj_id );
702713 if (t != SCALAR_VALUE )
703- verbose ( env , ", off=%d" , reg -> off );
714+ verbose_a ( " off=%d" , reg -> off );
704715 if (type_is_pkt_pointer (t ))
705- verbose ( env , ", r=%d" , reg -> range );
716+ verbose_a ( " r=%d" , reg -> range );
706717 else if (base_type (t ) == CONST_PTR_TO_MAP ||
707718 base_type (t ) == PTR_TO_MAP_KEY ||
708719 base_type (t ) == PTR_TO_MAP_VALUE )
709- verbose ( env , ", ks=%d,vs=%d" ,
710- reg -> map_ptr -> key_size ,
711- reg -> map_ptr -> value_size );
720+ verbose_a ( " ks=%d,vs=%d" ,
721+ reg -> map_ptr -> key_size ,
722+ reg -> map_ptr -> value_size );
712723 if (tnum_is_const (reg -> var_off )) {
713724 /* Typically an immediate SCALAR_VALUE, but
714725 * could be a pointer whose offset is too big
715726 * for reg->off
716727 */
717- verbose ( env , ", imm=%llx" , reg -> var_off .value );
728+ verbose_a ( " imm=%llx" , reg -> var_off .value );
718729 } else {
719730 if (reg -> smin_value != reg -> umin_value &&
720731 reg -> smin_value != S64_MIN )
721- verbose (env , ",smin_value=%lld" ,
722- (long long )reg -> smin_value );
732+ verbose_a ("smin=%lld" , (long long )reg -> smin_value );
723733 if (reg -> smax_value != reg -> umax_value &&
724734 reg -> smax_value != S64_MAX )
725- verbose (env , ",smax_value=%lld" ,
726- (long long )reg -> smax_value );
735+ verbose_a ("smax=%lld" , (long long )reg -> smax_value );
727736 if (reg -> umin_value != 0 )
728- verbose (env , ",umin_value=%llu" ,
729- (unsigned long long )reg -> umin_value );
737+ verbose_a ("umin=%llu" , (unsigned long long )reg -> umin_value );
730738 if (reg -> umax_value != U64_MAX )
731- verbose (env , ",umax_value=%llu" ,
732- (unsigned long long )reg -> umax_value );
739+ verbose_a ("umax=%llu" , (unsigned long long )reg -> umax_value );
733740 if (!tnum_is_unknown (reg -> var_off )) {
734741 char tn_buf [48 ];
735742
736743 tnum_strn (tn_buf , sizeof (tn_buf ), reg -> var_off );
737- verbose ( env , ", var_off=%s" , tn_buf );
744+ verbose_a ( " var_off=%s" , tn_buf );
738745 }
739746 if (reg -> s32_min_value != reg -> smin_value &&
740747 reg -> s32_min_value != S32_MIN )
741- verbose (env , ",s32_min_value=%d" ,
742- (int )(reg -> s32_min_value ));
748+ verbose_a ("s32_min=%d" , (int )(reg -> s32_min_value ));
743749 if (reg -> s32_max_value != reg -> smax_value &&
744750 reg -> s32_max_value != S32_MAX )
745- verbose (env , ",s32_max_value=%d" ,
746- (int )(reg -> s32_max_value ));
751+ verbose_a ("s32_max=%d" , (int )(reg -> s32_max_value ));
747752 if (reg -> u32_min_value != reg -> umin_value &&
748753 reg -> u32_min_value != U32_MIN )
749- verbose (env , ",u32_min_value=%d" ,
750- (int )(reg -> u32_min_value ));
754+ verbose_a ("u32_min=%d" , (int )(reg -> u32_min_value ));
751755 if (reg -> u32_max_value != reg -> umax_value &&
752756 reg -> u32_max_value != U32_MAX )
753- verbose (env , ",u32_max_value=%d" ,
754- (int )(reg -> u32_max_value ));
757+ verbose_a ("u32_max=%d" , (int )(reg -> u32_max_value ));
755758 }
759+ #undef verbose_a
760+
756761 verbose (env , ")" );
757762 }
758763 }
0 commit comments