Message ID | 20220627085654.2902-1-kunyu@nfschina.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | tools: Strong conversion of void type pointer could be removed | expand |
On 6/27/22 2:56 AM, Li kunyu wrote: > The void pointer argument does not require a cast assignment because it > is the address passed. > Please include information on you found this problem with output from the tool if any used. Send v2 with that information included in the commit log. > Signed-off-by: Li kunyu <kunyu@nfschina.com> > --- > tools/testing/selftests/x86/fsgsbase.c | 2 +- > tools/testing/selftests/x86/test_vsyscall.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/tools/testing/selftests/x86/fsgsbase.c b/tools/testing/selftests/x86/fsgsbase.c > index 8c780cce941d..5d99261317e1 100644 > --- a/tools/testing/selftests/x86/fsgsbase.c > +++ b/tools/testing/selftests/x86/fsgsbase.c > @@ -63,7 +63,7 @@ static void clearhandler(int sig) > > static void sigsegv(int sig, siginfo_t *si, void *ctx_void) > { > - ucontext_t *ctx = (ucontext_t*)ctx_void; > + ucontext_t *ctx = ctx_void; > > if (!want_segv) { > clearhandler(SIGSEGV); > diff --git a/tools/testing/selftests/x86/test_vsyscall.c b/tools/testing/selftests/x86/test_vsyscall.c > index 5b45e6986aea..2416941a0952 100644 > --- a/tools/testing/selftests/x86/test_vsyscall.c > +++ b/tools/testing/selftests/x86/test_vsyscall.c > @@ -184,7 +184,7 @@ static volatile unsigned long segv_err; > > static void sigsegv(int sig, siginfo_t *info, void *ctx_void) > { > - ucontext_t *ctx = (ucontext_t *)ctx_void; > + ucontext_t *ctx = ctx_void; > > segv_err = ctx->uc_mcontext.gregs[REG_ERR]; > siglongjmp(jmpbuf, 1); > thanks, -- Shuah
Hi Shuah, now I can't paste the test code, so I could write a demo and paste it: -------------source--------------- #include <stdio.h> #include <stdlib.h> struct ucontext { struct ucontext *uc_link; unsigned long uc_flags; sigset_t uc_sigmask; struct ucontext *uc_mcontext; }; typedef struct ucontext ucontext_t; void sigsegv(void *ctx_void) { ucontext_t *ctx = (ucontext_t*)ctx_void; ucontext_t *ctx2 = (int *)ctx_void; ucontext_t *ctx3 = ctx_void; printf("ctx:%p, ctx2:%p, ctx3:%p.\n", ctx, ctx2, ctx3); } int main() { ucontext_t *test = malloc(sizeof(ucontext_t)); sigsegv(test); return 0; } -------------------------------------- The result is CTX: 0x563D96CE5010, CTX2:0x563D96CE5010, CTx3:0x563D96CE5010. Now force ucontext_t and int pointers are the same as the addresses obtained without forced conversion. Now I'll paste the assembly code for them: |0x700 <sigsegv> push %rbp │ │0x701 <sigsegv+1> mov %rsp,%rbp │ │0x704 <sigsegv+4> sub $0x30,%rsp │ │0x708 <sigsegv+8> mov %rdi,-0x28(%rbp) │ │0x70c <sigsegv+12> mov -0x28(%rbp),%rax │ │0x710 <sigsegv+16> mov %rax,-0x8(%rbp) │ │0x714 <sigsegv+20> mov -0x28(%rbp),%rax │ │0x718 <sigsegv+24> mov %rax,-0x10(%rbp) │ │0x71c <sigsegv+28> mov -0x28(%rbp),%rax │ │0x720 <sigsegv+32> mov %rax,-0x18(%rbp) │ │0x724 <sigsegv+36> mov -0x18(%rbp),%rcx │ │0x728 <sigsegv+40> mov -0x10(%rbp),%rdx │ │0x72c <sigsegv+44> mov -0x8(%rbp),%rax │ │0x730 <sigsegv+48> mov %rax,%rsi │ │0x733 <sigsegv+51> lea 0xba(%rip),%rdi # 0x7f4 │ │0x73a <sigsegv+58> mov $0x0,%eax │ │0x73f <sigsegv+63> callq 0x5a0 <printf@plt> │ │0x744 <sigsegv+68> nop │ │0x745 <sigsegv+69> leaveq │ │0x746 <sigsegv+70> retq
On 6/28/22 8:42 PM, Li kunyu wrote: > > Hi Shuah, now I can't paste the test code, so I could write a demo and paste it: > > What is the "test code"? How did you find the problem? Which tool did you use it? thanks, -- Shuah
diff --git a/tools/testing/selftests/x86/fsgsbase.c b/tools/testing/selftests/x86/fsgsbase.c index 8c780cce941d..5d99261317e1 100644 --- a/tools/testing/selftests/x86/fsgsbase.c +++ b/tools/testing/selftests/x86/fsgsbase.c @@ -63,7 +63,7 @@ static void clearhandler(int sig) static void sigsegv(int sig, siginfo_t *si, void *ctx_void) { - ucontext_t *ctx = (ucontext_t*)ctx_void; + ucontext_t *ctx = ctx_void; if (!want_segv) { clearhandler(SIGSEGV); diff --git a/tools/testing/selftests/x86/test_vsyscall.c b/tools/testing/selftests/x86/test_vsyscall.c index 5b45e6986aea..2416941a0952 100644 --- a/tools/testing/selftests/x86/test_vsyscall.c +++ b/tools/testing/selftests/x86/test_vsyscall.c @@ -184,7 +184,7 @@ static volatile unsigned long segv_err; static void sigsegv(int sig, siginfo_t *info, void *ctx_void) { - ucontext_t *ctx = (ucontext_t *)ctx_void; + ucontext_t *ctx = ctx_void; segv_err = ctx->uc_mcontext.gregs[REG_ERR]; siglongjmp(jmpbuf, 1);
The void pointer argument does not require a cast assignment because it is the address passed. Signed-off-by: Li kunyu <kunyu@nfschina.com> --- tools/testing/selftests/x86/fsgsbase.c | 2 +- tools/testing/selftests/x86/test_vsyscall.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)