X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fm32r%2Ftraps-linux.c;h=9b7ea0e54f4e4706e0bf3bbdf265773cf03387ab;hb=3922b302645fda04da42a5279399578ae2f6206c;hp=bd2a9e4fa34476f3a8363d41141e82304bfbd9d4;hpb=6aba47ca06d9150c6196a374b745c2711b46e045;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/m32r/traps-linux.c b/sim/m32r/traps-linux.c index bd2a9e4fa3..9b7ea0e54f 100644 --- a/sim/m32r/traps-linux.c +++ b/sim/m32r/traps-linux.c @@ -1,24 +1,24 @@ /* m32r exception, interrupt, and trap (EIT) support - Copyright (C) 1998, 2003, 2007 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Renesas. This file is part of GDB, the GNU debugger. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ #include "sim-main.h" +#include "sim-syscall.h" #include "syscall.h" #include "targ-vals.h" #include @@ -114,35 +114,12 @@ 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 * t2h_addr (host_callback *cb, struct cb_syscall *sc, unsigned long taddr) { - extern sim_core_trans_addr (SIM_DESC, sim_cpu *, unsigned, address_word); void *addr; SIM_DESC sd = (SIM_DESC) sc->p1; SIM_CPU *cpu = (SIM_CPU *) sc->p2; @@ -159,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 (HOST_BYTE_ORDER == BFD_ENDIAN_LITTLE) { t1 = tvalue & 0xff000000; t2 = tvalue & 0x00ff0000; @@ -183,7 +160,7 @@ conv_endian16 (unsigned short tvalue) unsigned short hvalue; unsigned short t1, t2; - if (CURRENT_HOST_BYTE_ORDER == LITTLE_ENDIAN) + if (HOST_BYTE_ORDER == BFD_ENDIAN_LITTLE) { t1 = tvalue & 0xff00; t2 = tvalue & 0x00ff; @@ -220,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 : @@ -292,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;