aboutsummaryrefslogtreecommitdiff
path: root/sim
AgeCommit message (Collapse)AuthorFilesLines
2021-04-08sim: set ASAN_OPTIONS=detect_leaks=0 when running igen and opc2cSimon Marchi11-16/+52
The igen/dgen and opc2c tools leak their heap-allocated memory (on purpose) at program exit, which makes AddressSanitizer fail the tool execution. This breaks the build, as it makes the tool return a non-zero exit code. Fix that by disabling leak detection through the setting of that environment variable. I also changed the opc2c rules for m32c to go through a temporary file. What happened is that the failing opc2c would produce an incomplete file (probably because ASan exits the process before stdout is flushed). This meant that further make attempts didn't try to re-create the file, as it already existed. A "clean" was therefore necessary. This can also happen in regular builds if the user interrupts the build (^C) in the middle of the opc2c execution and tries to resume it. Going to a temporary file avoids this issue. sim/m32c/ChangeLog: * Makefile.in: Set ASAN_OPTIONS when running opc2c. sim/mips/ChangeLog: * Makefile.in: Set ASAN_OPTIONS when running igen. sim/mn10300/ChangeLog: * Makefile.in: Set ASAN_OPTIONS when running igen. sim/ppc/ChangeLog: * Makefile.in: Set ASAN_OPTIONS when running igen. sim/v850/ChangeLog: * Makefile.in: Set ASAN_OPTIONS when running igen. Change-Id: I00f21d4dc1aff0ef73471925d41ce7c23e83e082
2021-04-08sim: testsuite: support exit 77 for unsupported testsMike Frysinger2-1/+8
Exit status 77 is common (including the autotools world) to indicate "skip this test". Add support for mapping that to "unsupported" as that's the closest in the dejagnu world.
2021-04-08sim: testsuite: skip tests when the port is disabledMike Frysinger2-0/+10
If the port hasn't been enabled, don't try to run its tests. Making this dynamic simplifies the test harnesses and avoids duplicating a bunch of target tuple checks.
2021-04-08sim: testsuite: calculate $arch from $subdirMike Frysinger72-180/+142
Since we require ports to use a matching subdir name in the testsuite tree, we can use that to calculate the $arch value.
2021-04-07Aarch64 sim fix for gcc-10 miscompilation.Jim Wilson2-2/+8
This fixes a problem that occurs when compiled by gcc-10, as the code is relying on undefined overflow behavior. This is fixed by replacing compares between 32-bit and 64-bit results with compares that just use the 64-bit results with a cast. PR sim/27483 * simulator.c (set_flags_for_add32): Compare uresult against itself. Compare sresult against itself.
2021-04-07sim: m32c: opc2c: remove unused vlist variableSimon Marchi2-3/+4
When building with AddressSanitizer, sim/m32c fails with: ./opc2c -l r8c.out /home/simark/src/binutils-gdb/sim/m32c/r8c.opc > r8c.c sim_log: r8c.out ================================================================= ==3919390==ERROR: LeakSanitizer: detected memory leaks Direct leak of 4 byte(s) in 1 object(s) allocated from: #0 0x7ffff7677459 in __interceptor_malloc /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cpp:145 #1 0x55555555b3df in main /home/simark/src/binutils-gdb/sim/m32c/opc2c.c:658 #2 0x7ffff741fb24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24) Fix the leak in main by removing the vlist variable, which seems unused.
2021-04-05Adjust location of readline in sim/erc32Tom Tromey3-2/+7
sim/erc32 uses an obsolete path to the in-tree build of readline. readline was moved into a subdirectory some time ago. This patch fixes the problem. Tested by rebuilding. sim/erc32/ChangeLog 2021-04-05 Tom Tromey <tromey@adacore.com> * configure: Rebuild. * configure.ac (READLINE): Adjust in-tree value.
2021-04-04sim: mips: Add handlers to simulator monitor for unlink, lseek and statFaraz Shahbazker2-1/+75
sim/mips/ChangeLog * interp.c (sim_monitor): Add switch entries for unlink (13), lseek (14), and stat (15). Derived from patch authored by Steve Ellcey <sellcey@mips.com>
2021-04-03sim: example-synacor: a simple implementation for referenceMike Frysinger34-1/+16037
Provide a simple example simulator for people porting to new targets to use as a reference. This one has the advantage of being used by people and having a fun program available for it. It doesn't require a special target -- the example simulators can be built for any existing port.
2021-04-03sim: testsuite: integrate common tests into buildMike Frysinger7-71/+662
Now that we have the common automake build with support for build-time programs working, we can integrate the common tests into the default `make check` flow.
2021-04-03sim: add preliminary support for --enable-targetsMike Frysinger9-131/+389
This doesn't actually create one `run` program like other projects, but creates multiple `run-$arch` targets. While it might not seem that useful initially, this has some nice properties: - Allows us to quickly build all sim targets in a single tree. - Positions us better for converting targets over to a proper multitarget build+install. We don't have the ability to actually run tests against them, but that's due to a limitation in gas: it doesn't support multitarget. If that ever changes, we should be able to turn on our tests too. We can improve the test framework to fallback to a system toolchain if available to help mitigate that.
2021-04-02sim: igen: merge build into top levelMike Frysinger17-5489/+451
This simplifies the build a bit (especially for deps in port subdirs), and avoids recursive make. This in turn speeds up the build, and sets us up for multi-target.
2021-04-02sim: unify toolchain settingsMike Frysinger104-6382/+7842
The toplevel, common, and igen dirs all have their own code for setting up toolchain settings. Unify all of that in a new macro.
2021-04-01Fix microblaze sim build errorMartin Liska2-1/+5
I see the following error for --target=microblaze-elf: ../../../sim/microblaze/interp.c: In function 'sim_engine_run': ../../../sim/microblaze/interp.c:147:39: error: passing argument 2 of 'get_insn_microblaze' from incompatible pointer type [-Werror=incompatible-pointer-types] 147 | op = get_insn_microblaze (inst, &imm_unsigned, &insn_type, | ^~~~~~~~~~~~~ | | | int * In file included from ../../bfd/bfd.h:45, from ../../../sim/microblaze/interp.c:24: ../../../sim/microblaze/../../opcodes/microblaze-dis.h:34:57: note: expected '_Bool *' but argument is of type 'int *' 34 | extern enum microblaze_instr get_insn_microblaze (long, bool *, | ^ sim/microblaze/ChangeLog: * interp.c (sim_engine_run): Use bool instead of int.
2021-03-13sim: rename BUILD_LDFLAGS to LDFLAGS_FOR_BUILDMike Frysinger8-5/+31
The rest of the binutils tree renamed this variable many years ago.
2021-03-13sim: introduce {COMPILE,LINK}_FOR_BUILDMike Frysinger16-49/+111
These use the same pattern as seen in the opcodes/ dir and in automake in general (ish). This helps simplify the boilerplate for building and linking build-time code, and fixes some inconsistency in flag usage. For rules that were compiling+linking in a single step, split them into separate steps so we can apply the correct set of options. This matches automake behavior too.
2021-03-08Enable maintainer mode for simTom Tromey5-16/+80
The sim's recently switch to using Automake caused a build failure for me, because I didn't have the correct auto* tools in my path. However, the rule in the tree is that this is not needed in general. This patch adds a call to AM_MAINTAINER_MODE, to align the sim with the way the rest of the tree works here. sim/ChangeLog 2021-03-08 Tom Tromey <tromey@adacore.com> * aclocal.m4, configure, Makefile.in: Rebuild. * configure.ac: Use AM_MAINTAINER_MODE.
2021-03-08sim: delete unused BUILD_LIBS settingMike Frysinger10-16/+38
This hasn't been initialized anywhere for years. It used to be for passing in the path to libiberty, but that stopped happening long ago. Delete it to simplify the build logic.
2021-03-07sim: igen: update options APIMike Frysinger4-3/+9
This local macro doesn't take any args, so adjust the API to match. No one really noticed as this is behind code that is not normally built, only when a dev specifically tries to compile it.
2021-03-07RegeneratedJeff Law2-6/+19
2021-03-07sim: testsuite: merge into toplevel automakeMike Frysinger11-201/+142
This allows us to delete most of our custom test logic, and avoids a recursive make for minor speed up.
2021-03-07sim: switch top level to automakeMike Frysinger10-520/+3101
This doesn't gain us much by itself, but it sets us up for using more features as we try to unify ports and avoid recursive make.
2021-02-28sim: igen: drop config.h & header checkingMike Frysinger12-1125/+58
While the configure script was checking for a bunch of headers, only one of them was conditionally included in the source (unistd.h). The rest were always included. Based on those usage this whole time, we can reasonably assume that the build also has unistd.h. All the other files including config.h never actually used any defines from the header.
2021-02-28sim: igen: delete more unused toolchain settingsMike Frysinger4-122/+7
This package doesn't build any archives or install programs.
2021-02-28sim: igen: delete unused FOR_BUILD varsMike Frysinger4-24/+7
2021-02-28sim: set up build-time compiler settingsMike Frysinger32-277/+313
Some sim dirs were already setting up CFLAGS_FOR_BUILD in inconsistent ways. Move it to a common place for reuse.
2021-02-28sim: use AC_CHECK_TOOL to find arMike Frysinger32-93/+2793
Rather than require $AR be set and then default to `ar`, use the standard AC_CHECK_TOOL helper to find a good prefixed tool. In practice this shouldn't change much as we seem to have macros in the tree that were already setting it up, but we shouldn't rely on that implicitly.
2021-02-28sim: require AC_PROG_CPP explicitlyMike Frysinger62-4206/+4359
All the scripts were using this implicitly already, so there's no real change for them, but we want to call it explicitly as the CPP tool is used to generate nltvals.def.
2021-02-28sim: delete unused SIM_EXTRA_LIBDEPSMike Frysinger6-8/+14
This was last used 15 years ago, so clearly not important enough to keep around. Punt it.
2021-02-27sim: delete redundant SIM_EXTRA_ALLMike Frysinger10-9/+26
We don't need a variable to add a dependency to the "all" target, and having one doesn't really add value. Switch to the target directly for the few ports that actually use this.
2021-02-21sim: common: split up acinclude.m4 into individual m4 filesMike Frysinger144-1197/+2156
This file is quite large and is getting unmanageable. Split it apart to follow aclocal best practices by putting one-macro-per-file. There shouldn't be any real functional changes here as can be seen in the configure script regens.
2021-02-20sim: merge configure.tgt into configure.acMike Frysinger4-324/+207
One fewer file to worry about & manage.
2021-02-19RISC-V: PR27158, fixed UJ/SB types and added CSS/CL/CS types for .insn.Nelson Chu2-3/+8
* Renamed obsolete UJ/SB types and RVC types, also added CSS/CL(CS) types, [VALID/EXTRACT/ENCODE macros] BTYPE_IMM: Renamed from SBTYPE_IMM. JTYPE_IMM: Renamed from UJTYPE_IMM. CITYPE_IMM: Renamed from RVC_IMM. CITYPE_LUI_IMM: Renamed from RVC_LUI_IMM. CITYPE_ADDI16SP_IMM: Renamed from RVC_ADDI16SP_IMM. CITYPE_LWSP_IMM: Renamed from RVC_LWSP_IMM. CITYPE_LDSP_IMM: Renamed from RVC_LDSP_IMM. CIWTYPE_IMM: Renamed from RVC_UIMM8. CIWTYPE_ADDI4SPN_IMM: Renamed from RVC_ADDI4SPN_IMM. CSSTYPE_IMM: Added for .insn without special encoding. CSSTYPE_SWSP_IMM: Renamed from RVC_SWSP_IMM. CSSTYPE_SDSP_IMM: Renamed from RVC_SDSP_IMM. CLTYPE_IMM: Added for .insn without special encoding. CLTYPE_LW_IMM: Renamed from RVC_LW_IMM. CLTYPE_LD_IMM: Renamed from RVC_LD_IMM. RVC_SIMM3: Unused and removed. CBTYPE_IMM: Renamed from RVC_B_IMM. CJTYPE_IMM: Renamed from RVC_J_IMM. * Added new operands and removed the unused ones, C5: Unsigned CL(CS) immediate, added for .insn directive. C6: Unsigned CSS immediate, added for .insn directive. Ci: Unused and removed. C<: Unused and removed. bfd/ PR 27158 * elfnn-riscv.c (perform_relocation): Updated encoding macros. (_bfd_riscv_relax_call): Likewise. (_bfd_riscv_relax_lui): Likewise. * elfxx-riscv.c (howto_table): Likewise. gas/ PR 27158 * config/tc-riscv.c (riscv_ip): Updated encoding macros. (md_apply_fix): Likewise. (md_convert_frag_branch): Likewise. (validate_riscv_insn): Likewise. Also arranged operands, including added C5 and C6 operands, and removed unused Ci and C< operands. * doc/c-riscv.texi: Updated and added CSS/CL/CS types. * testsuite/gas/riscv/insn.d: Added CSS/CL/CS instructions. * testsuite/gas/riscv/insn.s: Likewise. gdb/ PR 27158 * riscv-tdep.c (decode_ci_type_insn): Updated encoding macros. (decode_j_type_insn): Likewise. (decode_cj_type_insn): Likewise. (decode_b_type_insn): Likewise. (decode): Likewise. include/ PR 27158 * opcode/riscv.h: Updated encoding macros. opcodes/ PR 27158 * riscv-dis.c (print_insn_args): Updated encoding macros. * riscv-opc.c (MASK_RVC_IMM): defined to ENCODE_CITYPE_IMM. (match_c_addi16sp): Updated encoding macros. (match_c_lui): Likewise. (match_c_lui_with_hint): Likewise. (match_c_addi4spn): Likewise. (match_c_slli): Likewise. (match_slli_as_c_slli): Likewise. (match_c_slli64): Likewise. (match_srxi_as_c_srxi): Likewise. (riscv_insn_types): Added .insn css/cl/cs. sim/ PR 27158 * riscv/sim-main.c (execute_i): Updated encoding macros.
2021-02-13sim: testsuite: push $arch out to targetsMike Frysinger73-45/+274
This is needed to move to automake & its dejagnu-provided logic, and eventually by the unified sim logic. The $arch is used only to figure out which `run` program to use when running tests, and as we move to a single top-level build, we can delete this and use sim/run directly.
2021-02-13sim: rx: mitigate fread warningMike Frysinger2-2/+8
Current toolchains warn about unused result from fread, so mitigate the edge case if fread returns short data. It's not great, but it gets things building again.
2021-02-13sim: switch to AC_CONFIG_MACRO_DIRSMike Frysinger132-58741/+1168
Rather than hand maintain m4 includes in various autotool files, use AC_CONFIG_MACRO_DIRS to declare the relevant search paths. This simplifies the code, makes it more robust, and cleans out unused logic from configure.
2021-02-13sim: common: delete unused aclocal.m4Mike Frysinger2-15/+4
This was missed when we deleted the common/configure build logic.
2021-02-08sim/rx: enable build with warningsAndrew Burgess3-1/+8
The rx simulator now has no build warnings. Delete the call to SIM_AC_OPTION_WARNINGS in configure.ac, the default yes will be provided by SIM_AC_OUTPUT. sim/rx/ChangeLog: * configure: Regenerate. * configure.ac (SIM_AC_OPTION_WARNINGS): Delete call.
2021-02-08sim/rx: avoid pointer arithmetic on void * pointersAndrew Burgess3-6/+18
Pointer arithmetic on void * pointers results in a GCC warning. Avoid the warning by casting the pointer to its actual type earlier in the function. sim/rx/ChangeLog: * mem.c (mem_put_blk): Rename parameter, add cast from parameter type to local type. Remove cast later in the function. (mem_get_blk): Likewise. * mem.h (mem_put_blk): Rename parameter to match definition. (mem_get_blk): Likewise.
2021-02-08sim/rx: add some missing includesAndrew Burgess3-2/+8
In load.c there's some GCC warnings about undefined functions (bfd_get_elf_phdr_upper_bound and bfd_get_elf_phdrs). To get the declarations of these functions include 'elf-bfd.h'. This headers also pulls in other elf related headers, like 'elf/internal.h' and 'elf/common.h', so these no longer need to be explicitly included from load.c. In trace.c and include for trace.h is missing, again this results in GCC warnings for missing function declarations. sim/rx/ChangeLog: * load.c: Replace 'elf/internal.h' and 'elf/common.h' includes with 'elf-bfd.h' include. * trace.c: Add 'trace.h' include.
2021-02-08sim/rx: use PRIx64 in printf format stringAndrew Burgess2-2/+7
Silence a GCC compiler warning by using PRIx64 in printf format string instead of hard coded "llx". sim/rx/ChangeLog: * reg.c (trace_register_changes): Use PRIx64 in printf format string.
2021-02-08sim/rx: move some variable declarations to the start of the blockAndrew Burgess3-3/+11
For sim code variables still need to be declared at the start of the enclosing block. This silences a few GCC warnings. sim/rx/ChangeLog: * syscalls.c (rx_syscall): Move declaration of some variables to the start of the enclosing block. * trace.c (load_file_and_line): Likewise.
2021-02-08sim/rx: provide a format string for printfAndrew Burgess2-4/+9
Calling printf with the format being a non constant string results in a GCC warning: warning: format not a string literal and no format arguments [-Wformat-nonliteral] Provide a constant format string to printf in the few places this warning is triggered. sim/rx/ChangeLog: * reg.c (fpsw2str): Provide a format string to printf. (trace_register_changes): Likewise.
2021-02-08sim/rx: delete an unused functionAndrew Burgess2-9/+4
This function is not used. sim/rx/ChangeLog: * err.c (execution_error_exit_all): Delete.
2021-02-08sim/rx: mark some functions as staticAndrew Burgess4-3/+9
Some functions that should be marked static. sim/rx/ChangeLog: * fpu.c (check_exceptions): Make static. * gdb-if.c (handle_step): Likewise. * mem.c (mem_put_byte): Likewise.
2021-02-08sim/rx: fill in missing 'void' for empty argument listsAndrew Burgess7-9/+21
Ensure we have 'void' inside empty argument lists. This was causing several warnings for the rx simulator. sim/rx/ChangeLog: * cpu.h (trace_register_changes): Add void parameter type. * err.c (ee_overrides): Likewise. * mem.c (mem_usage_stats): Likewise. (e): Likewise. * reg.c (stack_heap_stats): Likewise. * rx.c (pop): Likewise. (poppc): Likewise. (decode_opcode): Likewise. * syscalls.c (arg): Likewise.
2021-02-08sim/rx: fix an issue where we try to modify a const stringAndrew Burgess2-2/+6
While experimenting with switching on warnings for the rx simulator I discovered this bug. In sim_do_command we get passed a 'const char *' argument. We create a copy of this string to work with locally, but then while processing this we accidentally switch back to reference the original string. sim/rx/ChangeLog: * gdb-if.c (sim_do_command): Work with a copy of the command.
2021-02-08sim/rx: define sim_memory_mapAndrew Burgess2-0/+12
The rx simulator doesn't define sim_memory_map and so fails to link with GDB. Define it now to return NULL, this can be extended later to return an actual memory map if anyone wants this functionality. sim/rx/ChangeLog: * gdb-if.c (sim_memory_map): New function.
2021-02-06sim: erc32/m32c/rl78: add sim_memory_map stub for gdbMike Frysinger6-0/+30
These ports don't use the common sim core, so they weren't providing a sim_memory_map for gdb, so they failed to link with the new memory map logic added for the sim. Add stubs to fix.
2021-02-06sim: watchpoints: use common sim_pc_getMike Frysinger25-54/+129
Few arches implement STATE_WATCHPOINTS()->pc while all of them implement sim_pc_get. Lets switch the sim-watch core for monitoring pc events to the sim_pc_get API so this module works for all ports, and then we can delete this old back channel of snooping in the port's cpu state -- the code needs the pointer to the pc storage so that it can read out bytes and compare them to the watchrange. This also fixes the logic on multi-cpu sims by removing the limitation of only being able to watch CPU0's state.