X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fbfin%2Finterp.c;h=d884d1025c5565c63c17af73651aeb7bf0716afe;hb=160f8a8f32f5566077e4a4b13943bc7c70bc5da2;hp=07030da0036504ffd564f031f5aa2d3d4349a818;hpb=61a0c964e611eaf72489c3049ba206b2f91ea4a9;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/bfin/interp.c b/sim/bfin/interp.c index 07030da003..d884d1025c 100644 --- a/sim/bfin/interp.c +++ b/sim/bfin/interp.c @@ -1,6 +1,6 @@ /* Simulator for Analog Devices Blackfin processors. - Copyright (C) 2005-2015 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. @@ -112,20 +112,6 @@ static const char cb_libgloss_stat_map_32[] = "space,4:st_blksize,4:st_blocks,4:space,8"; static const char *stat_map_32, *stat_map_64; -/* Count the number of arguments in an argv. */ -static int -count_argc (const char * const *argv) -{ - int i; - - if (! argv) - return -1; - - for (i = 0; argv[i] != NULL; ++i) - continue; - return i; -} - /* Simulate a monitor trap, put the result into r0 and errno into r1 return offset by which to adjust pc. */ @@ -133,7 +119,7 @@ void bfin_syscall (SIM_CPU *cpu) { SIM_DESC sd = CPU_STATE (cpu); - const char * const *argv = (void *)STATE_PROG_ARGV (sd); + char * const *argv = (void *)STATE_PROG_ARGV (sd); host_callback *cb = STATE_CALLBACK (sd); bu32 args[6]; CB_SYSCALL sc; @@ -180,12 +166,12 @@ bfin_syscall (SIM_CPU *cpu) #ifdef CB_SYS_argc case CB_SYS_argc: tbuf += sprintf (tbuf, "argc()"); - sc.result = count_argc (argv); + sc.result = countargv ((char **)argv); break; case CB_SYS_argnlen: { tbuf += sprintf (tbuf, "argnlen(%u)", args[0]); - if (sc.arg1 < count_argc (argv)) + if (sc.arg1 < countargv ((char **)argv)) sc.result = strlen (argv[sc.arg1]); else sc.result = -1; @@ -194,7 +180,7 @@ bfin_syscall (SIM_CPU *cpu) case CB_SYS_argn: { tbuf += sprintf (tbuf, "argn(%u)", args[0]); - if (sc.arg1 < count_argc (argv)) + if (sc.arg1 < countargv ((char **)argv)) { const char *argn = argv[sc.arg1]; int len = strlen (argn); @@ -606,22 +592,6 @@ bfin_syscall (SIM_CPU *cpu) TRACE_SYSCALL (cpu, "%s", _tbuf); } -void -trace_register (SIM_DESC sd, - sim_cpu *cpu, - const char *fmt, - ...) -{ - va_list ap; - trace_printf (sd, cpu, "%s %s", - "reg: ", - TRACE_PREFIX (CPU_TRACE_DATA (cpu))); - va_start (ap, fmt); - trace_vprintf (sd, cpu, fmt, ap); - va_end (ap); - trace_printf (sd, cpu, "\n"); -} - /* Execute a single instruction. */ static sim_cia @@ -636,6 +606,8 @@ step_once (SIM_CPU *cpu) trace_prefix (sd, cpu, NULL_CIA, oldpc, TRACE_LINENUM_P (cpu), NULL, 0, " "); /* Use a space for gcc warnings. */ + TRACE_DISASM (cpu, oldpc); + /* Handle hardware single stepping when lower than EVT3, and when SYSCFG has already had the SSSTEP bit enabled. */ ssstep = false; @@ -744,7 +716,7 @@ bfin_initialize_cpu (SIM_DESC sd, SIM_CPU *cpu) SIM_DESC sim_open (SIM_OPEN_KIND kind, host_callback *callback, - struct bfd *abfd, char **argv) + struct bfd *abfd, char * const *argv) { char c; int i; @@ -785,9 +757,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, e_sim_add_option_table (sd, bfin_mmu_options); e_sim_add_option_table (sd, bfin_mach_options); - /* getopt will print the error message so we just have to exit if this fails. - FIXME: Hmmm... in the case of gdb we need getopt to call - print_filtered. */ + /* The parser will print an error message for us, so we silently return. */ if (sim_parse_args (sd, argv) != SIM_RC_OK) { free_state (sd); @@ -836,14 +806,8 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, return sd; } -void -sim_close (SIM_DESC sd, int quitting) -{ - sim_module_uninstall (sd); -} - /* Some utils don't like having a NULL environ. */ -static const char * const simple_env[] = { "HOME=/", "PATH=/bin", NULL }; +static char * const simple_env[] = { "HOME=/", "PATH=/bin", NULL }; static bu32 fdpic_load_offset; @@ -953,7 +917,7 @@ bfin_fdpic_load (SIM_DESC sd, SIM_CPU *cpu, struct bfd *abfd, bu32 *sp, free (data); - max_load_addr = MAX (paddr + memsz, max_load_addr); + max_load_addr = max (paddr + memsz, max_load_addr); *sp -= 12; sim_write (sd, *sp+0, (void *)&paddr, 4); /* loadseg.addr */ @@ -984,7 +948,7 @@ bfin_fdpic_load (SIM_DESC sd, SIM_CPU *cpu, struct bfd *abfd, bu32 *sp, } /* Update the load offset with a few extra pages. */ - fdpic_load_offset = ALIGN (MAX (max_load_addr, fdpic_load_offset), 0x10000); + fdpic_load_offset = ALIGN (max (max_load_addr, fdpic_load_offset), 0x10000); fdpic_load_offset += 0x10000; /* Push the summary loadmap info onto the stack last. */ @@ -1001,7 +965,7 @@ bfin_fdpic_load (SIM_DESC sd, SIM_CPU *cpu, struct bfd *abfd, bu32 *sp, static void bfin_user_init (SIM_DESC sd, SIM_CPU *cpu, struct bfd *abfd, - const char * const *argv, const char * const *env) + char * const *argv, char * const *env) { /* XXX: Missing host -> target endian ... */ /* Linux starts the user app with the stack: @@ -1095,7 +1059,7 @@ bfin_user_init (SIM_DESC sd, SIM_CPU *cpu, struct bfd *abfd, sim_pc_set (cpu, elf_addrs[0]); /* Figure out how much storage the argv/env strings need. */ - argc = count_argc (argv); + argc = countargv ((char **)argv); if (argc == -1) argc = 0; argv_flat = argc; /* NUL bytes */ @@ -1104,7 +1068,7 @@ bfin_user_init (SIM_DESC sd, SIM_CPU *cpu, struct bfd *abfd, if (!env) env = simple_env; - envc = count_argc (env); + envc = countargv ((char **)env); env_flat = envc; /* NUL bytes */ for (i = 0; i < envc; ++i) env_flat += strlen (env[i]); @@ -1183,7 +1147,7 @@ bfin_user_init (SIM_DESC sd, SIM_CPU *cpu, struct bfd *abfd, } static void -bfin_os_init (SIM_DESC sd, SIM_CPU *cpu, const char * const *argv) +bfin_os_init (SIM_DESC sd, SIM_CPU *cpu, char * const *argv) { /* Pass the command line via a string in R0 like Linux expects. */ int i; @@ -1220,7 +1184,7 @@ bfin_virtual_init (SIM_DESC sd, SIM_CPU *cpu) SIM_RC sim_create_inferior (SIM_DESC sd, struct bfd *abfd, - char **argv, char **env) + char * const *argv, char * const *env) { SIM_CPU *cpu = STATE_CPU (sd, 0); SIM_ADDR addr; @@ -1232,10 +1196,11 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, addr = 0; sim_pc_set (cpu, addr); - /* Standalone mode (i.e. `bfin-...-run`) will take care of the argv - for us in sim_open() -> sim_parse_args(). But in debug mode (i.e. - 'target sim' with `bfin-...-gdb`), we need to handle it. */ - if (STATE_OPEN_KIND (sd) == SIM_OPEN_DEBUG) + /* Standalone mode (i.e. `run`) will take care of the argv for us in + sim_open() -> sim_parse_args(). But in debug mode (i.e. 'target sim' + with `gdb`), we need to handle it because the user can change the + argv on the fly via gdb's 'run'. */ + if (STATE_PROG_ARGV (sd) != argv) { freeargv (STATE_PROG_ARGV (sd)); STATE_PROG_ARGV (sd) = dupargv (argv); @@ -1244,10 +1209,10 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, switch (STATE_ENVIRONMENT (sd)) { case USER_ENVIRONMENT: - bfin_user_init (sd, cpu, abfd, (void *)argv, (void *)env); + bfin_user_init (sd, cpu, abfd, argv, env); break; case OPERATING_ENVIRONMENT: - bfin_os_init (sd, cpu, (void *)argv); + bfin_os_init (sd, cpu, argv); break; default: bfin_virtual_init (sd, cpu);