[1/2] perf arm64: Handle __NR3264_ prefixed syscall number

Message ID 1684837327-18203-2-git-send-email-yangtiezhu@loongson.cn
State New
Headers
Series perf tools: Modify mksyscalltbl |

Commit Message

Tiezhu Yang May 23, 2023, 10:22 a.m. UTC
  After commit 9854e7ad35fe ("perf arm64: Simplify mksyscalltbl"),
in the generated syscall table file syscalls.c, there exist some
__NR3264_ prefixed syscall numbers such as [__NR3264_ftruncate],
it looks like not so good, just do some small filter operations
to handle __NR3264_ prefixed syscall number as a digital number.

Without this patch:

  [__NR3264_ftruncate] = "ftruncate",

With this patch:

  [46] = "ftruncate",

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
---
 tools/perf/arch/arm64/entry/syscalls/mksyscalltbl | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
  

Comments

Alexander Kapshuk May 23, 2023, 12:31 p.m. UTC | #1
On Tue, May 23, 2023 at 1:22 PM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
>
> After commit 9854e7ad35fe ("perf arm64: Simplify mksyscalltbl"),
> in the generated syscall table file syscalls.c, there exist some
> __NR3264_ prefixed syscall numbers such as [__NR3264_ftruncate],
> it looks like not so good, just do some small filter operations
> to handle __NR3264_ prefixed syscall number as a digital number.
>
> Without this patch:
>
>   [__NR3264_ftruncate] = "ftruncate",
>
> With this patch:
>
>   [46] = "ftruncate",
>
> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
> ---
>  tools/perf/arch/arm64/entry/syscalls/mksyscalltbl | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl b/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
> index 22cdf91..59ab7939 100755
> --- a/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
> +++ b/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
> @@ -39,7 +39,8 @@ create_table()
>         echo "};"
>  }
>
> -$gcc -E -dM -x c -I $incpath/include/uapi $input \
> -       |sed -ne 's/^#define __NR_//p' \
> -       |sort -t' ' -k2 -n             \
> +$gcc -E -dM -x c -I $incpath/include/uapi $input               \
> +       |awk '{if ($2~"__NR" && $3 !~"__NR3264_") {print}}'     \
> +       |sed -ne 's/^#define __NR_//p;s/^#define __NR3264_//p'  \
> +       |sort -t' ' -k2 -n                                      \
>         |create_table
> --
> 2.1.0
>

As an aside, the awk + sed + sort parts of the command line may be
reduced to the following awk script, if desired:
awk '$2 ~ "__NR" && $3 !~ "__NR3264_" {
        sub("^#define __NR_", "")
        sub("^#define __NR3264_", "")
        print | "sort -k2 -n"
}'
  
Tiezhu Yang May 24, 2023, 3:19 a.m. UTC | #2
On 05/23/2023 08:31 PM, Alexander Kapshuk wrote:
> On Tue, May 23, 2023 at 1:22 PM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
>>
>> After commit 9854e7ad35fe ("perf arm64: Simplify mksyscalltbl"),
>> in the generated syscall table file syscalls.c, there exist some
>> __NR3264_ prefixed syscall numbers such as [__NR3264_ftruncate],
>> it looks like not so good, just do some small filter operations
>> to handle __NR3264_ prefixed syscall number as a digital number.
>>
>> Without this patch:
>>
>>   [__NR3264_ftruncate] = "ftruncate",
>>
>> With this patch:
>>
>>   [46] = "ftruncate",
>>
>> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
>> ---
>>  tools/perf/arch/arm64/entry/syscalls/mksyscalltbl | 7 ++++---
>>  1 file changed, 4 insertions(+), 3 deletions(-)
>>
>> diff --git a/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl b/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
>> index 22cdf91..59ab7939 100755
>> --- a/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
>> +++ b/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
>> @@ -39,7 +39,8 @@ create_table()
>>         echo "};"
>>  }
>>
>> -$gcc -E -dM -x c -I $incpath/include/uapi $input \
>> -       |sed -ne 's/^#define __NR_//p' \
>> -       |sort -t' ' -k2 -n             \
>> +$gcc -E -dM -x c -I $incpath/include/uapi $input               \
>> +       |awk '{if ($2~"__NR" && $3 !~"__NR3264_") {print}}'     \
>> +       |sed -ne 's/^#define __NR_//p;s/^#define __NR3264_//p'  \
>> +       |sort -t' ' -k2 -n                                      \
>>         |create_table
>> --
>> 2.1.0
>>
>
> As an aside, the awk + sed + sort parts of the command line may be
> reduced to the following awk script, if desired:
> awk '$2 ~ "__NR" && $3 !~ "__NR3264_" {
>         sub("^#define __NR_", "")
>         sub("^#define __NR3264_", "")
>         print | "sort -k2 -n"
> }'
>

Hi Alexander,

Thanks, it seems more simple and works well as expected.
Let us wait for more review comments before respin.

If no any objections, I will send v2 with the following
changes based on the current patch in the next week.

-$gcc -E -dM -x c -I $incpath/include/uapi $input               \
-       |awk '{if ($2~"__NR" && $3 !~"__NR3264_") {print}}'     \
-       |sed -ne 's/^#define __NR_//p;s/^#define __NR3264_//p'  \
-       |sort -t' ' -k2 -n                                      \
+$gcc -E -dM -x c -I $incpath/include/uapi $input \
+       |awk '$2 ~ "__NR" && $3 !~ "__NR3264_" {
+               sub("^#define __NR_", "")
+               sub("^#define __NR3264_", "")
+               print | "sort -k2 -n"}' \
         |create_table

Thanks,
Tiezhu
  
Alexander Kapshuk May 24, 2023, 6:43 a.m. UTC | #3
On Wed, May 24, 2023 at 6:19 AM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
>
>
>
> On 05/23/2023 08:31 PM, Alexander Kapshuk wrote:
> > On Tue, May 23, 2023 at 1:22 PM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
> >>
> >> After commit 9854e7ad35fe ("perf arm64: Simplify mksyscalltbl"),
> >> in the generated syscall table file syscalls.c, there exist some
> >> __NR3264_ prefixed syscall numbers such as [__NR3264_ftruncate],
> >> it looks like not so good, just do some small filter operations
> >> to handle __NR3264_ prefixed syscall number as a digital number.
> >>
> >> Without this patch:
> >>
> >>   [__NR3264_ftruncate] = "ftruncate",
> >>
> >> With this patch:
> >>
> >>   [46] = "ftruncate",
> >>
> >> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
> >> ---
> >>  tools/perf/arch/arm64/entry/syscalls/mksyscalltbl | 7 ++++---
> >>  1 file changed, 4 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl b/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
> >> index 22cdf91..59ab7939 100755
> >> --- a/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
> >> +++ b/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
> >> @@ -39,7 +39,8 @@ create_table()
> >>         echo "};"
> >>  }
> >>
> >> -$gcc -E -dM -x c -I $incpath/include/uapi $input \
> >> -       |sed -ne 's/^#define __NR_//p' \
> >> -       |sort -t' ' -k2 -n             \
> >> +$gcc -E -dM -x c -I $incpath/include/uapi $input               \
> >> +       |awk '{if ($2~"__NR" && $3 !~"__NR3264_") {print}}'     \
> >> +       |sed -ne 's/^#define __NR_//p;s/^#define __NR3264_//p'  \
> >> +       |sort -t' ' -k2 -n                                      \
> >>         |create_table
> >> --
> >> 2.1.0
> >>
> >
> > As an aside, the awk + sed + sort parts of the command line may be
> > reduced to the following awk script, if desired:
> > awk '$2 ~ "__NR" && $3 !~ "__NR3264_" {
> >         sub("^#define __NR_", "")
> >         sub("^#define __NR3264_", "")
> >         print | "sort -k2 -n"
> > }'
> >
>
> Hi Alexander,
>
> Thanks, it seems more simple and works well as expected.
> Let us wait for more review comments before respin.
>
> If no any objections, I will send v2 with the following
> changes based on the current patch in the next week.
>
> -$gcc -E -dM -x c -I $incpath/include/uapi $input               \
> -       |awk '{if ($2~"__NR" && $3 !~"__NR3264_") {print}}'     \
> -       |sed -ne 's/^#define __NR_//p;s/^#define __NR3264_//p'  \
> -       |sort -t' ' -k2 -n                                      \
> +$gcc -E -dM -x c -I $incpath/include/uapi $input \
> +       |awk '$2 ~ "__NR" && $3 !~ "__NR3264_" {
> +               sub("^#define __NR_", "")
> +               sub("^#define __NR3264_", "")
> +               print | "sort -k2 -n"}' \
>          |create_table
>
> Thanks,
> Tiezhu
>

Hi Tiezhu,

Thanks for your prompt feedback.
It was merely a suggestion entirely subject to your discretion.

If no other patterns are anticipated to be processed by the sub
routines, they may be combined into a single sub routine like so:
awk '$2 ~ "__NR" && $3 !~ "__NR3264_" {
        sub("^#define __NR(3264)?_", "")
        print | "sort -k2 -n"
}'
  
Tiezhu Yang May 24, 2023, 7:18 a.m. UTC | #4
On 05/24/2023 02:43 PM, Alexander Kapshuk wrote:
> On Wed, May 24, 2023 at 6:19 AM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
>>
>>
>>
>> On 05/23/2023 08:31 PM, Alexander Kapshuk wrote:
>>> On Tue, May 23, 2023 at 1:22 PM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
>>>>
>>>> After commit 9854e7ad35fe ("perf arm64: Simplify mksyscalltbl"),
>>>> in the generated syscall table file syscalls.c, there exist some
>>>> __NR3264_ prefixed syscall numbers such as [__NR3264_ftruncate],
>>>> it looks like not so good, just do some small filter operations
>>>> to handle __NR3264_ prefixed syscall number as a digital number.
>>>>
>>>> Without this patch:
>>>>
>>>>   [__NR3264_ftruncate] = "ftruncate",
>>>>
>>>> With this patch:
>>>>
>>>>   [46] = "ftruncate",
>>>>
>>>> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
>>>> ---
>>>>  tools/perf/arch/arm64/entry/syscalls/mksyscalltbl | 7 ++++---
>>>>  1 file changed, 4 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl b/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
>>>> index 22cdf91..59ab7939 100755
>>>> --- a/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
>>>> +++ b/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
>>>> @@ -39,7 +39,8 @@ create_table()
>>>>         echo "};"
>>>>  }
>>>>
>>>> -$gcc -E -dM -x c -I $incpath/include/uapi $input \
>>>> -       |sed -ne 's/^#define __NR_//p' \
>>>> -       |sort -t' ' -k2 -n             \
>>>> +$gcc -E -dM -x c -I $incpath/include/uapi $input               \
>>>> +       |awk '{if ($2~"__NR" && $3 !~"__NR3264_") {print}}'     \
>>>> +       |sed -ne 's/^#define __NR_//p;s/^#define __NR3264_//p'  \
>>>> +       |sort -t' ' -k2 -n                                      \
>>>>         |create_table
>>>> --
>>>> 2.1.0
>>>>
>>>
>>> As an aside, the awk + sed + sort parts of the command line may be
>>> reduced to the following awk script, if desired:
>>> awk '$2 ~ "__NR" && $3 !~ "__NR3264_" {
>>>         sub("^#define __NR_", "")
>>>         sub("^#define __NR3264_", "")
>>>         print | "sort -k2 -n"
>>> }'
>>>
>>
>> Hi Alexander,
>>
>> Thanks, it seems more simple and works well as expected.
>> Let us wait for more review comments before respin.
>>
>> If no any objections, I will send v2 with the following
>> changes based on the current patch in the next week.
>>
>> -$gcc -E -dM -x c -I $incpath/include/uapi $input               \
>> -       |awk '{if ($2~"__NR" && $3 !~"__NR3264_") {print}}'     \
>> -       |sed -ne 's/^#define __NR_//p;s/^#define __NR3264_//p'  \
>> -       |sort -t' ' -k2 -n                                      \
>> +$gcc -E -dM -x c -I $incpath/include/uapi $input \
>> +       |awk '$2 ~ "__NR" && $3 !~ "__NR3264_" {
>> +               sub("^#define __NR_", "")
>> +               sub("^#define __NR3264_", "")
>> +               print | "sort -k2 -n"}' \
>>          |create_table
>>
>> Thanks,
>> Tiezhu
>>
>
> Hi Tiezhu,
>
> Thanks for your prompt feedback.
> It was merely a suggestion entirely subject to your discretion.
>
> If no other patterns are anticipated to be processed by the sub

Yes, there are only 2 patterns such as "__NR_" and "__NR3264_",
I confirmed that in include/uapi/asm-generic/unistd.h.

> routines, they may be combined into a single sub routine like so:
> awk '$2 ~ "__NR" && $3 !~ "__NR3264_" {
>         sub("^#define __NR(3264)?_", "")
>         print | "sort -k2 -n"
> }'

Thanks again, I tested the above code, it also works well and
looks better, I will modify the code as you suggested in v2.

Thanks,
Tiezhu
  
Leo Yan May 27, 2023, 1:43 a.m. UTC | #5
On Wed, May 24, 2023 at 03:18:28PM +0800, Tiezhu Yang wrote:
> On 05/24/2023 02:43 PM, Alexander Kapshuk wrote:

[...]

> Yes, there are only 2 patterns such as "__NR_" and "__NR3264_",
> I confirmed that in include/uapi/asm-generic/unistd.h.
>
> > routines, they may be combined into a single sub routine like so:
> > awk '$2 ~ "__NR" && $3 !~ "__NR3264_" {
> >         sub("^#define __NR(3264)?_", "")
> >         print | "sort -k2 -n"
> > }'

Thanks for improving this, Tiezhu and Alexander.

The format between '[46]' and '[__NR3264_ftruncate]' has changed back
and forth for several times due to various reasons ;)

Above change is a good improvement for me and I tested at my side
with below commands:

  $ aarch64-linux-gnu-gcc -E -dM -x c -I tools/include/uapi/ \
    tools/include/uapi/asm-generic/unistd.h \
    | awk '$2 ~ "__NR" && $3 !~ "__NR3264_" { sub("^#define
__NR(3264)?_", ""); print | "sort -k2 -n"}'

The result looks good to me.  You are welcome to add my review tag:

Reviewed-by: Leo Yan <leo.yan@linaro.org>
  

Patch

diff --git a/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl b/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
index 22cdf91..59ab7939 100755
--- a/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
+++ b/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl
@@ -39,7 +39,8 @@  create_table()
 	echo "};"
 }
 
-$gcc -E -dM -x c -I $incpath/include/uapi $input \
-	|sed -ne 's/^#define __NR_//p' \
-	|sort -t' ' -k2 -n	       \
+$gcc -E -dM -x c -I $incpath/include/uapi $input		\
+	|awk '{if ($2~"__NR" && $3 !~"__NR3264_") {print}}'	\
+	|sed -ne 's/^#define __NR_//p;s/^#define __NR3264_//p'	\
+	|sort -t' ' -k2 -n					\
 	|create_table