Age | Commit message (Collapse) | Author |
|
From [1]
"GCC 10 (PR 91233) won't silently allow registers that are not architecturally
available to be present in the clobber list anymore, resulting in build failure
for mips*r6 targets in form of:
...
.../sysdep.h:146:2: error: the register ‘lo’ cannot be clobbered in ‘asm’ for the current target
146 | __asm__ volatile ( \
| ^~~~~~~
This is because base R6 ISA doesn't define hi and lo registers w/o DSP extension.
This patch provides the alternative definitions of __SYSCALL_CLOBBERS for r6
targets that won't include those registers."
[1] https://sourceware.org/git/?p=glibc.git;a=commit;h=020b2a97bb15f807c0482f0faee2184ed05bcad8
Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Waldemar Brodkorb <wbx@openadk.org>
|
|
On Linux/MIPS (O32 ABI) for system call we have two result registers - v0 and a3.
v0 contains actual syscall result on success or error number on fail, a3 set to 0/1
for indicating syscall success/fail. (if a3 == 1, v0 contains errno).
Now as we can see from definition of handle_sys (arch/mips/kernel/scall32-o32.S),
handler treats returned by syscall function (let's call "original") values in
range [-EMAXERRNO; 0[ as -errno, a3 is set to 1 and final returned (to userspace)
value is (-original).
INLINE_SYSCALL_NOERR_NCS defined in mips/bits/syscalls.h will handle
this behaviour.
Signed-off-by: Volodymyr Boyko <boyko.cxx@gmail.com>
|
|
This patch uses 'attribute_unused' to clean up a number of warnings
messages that are generated when doing a MIPS build. All of the
changes are in MIPS specific files and there are no code changes
other then adding the unused attribute where needed.
Signed-off-by: Steve Ellcey <sellcey@mips.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
The MIPS specific INLINE_SYSCALL macro has been renamed to
INLINE_SYSCALL_NCS with:
763bbf9e9a27426c9be8322dca5ddf2cb4dbc464
syscall: unify part 2: NCS variety
Declare common NCS (non-constant syscall) variants and convert the
existing ports over to this.
This change breaks system calls. The code generated with using of the
new macro does not obey the restartable syscall convention used by the
linux kernel. When it tries to restart the syscall the errno value is
not being replaced by the syscall number.
This causes weird behaviour of the 'ping' command in busybox for
example:
root@OpenWrt:/# ping 192.168.1.254
PING 192.168.1.254 (192.168.1.254): 56 data bytes
64 bytes from 192.168.1.254: seq=0 ttl=128 time=6.292 ms
ping: recvfrom: Function not implemented
64 bytes from 192.168.1.254: seq=1 ttl=128 time=0.719 ms
ping: recvfrom: Function not implemented
64 bytes from 192.168.1.254: seq=2 ttl=128 time=0.489 ms
ping: recvfrom: Function not implemented
64 bytes from 192.168.1.254: seq=3 ttl=128 time=0.486 ms
ping: recvfrom: Function not implemented
64 bytes from 192.168.1.254: seq=4 ttl=128 time=0.487 ms
ping: recvfrom: Function not implemented
64 bytes from 192.168.1.254: seq=5 ttl=128 time=0.939 ms
ping: recvfrom: Function not implemented
64 bytes from 192.168.1.254: seq=6 ttl=128 time=0.971 ms
ping: recvfrom: Function not implemented
64 bytes from 192.168.1.254: seq=7 ttl=128 time=0.488 ms
ping: recvfrom: Funct^C
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Signed-off-by: Austin Foxley <austinf@cetoncorp.com>
|
|
The kernel does not save these registers across system calls. GCC 4.4
has gotten more aggressive about using them for temporary variables, so
this shows up as intermittent crashes if you use a recent compiler.
Signed-off-by: Daniel Jacobowitz <dan@codesourcery.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
Declare common NCS (non-constant syscall) variants and convert the existing
ports over to this.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
Unify all the common syscall defines in syscalls-common.h and scrub all
the duplicated code from relevant ports. This should also make converting
existing ports to INLINE_SYSCALL() much easier as they don't have to get
lost in all the unrelated noise, as well as creating new ports.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
|
|
|
When I imported INLINE_SYSCALL, etc. from glibc, I just copied whole
macros for each ABI. Actually, except for argument type (long
vs. long long), internal_syscall[0-4] are identical for all ABI, and
internal_syscall[5-6] for N32/N64 are identical for N32/N64.
And I just disabled FORCE_FRAME_POINTER since it had caused build
failure, but including <alloca.h> can solve it.
Here is a patch to handle these issues, plus asm/__asm__ and
volatile/__volatile__ conversion.
Thanks for Peter S. Mazinger who did basic work of this cleanup.
|
|
This patch imports INLINE_SYSCALL, etc. from glibc-2.5 ports and
implements _syscall[0-7] by using them, like arm and powerpc.
I think this patch does not change functionality, but gives better
__SYSCALL_CLOBBERS for N32/N64.
|
|
applications stop using _syscall#() and use syscall() instead. Cleanup
internal handling of syscall includes to use the correct header file.
|
|
The mips64 N32/N64 ABI can pass much arguments via registers.
|
|
|
|
|
|
|
|
annoying warnings.
|
|
without lvalue in asm". Give the asm an lvalue so it can be happy.
|
|
In a recent post to linux-mips ML (and libc-alpha ML), a problem with
inline syscalls was reported.
http://www.linux-mips.org/archives/linux-mips/2004-10/msg00142.html
It seems uClibc should be fixed also for newer gcc. Here is a patch.
|
|
|
|
-Erik
|
|
can't tack in the return -1 since then when people include errno.h, the return
-1 mysteriously vanishes... Setting the __set_errno back and restoring the
'return -1;' calls to each _syscall[0-n] macro makes mips syscalls work again.
-Erik
|
|
|
|
Prepare to kill the UNIFIED_SYSCALL option and instead have it be
a per arch thing that is either enabled or not for that arch.
-Erik
|
|
be included to avoid gratuitous conflicts... This is
a hack till we have proper _syscall macros for all archs.
-Erik
|
|
Remove and ignore generated syscall.h files from sparc and mipsel.
|