binutils-gdb/sim/common
Andrew Burgess c5ebe0ff70 sim: Don't overwrite stored errno in sim_syscall_multi
The host syscall callback mechanism should take care of updating the
errcode within the CB_SYSCALL struct, and we should not be adjusting
the error code once the syscall has completed.  We especially, should
not be rewriting the syscall errcode based on the value of errno some
time after running the host syscall, as there is no guarantee that
errno has not be overwritten.

To perform a syscall we call cb_syscall (in syscall.c).  To return
from cb_syscall control passes through one of two exit paths these are
labeled FinishSyscall and ErrorFinish and are reached using goto
statements scattered throughout the cb_syscall function.

In FinishSyscall we store the syscall result in 'sc->result', and the
error code is transated to target encoding, and stored in
'sc->errcode'.

In ErrorFinish, we again store the syscall result in 'sc->result', and
fill in 'sc->errcode' by fetching the actual errno from the host with
the 'cb->get_errno' callback.

In both cases 'sc->errcode' will have been filled in with an
appropriate value.

Further, if we look at a specific syscall example, CB_SYS_open, in
this case the first thing we do is fetch the path to open from the
target with 'get_path', if this fails then the errcode is returned,
and we jump to FinishSyscall.  Notice that in this case, no host
syscall may have been performed, for example a failure to read the
path to open out of simulated memory can return EINVAL without
performing any host syscall.  Given that no host syscall has been
performed, reading the host errno makes absolutely no sense.

This commit removes from sim_syscall_multi the rewriting of
sc->errcode based on the value of errno, and instead relies on the
value stored in the cb_syscall.

sim/common/ChangeLog:

	* sim-syscall.c (sim_syscall_multi): Don't update sc->errcode at
	this point, it should have already been set in cb_syscall.
2018-12-18 00:02:01 +00:00
..
acinclude.m4 sim/opcodes: Allow use of out of tree cgen source directory 2018-12-06 12:21:10 +00:00
aclocal.m4 Bump to autoconf 2.69 and automake 1.15.1 2018-06-19 16:55:06 -04:00
callback.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-accfp.c sim: cgen: add remainder functions (needed for OR1K lf.rem.[sd]) 2017-12-12 23:41:43 +09:00
cgen-cpu.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-defs.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-engine.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-fpu.c
cgen-fpu.h sim: cgen: add remainder functions (needed for OR1K lf.rem.[sd]) 2017-12-12 23:41:43 +09:00
cgen-mem.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-ops.h or1k: Add the l.muld, l.muldu, l.macu, l.msbu insns 2018-10-05 11:41:42 +09:00
cgen-par.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-par.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-run.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-scache.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-scache.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-sim.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-trace.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-trace.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-types.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen-utils.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cgen.sh sim: gennltvals.sh: handle split out newlib source tree 2015-04-21 03:10:16 -04:00
ChangeLog sim: Don't overwrite stored errno in sim_syscall_multi 2018-12-18 00:02:01 +00:00
configure Bump to autoconf 2.69 and automake 1.15.1 2018-06-19 16:55:06 -04:00
configure.ac Bump to autoconf 2.69 and automake 1.15.1 2018-06-19 16:55:06 -04:00
dv-cfi.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
dv-cfi.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
dv-core.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
dv-glue.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
dv-pal.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
dv-sockser.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
dv-sockser.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
gdbinit.in
genmloop.sh Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
gennltvals.sh sim: mcore: switch to common syscall handling 2015-04-21 03:10:16 -04:00
gentmap.c sim: drop targ-vals.def->nltvals.def indirection 2016-01-10 04:01:16 -05:00
gentvals.sh sim: gennltvals.sh: handle split out newlib source tree 2015-04-21 03:10:16 -04:00
hw-alloc.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-alloc.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-base.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-base.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-device.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-device.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-events.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-events.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-handles.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-handles.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-instances.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-instances.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-main.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-ports.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-ports.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-properties.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-properties.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-tree.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hw-tree.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
Make-common.in Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
Makefile.in Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
nltvals.def sim: mcore: switch to common syscall handling 2015-04-21 03:10:16 -04:00
nrun.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
run.1 Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-abort.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-alu.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-arange.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-arange.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-assert.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-base.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-basics.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-bits.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-bits.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-close.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-command.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-config.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-config.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-core.c Change "xor" name in cpu_core to allow building with iso646.h or C++ compiler 2018-09-28 16:00:46 -04:00
sim-core.h Change "xor" name in cpu_core to allow building with iso646.h or C++ compiler 2018-09-28 16:00:46 -04:00
sim-cpu.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-cpu.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-endian.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-endian.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-engine.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-engine.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-events.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-events.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-fpu.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-fpu.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-hload.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-hrw.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-hw.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-hw.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-info.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-inline.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-inline.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-io.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-io.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-load.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-memopt.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-memopt.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-model.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-model.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-module.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-module.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-n-bits.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-n-core.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-n-endian.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-options.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-options.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-profile.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-profile.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-reason.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-reg.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-resume.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-run.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-signal.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-signal.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-stop.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-syscall.c sim: Don't overwrite stored errno in sim_syscall_multi 2018-12-18 00:02:01 +00:00
sim-syscall.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-trace.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-trace.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-types.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-utils.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-utils.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-watch.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
sim-watch.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
syscall.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
version.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00