OSDN Git Service

riscv: compat: vdso: Add COMPAT_VDSO base code implementation
authorGuo Ren <guoren@linux.alibaba.com>
Tue, 5 Apr 2022 07:13:10 +0000 (15:13 +0800)
committerPalmer Dabbelt <palmer@rivosinc.com>
Tue, 26 Apr 2022 20:36:53 +0000 (13:36 -0700)
commit0715372a06ce17a9ba69bbec306ddf30c4bad99e
tree528a1eed740cb257be1f180c6c52d1fb5c4baabb
parentf4b395e6f1a588ed6c9a30474e58cf6b27b65783
riscv: compat: vdso: Add COMPAT_VDSO base code implementation

There is no vgettimeofday supported in rv32 that makes simple to
generate rv32 vdso code which only needs riscv64 compiler. Other
architectures need change compiler or -m (machine parameter) to
support vdso32 compiling. If rv32 support vgettimeofday (which
cause C compile) in future, we would add CROSS_COMPILE to support
that makes more requirement on compiler enviornment.

linux-rv64/arch/riscv/kernel/compat_vdso/compat_vdso.so.dbg:
file format elf64-littleriscv

Disassembly of section .text:

0000000000000800 <__vdso_rt_sigreturn>:
 800:   08b00893                li      a7,139
 804:   00000073                ecall
 808:   0000                    unimp
        ...

000000000000080c <__vdso_getcpu>:
 80c:   0a800893                li      a7,168
 810:   00000073                ecall
 814:   8082                    ret
        ...

0000000000000818 <__vdso_flush_icache>:
 818:   10300893                li      a7,259
 81c:   00000073                ecall
 820:   8082                    ret

linux-rv32/arch/riscv/kernel/vdso/vdso.so.dbg:
file format elf32-littleriscv

Disassembly of section .text:

00000800 <__vdso_rt_sigreturn>:
 800:   08b00893                li      a7,139
 804:   00000073                ecall
 808:   0000                    unimp
        ...

0000080c <__vdso_getcpu>:
 80c:   0a800893                li      a7,168
 810:   00000073                ecall
 814:   8082                    ret
        ...

00000818 <__vdso_flush_icache>:
 818:   10300893                li      a7,259
 81c:   00000073                ecall
 820:   8082                    ret

Finally, reuse all *.S from vdso in compat_vdso that makes
implementation clear and readable.

Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
Signed-off-by: Guo Ren <guoren@kernel.org>
Tested-by: Heiko Stuebner <heiko@sntech.de>
Link: https://lore.kernel.org/r/20220405071314.3225832-17-guoren@kernel.org
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
13 files changed:
arch/riscv/Makefile
arch/riscv/include/asm/vdso.h
arch/riscv/kernel/Makefile
arch/riscv/kernel/compat_vdso/.gitignore [new file with mode: 0644]
arch/riscv/kernel/compat_vdso/Makefile [new file with mode: 0644]
arch/riscv/kernel/compat_vdso/compat_vdso.S [new file with mode: 0644]
arch/riscv/kernel/compat_vdso/compat_vdso.lds.S [new file with mode: 0644]
arch/riscv/kernel/compat_vdso/flush_icache.S [new file with mode: 0644]
arch/riscv/kernel/compat_vdso/gen_compat_vdso_offsets.sh [new file with mode: 0755]
arch/riscv/kernel/compat_vdso/getcpu.S [new file with mode: 0644]
arch/riscv/kernel/compat_vdso/note.S [new file with mode: 0644]
arch/riscv/kernel/compat_vdso/rt_sigreturn.S [new file with mode: 0644]
arch/riscv/kernel/vdso/vdso.S