Re: [PATCH] pru: Fix memory corruption on syscall return

Dimitar Dimitrov <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <2078940.72y95cczBC@tpdeb>
On сряда, 3 юни 2020 г. 19:14:22 EEST Dimitar Dimitrov wrote:
> In the initial code I missed one level of pointer indirection. Instead
> of storing errno in impure_data, _impure_ptr was corrupted.
> 
> Only simulator is impacted. Real targets have no OS and no syscalls.
> 
> This resolves a bunch of stdio cases from the GCC testsuite:
>   FAIL->PASS: gcc.c-torture/execute/printf-2.c   -O0  execution test
> 
> Signed-off-by: Dimitar Dimitrov <[email protected]>
> ---
>  libgloss/pru/syscalls.S | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/libgloss/pru/syscalls.S b/libgloss/pru/syscalls.S
> index 8ed7601a4..3ad0d9215 100644
> --- a/libgloss/pru/syscalls.S
> +++ b/libgloss/pru/syscalls.S
> @@ -42,6 +42,7 @@ __SC_ret:
>  	/* Invert return code and store to errno (first int in _impure_ptr).  */
>  	rsb	r14, r14, 0
>  	ldi32	r1, _impure_ptr
> +	lbbo	r1, r1, 0, 4
>  	sbbo	r14, r1, 0, 4
>  	/* Return -1 (for both int32_t or int64_t).  */
>  	fill	r14, 8

Gentle ping
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.