This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: output unknown bits in _stp_lookup_or_str


Hi, everyone

If no objection, I will commit this patch.

Regards
Zhaolei

> Hi, everyone
> 
> We are using _stp_lookup_or_str to translate flags into string now.
> When flags include some unknown bits, they are ignored by _stp_lookup_or_str.
> 
> For example:
> If fork_flags is set to CLONE_CHILD_CLEARTID | 0x00001000, It is translated
> into:
>  "CLONE_CHILD_CLEARTID".
> Maybe it is better to show the unknown bits too, For example:
>  "CLONE_CHILD_CLEARTID|0x00001000".
> 
> For the new flags added in latest kernel, I think the best way is to add them
> to flag lists in tapset. But for _stp_lookup_or_str() itself, it is better to
> show them to user.
> 
> This function can be done with following patch.
> It will change output of functions that use _stp_lookup_or_str.
> I am wondering use it or not. Is there any suggestion?
> 
> Signed-off-by: "Zhaolei" zhaolei@cn.fujitsu.com
> 
> diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp
> index 2bd2ced..5fd3440 100644
> --- a/tapset/aux_syscalls.stp
> +++ b/tapset/aux_syscalls.stp
> @@ -1548,7 +1548,7 @@ void _stp_lookup_str(const _stp_val_array * const array, long val, char *ptr, in
> }
> void _stp_lookup_or_str(const _stp_val_array * const array, long val, char *ptr, int len)
> {
> - int i = 0, flag = 0;
> + int i = 0, flag = 0, slen;
> 
>  if (val == 0) {
>   _stp_lookup_str(array, val, ptr, len);
> @@ -1560,13 +1560,16 @@ void _stp_lookup_or_str(const _stp_val_array * const array, long val, char *ptr,
>    if (flag)
>     strlcat(ptr, "|", len);
>    strlcat(ptr, array[i].name, len);
> +   val = val & (~array[i].val);
>    flag = 1;
>   }
>   i++;
>  }
> - if (flag == 0) {
> -  int slen = strlen(ptr);
> -  _stp_snprintf(ptr + slen, len - slen, "0x%lx", val);
> + if (val) {
> +  if (flag)
> +   strlcat(ptr, "|", len);
> +  slen = strlen(ptr);
> +  _stp_snprintf(ptr + slen, len - slen, "0x%lx", val);
>  }
> }
> %}
> 
> Regards
> Zhaolei

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]