X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fm32r%2Ftraps-linux.c;h=9220451734769b112eaf7fe4ffbc6fa8534e3610;hb=1ac72f0659d64d6a14da862242db0d841d2878d0;hp=8f2cd83ac23dec0ad13aef44e95bf8327e1396ab;hpb=ecd75fc8eed3bde86036141228074a20e55dcfc9;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/m32r/traps-linux.c b/sim/m32r/traps-linux.c index 8f2cd83ac2..9220451734 100644 --- a/sim/m32r/traps-linux.c +++ b/sim/m32r/traps-linux.c @@ -1,5 +1,5 @@ /* m32r exception, interrupt, and trap (EIT) support - Copyright (C) 1998-2014 Free Software Foundation, Inc. + Copyright (C) 1998-2016 Free Software Foundation, Inc. Contributed by Renesas. This file is part of GDB, the GNU debugger. @@ -18,6 +18,7 @@ along with this program. If not, see . */ #include "sim-main.h" +#include "sim-syscall.h" #include "syscall.h" #include "targ-vals.h" #include @@ -113,28 +114,6 @@ m32r_core_signal (SIM_DESC sd, SIM_CPU *current_cpu, sim_cia cia, transfer, sig); } -/* Read/write functions for system call interface. */ - -static int -syscall_read_mem (host_callback *cb, struct cb_syscall *sc, - unsigned long taddr, char *buf, int bytes) -{ - SIM_DESC sd = (SIM_DESC) sc->p1; - SIM_CPU *cpu = (SIM_CPU *) sc->p2; - - return sim_core_read_buffer (sd, cpu, read_map, buf, taddr, bytes); -} - -static int -syscall_write_mem (host_callback *cb, struct cb_syscall *sc, - unsigned long taddr, const char *buf, int bytes) -{ - SIM_DESC sd = (SIM_DESC) sc->p1; - SIM_CPU *cpu = (SIM_CPU *) sc->p2; - - return sim_core_write_buffer (sd, cpu, write_map, buf, taddr, bytes); -} - /* Translate target's address to host's address. */ static void * @@ -157,7 +136,7 @@ conv_endian (unsigned int tvalue) unsigned int hvalue; unsigned int t1, t2, t3, t4; - if (CURRENT_HOST_BYTE_ORDER == LITTLE_ENDIAN) + if (CURRENT_HOST_BYTE_ORDER == BFD_ENDIAN_LITTLE) { t1 = tvalue & 0xff000000; t2 = tvalue & 0x00ff0000; @@ -181,7 +160,7 @@ conv_endian16 (unsigned short tvalue) unsigned short hvalue; unsigned short t1, t2; - if (CURRENT_HOST_BYTE_ORDER == LITTLE_ENDIAN) + if (CURRENT_HOST_BYTE_ORDER == BFD_ENDIAN_LITTLE) { t1 = tvalue & 0xff00; t2 = tvalue & 0x00ff; @@ -218,44 +197,25 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num) SIM_DESC sd = CPU_STATE (current_cpu); host_callback *cb = STATE_CALLBACK (sd); -#ifdef SIM_HAVE_BREAKPOINTS - /* Check for breakpoints "owned" by the simulator first, regardless - of --environment. */ - if (num == TRAP_BREAKPOINT) - { - /* First try sim-break.c. If it's a breakpoint the simulator "owns" - it doesn't return. Otherwise it returns and let's us try. */ - sim_handle_breakpoint (sd, current_cpu, pc); - /* Fall through. */ - } -#endif - switch (num) { case TRAP_ELF_SYSCALL : { - CB_SYSCALL s; - - CB_SYSCALL_INIT (&s); - s.func = m32rbf_h_gr_get (current_cpu, 0); - s.arg1 = m32rbf_h_gr_get (current_cpu, 1); - s.arg2 = m32rbf_h_gr_get (current_cpu, 2); - s.arg3 = m32rbf_h_gr_get (current_cpu, 3); - - if (s.func == TARGET_SYS_exit) - { - sim_engine_halt (sd, current_cpu, NULL, pc, sim_exited, s.arg1); - } - - s.p1 = (PTR) sd; - s.p2 = (PTR) current_cpu; - s.read_mem = syscall_read_mem; - s.write_mem = syscall_write_mem; - cb_syscall (cb, &s); - m32rbf_h_gr_set (current_cpu, 2, s.errcode); - m32rbf_h_gr_set (current_cpu, 0, s.result); - m32rbf_h_gr_set (current_cpu, 1, s.result2); - break; + long result, result2; + int errcode; + + sim_syscall_multi (current_cpu, + m32rbf_h_gr_get (current_cpu, 0), + m32rbf_h_gr_get (current_cpu, 1), + m32rbf_h_gr_get (current_cpu, 2), + m32rbf_h_gr_get (current_cpu, 3), + m32rbf_h_gr_get (current_cpu, 4), + &result, &result2, &errcode); + + m32rbf_h_gr_set (current_cpu, 2, errcode); + m32rbf_h_gr_set (current_cpu, 0, result); + m32rbf_h_gr_set (current_cpu, 1, result2); + break; } case TRAP_LINUX_SYSCALL : @@ -290,8 +250,8 @@ m32r_trap (SIM_CPU *current_cpu, PCADDR pc, int num) s.p1 = (PTR) sd; s.p2 = (PTR) current_cpu; - s.read_mem = syscall_read_mem; - s.write_mem = syscall_write_mem; + s.read_mem = sim_syscall_read_mem; + s.write_mem = sim_syscall_write_mem; result = 0; result2 = 0;