libgloss: pru: Fix _open syscal arguments
The _open() C function is declared as having variable arguments in newlib, so second and third arguments are passed on stack. Add code to move them into registers, since that's where the PRU simulator expects them. Issue was exposed by the GCC test gcc.c-torture/execute/fprintf-2.c, which relies on tmpnam implementation to pass correct flags to _open. Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
This commit is contained in:
parent
23a3ec3392
commit
21f0edbf9f
|
@ -68,7 +68,6 @@ __SC_ret_skip_errno_set:
|
||||||
users use other methods for communicating with
|
users use other methods for communicating with
|
||||||
the host - remoteproc, rpmsg, shared memory. */
|
the host - remoteproc, rpmsg, shared memory. */
|
||||||
SC _exit, SYS_exit
|
SC _exit, SYS_exit
|
||||||
SC _open, SYS_open
|
|
||||||
SC _close, SYS_close
|
SC _close, SYS_close
|
||||||
SC _read, SYS_read
|
SC _read, SYS_read
|
||||||
SC _write, SYS_write
|
SC _write, SYS_write
|
||||||
|
@ -77,3 +76,20 @@ __SC_ret_skip_errno_set:
|
||||||
SC _getpid, SYS_getpid
|
SC _getpid, SYS_getpid
|
||||||
SC _kill, SYS_kill
|
SC _kill, SYS_kill
|
||||||
SC _fstat, SYS_fstat
|
SC _fstat, SYS_fstat
|
||||||
|
|
||||||
|
|
||||||
|
/* _open is special because it has VA declaration. */
|
||||||
|
.section .text._open, "ax"
|
||||||
|
.global _open
|
||||||
|
.type _open,@function
|
||||||
|
.func
|
||||||
|
_open:
|
||||||
|
/* Pop the second and third argument from stack, per VA ABI.
|
||||||
|
Thus simulator can get all arguments from registers
|
||||||
|
for any supported syscall. */
|
||||||
|
lbbo r16, sp, 4, 4
|
||||||
|
lbbo r15, sp, 0, 4
|
||||||
|
ldi r1, SYS_open
|
||||||
|
halt
|
||||||
|
jmp __SC_ret
|
||||||
|
.endfunc
|
||||||
|
|
Loading…
Reference in New Issue