memset() and emitting calls to memset() where it seems code that looks
like what memset() does, which ends up recursing and blowing the stack.
this makes mips userland with GCC 10 work.
The panic occures in bus_space_barrier() in rk3399_pcie.c:rkpcie_conf_read().
We expected bus_space_peek_4() to trap and recover in the path
trap_el1h_sync() -> data_abort_handler(), but In fact, the read is delayed
until bus_space_barrier(), and we get an SError interrupt (trap_el1h_error)
instead of a Synchronous Exception (trap_el1h_sync).
To catch this correctly, An implicit barrier in bus_space_peek have been added,
and trap the SError interrupt to recover from.
these trigger "pointer to end of array" issues, and i'm not
entirely sure what is happening in the code generated for the
two "INDIR" system calls from syscalls.master.
- all targets build or can be attempted
- arm64 needs __aarch64_swp1_acq in both libgcc and libkern
- earmv4 works, earmv7hf works, all arm32 builds, rest untested
- hppa, most/all m68k, alpha, and most ppc builds, none tested
- ia64 kernel runs as well as before, userland fails to build
- i386 runs, seems mostly fine except lib/libc/sys/t_ptrace_wait
resume test is hung, and cpu-spinning in a zombie
- sun2 grew again, too large but builds besides RAMDISK not fitting
- mips seems problematic. some kernels fail some work, userland
has problems with both static and dynamic n32 and n64 programs
- sh3el seems ok in gxemul/landisk, sh3eb not tested
- vax seems OK in simh (same c++ exception issues)
all ports kernels have been tested to build (though perhaps with
some uncommited changes only needed for some, while most changes
are commited, about 15 are not but many ports build without them.)
mDNSResponder: another wrong return local address
dhcp: ignore a seemingly impossible stringop overflow
hpacel: avoid maybe uninitialised error that is wrong.
rsh: avoid impossible malloc(0)
udf: cast pointers through (uintptr_t) to fool invalid boundary checks
ntp: ignore truncation beyond api sizes, and ignore wrongly
guessed underflow
tmux: ignore maybe uninitialised warning for impossible case
libbfd: signed/unsigned variables assigned in the same statement
dri/gallium: -Wno-builtin-declaration-mismatch for u_atomic.c as
it implements backend functions with different in-C-machine but
same-in-real-machine types
libXfont/libXfont2: signed/unsigned variables assigned in the same
statement
i915drm: ignore impossible maybe uninitialised warnings
sysinst: ignore an invalid string truncation issue