Message ID | 20240912052953.2552501-33-alistair.francis@wdc.com |
---|---|
State | New |
Headers | show |
Series | [PULL,01/47] target/riscv: Add a property to set vl to ceil(AVL/2) | expand |
On 9/12/24 2:29 AM, Alistair Francis wrote: > From: Mark Corbin <mark@dibsco.co.uk> > > Implemented the 'setup_sigtramp' function for setting up the signal > trampoline code in the RISC-V architecture. > > Signed-off-by: Mark Corbin <mark@dibsco.co.uk> > Signed-off-by: Ajeet Singh <itachis@FreeBSD.org> > Reviewed-by: Richard Henderson <richard.henderson@linaro.org> > Message-ID: <20240907031927.1908-8-itachis@FreeBSD.org> > Signed-off-by: Alistair Francis <alistair.francis@wdc.com> > --- > bsd-user/riscv/target_arch_sigtramp.h | 42 +++++++++++++++++++++++++++ > 1 file changed, 42 insertions(+) > create mode 100644 bsd-user/riscv/target_arch_sigtramp.h > > diff --git a/bsd-user/riscv/target_arch_sigtramp.h b/bsd-user/riscv/target_arch_sigtramp.h > new file mode 100644 > index 0000000000..83345f3961 > --- /dev/null > +++ b/bsd-user/riscv/target_arch_sigtramp.h > @@ -0,0 +1,42 @@ > +/* > + * RISC-V sigcode > + * > + * Copyright (c) 2019 Mark Corbin > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2 of the License, or (at your option) any later version. > + * > + * This library is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library; if not, see <http://www.gnu.org/licenses/>. > + */ > + > +#ifndef TARGET_ARCH_SIGTRAMP_H > +#define TARGET_ARCH_SIGTRAMP_H > + > +/* Compare with sigcode() in riscv/riscv/locore.S */ > +static inline abi_long setup_sigtramp(abi_ulong offset, unsigned sigf_uc, > + unsigned sys_sigreturn) > +{ > + int i; There's no 'i' var being used. This will throw an 'unused variable' warning when building. > + uint32_t sys_exit = TARGET_FREEBSD_NR_exit; > + > + static const uint32_t sigtramp_code[] = { > + /*1*/ const_le32(0x00010513), /*mv a0, sp*/ > + /*2*/ const_le32(0x00050513 + (sigf_uc << 20)), /*addi a0,a0,sigf_uc*/ > + /*3*/ const_le32(0x00000293 + (sys_sigreturn << 20)),/*li t0,sys_sigreturn*/ > + /*4*/ const_le32(0x00000073), /*ecall*/ > + /*5*/ const_le32(0x00000293 + (sys_exit << 20)), /*li t0,sys_exit*/ > + /*6*/ const_le32(0x00000073), /*ecall*/ > + /*7*/ const_le32(0xFF1FF06F) /*b -16*/ > + }; And this will throw the following error: ../bsd-user/riscv/target_arch_sigtramp.h:32:33: error: initializer element is not a compile-time constant 32 | /*2*/ const_le32(0x00050513 + (sigf_uc << 20)), /*addi a0,a0,sigf_uc*/ ~~~~~~~~~~~^~~~~~~~~~~~~~~~~ /tmp/cirrus-ci-build/include/qemu/bswap.h:168:26: note: expanded from macro 'const_le32' 168 | # define const_le32(_x) (_x) | ^~ 1 error generated. One solution is to remove the 'static const' qualifier from the array, like bsd-user/arm/target_arch_sigtramp.h is doing. This diff will fix the build: diff --git a/bsd-user/riscv/target_arch_sigtramp.h b/bsd-user/riscv/target_arch_sigtramp.h index 83345f3961..dfe5076739 100644 --- a/bsd-user/riscv/target_arch_sigtramp.h +++ b/bsd-user/riscv/target_arch_sigtramp.h @@ -24,10 +24,9 @@ static inline abi_long setup_sigtramp(abi_ulong offset, unsigned sigf_uc, unsigned sys_sigreturn) { - int i; uint32_t sys_exit = TARGET_FREEBSD_NR_exit; - static const uint32_t sigtramp_code[] = { + uint32_t sigtramp_code[] = { /*1*/ const_le32(0x00010513), /*mv a0, sp*/ /*2*/ const_le32(0x00050513 + (sigf_uc << 20)), /*addi a0,a0,sigf_uc*/ /*3*/ const_le32(0x00000293 + (sys_sigreturn << 20)),/*li t0,sys_sigreturn*/ Thanks, Daniel > + > + return memcpy_to_target(offset, sigtramp_code, TARGET_SZSIGCODE); > +} > +#endif /* TARGET_ARCH_SIGTRAMP_H */
Hi, I had already fixed it and sent a patchv6, I will send another one with the other changes. On Mon, 16 Sept, 2024, 5:51 am Daniel Henrique Barboza, < dbarboza@ventanamicro.com> wrote: > > > On 9/12/24 2:29 AM, Alistair Francis wrote: > > From: Mark Corbin <mark@dibsco.co.uk> > > > > Implemented the 'setup_sigtramp' function for setting up the signal > > trampoline code in the RISC-V architecture. > > > > Signed-off-by: Mark Corbin <mark@dibsco.co.uk> > > Signed-off-by: Ajeet Singh <itachis@FreeBSD.org> > > Reviewed-by: Richard Henderson <richard.henderson@linaro.org> > > Message-ID: <20240907031927.1908-8-itachis@FreeBSD.org> > > Signed-off-by: Alistair Francis <alistair.francis@wdc.com> > > --- > > bsd-user/riscv/target_arch_sigtramp.h | 42 +++++++++++++++++++++++++++ > > 1 file changed, 42 insertions(+) > > create mode 100644 bsd-user/riscv/target_arch_sigtramp.h > > > > diff --git a/bsd-user/riscv/target_arch_sigtramp.h > b/bsd-user/riscv/target_arch_sigtramp.h > > new file mode 100644 > > index 0000000000..83345f3961 > > --- /dev/null > > +++ b/bsd-user/riscv/target_arch_sigtramp.h > > @@ -0,0 +1,42 @@ > > +/* > > + * RISC-V sigcode > > + * > > + * Copyright (c) 2019 Mark Corbin > > + * > > + * This library is free software; you can redistribute it and/or > > + * modify it under the terms of the GNU Lesser General Public > > + * License as published by the Free Software Foundation; either > > + * version 2 of the License, or (at your option) any later version. > > + * > > + * This library is distributed in the hope that it will be useful, > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > + * Lesser General Public License for more details. > > + * > > + * You should have received a copy of the GNU Lesser General Public > > + * License along with this library; if not, see < > http://www.gnu.org/licenses/>. > > + */ > > + > > +#ifndef TARGET_ARCH_SIGTRAMP_H > > +#define TARGET_ARCH_SIGTRAMP_H > > + > > +/* Compare with sigcode() in riscv/riscv/locore.S */ > > +static inline abi_long setup_sigtramp(abi_ulong offset, unsigned > sigf_uc, > > + unsigned sys_sigreturn) > > +{ > > + int i; > > There's no 'i' var being used. This will throw an 'unused variable' > warning when building. > > > + uint32_t sys_exit = TARGET_FREEBSD_NR_exit; > > + > > + static const uint32_t sigtramp_code[] = { > > + /*1*/ const_le32(0x00010513), /*mv a0, sp*/ > > + /*2*/ const_le32(0x00050513 + (sigf_uc << 20)), /*addi > a0,a0,sigf_uc*/ > > + /*3*/ const_le32(0x00000293 + (sys_sigreturn << 20)),/*li > t0,sys_sigreturn*/ > > + /*4*/ const_le32(0x00000073), /*ecall*/ > > + /*5*/ const_le32(0x00000293 + (sys_exit << 20)), /*li > t0,sys_exit*/ > > + /*6*/ const_le32(0x00000073), /*ecall*/ > > + /*7*/ const_le32(0xFF1FF06F) /*b -16*/ > > + }; > > > And this will throw the following error: > > ../bsd-user/riscv/target_arch_sigtramp.h:32:33: error: initializer element > is not a compile-time constant > 32 | /*2*/ const_le32(0x00050513 + (sigf_uc << 20)), /*addi > a0,a0,sigf_uc*/ > ~~~~~~~~~~~^~~~~~~~~~~~~~~~~ > /tmp/cirrus-ci-build/include/qemu/bswap.h:168:26: note: expanded from > macro 'const_le32' > 168 | # define const_le32(_x) (_x) > | ^~ > 1 error generated. > > > One solution is to remove the 'static const' qualifier from the array, like > bsd-user/arm/target_arch_sigtramp.h is doing. > > > This diff will fix the build: > > > diff --git a/bsd-user/riscv/target_arch_sigtramp.h > b/bsd-user/riscv/target_arch_sigtramp.h > index 83345f3961..dfe5076739 100644 > --- a/bsd-user/riscv/target_arch_sigtramp.h > +++ b/bsd-user/riscv/target_arch_sigtramp.h > @@ -24,10 +24,9 @@ > static inline abi_long setup_sigtramp(abi_ulong offset, unsigned sigf_uc, > unsigned sys_sigreturn) > { > - int i; > uint32_t sys_exit = TARGET_FREEBSD_NR_exit; > > - static const uint32_t sigtramp_code[] = { > + uint32_t sigtramp_code[] = { > /*1*/ const_le32(0x00010513), /*mv a0, sp*/ > /*2*/ const_le32(0x00050513 + (sigf_uc << 20)), /*addi > a0,a0,sigf_uc*/ > /*3*/ const_le32(0x00000293 + (sys_sigreturn << 20)),/*li > t0,sys_sigreturn*/ > > > > > Thanks, > > Daniel > > > > > + > > + return memcpy_to_target(offset, sigtramp_code, TARGET_SZSIGCODE); > > +} > > +#endif /* TARGET_ARCH_SIGTRAMP_H */ >
diff --git a/bsd-user/riscv/target_arch_sigtramp.h b/bsd-user/riscv/target_arch_sigtramp.h new file mode 100644 index 0000000000..83345f3961 --- /dev/null +++ b/bsd-user/riscv/target_arch_sigtramp.h @@ -0,0 +1,42 @@ +/* + * RISC-V sigcode + * + * Copyright (c) 2019 Mark Corbin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TARGET_ARCH_SIGTRAMP_H +#define TARGET_ARCH_SIGTRAMP_H + +/* Compare with sigcode() in riscv/riscv/locore.S */ +static inline abi_long setup_sigtramp(abi_ulong offset, unsigned sigf_uc, + unsigned sys_sigreturn) +{ + int i; + uint32_t sys_exit = TARGET_FREEBSD_NR_exit; + + static const uint32_t sigtramp_code[] = { + /*1*/ const_le32(0x00010513), /*mv a0, sp*/ + /*2*/ const_le32(0x00050513 + (sigf_uc << 20)), /*addi a0,a0,sigf_uc*/ + /*3*/ const_le32(0x00000293 + (sys_sigreturn << 20)),/*li t0,sys_sigreturn*/ + /*4*/ const_le32(0x00000073), /*ecall*/ + /*5*/ const_le32(0x00000293 + (sys_exit << 20)), /*li t0,sys_exit*/ + /*6*/ const_le32(0x00000073), /*ecall*/ + /*7*/ const_le32(0xFF1FF06F) /*b -16*/ + }; + + return memcpy_to_target(offset, sigtramp_code, TARGET_SZSIGCODE); +} +#endif /* TARGET_ARCH_SIGTRAMP_H */