diff mbox series

[Stable-8.2.1,61/71] linux-user/riscv: Adjust vdso signal frame cfa offsets

Message ID 20240128175035.812352-7-mjt@tls.msk.ru
State New
Headers show
Series None | expand

Commit Message

Michael Tokarev Jan. 28, 2024, 5:50 p.m. UTC
From: Richard Henderson <richard.henderson@linaro.org>

A typo in sizeof_reg put the registers at the wrong offset.

Simplify the expressions to use positive addresses from the
start of uc_mcontext instead of negative addresses from the
end of uc_mcontext.

Reported-by: Vineet Gupta <vineetg@rivosinc.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
(cherry picked from commit 1b21fe27e75a59bfe2513f5abcc6a18cfc35cfc8)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>

Comments

Andreas Schwab March 3, 2024, 10:33 a.m. UTC | #1
On Jan 28 2024, Michael Tokarev wrote:

> From: Richard Henderson <richard.henderson@linaro.org>
>
> A typo in sizeof_reg put the registers at the wrong offset.
>
> Simplify the expressions to use positive addresses from the
> start of uc_mcontext instead of negative addresses from the
> end of uc_mcontext.

This breaks the testsuite of libunwind.  The test Gtest-resume-sig and
all dependent tests hang.  Reverting this commit fixes them.
Andreas Schwab March 3, 2024, 11:06 a.m. UTC | #2
$ qemu-riscv64 -strace -E LD_LIBRARY_PATH=../src/.libs .libs/Gtest-resume-sig
30962 brk(NULL) = 0x000055555555a000
30962 faccessat(AT_FDCWD,"/etc/ld.so.preload",R_OK,AT_SYMLINK_NOFOLLOW|0x55558c98) = -1 errno=2 (No such file or directory)
30962 openat(AT_FDCWD,"../src/.libs/libunwind-riscv.so.8",O_RDONLY|O_CLOEXEC) = 3
30962 read(3,0xab2aa3b0,832) = 832
30962 fstat(3,0x00002aaaab2aa230) = 0
30962 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00002aaaab2d1000
30962 getcwd(0x2aaaab2d14c0,128) = 50
30962 mmap(NULL,156800,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00002aaaab2d3000
30962 mmap(0x00002aaaab2e0000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0xd000) = 0x00002aaaab2e0000
30962 mmap(0x00002aaaab2e2000,95360,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x00002aaaab2e2000
30962 close(3) = 0
30962 openat(AT_FDCWD,"../src/.libs/libunwind.so.8",O_RDONLY|O_CLOEXEC) = 3
30962 read(3,0xab2aa390,832) = 832
30962 fstat(3,0x00002aaaab2aa210) = 0
30962 getcwd(0x2aaaab2d1a40,128) = 50
30962 mmap(NULL,156848,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00002aaaab2fa000
30962 mmap(0x00002aaaab307000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0xd000) = 0x00002aaaab307000
30962 mmap(0x00002aaaab309000,95408,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x00002aaaab309000
30962 close(3) = 0
30962 openat(AT_FDCWD,"../src/.libs/libc.so.6",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
30962 openat(AT_FDCWD,"/etc/ld.so.cache",O_RDONLY|O_CLOEXEC) = 3
30962 fstat(3,0x00002aaaab2aa200) = 0
30962 mmap(NULL,11027,PROT_READ,MAP_PRIVATE,3,0) = 0x00002aaaab321000
30962 close(3) = 0
30962 openat(AT_FDCWD,"/lib64/lp64d/libc.so.6",O_RDONLY|O_CLOEXEC) = 3
30962 read(3,0xab2aa370,832) = 832
30962 fstat(3,0x00002aaaab2aa1f0) = 0
30962 mmap(NULL,1473984,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00002aaaab324000
30962 mmap(0x00002aaaab47b000,20480,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0x157000) = 0x00002aaaab47b000
30962 mmap(0x00002aaaab480000,48576,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x00002aaaab480000
30962 close(3) = 0
30962 openat(AT_FDCWD,"../src/.libs/liblzma.so.5",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
30962 openat(AT_FDCWD,"/home/abuild/rpmbuild/BUILD/libunwind-1.8.1/src/.libs/liblzma.so.5",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
30962 newfstatat(AT_FDCWD,"/home/abuild/rpmbuild/BUILD/libunwind-1.8.1/src/.libs/",0x00002aaaab2aa1b0,0) = 0
30962 openat(AT_FDCWD,"/lib64/lp64d/liblzma.so.5",O_RDONLY|O_CLOEXEC) = 3
30962 read(3,0xab2aa330,832) = 832
30962 fstat(3,0x00002aaaab2aa1b0) = 0
30962 mmap(NULL,200720,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00002aaaab48c000
30962 mmap(0x00002aaaab4bc000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0x30000) = 0x00002aaaab4bc000
30962 close(3) = 0
30962 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00002aaaab4be000
30962 set_tid_address(0x2aaaab4be4f0) = 30962
30962 set_robust_list(0x2aaaab4be500,24) = -1 errno=38 (Function not implemented)
30962 mprotect(0x00002aaaab47b000,12288,PROT_READ) = 0
30962 mprotect(0x00002aaaab4bc000,4096,PROT_READ) = 0
30962 mprotect(0x00002aaaab307000,4096,PROT_READ) = 0
30962 mprotect(0x00002aaaab2e0000,4096,PROT_READ) = 0
30962 mprotect(0x0000555555558000,4096,PROT_READ) = 0
30962 mprotect(0x00002aaaab2cc000,8192,PROT_READ) = 0
30962 prlimit64(0,RLIMIT_STACK,NULL,0x00002aaaab2aae38) = 0 ({rlim_cur=8388608,rlim_max=-1})
30962 munmap(0x00002aaaab321000,11027) = 0
30962 rt_sigaction(SIGUSR1,0x00002aaaab2aaed8,NULL) = 0
30962 rt_sigaction(SIGUSR2,0x00002aaaab2aaed8,NULL) = 0
30962 getpid() = 30962
30962 kill(30962,SIGUSR1) = 0
--- SIGUSR1 {si_signo=SIGUSR1, si_code=SI_USER, si_pid=30962, si_uid=399} ---
30962 rt_sigprocmask(SIG_BLOCK,0x00002aaaab2a2870,NULL,8) = 0
30962 getpid() = 30962
30962 kill(30962,SIGUSR2) = 0
30962 rt_sigaction(SIGUSR1,0x00002aaaab2a25b8,0x00002aaaab2a2648) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2788,8) = 0
30962 mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00002aaaab4c0000
30962 mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00002aaaab4c1000
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2788,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2268,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2168,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2168,NULL,8) = 0
30962 pipe2(0x2aaaab2e1000,526336) = 0
30962 read(3,0xab2a1d87,1) = -1 errno=11 (Resource temporarily unavailable)
30962 write(4,0x55557000,1) = 1
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a1dc8,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a1dc8,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2068,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2068,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2068,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2068,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a21a8,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a21a8,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2268,NULL,8) = 0
30962 read(3,0xab2a1cc7,1) = 1
30962 write(4,0xab2aa000,1) = 1
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2268,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2168,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2168,NULL,8) = 0
30962 read(3,0xab2a1d87,1) = 1
30962 write(4,0xab2d0000,1) = 1
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a1dc8,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a1dc8,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a21a8,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a21a8,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2268,NULL,8) = 0
30962 read(3,0xab2a2747,1) = 1
30962 write(4,0xab2ab000,1) = 1
Michael Tokarev March 3, 2024, 12:58 p.m. UTC | #3
03.03.2024 13:33, Andreas Schwab :
> On Jan 28 2024, Michael Tokarev wrote:
> 
>> From: Richard Henderson <richard.henderson@linaro.org>
>>
>> A typo in sizeof_reg put the registers at the wrong offset.
>>
>> Simplify the expressions to use positive addresses from the
>> start of uc_mcontext instead of negative addresses from the
>> end of uc_mcontext.
> 
> This breaks the testsuite of libunwind.  The test Gtest-resume-sig and
> all dependent tests hang.  Reverting this commit fixes them.

Thank you for the report Andreas.

Since this change is already in 8.2.1 which has been released more
than a month ago, and 8.2.2 is frozen already (for the release
tomorrow), I think it should not be reverted today.  It's a bit
difficult one.

What do you guys think about 8.2.2 and a revert?

Thanks,

/mjt
Andreas Schwab March 3, 2024, 3:11 p.m. UTC | #4
Also tested with master, same result.
Alistair Francis March 6, 2024, 4:27 a.m. UTC | #5
On Sun, Mar 3, 2024 at 8:34 PM Andreas Schwab <schwab@linux-m68k.org> wrote:
>
> On Jan 28 2024, Michael Tokarev wrote:
>
> > From: Richard Henderson <richard.henderson@linaro.org>
> >
> > A typo in sizeof_reg put the registers at the wrong offset.
> >
> > Simplify the expressions to use positive addresses from the
> > start of uc_mcontext instead of negative addresses from the
> > end of uc_mcontext.
>
> This breaks the testsuite of libunwind.  The test Gtest-resume-sig and
> all dependent tests hang.  Reverting this commit fixes them.

Do you have any more details? It seems strange that this commit is
breaking something as it looks to be correct

Alistair

>
> --
> Andreas Schwab, schwab@linux-m68k.org
> GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
> "And now for something completely different."
>
Andreas Schwab March 6, 2024, 11:31 a.m. UTC | #6
$ qemu-riscv64 -strace -E LD_LIBRARY_PATH=../src/.libs .libs/Gtest-resume-sig
30962 brk(NULL) = 0x000055555555a000
30962 faccessat(AT_FDCWD,"/etc/ld.so.preload",R_OK,AT_SYMLINK_NOFOLLOW|0x55558c98) = -1 errno=2 (No such file or directory)
30962 openat(AT_FDCWD,"../src/.libs/libunwind-riscv.so.8",O_RDONLY|O_CLOEXEC) = 3
30962 read(3,0xab2aa3b0,832) = 832
30962 fstat(3,0x00002aaaab2aa230) = 0
30962 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00002aaaab2d1000
30962 getcwd(0x2aaaab2d14c0,128) = 50
30962 mmap(NULL,156800,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00002aaaab2d3000
30962 mmap(0x00002aaaab2e0000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0xd000) = 0x00002aaaab2e0000
30962 mmap(0x00002aaaab2e2000,95360,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x00002aaaab2e2000
30962 close(3) = 0
30962 openat(AT_FDCWD,"../src/.libs/libunwind.so.8",O_RDONLY|O_CLOEXEC) = 3
30962 read(3,0xab2aa390,832) = 832
30962 fstat(3,0x00002aaaab2aa210) = 0
30962 getcwd(0x2aaaab2d1a40,128) = 50
30962 mmap(NULL,156848,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00002aaaab2fa000
30962 mmap(0x00002aaaab307000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0xd000) = 0x00002aaaab307000
30962 mmap(0x00002aaaab309000,95408,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x00002aaaab309000
30962 close(3) = 0
30962 openat(AT_FDCWD,"../src/.libs/libc.so.6",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
30962 openat(AT_FDCWD,"/etc/ld.so.cache",O_RDONLY|O_CLOEXEC) = 3
30962 fstat(3,0x00002aaaab2aa200) = 0
30962 mmap(NULL,11027,PROT_READ,MAP_PRIVATE,3,0) = 0x00002aaaab321000
30962 close(3) = 0
30962 openat(AT_FDCWD,"/lib64/lp64d/libc.so.6",O_RDONLY|O_CLOEXEC) = 3
30962 read(3,0xab2aa370,832) = 832
30962 fstat(3,0x00002aaaab2aa1f0) = 0
30962 mmap(NULL,1473984,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00002aaaab324000
30962 mmap(0x00002aaaab47b000,20480,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0x157000) = 0x00002aaaab47b000
30962 mmap(0x00002aaaab480000,48576,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x00002aaaab480000
30962 close(3) = 0
30962 openat(AT_FDCWD,"../src/.libs/liblzma.so.5",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
30962 openat(AT_FDCWD,"/home/abuild/rpmbuild/BUILD/libunwind-1.8.1/src/.libs/liblzma.so.5",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
30962 newfstatat(AT_FDCWD,"/home/abuild/rpmbuild/BUILD/libunwind-1.8.1/src/.libs/",0x00002aaaab2aa1b0,0) = 0
30962 openat(AT_FDCWD,"/lib64/lp64d/liblzma.so.5",O_RDONLY|O_CLOEXEC) = 3
30962 read(3,0xab2aa330,832) = 832
30962 fstat(3,0x00002aaaab2aa1b0) = 0
30962 mmap(NULL,200720,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00002aaaab48c000
30962 mmap(0x00002aaaab4bc000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0x30000) = 0x00002aaaab4bc000
30962 close(3) = 0
30962 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00002aaaab4be000
30962 set_tid_address(0x2aaaab4be4f0) = 30962
30962 set_robust_list(0x2aaaab4be500,24) = -1 errno=38 (Function not implemented)
30962 mprotect(0x00002aaaab47b000,12288,PROT_READ) = 0
30962 mprotect(0x00002aaaab4bc000,4096,PROT_READ) = 0
30962 mprotect(0x00002aaaab307000,4096,PROT_READ) = 0
30962 mprotect(0x00002aaaab2e0000,4096,PROT_READ) = 0
30962 mprotect(0x0000555555558000,4096,PROT_READ) = 0
30962 mprotect(0x00002aaaab2cc000,8192,PROT_READ) = 0
30962 prlimit64(0,RLIMIT_STACK,NULL,0x00002aaaab2aae38) = 0 ({rlim_cur=8388608,rlim_max=-1})
30962 munmap(0x00002aaaab321000,11027) = 0
30962 rt_sigaction(SIGUSR1,0x00002aaaab2aaed8,NULL) = 0
30962 rt_sigaction(SIGUSR2,0x00002aaaab2aaed8,NULL) = 0
30962 getpid() = 30962
30962 kill(30962,SIGUSR1) = 0
--- SIGUSR1 {si_signo=SIGUSR1, si_code=SI_USER, si_pid=30962, si_uid=399} ---
30962 rt_sigprocmask(SIG_BLOCK,0x00002aaaab2a2870,NULL,8) = 0
30962 getpid() = 30962
30962 kill(30962,SIGUSR2) = 0
30962 rt_sigaction(SIGUSR1,0x00002aaaab2a25b8,0x00002aaaab2a2648) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2788,8) = 0
30962 mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00002aaaab4c0000
30962 mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00002aaaab4c1000
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2788,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2268,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2168,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2168,NULL,8) = 0
30962 pipe2(0x2aaaab2e1000,526336) = 0
30962 read(3,0xab2a1d87,1) = -1 errno=11 (Resource temporarily unavailable)
30962 write(4,0x55557000,1) = 1
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a1dc8,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a1dc8,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2068,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2068,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2068,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2068,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a21a8,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a21a8,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2268,NULL,8) = 0
30962 read(3,0xab2a1cc7,1) = 1
30962 write(4,0xab2aa000,1) = 1
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2268,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a2168,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2168,NULL,8) = 0
30962 read(3,0xab2a1d87,1) = 1
30962 write(4,0xab2d0000,1) = 1
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a1dc8,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a1dc8,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2e1050,0x00002aaaab2a21a8,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a21a8,NULL,8) = 0
30962 rt_sigprocmask(SIG_SETMASK,0x00002aaaab2a2268,NULL,8) = 0
30962 read(3,0xab2a2747,1) = 1
30962 write(4,0xab2ab000,1) = 1
Andreas Schwab March 28, 2024, 1:41 p.m. UTC | #7
On Mär 06 2024, Alistair Francis wrote:

> On Sun, Mar 3, 2024 at 8:34 PM Andreas Schwab <schwab@linux-m68k.org> wrote:
>>
>> On Jan 28 2024, Michael Tokarev wrote:
>>
>> > From: Richard Henderson <richard.henderson@linaro.org>
>> >
>> > A typo in sizeof_reg put the registers at the wrong offset.
>> >
>> > Simplify the expressions to use positive addresses from the
>> > start of uc_mcontext instead of negative addresses from the
>> > end of uc_mcontext.
>>
>> This breaks the testsuite of libunwind.  The test Gtest-resume-sig and
>> all dependent tests hang.  Reverting this commit fixes them.
>
> Do you have any more details? It seems strange that this commit is
> breaking something as it looks to be correct

It also breaks the Ltest-init-local-signal test, and it is still broken
in 9.0.0-rc1, and reverting this commit still fixes it.

$ LD_LIBRARY_PATH=../src/.libs /tmp/qemu-riscv64.bad -strace .libs/Ltest-init-local-signal
24864 brk(NULL) = 0x0000555555559000
24864 faccessat(AT_FDCWD,"/etc/ld.so.preload",R_OK,AT_EACCESS|0x55557c08) = -1 errno=2 (No such file or directory)
24864 openat(AT_FDCWD,"../src/.libs/libunwind-riscv.so.8",O_RDONLY|O_CLOEXEC) = 3
24864 read(3,0x601ff3e0,832) = 832
24864 fstat(3,0x00007fab601ff260) = 0
24864 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00007fab68c0a000
24864 getcwd(0x7fab68c0a4c0,128) = 50
24864 mmap(NULL,156800,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00007fab603d9000
24864 mmap(0x00007fab603e6000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0xd000) = 0x00007fab603e6000
24864 mmap(0x00007fab603e8000,95360,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x00007fab603e8000
24864 close(3) = 0
24864 openat(AT_FDCWD,"../src/.libs/libunwind.so.8",O_RDONLY|O_CLOEXEC) = 3
24864 read(3,0x601ff3c0,832) = 832
24864 fstat(3,0x00007fab601ff240) = 0
24864 getcwd(0x7fab68c0aa40,128) = 50
24864 mmap(NULL,156848,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00007fab603b2000
24864 mmap(0x00007fab603bf000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0xd000) = 0x00007fab603bf000
24864 mmap(0x00007fab603c1000,95408,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x00007fab603c1000
24864 close(3) = 0
24864 openat(AT_FDCWD,"../src/.libs/libc.so.6",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
24864 openat(AT_FDCWD,"/etc/ld.so.cache",O_RDONLY|O_CLOEXEC) = 3
24864 fstat(3,0x00007fab601ff230) = 0
24864 mmap(NULL,7935,PROT_READ,MAP_PRIVATE,3,0) = 0x00007fab68c08000
24864 close(3) = 0
24864 openat(AT_FDCWD,"/lib64/lp64d/libc.so.6",O_RDONLY|O_CLOEXEC) = 3
24864 read(3,0x601ff3a0,832) = 832
24864 fstat(3,0x00007fab601ff220) = 0
24864 mmap(NULL,1473984,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00007fab6024a000
24864 mmap(0x00007fab603a1000,20480,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0x157000) = 0x00007fab603a1000
24864 mmap(0x00007fab603a6000,48576,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x00007fab603a6000
24864 close(3) = 0
24864 openat(AT_FDCWD,"../src/.libs/liblzma.so.5",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
24864 openat(AT_FDCWD,"/home/abuild/rpmbuild/BUILD/libunwind-1.8.1/src/.libs/liblzma.so.5",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
24864 newfstatat(AT_FDCWD,"/home/abuild/rpmbuild/BUILD/libunwind-1.8.1/src/.libs/",0x00007fab601ff1e0,0) = 0
24864 openat(AT_FDCWD,"/lib64/lp64d/liblzma.so.5",O_RDONLY|O_CLOEXEC) = 3
24864 read(3,0x601ff360,832) = 832
24864 fstat(3,0x00007fab601ff1e0) = 0
24864 mmap(NULL,200720,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00007fab60218000
24864 mmap(0x00007fab60248000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0x30000) = 0x00007fab60248000
24864 close(3) = 0
24864 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00007fab68c06000
24864 set_tid_address(0x7fab68c064f0) = 24864
24864 set_robust_list(0x7fab68c06500,24) = -1 errno=38 (Function not implemented)
24864 mprotect(0x00007fab603a1000,12288,PROT_READ) = 0
24864 mprotect(0x00007fab60248000,4096,PROT_READ) = 0
24864 mprotect(0x00007fab603bf000,4096,PROT_READ) = 0
24864 mprotect(0x00007fab603e6000,4096,PROT_READ) = 0
24864 mprotect(0x0000555555557000,4096,PROT_READ) = 0
24864 mprotect(0x00007fab68c2d000,8192,PROT_READ) = 0
24864 prlimit64(0,RLIMIT_STACK,NULL,0x00007fab601ffe68) = 0 ({rlim_cur=8388608,rlim_max=-1})
24864 munmap(0x00007fab68c08000,7935) = 0
24864 rt_sigaction(SIGSEGV,0x00007fab601fff18,NULL) = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=1, si_pid=0, si_uid=0} ---
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7858,8) = 0
24864 mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00007fab68c09000
24864 mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00007fab68c08000
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7858,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7338,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7238,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7238,NULL,8) = 0
24864 pipe2(0x7fab603e7000,526336) = 0
24864 read(3,0x601f6e57,1) = -1 errno=11 (Resource temporarily unavailable)
24864 write(4,0x55556000,1) = 1
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f6e98,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f6e98,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7278,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7278,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7338,NULL,8) = 0
24864 read(3,0x601f6d97,1) = 1
24864 write(4,0x60200000,1) = 1
24864 read(3,0x601f7827,1) = 1
24864 write(4,0x60275000,1) = 1
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7338,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7238,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7238,NULL,8) = 0
24864 read(3,0x601f6e57,1) = 1
24864 write(4,0x60372000,1) = 1
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f6e98,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f6e98,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7278,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7278,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7338,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7338,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7238,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7238,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f6e98,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f6e98,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7278,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7278,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7338,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7338,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7238,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7238,NULL,8) = 0
24864 read(3,0x601f6e57,1) = 1
24864 write(4,0x55556000,1) = 1
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f6e98,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f6e98,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7278,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7278,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7338,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7338,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7238,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7238,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f6e98,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f6e98,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7278,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7278,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7338,NULL,8) = 0
24864 read(3,0x601f6d97,1) = 1
24864 write(4,0x601ff000,1) = 1
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7338,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7238,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7238,NULL,8) = 0
24864 read(3,0x601f6e57,1) = 1
24864 write(4,0x68c0c000,1) = 1
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f6e98,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f6e98,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7278,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7278,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7338,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7338,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7338,NULL,8) = 0
24864 read(3,0x601f7827,1) = 1
24864 write(4,0x60200000,1) = 1
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7338,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7238,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7238,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7338,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7338,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab603e7050,0x00007fab601f7238,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7238,NULL,8) = 0
24864 rt_sigprocmask(SIG_SETMASK,0x00007fab601f7338,NULL,8) = 0
24864 fstat(1,0x00007fab601f7658) = 0
24864 getrandom(0x7fab603aa5c8,8,1) = 8
24864 brk(NULL) = 0x0000555555559000
24864 brk(0x000055555557a000) = 0x000055555557a000
24864 write(1,0x555592a0,62)unw_getcontext steps was 4, ucontext steps was 3, should be 2
 = 62
24864 exit_group(-1)
$ LD_LIBRARY_PATH=../src/.libs /tmp/qemu-riscv64.good -strace .libs/Ltest-init-local-signal
24875 brk(NULL) = 0x0000555555559000
24875 faccessat(AT_FDCWD,"/etc/ld.so.preload",R_OK,AT_EACCESS|0x55557c08) = -1 errno=2 (No such file or directory)
24875 openat(AT_FDCWD,"../src/.libs/libunwind-riscv.so.8",O_RDONLY|O_CLOEXEC) = 3
24875 read(3,0x3cfff3d0,832) = 832
24875 fstat(3,0x00007f213cfff250) = 0
24875 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00007f2145a81000
24875 getcwd(0x7f2145a814c0,128) = 50
24875 mmap(NULL,156800,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00007f2145a5a000
24875 mmap(0x00007f2145a67000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0xd000) = 0x00007f2145a67000
24875 mmap(0x00007f2145a69000,95360,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x00007f2145a69000
24875 close(3) = 0
24875 openat(AT_FDCWD,"../src/.libs/libunwind.so.8",O_RDONLY|O_CLOEXEC) = 3
24875 read(3,0x3cfff3b0,832) = 832
24875 fstat(3,0x00007f213cfff230) = 0
24875 getcwd(0x7f2145a81a40,128) = 50
24875 mmap(NULL,156848,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00007f2145a33000
24875 mmap(0x00007f2145a40000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0xd000) = 0x00007f2145a40000
24875 mmap(0x00007f2145a42000,95408,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x00007f2145a42000
24875 close(3) = 0
24875 openat(AT_FDCWD,"../src/.libs/libc.so.6",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
24875 openat(AT_FDCWD,"/etc/ld.so.cache",O_RDONLY|O_CLOEXEC) = 3
24875 fstat(3,0x00007f213cfff220) = 0
24875 mmap(NULL,7935,PROT_READ,MAP_PRIVATE,3,0) = 0x00007f2145a31000
24875 close(3) = 0
24875 openat(AT_FDCWD,"/lib64/lp64d/libc.so.6",O_RDONLY|O_CLOEXEC) = 3
24875 read(3,0x3cfff390,832) = 832
24875 fstat(3,0x00007f213cfff210) = 0
24875 mmap(NULL,1473984,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00007f213d098000
24875 mmap(0x00007f213d1ef000,20480,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0x157000) = 0x00007f213d1ef000
24875 mmap(0x00007f213d1f4000,48576,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x00007f213d1f4000
24875 close(3) = 0
24875 openat(AT_FDCWD,"../src/.libs/liblzma.so.5",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
24875 openat(AT_FDCWD,"/home/abuild/rpmbuild/BUILD/libunwind-1.8.1/src/.libs/liblzma.so.5",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
24875 newfstatat(AT_FDCWD,"/home/abuild/rpmbuild/BUILD/libunwind-1.8.1/src/.libs/",0x00007f213cfff1d0,0) = 0
24875 openat(AT_FDCWD,"/lib64/lp64d/liblzma.so.5",O_RDONLY|O_CLOEXEC) = 3
24875 read(3,0x3cfff350,832) = 832
24875 fstat(3,0x00007f213cfff1d0) = 0
24875 mmap(NULL,200720,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x00007f213d066000
24875 mmap(0x00007f213d096000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0x30000) = 0x00007f213d096000
24875 close(3) = 0
24875 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00007f2145a2f000
24875 set_tid_address(0x7f2145a2f4f0) = 24875
24875 set_robust_list(0x7f2145a2f500,24) = -1 errno=38 (Function not implemented)
24875 mprotect(0x00007f213d1ef000,12288,PROT_READ) = 0
24875 mprotect(0x00007f213d096000,4096,PROT_READ) = 0
24875 mprotect(0x00007f2145a40000,4096,PROT_READ) = 0
24875 mprotect(0x00007f2145a67000,4096,PROT_READ) = 0
24875 mprotect(0x0000555555557000,4096,PROT_READ) = 0
24875 mprotect(0x00007f2145aa4000,8192,PROT_READ) = 0
24875 prlimit64(0,RLIMIT_STACK,NULL,0x00007f213cfffe58) = 0 ({rlim_cur=8388608,rlim_max=-1})
24875 munmap(0x00007f2145a31000,7935) = 0
24875 rt_sigaction(SIGSEGV,0x00007f213cffff08,NULL) = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=1, si_pid=0, si_uid=0} ---
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7848,8) = 0
24875 mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00007f2145a32000
24875 mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x00007f2145a31000
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7848,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7328,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7228,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7228,NULL,8) = 0
24875 pipe2(0x7f2145a68000,526336) = 0
24875 read(3,0x3cff6e47,1) = -1 errno=11 (Resource temporarily unavailable)
24875 write(4,0x55556000,1) = 1
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff6e88,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff6e88,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7268,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7268,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7328,NULL,8) = 0
24875 read(3,0x3cff6d87,1) = 1
24875 write(4,0x3d000000,1) = 1
24875 read(3,0x3cff7817,1) = 1
24875 write(4,0x3d0c3000,1) = 1
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7328,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7228,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7228,NULL,8) = 0
24875 read(3,0x3cff6e47,1) = 1
24875 write(4,0x3d1c0000,1) = 1
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff6e88,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff6e88,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7268,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7268,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7328,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7328,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7228,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7228,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff6e88,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff6e88,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7268,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7268,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7328,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7328,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7228,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7228,NULL,8) = 0
24875 read(3,0x3cff6e47,1) = 1
24875 write(4,0x55556000,1) = 1
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff6e88,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff6e88,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7268,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7268,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7328,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7328,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7228,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7228,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff6e88,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff6e88,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7268,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7268,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7328,NULL,8) = 0
24875 read(3,0x3cff6d87,1) = 1
24875 write(4,0x3cfff000,1) = 1
24875 read(3,0x3cff7817,1) = 1
24875 write(4,0x45a83000,1) = 1
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7328,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7328,NULL,8) = 0
24875 read(3,0x3cff6d87,1) = 1
24875 write(4,0x3d000000,1) = 1
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7328,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7328,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7328,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7328,NULL,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f2145a68050,0x00007f213cff7328,8) = 0
24875 rt_sigprocmask(SIG_SETMASK,0x00007f213cff7328,NULL,8) = 0
24875 exit_group(0)
diff mbox series

Patch

diff --git a/linux-user/riscv/vdso-32.so b/linux-user/riscv/vdso-32.so
index 1ad1e5cbbb..c2ce2a4757 100755
Binary files a/linux-user/riscv/vdso-32.so and b/linux-user/riscv/vdso-32.so differ
diff --git a/linux-user/riscv/vdso-64.so b/linux-user/riscv/vdso-64.so
index 83992bebe6..ae49f5b043 100755
Binary files a/linux-user/riscv/vdso-64.so and b/linux-user/riscv/vdso-64.so differ
diff --git a/linux-user/riscv/vdso.S b/linux-user/riscv/vdso.S
index a86d8fc488..c37275233a 100644
--- a/linux-user/riscv/vdso.S
+++ b/linux-user/riscv/vdso.S
@@ -101,12 +101,12 @@  endf __vdso_flush_icache
 	.cfi_startproc simple
 	.cfi_signal_frame
 
-#define sizeof_reg	(__riscv_xlen / 4)
+#define sizeof_reg	(__riscv_xlen / 8)
 #define sizeof_freg	8
-#define B_GR	(offsetof_uc_mcontext - sizeof_rt_sigframe)
-#define B_FR	(offsetof_uc_mcontext - sizeof_rt_sigframe + offsetof_freg0)
+#define B_GR	0
+#define B_FR	offsetof_freg0
 
-	.cfi_def_cfa	2, sizeof_rt_sigframe
+	.cfi_def_cfa	2, offsetof_uc_mcontext
 
 	/* Return address */
 	.cfi_return_column 64