aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-03-08Split out eval_op_negTom Tromey2-9/+24
This splits UNOP NEG into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_neg): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_plusTom Tromey2-9/+24
This splits UNOP_PLUS into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_plus): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_repeatTom Tromey2-13/+28
This splits BINOP_REPEAT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_repeat): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_leqTom Tromey2-13/+29
This splits BINOP_LEQ into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_leq): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_geqTom Tromey2-13/+29
This splits BINOP_GEQ into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_geq): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_gtrTom Tromey2-13/+29
This splits BINOP_GTR into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_gtr): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_lessTom Tromey2-13/+29
This splits BINOP_LESS into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_less): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_notequalTom Tromey2-13/+29
This splits BINOP_NOTEQUAL into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_notequal): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_equalTom Tromey2-13/+29
This splits BINOP_EQUAL into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_equal): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_subscriptTom Tromey2-26/+42
This splits BINOP_SUBSCRIPT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_subscript): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_binaryTom Tromey2-38/+53
This splits out a new eval_op_binary helper function. This function can handle several different binary operations: case BINOP_EXP: case BINOP_MUL: case BINOP_DIV: case BINOP_INTDIV: case BINOP_REM: case BINOP_MOD: case BINOP_LSH: case BINOP_RSH: case BINOP_BITWISE_AND: case BINOP_BITWISE_IOR: case BINOP_BITWISE_XOR: gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_binary): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_subTom Tromey2-19/+34
This splits BINOP_SUB into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_sub): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_addTom Tromey2-15/+30
This splits BINOP_ADD into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_add): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_memberTom Tromey2-32/+49
This splits STRUCTOP_MEMBER into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_member): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_structop_ptrTom Tromey2-50/+66
This splits STRUCTOP_PTR into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_structop_ptr): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_structop_structTom Tromey2-7/+23
This splits STRUCTOP_STRUCT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_structop_struct): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_ternopTom Tromey2-7/+22
This splits TERNOP_SLICE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_ternop): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_concatTom Tromey2-6/+21
This splits BINOP_CONCAT into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_concat): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_objc_selectorTom Tromey2-7/+21
This splits OP_OBJC_SELECTOR into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_objc_selector): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_stringTom Tromey2-4/+20
This splits OP_STRING into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_string): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_registerTom Tromey2-21/+36
This splits OP_REGISTER into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_register): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_func_static_varTom Tromey2-10/+24
This splits OP_FUNC_STATIC_VAR into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_func_static_var): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_var_msym_valueTom Tromey2-9/+24
This splits OP_VAR_MSYM_VALUE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_var_msym_value): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_var_entry_valueTom Tromey2-13/+26
This splits OP_VAR_ENTRY_VALUE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_var_entry_value): New function. (evaluate_subexp_standard): Use it.
2021-03-08Split out eval_op_scopeTom Tromey2-8/+24
This splits OP_SCOPE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_scope): New function. (evaluate_subexp_standard): Use it.
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-08Automatic date update in version.inGDB Administrator1-1/+1
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-03-07Automatic date update in version.inGDB Administrator1-1/+1
2021-03-06Fix build bug in ada-lang.cTom Tromey2-2/+7
An earlier patch of mine introduced a build failure in ada-lang.c. A couple of "to_string" calls were not namespace-qualified. In the failing setup, the std string_view is being used, and so (apparently) ADL doesn't find gdb::to_string. This patch, from the bug, fixes the problem. gdb/ChangeLog 2021-03-06 Chernov Sergey <klen_s@mail.ru> PR gdb/27528: * ada-lang.c (ada_fold_name): Use gdb::to_string.
2021-03-06Move dwarf2_get_dwz_file to dwarf2/dwz.hTom Tromey6-242/+269
This moves dwarf2_get_dwz_file and some helper code to dwarf2/dwz.h. The main benefit of this is just shrinking dwarf2/read.c a little bit. gdb/ChangeLog 2021-03-06 Tom Tromey <tom@tromey.com> * dwarf2/sect-names.h (dwarf2_elf_names): Declare. * dwarf2/read.h (dwarf2_get_dwz_file): Move to dwz.h. * dwarf2/read.c (dwarf2_elf_names): No longer static. (locate_dwz_sections, dwz_search_other_debugdirs) (dwarf2_get_dwz_file): Move to dwz.c. * dwarf2/dwz.h (dwarf2_get_dwz_file): Move declaration from read.h. * dwarf2/dwz.c (locate_dwz_sections, dwz_search_other_debugdirs) (dwarf2_get_dwz_file): Move from read.c.
2021-03-06Include scoped_fd.h in debuginfod-support.hTom Tromey2-0/+6
debuginfod-support.h requires scoped_fd, so include the header here. gdb/ChangeLog 2021-03-06 Tom Tromey <tom@tromey.com> * debuginfod-support.h: Include scoped_fd.h.
2021-03-06Avoid crash on missing dwz fileTom Tromey7-14/+97
If DWARF contains a reference to a "dwz" file, but there is no .gnu_debugaltlink section, then gdb will crash. This happens because dwarf2_get_dwz_file will return NULL, but some callers do not expect this. This patch changes dwarf2_get_dwz_file so that callers can require a dwz file. Then, it updates the callers that are attempting to process references to the dwz file to require one. This includes a new testcase. The dwarf.exp changes don't handle the new forms exactly correctly -- they are only handled well enough to let this test case complete. gdb/ChangeLog 2021-03-06 Tom Tromey <tom@tromey.com> * dwarf2/read.h (dwarf2_get_dwz_file): Add 'require' parameter. * dwarf2/read.c (dwarf2_get_dwz_file): Add 'require' parameter. (get_abbrev_section_for_cu, read_attribute_value) (get_debug_line_section): Update. * dwarf2/macro.c (dwarf_decode_macro_bytes): Update. gdb/testsuite/ChangeLog 2021-03-06 Tom Tromey <tom@tromey.com> * lib/dwarf.exp (_handle_DW_FORM): Treat DW_FORM_GNU_ref_alt and DW_FORM_GNU_strp_alt like DW_FORM_sec_offset. * gdb.dwarf2/dwznolink.exp: New file.
2021-03-06Change section_is_p to a method on dwarf2_section_namesTom Tromey3-79/+82
This replaces section_is_p with a method on dwarf2_section_names. gdb/ChangeLog 2021-03-06 Tom Tromey <tom@tromey.com> * dwarf2/sect-names.h (struct dwarf2_section_names) <matches>: New method. * dwarf2/read.c (section_is_p): Remove. (dwarf2_per_bfd::locate_sections) (dwarf2_per_bfd::locate_sections, locate_dwz_sections) (locate_v1_virtual_dwo_sections, dwarf2_locate_dwo_sections) (dwarf2_locate_common_dwp_sections) (dwarf2_locate_v2_dwp_sections, dwarf2_locate_v5_dwp_sections): Update.
2021-03-06Create new file dwarf2/sect-names.hTom Tromey5-45/+79
This creates a new file, dwarf2/sect-names.h, and moves some DWARF-specific type definitions from symfile.h into it. gdb/ChangeLog 2021-03-06 Tom Tromey <tom@tromey.com> * xcoffread.c: Include sect-names.h. * symfile.h (struct dwarf2_section_names, struct dwarf2_debug_sections): Move to dwarf2/sect-names.h. * dwarf2/sect-names.h: New file, from symfile.h. * dwarf2/read.c: Include sect-names.h.
2021-03-06Micro-optimize abbrev reading and storageTom Tromey4-67/+61
Currently, and abbrev_info points to a separately allocated array of attr_abbrev objects. This array is constructed in a temporary vector, then copied to the abbrev table's obstack. This patch changes abbrev_info to use the struct hack to store the objects directly, and changes abbrev_table::read to avoid an extra copy when allocating, using the "growing objects" capability of obstacks. This saves a bit of space, and also perhaps a little time. 2021-03-06 Tom Tromey <tom@tromey.com> * dwarf2/read.c (read_attribute): Make 'abbrev' const. * dwarf2/abbrev.c (abbrev_table::alloc_abbrev): Remove. (abbrev_table::read): Update. * dwarf2/abbrev.h (struct attr_abbrev): Move earlier. (struct abbrev_info): Reformat. <attrs>: Now an array. (struct abbrev_table) <alloc_abbrev>: Remove.
2021-03-05elf/x86-64: Subtract __ImageBase for R_AMD64_IMAGEBASEH.J. Lu20-7/+231
When linking Windows x86-64 relocatable object files to generate x86-64 ELF executable, we need to subtract __ImageBase, aka __executable_start, for R_AMD64_IMAGEBASE relocation: 1. Add link_info to struct output_elf_obj_tdata to store linker info and _bfd_get_link_info() to retrieve it. 2. Add ldelf_set_output_arch to set up link_info. 3. Add pex64_link_add_symbols to create an indirect reference to __executable_start for __ImageBase to support R_AMD64_IMAGEBASE relocation when adding symbols from Windows x86-64 relocatable object files to generate x86-64 ELF executable. 4. Also subtract __ImageBase for R_AMD64_IMAGEBASE when generating x86-64 ELF executable. bfd/ PR ld/27425 PR ld/27432 * bfd.c (_bfd_get_link_info): New function. * elf-bfd.h (output_elf_obj_tdata): Add link_info. (elf_link_info): New. * libbfd-in.h (_bfd_get_link_info): New prototype. * coff-x86_64.c (coff_amd64_reloc): Also subtract __ImageBase for R_AMD64_IMAGEBASE when generating x86-64 ELF executable. * pe-x86_64.c: Include "coff/internal.h" and "libcoff.h". (pex64_link_add_symbols): New function. (coff_bfd_link_add_symbols): New macro. * libbfd.h: Regenerated. ld/ PR ld/27425 PR ld/27432 * ldelf.c (ldelf_set_output_arch): New function. * ldelf.h (ldelf_set_output_arch): New prototype. * emultempl/elf.em (LDEMUL_SET_OUTPUT_ARCH): Default to ldelf_set_output_arch. * ld-x86-64/pe-x86-64-1.od: Expect __executable_start. * testsuite/ld-x86-64/pe-x86-64-2.od: Likewise. * testsuite/ld-x86-64/pe-x86-64-3.od: Likewise. * testsuite/ld-x86-64/pe-x86-64-4.od: Likewise. * testsuite/ld-x86-64/pe-x86-64-5.od: Likewise. * testsuite/ld-x86-64/pe-x86-64-5.rd: Likewise. * testsuite/ld-x86-64/pe-x86-64-6.obj.bz2: New file. * testsuite/ld-x86-64/pe-x86-64-6.od: Likewise. * testsuite/ld-x86-64/pe-x86-64.exp: Run ld/27425 test.
2021-03-06Make valgrind tests more robust by adding --wait=1 to vgdb invocationMark Wielaard2-1/+5
On my setup some valgrind tests failed somewhat reliably because the target remote | vgdb command couldn't find the vgdb-pipe files because valgrind startup hadn't finished yet. I tried to fix this by replacing the "Memcheck, a memory error detector" match to "TO DEBUG THIS PROCESS USING GDB: start GDB like this" which is right before valgrind creates the vgdb-pipe files. But even that didn't guarantee that the vgdb-pipe files were there (maybe valgrind should print that text after it has created them?). But also not all tests use --vgdb-error=0, so the text isn't always printed. To make the tests reliable I added --wait=1 to the vgdb invocation. That tells vgdb to try to find the vgdb-pipe files, and if they aren't there yet, to wait 1 second and try again. gdb/testsuite/ChangeLog: * lib/valgrind.exp (vgdb_start): Add --wait=1 to vgdbcmd.
2021-03-05CTF: add all members of an enum type to psymtabWeimin Pan2-3/+32
With the following change which was made last April: [gdb] Use partial symbol table to find language for main commit d3214198119c1a2f9a6a2b8fcc56d8c324e1a245 The ctf reader was modified to enter all members of an enum type, similar to what the dwarf2 reader did, into the psymtab or gdb won't be able to find them. In addition, the empty name checking needed to be moved down so members of a unnamed enum were not left out. gdb/ChangeLog: * ctfread.c (ctf_psymtab_add_enums): New function. (ctf_psymtab_type_cb): call ctf_psymtab_add_enums.
2021-03-05CTF: set up debug info for function argumentsWeimin Pan4-61/+109
Added this support in read_func_kind_type after gcc started generating CTF for function arguments. Replaced XNEW with std::vector and NULL with nullptr. Expanded gdb.base/ctf-ptype.exp to test function arguments. Also fixed some typos. gdb/ChangeLog: * ctfread.c (read_func_kind_type): Set up function arguments. gdb/testsuite/ChangeLog: * gdb.base/ctf-ptype.exp: Add function tests and fix typos.
2021-03-06Automatic date update in version.inGDB Administrator1-1/+1
2021-03-05gdb/riscv: write CSRs into baremetal core dumpsAndrew Burgess2-0/+69
Use the current target description to include CSRs into the RISC-V baremetal core dumps. Every CSR declared in the current target description will be included in the core dump. It will be critical for users that they have the same target description in use when loading the core file as was in use when writing the core file. This should be fine if the user allows the target description to be written into the core file. In more detail, this commit adds a NT_RISCV_CSR note type. The contents of this section is a series of either 4-byte (on RV32 targets), or 8-byte (on RV64 targets) values. Every CSR that is mentioned in the current target description is written out in the order the registers appear in the target description. As a consequence it is critical that the exact same target description, including the same register order, is in use when the CSRs are loaded from the core file. gdb/ChangeLog: * riscv-none-tdep.c: Add 'user-regs.h' and 'target-description.h' includes. (riscv_csrset): New static global. (riscv_update_csrmap): New function. (riscv_iterate_over_regset_sections): Process CSRs.
2021-03-05gdb/riscv: make riscv target description names globalAndrew Burgess3-4/+25
A later commit will need the names of the RISC-V target description features in files other than riscv-tdep.c. This commit just makes the names global strings that can be accessed from other riscv-*.c files. There should be no user visible changes after this commit. gdb/ChangeLog: * riscv-tdep.c (riscv_feature_name_csr): Define. (riscv_feature_name_cpu): Define. (riscv_feature_name_fpu): Define. (riscv_feature_name_virtual): Define. (riscv_xreg_feature): Use riscv_feature_name_cpu. (riscv_freg_feature): Use riscv_feature_name_fpu. (riscv_virtual_feature): Use riscv_feature_name_virtual. (riscv_csr_feature): Use riscv_feature_name_csr. * riscv-tdep.h (riscv_feature_name_csr): Declare.
2021-03-05bfd/binutils: add support for RISC-V CSRs in core filesAndrew Burgess7-0/+60
Adds support for including RISC-V control and status registers into core files. The value for the define NT_RISCV_CSR is set to 0x900, this corresponds to a patch I have proposed for the Linux kernel here: http://lists.infradead.org/pipermail/linux-riscv/2020-December/003910.html As I have not yet heard if the above patch will be accepted into the kernel or not I have set the note name string to "GDB", and the note type to NT_RISCV_CSR. This means that if the above patch is rejected from the kernel, and the note type number 0x900 is assigned to some other note type, we will still be able to distinguish between the GDB produced NT_RISCV_CSR, and the kernel produced notes, where the name would be set to "CORE". bfd/ChangeLog: * elf-bfd.h (elfcore_write_riscv_csr): Declare. * elf.c (elfcore_grok_riscv_csr): New function. (elfcore_grok_note): Handle NT_RISCV_CSR. (elfcore_write_riscv_csr): New function. (elfcore_write_register_note): Handle '.reg-riscv-csr'. binutils/ChangeLog: * readelf.c (get_note_type): Handle NT_RISCV_CSR. include/ChangeLog: * elf/common.h (NT_RISCV_CSR): Define.
2021-03-05gdb/riscv: introduce bare metal core dump supportAndrew Burgess8-3/+291
This commit adds the ability for bare metal RISC-V target to generate core files from within GDB. The intended use case is that a user will connect to a remote bare metal target, debug up to some error condition, then generate a core file in the normal way using: (gdb) generate-core-file This core file can then be used to revisit the state of the remote target without having to reconnect to the remote target. The core file creation code is split between two new files. In elf-none-tdep.c is code for any architecture with the none ABI (i.e. bare metal) when the BFD library is built with ELF support. In riscv-none-tdep.c are the RISC-V specific parts. This is where the regset and regcache_map_entry structures are defined that control how registers are laid out in the core file. As this file could (in theory at least) be used for a non-ELF bare metal RISC-V target, the calls into elf-none-tdep.c are guarded with '#ifdef HAVE_ELF'. Currently for RISC-V only the x-regs and f-regs (if present) are written out. In future commits I plan to add support for writing out the RISC-V CSRs. The core dump format is based around generating an ELF containing sections for the writable regions of memory that a user could be using. Which regions are dumped rely on GDB's existing common core dumping code, GDB will attempt to figure out the stack and heap as well as copying out writable data sections as identified by the original ELF. Register information is added to the core dump using notes, just as it is for Linux of FreeBSD core dumps. The note types used consist of the 3 basic types you would expect in a OS based core dump, NT_PRPSINFO, NT_PRSTATUS, NT_FPREGSET. The layout of these notes differs slightly (due to field sizes) between RV32 and RV64. Below I describe the data layout for each note. In all cases, all padding fields should be set to zero. Note NT_PRPSINFO is optional. Its data layout is: struct prpsinfo32_t /* For RV32. */ { uint8_t padding[32]; char fname[16]; char psargs[80]; } struct prpsinfo64_t /* For RV64. */ { uint8_t padding[40]; char fname[16]; char psargs[80]; } Field 'fname' - null terminated string consisting of the basename of (up to the fist 15 characters of) the executable. Any additional space should be set to zero. If there's no executable name then this field can be set to all zero. Field 'psargs' - a null terminated string up to 80 characters in length. Any additional space should be filled with zero. This field contains the full executable path and any arguments passed to the executable. If there's nothing sensible to write in this field then fill it with zero. Note NT_PRSTATUS is required, its data layout is: struct prstatus32_t /* For RV32. */ { uint8_t padding_1[12]; uint16_t sig; uint8_t padding_2[10]; uint32_t thread_id; uint8_t padding_3[44]; uint32_t x_regs[32]; uint8_t padding_4[4]; } struct prstatus64_t /* For RV64. */ { uint8_t padding_1[12]; uint16_t sig; uint8_t padding_2[18]; uint32_t thread_id; uint8_t padding_3[76]; uint64_t x_regs[32]; uint8_t padding_4[4]; } Field 'sig' - the signal that stopped this thread. It's implementation defined what this field actually means. Within GDB this will be the signal number that the remote target reports as the stop reason for this thread. Field 'thread_is' - the thread id for this thread. It's implementation defined what this field actually means. Within GDB this will be thread thread-id that is assigned to each remote thread. Field 'x_regs' - at index 0 we store the program counter, and at indices 1 to 31 we store x-registers 1 to 31. x-register 0 is not stored, its value is always zero anyway. Note NT_FPREGSET is optional, its data layout is: fpregset32_t /* For targets with 'F' extension. */ { uint32_t f_regs[32]; uint32_t fcsr; } fpregset64_t /* For targets with 'D' extension . */ { uint64_t f_regs[32]; uint32_t fcsr; } Field 'f_regs' - stores f-registers 0 to 31. Field 'fcsr' - stores the fcsr CSR register, and is always 4-bytes. The rules for ordering the notes is the same as for Linux. The NT_PRSTATUS note must come before any other notes about additional register sets. And for multi-threaded targets all registers for a single thread should be grouped together. This is because only NT_PRSTATUS includes a thread-id, all additional register notes after a NT_PRSTATUS are assumed to belong to the same thread until a different NT_PRSTATUS is seen. gdb/ChangeLog: * Makefile.in (ALL_TARGET_OBS): Add riscv-none-tdep.o. (ALLDEPFILES): Add riscv-none-tdep.c. * configure: Regenerate. * configure.ac (CONFIG_OBS): Add elf-none-tdep.o when BFD has ELF support. * configure.tgt (riscv*-*-*): Include riscv-none-tdep.c. * elf-none-tdep.c: New file. * elf-none-tdep.h: New file. * riscv-none-tdep.c: New file.
2021-03-05bfd/riscv: prepare to handle bare metal core dump creationAndrew Burgess2-2/+91
When creating a core file GDB will call the function elfcore_write_prstatus to write out the general purpose registers along with the pid/tid for the thread (into a prstatus structure) and the executable name and arguments (into a prpsinfo_t structure). However, for a bare metal RISC-V tool chain the prstatus_t and prpsinfo_t types are not defined so the elfcore_write_prstatus function will return NULL, preventing core file creation. This commit provides the `elf_backend_write_core_note' hook and uses the provided function to write out the required information. In order to keep changes in the non bare metal tools to a minimum, the provided backend function will itself return NULL when the prstatus_t or pspsinfo_t types are available, the consequence of this is that the generic code in elfcore_write_prstatus will be used just as before. But, when prstatus_t or prpsinfo_t is not available, the new backend function will write out the information using predefined offsets. This new functionality will be used by a later GDB commit that will add bare metal core dumps for RISC-V. bfd/ChangeLog: * elfnn-riscv.c (PRPSINFO_PR_FNAME_LENGTH): Define. (PRPSINFO_PR_PSARGS_LENGTH): Define. (riscv_write_core_note): New function. (riscv_elf_grok_psinfo): Make use of two new length defines. (elf_backend_write_core_note): Define.
2021-03-05gdb: write target description into core fileAndrew Burgess6-0/+82
When a core file is created from within GDB add the target description into a note within the core file. When loading a core file, if the target description note is present then load the target description from the core file. The benefit of this is that we can be sure that, when analysing the core file within GDB, that we are using the exact same target description as was in use at the time the core file was created. GDB already supports a mechanism for figuring out the target description from a given corefile; gdbarch_core_read_description. This new mechanism (GDB adding the target description) is not going to replace the old mechanism. Core files generated outside of GDB will not include a target description, and so GDB still needs to be able to figure out a target description for these files. My primary motivation for adding this feature is that, in a future commit, I will be adding support for bare metal core dumps on some targets. For RISC-V specifically, I want to be able to dump all the available control status registers. As different targets will present different sets of register in their target description, including registers that are possibly not otherwise known to GDB I wanted a way to capture these registers in the core dump. I therefore need a mechanism to write out an arbitrary set of registers, and to then derive a target description from this arbitrary set when later loading the core file. The obvious approach (I think) is to just reuse the target description. Once I'd decided to add support for writing out the target description I could either choose to make this RISC-V only, or make it generic. I figure that having the target description in the core file doesn't hurt, and _might_ be helpful. So that's how I got here, general support for including the target description in GDB generated core files. In previous versions of this patch I added the target description from generic code (in gcore.c). However, doing this creates a dependency between GDB's common code and bfd ELF support. As ELF support in gdb is optional (for example the target x86_64-apple-darwin20.3.0 does not include ELF support) then having gcore.c require ELF support would break the GDB build in some cases. Instead, in this version of the patch, writing the target description note is done from each specific targets make notes function. Each of these now calls a common function in gcore-elf.c (which is only linked in when bfd has ELF support). And so only targets that are ELF based will call the new function and we can therefore avoid an unconditional dependency on ELF support. gdb/ChangeLog: * corelow.c: Add 'xml-tdesc.h' include. (core_target::read_description): Load the target description from the core file when possible. * fbsd-tdep.c (fbsd_make_corefile_notes): Add target description note. * gcore-elf.c: Add 'gdbsupport/tdesc.h' include. (gcore_elf_make_tdesc_note): New function. * gcore-elf.h (gcore_elf_make_tdesc_note): Declare. * linux-tdep.c (linux_make_corefile_notes): Add target description note.