aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2020-11-12gdb: rewrite how per language primitive types are managedAndrew Burgess15-816/+630
Consider the following GDB session: $ gdb (gdb) set language c (gdb) ptype void type = void (gdb) set language fortran (gdb) ptype void No symbol table is loaded. Use the "file" command. (gdb) With no symbol file loaded GDB and the language set to C GDB knows about the type void, while when the language is set to Fortran GDB doesn't know about the void, why is that? In f-lang.c, f_language::language_arch_info, we do have this line: lai->primitive_type_vector [f_primitive_type_void] = builtin->builtin_void; where we add the void type to the list of primitive types that GDB should always know about, so what's going wrong? It turns out that the primitive types are stored in a C style array, indexed by an enum, so Fortran uses `enum f_primitive_types'. The array is allocated and populated in each languages language_arch_info member function. The array is allocated with an extra entry at the end which is left as a NULL value, and this indicates the end of the array of types. Unfortunately for Fortran, a type is not assigned for each element in the enum. As a result the final populated array has gaps in it, gaps which are initialised to NULL, and so every time we iterate over the list (for Fortran) we stop early, and never reach the void type. This has been the case since 2007 when this functionality was added to GDB in commit cad351d11d6c3f6487cd. Obviously I could just fix Fortran by ensuring that either the enum is trimmed, or we create types for the missing types. However, I think a better approach would be to move to C++ data structures and removed the fixed enum indexing into the array approach. After this commit the primitive types are pushed into a vector, and GDB just iterates over the vector in the obvious way when it needs to hunt for a type. After this commit all the currently defined primitive types can be found when the language is set to Fortran, for example: $ gdb (gdb) set language fortran (gdb) ptype void type = void (gdb) A new test checks this functionality. I didn't see any other languages with similar issues, but I could have missed something. gdb/ChangeLog: * ada-exp.y (find_primitive_type): Make parameter const. * ada-lang.c (enum ada_primitive_types): Delete. (ada_language::language_arch_info): Update. * c-lang.c (enum c_primitive_types): Delete. (c_language_arch_info): Update. (enum cplus_primitive_types): Delete. (cplus_language::language_arch_info): Update. * d-lang.c (enum d_primitive_types): Delete. (d_language::language_arch_info): Update. * f-lang.c (enum f_primitive_types): Delete. (f_language::language_arch_info): Update. * go-lang.c (enum go_primitive_types): Delete. (go_language::language_arch_info): Update. * language.c (auto_or_unknown_language::language_arch_info): Update. (language_gdbarch_post_init): Use obstack_new, use array indexing. (language_string_char_type): Add header comment, call function in language_arch_info. (language_bool_type): Likewise (language_arch_info::bool_type): Define. (language_lookup_primitive_type_1): Delete. (language_lookup_primitive_type): Rewrite as a templated function to call function in language_arch_info, then instantiate twice. (language_arch_info::type_and_symbol::alloc_type_symbol): Define. (language_arch_info::lookup_primitive_type_and_symbol): Define. (language_arch_info::lookup_primitive_type): Define twice with different signatures. (language_arch_info::lookup_primitive_type_as_symbol): Define. (language_lookup_primitive_type_as_symbol): Rewrite to call a member function in language_arch_info. * language.h (language_arch_info): Complete rewrite. (language_lookup_primitive_type): Make templated. * m2-lang.c (enum m2_primitive_types): Delete. (m2_language::language_arch_info): Update. * opencl-lang.c (OCL_P_TYPE): Delete. (enum opencl_primitive_types): Delete. (opencl_type_data): Delete. (builtin_opencl_type): Delete. (lookup_opencl_vector_type): Update. (opencl_language::language_arch_info): Update, lots of content moved from... (build_opencl_types): ...here. This function is now deleted. (_initialize_opencl_language): Delete. * p-lang.c (enum pascal_primitive_types): Delete. (pascal_language::language_arch_info): Update. * rust-lang.c (enum rust_primitive_types): Delete. (rust_language::language_arch_info): Update. gdb/testsuite/ChangeLog: * gdb.fortran/types.exp: Add more tests.
2020-11-12gdb/dwarf: fix call to dwarf2_queue_guard in dw2_do_instantiate_symtabSimon Marchi2-1/+6
It took me a while to understand why that would even compile: it looks like we pass a type name as a pointer, that makes no sense. By looking at the DWARF, I understood that the compiler actually interprets it as a function declaration. So the statement was doing nothing, no dwarf2_queue_guard was instantiated. Fix it by passing the right variable name. gdb/ChangeLog: * dwarf2/read.c (dw2_do_instantiate_symtab): Fix call to dwarf2_queue_guard. Change-Id: I3a7bdead9e8c39f8342a471f10181b85b8f0d801
2020-11-12gdb/dwarf: fix typo in dwarf2/read.cSimon Marchi2-1/+6
gdb/ChangeLog: * dwarf2/read.c (dw2_do_instantiate_symtab): Fix typo in comment. Change-Id: I6cb98768c04a537cf3d427648bddc57c631518e5
2020-11-12gdb: convert "set debug dwarf-read" to new styleSimon Marchi2-152/+119
Add dwarf_read_debug_printf and dwarf_read_debug_printf_v macros and use them throughout dwarf2/read.c. The second one is used for "verbose" prints, when the value of "set debug dwarf-read" is >= 2. gdb/ChangeLog: * dwarf2/read.c (dwarf_read_debug_printf, dwarf_read_debug_printf_v): New macros, use throughout the file. Change-Id: I694da69da2e1f2caa4c27a421a975790636411e2
2020-11-12arc: Write correct "eret" value during register collectionShahab Vahedi2-3/+12
In collect_register() function of arc-linux-tdep.c, the "eret" (exception return) register value was not being reported correctly. This patch fixes that. Background: When asked for the "pc" value, we have to update the "eret" register with GDB's STOP_PC. The "eret" instructs the kernel code where to jump back when an instruction has stopped due to a breakpoint. This is how collect_register() was doing so: --------------8<-------------- if (regnum == gdbarch_pc_regnum (gdbarch)) regnum = ARC_ERET_REGNUM; regcache->raw_collect (regnum, buf + arc_linux_core_reg_offsets[regnum]); -------------->8-------------- Root cause: Although this is using the correct offset (ERET register's), it is also changing the REGNUM itself. Therefore, raw_collect (regnum, ...) is not reading from "pc" anymore. v2: - Fix a copy/paste issue as rightfully addressed by Tom [1]. [1] https://sourceware.org/pipermail/gdb-patches/2020-November/173208.html gdb/ChangeLog: * arc-linux-tdep.c (collect_register): Populate "eret" by "pc" value from the regcache when asked for "pc" value.
2020-11-12Fix Rust regression with -readnowTom Tromey4-24/+52
PR rust/26799 points out that a certain test case fails with -readnow. This happens because, with -readnow, there are no partial symtabs; but find_symbol_at_address requires these. This patch fixes this problem by searching all of an objfile's compunit symtabs if it does not have partial symbols. Note that this test will still fail with .gdb_index. I don't think that is readily fixable. gdb/ChangeLog 2020-11-12 Tom Tromey <tom@tromey.com> PR rust/26799: * symtab.c (find_symbol_at_address): Search symtabs if no psymtabs exist. gdb/testsuite/ChangeLog 2020-11-12 Tom Tromey <tom@tromey.com> PR rust/26799: * gdb.rust/traits.exp: Remove kfails.
2020-11-12Fix gdb.threads/tls-so_extern.exp with ClangGary Benson2-0/+7
Clang fails to compile gdb.threads/tls-so_extern_main.c, giving the following error: /gdbtest/src/gdb/testsuite/gdb.threads/tls-so_extern_main.c:28:1: warning: non-void function does not return a value [-Wreturn-type] This commit adds a return statement to the offending function. gdb/testsuite/ChangeLog: * gdb.threads/tls-so_extern_main.c (tls_ptr): Add missing return statement.
2020-11-12gdb: add an option flag to 'maint print c-tdesc'Andrew Burgess7-81/+173
GDB has two approaches to generating the target descriptions found in gdb/features/, the whole description approach, where the XML file contains a complete target description which is then used to generate a single C file that builds that target description. Or, the split feature approach, where the XML files contain a single target feature, each feature results in a single C file to create that one feature, and then a manually written C file is used to build a complete target description from individual features. There's a Makefile, gdb/features/Makefile, which is responsible for managing the regeneration of the C files from the XML files. However, some of the logic that selects between the whole description approach, or the split feature approach, is actually hard-coded into GDB, inside target-descriptions.c:maint_print_c_tdesc_cmd we check the path to the incoming XML file and use this to choose which type of C file we should generate. This commit removes this hard coding from GDB, and makes the Makefile entirely responsible for choosing the approach. This makes sense as the Makefile already has the XML files partitioned based on which approach they should use. In order to allow this change the 'maint print c-tdesc' command is given a new command option '-single-feature', which tells GDB which type of C file should be created. The makefile now supplies this flag to GDB. This did reveal a bug in features/Makefile, the rx.xml file was in the wrong list, this didn't matter previously as the actual choice of which approach to use was done in GDB. Now the Makefile decides, so placing each XML file in the correct list is critical. Tested this by doing 'make GDB=/path/to/gdb clean-cfiles cfiles' to regenerate all the C files from their XML source. There are no changes after this commit. gdb/ChangeLog: * features/Makefile (XMLTOC): Add rx.xml. (FEATURE_XMLFILES): Remove rx.xml. (FEATURE_CFILES rule): Pass '-single-feature' flag. * features/rx.c: Regenerate. * features/rx.xml: Wrap in `target` tags, and reindent. * target-descriptions.c (struct maint_print_c_tdesc_options): New structure. (maint_print_c_tdesc_opt_def): New typedef. (maint_print_c_tdesc_opt_defs): New static global. (make_maint_print_c_tdesc_options_def_group): New function. (maint_print_c_tdesc_cmd): Make use of command line flags, only print single feature C file for target descriptions containing a single feature. (maint_print_c_tdesc_cmd_completer): New function. (_initialize_target_descriptions): Update call to register command completer, and include command line flag in help text. gdb/doc/ChangeLog: * gdb.texinfo (Maintenance Commands): Update description of 'maint print c-tdesc'.
2020-11-11gdb/testsuite: add "breakpoint always-inserted" axis in ↵Simon Marchi2-3/+16
gdb.base/continue-after-aborted-step-over.exp The test gdb.base/continue-after-aborted-step-over.exp fails on ROCm GDB [1] when using the unix board (when debugging a standard x86-64/Linux program), with: (gdb) b *0^M Breakpoint 2 at 0x0^M Warning:^M Cannot insert breakpoint 2.^M Cannot access memory at address 0x0^M ^M (gdb) FAIL: gdb.base/continue-after-aborted-step-over.exp: displaced-stepping=off: b *0 This happens because that build of GDB defaults to "set breakpoint always-inserted on", for reasons that are unrelevant to explain here. As soon as the breakpoint is created, GDB tries to insert it and (expectedly) fails. This causes more text to be output than what the pattern expects. It is actually be relevant to run the test with both "set breakpoint always-inserted" on and off. With it on, it mimics what happens when running in non-stop mode, with other threads running. This is relevant for upstream even outside of the ROCm port, so here's a patch for it. Add this other axis and adjust the "b *0" test to handle the extra output when it is on. [1] https://github.com/ROCm-Developer-Tools/ROCgdb gdb/testsuite/ChangeLog: * gdb.base/continue-after-aborted-step-over.exp: Add "breakpoint always-inserted" axis. (do_test): Add breakpoint_always_inserted parameter. Change-Id: I95126cae563a0b9a72f4a99627809fc34340cd5e
2020-11-11gdb/riscv: add ability to decode dwarf CSR numbersAndrew Burgess3-0/+12
Extends riscv_dwarf_reg_to_regnum to add the ability to convert the DWARF register numbers for CSRs into GDB's internal numbers. gdb/ChangeLog: * riscv-tdep.c (riscv_dwarf_reg_to_regnum): Decode DWARF CSR numbers. * riscv-tdep.h (RISCV_DWARF_FIRST_CSR, RISCV_DWARF_LAST_CSR): New enum values.
2020-11-10Make internalvar_name return a const char *Tom Tromey3-2/+7
This changes internalvar_name to return a const char *. gdb/ChangeLog 2020-11-10 Tom Tromey <tom@tromey.com> * value.h (internalvar_name): Update. * value.c (internalvar_name): Make return type const.
2020-11-10Use "const" more in ax-gdb.cTom Tromey2-10/+16
This changes a few spots in ax-gdb.c to use a "const char *" rather than a non-const one. gdb/ChangeLog 2020-11-10 Tom Tromey <tom@tromey.com> * ax-gdb.c (gen_struct_elt_for_reference, gen_namespace_elt) (gen_maybe_namespace_elt, gen_aggregate_elt_ref, gen_expr): Use const.
2020-11-10Constify value_nsstringTom Tromey3-2/+7
This changes the "ptr" parameter to value_nsstring to be const. gdb/ChangeLog 2020-11-10 Tom Tromey <tom@tromey.com> * objc-lang.h (value_nsstring): Update. * objc-lang.c (value_nsstring): Make "ptr" const.
2020-11-10Fix bug in gdb.ada/bias.expTom Tromey3-6/+11
While working on a different bug in the Ada support, I found that the gdb.ada/bias.exp test is slightly incorrect. In particular, it is using a range type, which it then overflows during an operation. This patch changes the test so that the computed values remain in range. gdb/testsuite/ChangeLog 2020-11-10 Tom Tromey <tromey@adacore.com> * gdb.ada/bias.exp: Update. * gdb.ada/bias/bias.adb (X): Change value.
2020-11-10Prevent false passes in gdb.base/vla-optimized-out.expGary Benson2-1/+6
The "vla_optimized_out" procedure in gdb.base/vla-optimized-out.exp accepts a "sizeof_result" argument which is substituted into the regular expression used to check the result of printing the sizeof a VLA. The -O3 test variants, however, pass a regular expression fragment as that argument, which expands into a regular expression that matches any result with a "6" in it. This commit wraps the substitution with parentheses to prevent these false matches. gdb/testsuite/ChangeLog: * gdb.base/vla-optimized-out.exp (p sizeof (a)): Wrap supplied regexp fragment in parentheses to prevent false matching.
2020-11-10Prevent inlining in gdb.base/vla-optimized-out.cGary Benson2-2/+6
The function f1 in gdb.base/vla-optimized-out.c sets various attributes to prevent its being inlined, but Clang inlines it anyway, causing the test that uses it to fail. This commit adds the "weak" attribute to cause Clang to keep the function fully out of line so the test can operate as it should. gdb/testsuite/ChangeLog: * gdb.base/vla-optimized-out.c (f1): Add __attribute__ ((weak)).
2020-11-10Fix gdb.cp/step-and-next-inline.exp with ClangGary Benson2-4/+23
Clang fails to compile gdb.cp/step-and-next-inline.cc, with the following error: clang-12: error: unknown argument: '-gstatement-frontiers' compiler exited with status 1 This commit fixes the testcase by only passing -gstatement-frontiers when building with GCC. This commit also alters two checks marked as known failures, to mark them as known failures only when built using GCC. gdb/testsuite/ChangeLog: * gdb.cp/step-and-next-inline.exp: Only require -gstatement-frontiers when building with GCC. Only setup KFAIL's for GCC issues when using a GCC-built executable.
2020-11-06gdb: fix debug expression dumping of function call expressionsAndrew Burgess11-55/+160
In commit: commit 6d81691950f8c4be4a49a85a672255c140e82468 CommitDate: Sat Sep 19 09:44:58 2020 +0100 gdb/fortran: Move Fortran expression handling into f-lang.c A bug was introduced that broke GDB's ability to perform debug dumps of expressions containing function calls. For example this would no longer work: (gdb) set debug expression 1 (gdb) print call_me (&val) Dump of expression @ 0x4eced60, before conversion to prefix form: Language c, 12 elements, 16 bytes each. Index Opcode Hex Value String Value 0 OP_VAR_VALUE 40 (............... 1 OP_M2_STRING 79862864 P............... 2 unknown opcode: 224 79862240 ................ 3 OP_VAR_VALUE 40 (............... 4 OP_VAR_VALUE 40 (............... 5 OP_RUST_ARRAY 79861600 `............... 6 UNOP_PREDECREMENT 79861312 @............... 7 OP_VAR_VALUE 40 (............... 8 UNOP_ADDR 61 =............... 9 OP_FUNCALL 46 ................ 10 BINOP_ADD 1 ................ 11 OP_FUNCALL 46 ................ Dump of expression @ 0x4eced60, after conversion to prefix form: Expression: `call_me (&main::val, VAL(Aborted (core dumped) The situation was even worse for Fortran function calls, or array indexes, which both make use of the same expression opcode. The problem was that in a couple of places the index into the expression array was handled incorrectly causing GDB to interpret elements incorrectly. These issues are fixed in this commit. There are already some tests to check GDB when 'set debug expression 1' is set, these can be found in gdb.*/debug-expr.exp. Unfortunately the cases above were not covered. In this commit I have cleaned up all of the debug-expr.exp files a little, there was a helper function that had clearly been copied into each file, this is now moved into lib/gdb.exp. I've added a gdb.fortran/debug-expr.exp test file, and extended gdb.base/debug-expr.exp to cover the function call case. gdb/ChangeLog: * expprint.c (print_subexp_funcall): Increment expression position after reading argument count. * f-lang.c (print_subexp_f): Skip over opcode before calling common function. (dump_subexp_body_f): Likewise. gdb/testsuite/ChangeLog: * gdb.base/debug-expr.c: Add extra function to allow for an additional test. * gdb.base/debug-expr.exp (test_debug_expr): Delete, replace calls to this proc with gdb_test_debug_expr. Add an extra test. * gdb.cp/debug-expr.exp (test_debug_expr): Delete, replace calls to this proc with gdb_test_debug_expr, give the tests names * gdb.dlang/debug-expr.exp (test_debug_expr): Delete, replace calls to this proc with gdb_test_debug_expr, give the tests names * gdb.fortran/debug-expr.exp: New file. * gdb.fortran/debug-expr.f90: New file. * lib/gdb.exp (gdb_test_debug_expr): New proc.
2020-11-06gdb/testsuite: make DWARF assembler's ranges' "base" and "range" procsSimon Marchi10-66/+74
When creating a .debug_ranges section using the testsuite's DWARF assembler, it currently looks like this: ranges { sequence { {base ...} {range ...} {range ...} } } The sub-tree of sequence is manually traversed as a list of lists. I think it would be nicer if `base` and `range` where procedure, just like the other levels: ranges { sequence { base ... range ... range ... } } That makes the implementation more robust, and the usage a bit nicer (less special characters). It also allows having comments in between the range list entries: ranges { sequence { base ... range ... # Hello world. range ... } } ... which doesn't work with the current approach. gdb/testsuite/ChangeLog: * lib/dwarf.exp (ranges): Handle "base" and "range" as proceduresu. * gdb.dwarf/dw2-bad-elf.exp: Adjust. * gdb.dwarf2/dw2-inline-many-frames.exp: Adjust. * gdb.dwarf2/dw2-inline-stepping.exp: Adjust. * gdb.dwarf2/dw2-ranges-base.exp: Adjust. * gdb.dwarf2/dw2-ranges-func.exp: Adjust. * gdb.dwarf2/dw2-ranges-overlap.exp: Adjust. * gdb.dwarf2/dw2-ranges-psym.exp: Adjust. * gdb.dwarf2/enqueued-cu-base-addr.exp: Adjust. Change-Id: I0b2af480faff54d0fd4214e0cc8d042d9583a865
2020-11-06gdb: better static python detection in configure machineryRomain Geissler3-2/+9
In python 3, itertools is a builtin module, so whether or not the python you link against is a shared or a static one, importing it works. Change the import test to use ctypes which is a dynamic module in both python 2 and 3. gdb/ChangeLog: PR python/26832 * configure: Regenerate. * configure.ac: Check for python modules ctypes instead of itertools.
2020-11-06Split macro_buffer in two classes, fix Clang buildPedro Alves2-146/+138
GDB currently fails to build with (at least) Clang 10 and 11, due to: $ make CXX macroexp.o ../../src/gdb/macroexp.c:125:3: error: definition of implicit copy constructor for 'macro_buffer' is deprecated because it has a user-declared destructor [-Werror,-Wdeprecated-copy-dtor] ~macro_buffer () ^ Now, we could just add the copy constructor, like we already have a copy assignment operator. And like that assignment operator, we would assert that only shared buffers can be copied from. However, it is hard to see why only shared buffers need to be copied. I mean, it must be true, otherwise macro support would be broken, since currently GDB is relying on the default implementation of the copy constructor, which just copies the fields, which can't work correctly for the non-shared version. Still, it's not easy to tell from the code that that is indeed correct, that there isn't some corner case that would require copying a non-shared buffer. Or to put it simply - the tangling of shared and non-shared buffers in the same macro_buffer struct makes this structure hard to understand. My reaction was -- try splitting the macro_buffer class into two classes, one for non-shared buffers, and another for shared buffers. Comments and asserts like these: ... SRC must be a shared buffer; DEST must not be one. */ static void scan (struct macro_buffer *dest, struct macro_buffer *src, struct macro_name_list *no_loop, const macro_scope &scope) { gdb_assert (src->shared); gdb_assert (! dest->shared); ... made me suspect it should be possible. Then after the split it should be easier to reimplement either of the classes if we want. So I decided to try splitting the struct in two distinct types, and see where that leads. It turns out that there is really no good reason for a single struct, no code that wants to work with either shared or non-shared buffers. It's always shared for input being parsed, and non-shared for output. This commit is the result. I named the new classes shared_macro_buffer and growable_macro_buffer. A future direction could be for example to make shared_macro_buffer wrap a string_view and growable_macro_buffer a std::string. With that in mind, other than text/len, only the 'last_token' field is common to both classes. I didn't feel like creating a base class just for that single field. I constified shared_macro_buffer's 'text' field, which of course had some knock-on effects, fixed in the patch. On the original warning issued by Clang -- now it is clear that only the shared version needs to be copied. Since this class doesn't need a user-declared destructor, the default implementations of the copy assign/ctor can be used, and Clang no longer warns. The growable version doesn't need to be copied, so I disabled copy/assign for it. gdb/ChangeLog: * macroexp.c (struct macro_buffer): Split in two classes. Add uses adjusted. (struct shared_macro_buffer): New, factored out from struct macro_buffer. (struct growable_macro_buffer): New, factored out from struct macro_buffer. (set_token, get_comment, get_identifier, get_pp_number) (get_character_constant, get_string_literal, get_punctuator) (get_next_token_for_substitution): Constify parameters. (substitute_args): Constify locals. Change-Id: I5712e30e826d949715703b2e9172adf04e63b152
2020-11-05Remove objfile parameter from abbrev_table::readTom Tromey4-13/+26
In a longer series that I am working on, I needed to remove the objfile parameter from abbrev_table::read. It seemed to me that this was a simple and relatively harmless patch, so I'm sending it now. gdb/ChangeLog 2020-11-05 Tom Tromey <tom@tromey.com> * dwarf2/read.c (read_cutu_die_from_dwo) (cutu_reader::cutu_reader, cutu_reader::cutu_reader) (build_type_psymtabs_1): Update. * dwarf2/abbrev.h (struct abbrev_table): Remove objfile parameter. * dwarf2/abbrev.c (abbrev_table::read): Remove objfile parameter. Don't read section. Add assert.
2020-11-04Handle __XVL fields in Ada type printingTom Tromey5-19/+20
Sometimes the Ada compiler will emit an "__XVL" name for a field. The Ada compiler describes: -- Second, the variable-length fields themselves are represented by -- replacing the type by a special access type. The designated type of -- this access type is the original variable-length type, and the fact -- that this field has been transformed in this way is signalled by -- encoding the field name as: -- field___XVL Currently gdb describes such fields as having "access" type, but this is inaccurate. This patch changes gdb to avoid printing "access" in this case. gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * ada-typeprint.c (ada_print_type): Handle __XVL fields. gdb/testsuite/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdb.ada/funcall_ref.exp: Update. * gdb.ada/var_rec_arr.exp: Update.
2020-11-04Print Ada type name in more casesTom Tromey6-1/+137
In some cases the name of an Ada type cannot be decoded by decoded_type_name. For example, the name "p__complex_variable_record_type__T9s" in the included test case is rejected due to the "T". This causes ptype to display the full contents of a record type -- when in fact the name is available and ought to be printed. Fixing this in decoded_type_name isn't possible because the "__T" name is not the real name of the type -- it is just a compiler-assigned name of convenience. This patch fixes the problem by using the resolved type's name when the original type's name isn't suitable. gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * ada-typeprint.c (ada_print_type): Handle __T types. gdb/testsuite/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdb.ada/rec_ptype.exp: New file. * gdb.ada/rec_ptype/main.adb: New file. * gdb.ada/rec_ptype/p.ads: New file.
2020-11-04Recognize names of array typesTom Tromey6-5/+42
With -fgnat-encodings=minimal, Gnat will emit DW_TAG_array_type that has a name -- and this is the only time the name is emitted for the type. (For comparison, in C a typedef would be emitted in this situation.) This patch changes gdb to recognize the name of an array type. This is limited to Ada, to avoid any potential problems if some rogue DWARF happens to name an array type in some other language, and to avoid loading unnecessary partial DIEs. gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * dwarf2/read.c (add_partial_symbol, process_die): Handle DW_TAG_array_type. (is_type_tag_for_partial): Add "lang" parameter. (load_partial_dies, new_symbol): Handle DW_TAG_array_type. gdb/testsuite/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdb.ada/tick_length_array_enum_idx.exp: Add ptype test. * gdb.ada/tick_length_array_enum_idx/foo_n207_004.adb (PT_Full): New variable. * gdb.ada/tick_length_array_enum_idx/pck.adb (Full_PT): New type.
2020-11-04Use bit stride when taking slice of arrayTom Tromey7-3/+153
Testing with -fgnat-encodings=minimal showed that the Ada code failed to use the bit stride of an array when taking a slice. This patch fixes the oversight. gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_value_slice_from_ptr): Use bit size. gdb/testsuite/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdb.ada/array_of_variant.exp: New file. * gdb.ada/array_of_variant/p.adb: New file. * gdb.ada/array_of_variant/pck.ads: New file. * gdb.ada/array_of_variant/pck.adb: New file.
2020-11-04Only use stride for final element typeTom Tromey6-4/+38
A DWARF array type may specify a stride. Currently, the DWARF reader applies this stride to every dimension of an array. However, this seems incorrect to me -- only the innermost array ought to use the stride, while outer arrays should compute a stride based on the size of the inner arrays. This patch arranges to apply the stride only to the innermost array type. This fixes a bug noticed when running some Ada tests with -fgnat-encodings=minimal. gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * dwarf2/read.c (read_array_type): Only apply stride to innermost array. gdb/testsuite/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdb.ada/enum_idx_packed.exp: Add test. * gdb.ada/enum_idx_packed/foo.adb (Multi_Access): New variable. * gdb.ada/enum_idx_packed/pck.ads (Short) (Multi_Dimension, Multi_Dimension_Access): New types.
2020-11-04Fix bit strides for -fgnat-encodings=minimalTom Tromey4-41/+102
With -fgnat-encodings=minimal, the enum_idx_packed.exp test will fail. In this test case, we have an array (with dynamic length) of arrays, and the inner array has a bit stride. In this situation, the outer array's bit stride must be updated to account for the entire bit length of the inner array. Here, again, some tests must be kfail'd when an older version of GNAT is in use. gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdbtypes.c (update_static_array_size): Handle bit stride. gdb/testsuite/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdb.ada/enum_idx_packed.exp: Test two forms of -fgnat-encodings.
2020-11-04Resolve dynamic type in ada_value_struct_eltTom Tromey7-13/+64
An internal AdaCore test case showed that gdb mishandled a case of assigning to an array element in a packed array inside a variant record. This problem can only be seen with -fgnat-encodings=minimal, which isn't yet widely used. This patch fixes the bug, and also updates an existing test to check this case. gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_value_struct_elt): Resolve dynamic type. gdb/testsuite/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdb.ada/set_pckd_arr_elt.exp: Also test -fgnat-encodings=minimal. Add tests. * gdb.ada/set_pckd_arr_elt/foo.adb (Foo): Add VA variable. Call Update_Small a second time. * gdb.ada/set_pckd_arr_elt/pck.adb (New_Variant): New function. * gdb.ada/set_pckd_arr_elt/pck.ads (Buffer, Variant) (Variant_Access): New types. (New_Variant): Declare.
2020-11-04Reject slicing a packed arrayTom Tromey4-1/+22
In Ada mode, gdb rejects slicing a packed array. However, with -fgnat-encodings=minimal, gdb will instead print incorrect results. This patch changes gdb to also reject slicing a packed array in this mode. FWIW I believe that this rejection is a gdb limitation. Removing it looked complicated, though, and meanwhile my main goal for the time being is to bring the DWARF encodings up to par with Gnat encodings. gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_is_any_packed_array_type): New function. (ada_evaluate_subexp) <case TERNOP_SLICE>: Use it. gdb/testsuite/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdb.ada/mod_from_name.exp: Test printing slice.
2020-11-04Synthesize array descriptors with -fgnat-encodings=minimalTom Tromey21-328/+778
When -fgnat-encodings=minimal, the compiler will avoid the special GNAT-specific "encodings" format, and instead emit ordinary DWARF as much as possible. When emitting DWARF for thick pointers to arrays, the compiler emits something like: <1><11db>: Abbrev Number: 7 (DW_TAG_array_type) <11dc> DW_AT_name : (indirect string, offset: 0x1bb8): string <11e0> DW_AT_data_location: 2 byte block: 97 6 (DW_OP_push_object_address; DW_OP_deref) <11e3> DW_AT_type : <0x1173> <11e7> DW_AT_sibling : <0x1201> <2><11eb>: Abbrev Number: 8 (DW_TAG_subrange_type) <11ec> DW_AT_type : <0x1206> <11f0> DW_AT_lower_bound : 6 byte block: 97 23 8 6 94 4 (DW_OP_push_object_address; DW_OP_plus_uconst: 8; DW_OP_deref; DW_OP_deref_size: 4) <11f7> DW_AT_upper_bound : 8 byte block: 97 23 8 6 23 4 94 4 (DW_OP_push_object_address; DW_OP_plus_uconst: 8; DW_OP_deref; DW_OP_plus_uconst: 4; DW_OP_deref_size: 4) If you read between the lines, the "array" is actually a structure with two elements. One element is a pointer to the array data, and the other structure describes the bounds of the array. However, the compiler doesn't emit this explicitly, but instead hides it behind these location expressions. gdb can print such objects, but currently there is no way to construct one. So, this patch adds some code to the DWARF reader to recognize this construct, and then synthesize an array descriptor. This descriptor is then handled by the existing Ada code. Internally, we've modified GCC to emit the structure type explicitly (we will of course be sending this upstream). In this case, the array still has the DW_AT_data_location, though. This patch also modifies gdb to ignore the data location in this case -- this is preferred because the location only serves to confuse the Ada code that already knows where to find the data. In the future I hope to move some of this handling to the gdb core, so that Ada-specific hacks are not needed; however I have not yet done this. Because parallel types are not emitted with -fgnat-encodings=minimal, some changes to the Ada code were also required. The change ina ada-valprint.c was needed to avoid infinite recursion when trying to print a constrained packed array. And, there didn't seem to be any need for a recursive call here -- the value could simply be returned instead. Finally, gdb.ada/frame_arg_lang.exp no longer works in C mode, because we drop back to the structure approach now. As mentioned earlier, future work should probably fix this again; meanwhile, this doesn't seem to be a big problem, because it is what is currently done (users as a rule don't use -fgnat-encodings=minimal -- which is what I am ultimately trying to fix). Note that a couple of tests have an added KFAIL. Some -fgnat-encodings=minimal changes have landed in GNAT, and you need something very recent to pass all the tests. I'm using git gcc to accomplish this. gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * dwarf2/read.c (recognize_bound_expression) (quirk_ada_thick_pointer): New functions. (read_array_type): Call quirk_ada_thick_pointer. (set_die_type): Add "skip_data_location" parameter. (quirk_ada_thick_pointer): New function. (process_structure_scope): Call quirk_ada_thick_pointer. * ada-lang.c (ada_is_unconstrained_packed_array_type) (decode_packed_array_bitsize): Handle thick pointers without parallel types. (ada_is_gnat_encoded_packed_array_type): Rename from ada_is_packed_array_type. (ada_is_constrained_packed_array_type): Update. * ada-valprint.c (ada_val_print_gnat_array): Remove. (ada_value_print_1): Use ada_get_decoded_value. gdb/testsuite/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdb.ada/O2_float_param.exp: Test different -fgnat-encodings values. * gdb.ada/access_to_unbounded_array.exp: Test different -fgnat-encodings values. * gdb.ada/big_packed_array.exp: Test different -fgnat-encodings values. * gdb.ada/arr_enum_idx_w_gap.exp: Test different -fgnat-encodings values. * gdb.ada/array_ptr_renaming.exp: Test different -fgnat-encodings values. * gdb.ada/array_of_variable_length.exp: Test different -fgnat-encodings values. * gdb.ada/arrayparam.exp: Test different -fgnat-encodings values. * gdb.ada/arrayptr.exp: Test different -fgnat-encodings values. * gdb.ada/frame_arg_lang.exp: Revert -fgnat-encodings=minimal change. * gdb.ada/mi_string_access.exp: Test different -fgnat-encodings values. * gdb.ada/mod_from_name.exp: Test different -fgnat-encodings values. * gdb.ada/out_of_line_in_inlined.exp: Test different -fgnat-encodings values. * gdb.ada/packed_array.exp: Test different -fgnat-encodings values. * gdb.ada/pckd_arr_ren.exp: Test different -fgnat-encodings values. * gdb.ada/unc_arr_ptr_in_var_rec.exp: Test different -fgnat-encodings values. * gdb.ada/variant_record_packed_array.exp: Test different -fgnat-encodings values.
2020-11-04Fix decoding of multi-dimensional constrained packed arraysTom Tromey7-2/+176
Printing a multi-dimensional constrained packed array in Ada would not show the correct values. The bug here is that, when decoding the type of such an array, only the innermost dimension's element bitsize would be correct. For outer dimensions, the bitsize must account for the size of each sub-array, but this was not done. This patch fixes the problem by arranging to compute these sizes after decoding the array type. I've included a bit more test case than is strictly necessary -- the current test here was derived from an internal test, and this patch brings the two into sync. gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * ada-lang.c (recursively_update_array_bitsize): New function. (decode_constrained_packed_array_type): Call it. gdb/testsuite/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdb.ada/enum_idx_packed.exp: Add tests. * gdb.ada/enum_idx_packed/foo.adb: Add variables. * gdb.ada/enum_idx_packed/pck.adb: Add functions. * gdb.ada/enum_idx_packed/pck.ads: Add types, function declarations.
2020-11-04Avoid crash in ada-lang.c:to_fixed_array_typeTom Tromey2-1/+10
When debugging Ada programs compiled by certain versions of GNAT with -fgnat-encodings=minimal, gdb can crash. These crashes occur when running the gdb test suite, once some of the later patches in this series have been applied. This patch works around the bug by throwing an exception in the failing case. I did not implement a full fix because GNAT has been changed to emit better DWARF, and so in the near future this will stop being a problem. (Currently, users don't generally use -fgnat-encodings=minimal, and the GNAT default will only be changed in a fully-patched compiler.) gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * ada-lang.c (to_fixed_array_type): Error if decode_constrained_packed_array_type returns NULL.
2020-11-04Rewrite leb.h:read_3_bytesTom Tromey2-8/+5
read_3_bytes assumes little-endian data, but in fact it depends on the BFD. This patch rewrites this function to use bfd_get_24 instead. 2020-11-04 Tom Tromey <tromey@adacore.com> * dwarf2/leb.h (read_3_bytes): Use bfd_get_24.
2020-11-03[gdb/testsuite] Fix .debug_abbrev terminatorsTom de Vries2-6/+11
The abbreviations table for a single compilation unit has two types of terminators: - a ".byte 0" pair denoting the end of an attribute list - a single ".byte 0" denoting the end of the table However, at the end of the .debug_abbrev section in dw2-line-number-zero-dw.S, we have four ".byte 0" entries: ... .uleb128 0x12 /* DW_AT_high_pc */ .uleb128 0x01 /* DW_FORM_addr */ .byte 0x0 /* Terminator */ .byte 0x0 /* Terminator */ .byte 0x0 /* Terminator */ .byte 0x0 /* Terminator */ ... The first two are the attribute list terminator, the third is the end-of-table terminator, and the last is superfluous/incorrect. Fix this by emitting instead: ... .uleb128 0x12 /* DW_AT_high_pc */ .uleb128 0x01 /* DW_FORM_addr */ .byte 0x0 /* DW_AT - Terminator */ .byte 0x0 /* DW_FORM - Terminator */ .byte 0x0 /* Abbrev end - Terminator */ ... where the last comment resembles the comment for other abbreviation codes: ... .section .debug_abbrev .Labbrev1_begin: .uleb128 2 /* Abbrev start */ ... Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-11-03 Tom de Vries <tdevries@suse.de> * lib/dwarf.exp (Dwarf::_handle_DW_TAG): Improve attribute list terminator comments. (Dwarf::cu, Dwarf::tu): Remove superfluous abbreviation table terminator.
2020-11-02gdb/testsuite: fix failure in gdb.base/step-over-no-symbols.expSimon Marchi2-2/+7
This test fails on my machine: p /x $pc^M $2 = 0x55555555514e^M (gdb) PASS: gdb.base/step-over-no-symbols.exp: displaced=off: get after PC FAIL: gdb.base/step-over-no-symbols.exp: displaced=off: advanced This is due to the check added in 5f0e2eb79e6b ("GDB/testsuite: Fix a catastrophic step-over-no-symbols.exp failure"), that makes sure the PC values are integer. As documented in the TCL doc [1], "string is integer" returns 1 if the string is a valid 32-bit integer format. The PC values are greater than 32 bits, so are not recognized as integers by that test. % string is integer -strict 0x55555555 1 % string is integer -strict 0x555555555 0 Replace the "string is integer" test with a regexp one, that verifies the PC is a hex value. [1] https://www.tcl.tk/man/tcl/TclCmd/string.htm#M21 gdb/testsuite/ChangeLog: * gdb.base/step-over-no-symbols.exp (test_step_over): Replace integer format test with regexp. Change-Id: I71f8197e7b52e97b4901980544a8d1072aabd362
2020-11-02Add x86_64 ravenscar supportTom Tromey6-1/+195
Support for x86_64 ravenscar was recently added to the Ada runtime. This patch updates gdb to follow. As this is Ada-specific, and was reviewed internally by Joel, I am checking it in. 2020-11-02 Tom Tromey <tromey@adacore.com> * Makefile.in (ALL_64_TARGET_OBS): Add amd64-ravenscar-thread.o. (ALLDEPFILES): Add amd64-ravenscar-thread.c. (HFILES_NO_SRCDIR): Add amd64-ravenscar-thread.h. * amd64-ravenscar-thread.c: New file. * amd64-ravenscar-thread.h: New file. * amd64-tdep.c (amd64_init_abi): Register ravenscar ops. * configure.tgt (amd64_tobjs): Add ravenscar objects.
2020-11-02gdb: new function to wrap up executing command line scripts/commandsAndrew Burgess2-32/+27
Small refactor to wrap up executing the scripts and commands passed using the -x, -ex, -ix, -iex command line flags. There should be no user visible changes after this commit. gdb/ChangeLog: * main.c (execute_cmdargs): New function. (captured_main_1): Make use of execute_cmdargs.
2020-11-02gdb: use get_standard_config_dir when looking for .gdbinitAndrew Burgess6-93/+174
This commit effectively changes the default location of the .gdbinit file, while maintaining backward compatibility. For non Apple hosts the .gdbinit file will now be looked for in the following locations: $XDG_CONFIG_HOME/gdb/gdbinit $HOME/.config/gdb/gdbinit $HOME/.gdbinit On Apple hosts the search order is instead: $HOME/Library/Preferences/gdb/gdbinit $HOME/.gdbinit I've performed an extensive rewrite of the documentation, moving all information about initialization files and where to find them into a new @node, text from other areas has been moved into this one location, and other areas cross-reference to this new @node as much as possible. gdb/ChangeLog: * NEWS: Mention changes to config file search path. * main.c gdb/doc/ChangeLog: * gdb.texinfo (Mode Options): Descriptions of initialization files has been moved to 'Initialization Files'. (Startup): Likewise. (Initialization Files): New node. (gdb man): Update to mention alternative file paths. (gdbinit man): Likewise.
2020-11-02Minor Python simplificationsTom Tromey2-39/+30
I noticed that a few "#if"s could be removed from the Python code. This patch is the result. gdb/ChangeLog 2020-11-02 Tom Tromey <tromey@adacore.com> * python/python.c: Consolidate two HAVE_PYTHON blocks. (python_GdbModuleDef): Move earlier. Now static. (do_start_initialization): Consolidate some IS_PY3K blocks.
2020-11-02gdb, gdbserver, gdbsupport: fix leading space vs tabs issuesSimon Marchi398-14229/+14619
Many spots incorrectly use only spaces for indentation (for example, there are a lot of spots in ada-lang.c). I've always found it awkward when I needed to edit one of these spots: do I keep the original wrong indentation, or do I fix it? What if the lines around it are also wrong, do I fix them too? I probably don't want to fix them in the same patch, to avoid adding noise to my patch. So I propose to fix as much as possible once and for all (hopefully). One typical counter argument for this is that it makes code archeology more difficult, because git-blame will show this commit as the last change for these lines. My counter counter argument is: when git-blaming, you often need to do "blame the file at the parent commit" anyway, to go past some other refactor that touched the line you are interested in, but is not the change you are looking for. So you already need a somewhat efficient way to do this. Using some interactive tool, rather than plain git-blame, makes this trivial. For example, I use "tig blame <file>", where going back past the commit that changed the currently selected line is one keystroke. It looks like Magit in Emacs does it too (though I've never used it). Web viewers of Github and Gitlab do it too. My point is that it won't really make archeology more difficult. The other typical counter argument is that it will cause conflicts with existing patches. That's true... but it's a one time cost, and those are not conflicts that are difficult to resolve. I have also tried "git rebase --ignore-whitespace", it seems to work well. Although that will re-introduce the faulty indentation, so one needs to take care of fixing the indentation in the patch after that (which is easy). gdb/ChangeLog: * aarch64-linux-tdep.c: Fix indentation. * aarch64-ravenscar-thread.c: Fix indentation. * aarch64-tdep.c: Fix indentation. * aarch64-tdep.h: Fix indentation. * ada-lang.c: Fix indentation. * ada-lang.h: Fix indentation. * ada-tasks.c: Fix indentation. * ada-typeprint.c: Fix indentation. * ada-valprint.c: Fix indentation. * ada-varobj.c: Fix indentation. * addrmap.c: Fix indentation. * addrmap.h: Fix indentation. * agent.c: Fix indentation. * aix-thread.c: Fix indentation. * alpha-bsd-nat.c: Fix indentation. * alpha-linux-tdep.c: Fix indentation. * alpha-mdebug-tdep.c: Fix indentation. * alpha-nbsd-tdep.c: Fix indentation. * alpha-obsd-tdep.c: Fix indentation. * alpha-tdep.c: Fix indentation. * amd64-bsd-nat.c: Fix indentation. * amd64-darwin-tdep.c: Fix indentation. * amd64-linux-nat.c: Fix indentation. * amd64-linux-tdep.c: Fix indentation. * amd64-nat.c: Fix indentation. * amd64-obsd-tdep.c: Fix indentation. * amd64-tdep.c: Fix indentation. * amd64-windows-tdep.c: Fix indentation. * annotate.c: Fix indentation. * arc-tdep.c: Fix indentation. * arch-utils.c: Fix indentation. * arch/arm-get-next-pcs.c: Fix indentation. * arch/arm.c: Fix indentation. * arm-linux-nat.c: Fix indentation. * arm-linux-tdep.c: Fix indentation. * arm-nbsd-tdep.c: Fix indentation. * arm-pikeos-tdep.c: Fix indentation. * arm-tdep.c: Fix indentation. * arm-tdep.h: Fix indentation. * arm-wince-tdep.c: Fix indentation. * auto-load.c: Fix indentation. * auxv.c: Fix indentation. * avr-tdep.c: Fix indentation. * ax-gdb.c: Fix indentation. * ax-general.c: Fix indentation. * bfin-linux-tdep.c: Fix indentation. * block.c: Fix indentation. * block.h: Fix indentation. * blockframe.c: Fix indentation. * bpf-tdep.c: Fix indentation. * break-catch-sig.c: Fix indentation. * break-catch-syscall.c: Fix indentation. * break-catch-throw.c: Fix indentation. * breakpoint.c: Fix indentation. * breakpoint.h: Fix indentation. * bsd-uthread.c: Fix indentation. * btrace.c: Fix indentation. * build-id.c: Fix indentation. * buildsym-legacy.h: Fix indentation. * buildsym.c: Fix indentation. * c-typeprint.c: Fix indentation. * c-valprint.c: Fix indentation. * c-varobj.c: Fix indentation. * charset.c: Fix indentation. * cli/cli-cmds.c: Fix indentation. * cli/cli-decode.c: Fix indentation. * cli/cli-decode.h: Fix indentation. * cli/cli-script.c: Fix indentation. * cli/cli-setshow.c: Fix indentation. * coff-pe-read.c: Fix indentation. * coffread.c: Fix indentation. * compile/compile-cplus-types.c: Fix indentation. * compile/compile-object-load.c: Fix indentation. * compile/compile-object-run.c: Fix indentation. * completer.c: Fix indentation. * corefile.c: Fix indentation. * corelow.c: Fix indentation. * cp-abi.h: Fix indentation. * cp-namespace.c: Fix indentation. * cp-support.c: Fix indentation. * cp-valprint.c: Fix indentation. * cris-linux-tdep.c: Fix indentation. * cris-tdep.c: Fix indentation. * darwin-nat-info.c: Fix indentation. * darwin-nat.c: Fix indentation. * darwin-nat.h: Fix indentation. * dbxread.c: Fix indentation. * dcache.c: Fix indentation. * disasm.c: Fix indentation. * dtrace-probe.c: Fix indentation. * dwarf2/abbrev.c: Fix indentation. * dwarf2/attribute.c: Fix indentation. * dwarf2/expr.c: Fix indentation. * dwarf2/frame.c: Fix indentation. * dwarf2/index-cache.c: Fix indentation. * dwarf2/index-write.c: Fix indentation. * dwarf2/line-header.c: Fix indentation. * dwarf2/loc.c: Fix indentation. * dwarf2/macro.c: Fix indentation. * dwarf2/read.c: Fix indentation. * dwarf2/read.h: Fix indentation. * elfread.c: Fix indentation. * eval.c: Fix indentation. * event-top.c: Fix indentation. * exec.c: Fix indentation. * exec.h: Fix indentation. * expprint.c: Fix indentation. * f-lang.c: Fix indentation. * f-typeprint.c: Fix indentation. * f-valprint.c: Fix indentation. * fbsd-nat.c: Fix indentation. * fbsd-tdep.c: Fix indentation. * findvar.c: Fix indentation. * fork-child.c: Fix indentation. * frame-unwind.c: Fix indentation. * frame-unwind.h: Fix indentation. * frame.c: Fix indentation. * frv-linux-tdep.c: Fix indentation. * frv-tdep.c: Fix indentation. * frv-tdep.h: Fix indentation. * ft32-tdep.c: Fix indentation. * gcore.c: Fix indentation. * gdb_bfd.c: Fix indentation. * gdbarch.sh: Fix indentation. * gdbarch.c: Re-generate * gdbarch.h: Re-generate. * gdbcore.h: Fix indentation. * gdbthread.h: Fix indentation. * gdbtypes.c: Fix indentation. * gdbtypes.h: Fix indentation. * glibc-tdep.c: Fix indentation. * gnu-nat.c: Fix indentation. * gnu-nat.h: Fix indentation. * gnu-v2-abi.c: Fix indentation. * gnu-v3-abi.c: Fix indentation. * go32-nat.c: Fix indentation. * guile/guile-internal.h: Fix indentation. * guile/scm-cmd.c: Fix indentation. * guile/scm-frame.c: Fix indentation. * guile/scm-iterator.c: Fix indentation. * guile/scm-math.c: Fix indentation. * guile/scm-ports.c: Fix indentation. * guile/scm-pretty-print.c: Fix indentation. * guile/scm-value.c: Fix indentation. * h8300-tdep.c: Fix indentation. * hppa-linux-nat.c: Fix indentation. * hppa-linux-tdep.c: Fix indentation. * hppa-nbsd-nat.c: Fix indentation. * hppa-nbsd-tdep.c: Fix indentation. * hppa-obsd-nat.c: Fix indentation. * hppa-tdep.c: Fix indentation. * hppa-tdep.h: Fix indentation. * i386-bsd-nat.c: Fix indentation. * i386-darwin-nat.c: Fix indentation. * i386-darwin-tdep.c: Fix indentation. * i386-dicos-tdep.c: Fix indentation. * i386-gnu-nat.c: Fix indentation. * i386-linux-nat.c: Fix indentation. * i386-linux-tdep.c: Fix indentation. * i386-nto-tdep.c: Fix indentation. * i386-obsd-tdep.c: Fix indentation. * i386-sol2-nat.c: Fix indentation. * i386-tdep.c: Fix indentation. * i386-tdep.h: Fix indentation. * i386-windows-tdep.c: Fix indentation. * i387-tdep.c: Fix indentation. * i387-tdep.h: Fix indentation. * ia64-libunwind-tdep.c: Fix indentation. * ia64-libunwind-tdep.h: Fix indentation. * ia64-linux-nat.c: Fix indentation. * ia64-linux-tdep.c: Fix indentation. * ia64-tdep.c: Fix indentation. * ia64-tdep.h: Fix indentation. * ia64-vms-tdep.c: Fix indentation. * infcall.c: Fix indentation. * infcmd.c: Fix indentation. * inferior.c: Fix indentation. * infrun.c: Fix indentation. * iq2000-tdep.c: Fix indentation. * language.c: Fix indentation. * linespec.c: Fix indentation. * linux-fork.c: Fix indentation. * linux-nat.c: Fix indentation. * linux-tdep.c: Fix indentation. * linux-thread-db.c: Fix indentation. * lm32-tdep.c: Fix indentation. * m2-lang.c: Fix indentation. * m2-typeprint.c: Fix indentation. * m2-valprint.c: Fix indentation. * m32c-tdep.c: Fix indentation. * m32r-linux-tdep.c: Fix indentation. * m32r-tdep.c: Fix indentation. * m68hc11-tdep.c: Fix indentation. * m68k-bsd-nat.c: Fix indentation. * m68k-linux-nat.c: Fix indentation. * m68k-linux-tdep.c: Fix indentation. * m68k-tdep.c: Fix indentation. * machoread.c: Fix indentation. * macrocmd.c: Fix indentation. * macroexp.c: Fix indentation. * macroscope.c: Fix indentation. * macrotab.c: Fix indentation. * macrotab.h: Fix indentation. * main.c: Fix indentation. * mdebugread.c: Fix indentation. * mep-tdep.c: Fix indentation. * mi/mi-cmd-catch.c: Fix indentation. * mi/mi-cmd-disas.c: Fix indentation. * mi/mi-cmd-env.c: Fix indentation. * mi/mi-cmd-stack.c: Fix indentation. * mi/mi-cmd-var.c: Fix indentation. * mi/mi-cmds.c: Fix indentation. * mi/mi-main.c: Fix indentation. * mi/mi-parse.c: Fix indentation. * microblaze-tdep.c: Fix indentation. * minidebug.c: Fix indentation. * minsyms.c: Fix indentation. * mips-linux-nat.c: Fix indentation. * mips-linux-tdep.c: Fix indentation. * mips-nbsd-tdep.c: Fix indentation. * mips-tdep.c: Fix indentation. * mn10300-linux-tdep.c: Fix indentation. * mn10300-tdep.c: Fix indentation. * moxie-tdep.c: Fix indentation. * msp430-tdep.c: Fix indentation. * namespace.h: Fix indentation. * nat/fork-inferior.c: Fix indentation. * nat/gdb_ptrace.h: Fix indentation. * nat/linux-namespaces.c: Fix indentation. * nat/linux-osdata.c: Fix indentation. * nat/netbsd-nat.c: Fix indentation. * nat/x86-dregs.c: Fix indentation. * nbsd-nat.c: Fix indentation. * nbsd-tdep.c: Fix indentation. * nios2-linux-tdep.c: Fix indentation. * nios2-tdep.c: Fix indentation. * nto-procfs.c: Fix indentation. * nto-tdep.c: Fix indentation. * objfiles.c: Fix indentation. * objfiles.h: Fix indentation. * opencl-lang.c: Fix indentation. * or1k-tdep.c: Fix indentation. * osabi.c: Fix indentation. * osabi.h: Fix indentation. * osdata.c: Fix indentation. * p-lang.c: Fix indentation. * p-typeprint.c: Fix indentation. * p-valprint.c: Fix indentation. * parse.c: Fix indentation. * ppc-linux-nat.c: Fix indentation. * ppc-linux-tdep.c: Fix indentation. * ppc-nbsd-nat.c: Fix indentation. * ppc-nbsd-tdep.c: Fix indentation. * ppc-obsd-nat.c: Fix indentation. * ppc-ravenscar-thread.c: Fix indentation. * ppc-sysv-tdep.c: Fix indentation. * ppc64-tdep.c: Fix indentation. * printcmd.c: Fix indentation. * proc-api.c: Fix indentation. * producer.c: Fix indentation. * producer.h: Fix indentation. * prologue-value.c: Fix indentation. * prologue-value.h: Fix indentation. * psymtab.c: Fix indentation. * python/py-arch.c: Fix indentation. * python/py-bpevent.c: Fix indentation. * python/py-event.c: Fix indentation. * python/py-event.h: Fix indentation. * python/py-finishbreakpoint.c: Fix indentation. * python/py-frame.c: Fix indentation. * python/py-framefilter.c: Fix indentation. * python/py-inferior.c: Fix indentation. * python/py-infthread.c: Fix indentation. * python/py-objfile.c: Fix indentation. * python/py-prettyprint.c: Fix indentation. * python/py-registers.c: Fix indentation. * python/py-signalevent.c: Fix indentation. * python/py-stopevent.c: Fix indentation. * python/py-stopevent.h: Fix indentation. * python/py-threadevent.c: Fix indentation. * python/py-tui.c: Fix indentation. * python/py-unwind.c: Fix indentation. * python/py-value.c: Fix indentation. * python/py-xmethods.c: Fix indentation. * python/python-internal.h: Fix indentation. * python/python.c: Fix indentation. * ravenscar-thread.c: Fix indentation. * record-btrace.c: Fix indentation. * record-full.c: Fix indentation. * record.c: Fix indentation. * reggroups.c: Fix indentation. * regset.h: Fix indentation. * remote-fileio.c: Fix indentation. * remote.c: Fix indentation. * reverse.c: Fix indentation. * riscv-linux-tdep.c: Fix indentation. * riscv-ravenscar-thread.c: Fix indentation. * riscv-tdep.c: Fix indentation. * rl78-tdep.c: Fix indentation. * rs6000-aix-tdep.c: Fix indentation. * rs6000-lynx178-tdep.c: Fix indentation. * rs6000-nat.c: Fix indentation. * rs6000-tdep.c: Fix indentation. * rust-lang.c: Fix indentation. * rx-tdep.c: Fix indentation. * s12z-tdep.c: Fix indentation. * s390-linux-tdep.c: Fix indentation. * score-tdep.c: Fix indentation. * ser-base.c: Fix indentation. * ser-mingw.c: Fix indentation. * ser-uds.c: Fix indentation. * ser-unix.c: Fix indentation. * serial.c: Fix indentation. * sh-linux-tdep.c: Fix indentation. * sh-nbsd-tdep.c: Fix indentation. * sh-tdep.c: Fix indentation. * skip.c: Fix indentation. * sol-thread.c: Fix indentation. * solib-aix.c: Fix indentation. * solib-darwin.c: Fix indentation. * solib-frv.c: Fix indentation. * solib-svr4.c: Fix indentation. * solib.c: Fix indentation. * source.c: Fix indentation. * sparc-linux-tdep.c: Fix indentation. * sparc-nbsd-tdep.c: Fix indentation. * sparc-obsd-tdep.c: Fix indentation. * sparc-ravenscar-thread.c: Fix indentation. * sparc-tdep.c: Fix indentation. * sparc64-linux-tdep.c: Fix indentation. * sparc64-nbsd-tdep.c: Fix indentation. * sparc64-obsd-tdep.c: Fix indentation. * sparc64-tdep.c: Fix indentation. * stabsread.c: Fix indentation. * stack.c: Fix indentation. * stap-probe.c: Fix indentation. * stubs/ia64vms-stub.c: Fix indentation. * stubs/m32r-stub.c: Fix indentation. * stubs/m68k-stub.c: Fix indentation. * stubs/sh-stub.c: Fix indentation. * stubs/sparc-stub.c: Fix indentation. * symfile-mem.c: Fix indentation. * symfile.c: Fix indentation. * symfile.h: Fix indentation. * symmisc.c: Fix indentation. * symtab.c: Fix indentation. * symtab.h: Fix indentation. * target-float.c: Fix indentation. * target.c: Fix indentation. * target.h: Fix indentation. * tic6x-tdep.c: Fix indentation. * tilegx-linux-tdep.c: Fix indentation. * tilegx-tdep.c: Fix indentation. * top.c: Fix indentation. * tracefile-tfile.c: Fix indentation. * tracepoint.c: Fix indentation. * tui/tui-disasm.c: Fix indentation. * tui/tui-io.c: Fix indentation. * tui/tui-regs.c: Fix indentation. * tui/tui-stack.c: Fix indentation. * tui/tui-win.c: Fix indentation. * tui/tui-winsource.c: Fix indentation. * tui/tui.c: Fix indentation. * typeprint.c: Fix indentation. * ui-out.h: Fix indentation. * unittests/copy_bitwise-selftests.c: Fix indentation. * unittests/memory-map-selftests.c: Fix indentation. * utils.c: Fix indentation. * v850-tdep.c: Fix indentation. * valarith.c: Fix indentation. * valops.c: Fix indentation. * valprint.c: Fix indentation. * valprint.h: Fix indentation. * value.c: Fix indentation. * value.h: Fix indentation. * varobj.c: Fix indentation. * vax-tdep.c: Fix indentation. * windows-nat.c: Fix indentation. * windows-tdep.c: Fix indentation. * xcoffread.c: Fix indentation. * xml-syscall.c: Fix indentation. * xml-tdesc.c: Fix indentation. * xstormy16-tdep.c: Fix indentation. * xtensa-config.c: Fix indentation. * xtensa-linux-nat.c: Fix indentation. * xtensa-linux-tdep.c: Fix indentation. * xtensa-tdep.c: Fix indentation. gdbserver/ChangeLog: * ax.cc: Fix indentation. * dll.cc: Fix indentation. * inferiors.h: Fix indentation. * linux-low.cc: Fix indentation. * linux-nios2-low.cc: Fix indentation. * linux-ppc-ipa.cc: Fix indentation. * linux-ppc-low.cc: Fix indentation. * linux-x86-low.cc: Fix indentation. * linux-xtensa-low.cc: Fix indentation. * regcache.cc: Fix indentation. * server.cc: Fix indentation. * tracepoint.cc: Fix indentation. gdbsupport/ChangeLog: * common-exceptions.h: Fix indentation. * event-loop.cc: Fix indentation. * fileio.cc: Fix indentation. * filestuff.cc: Fix indentation. * gdb-dlfcn.cc: Fix indentation. * gdb_string_view.h: Fix indentation. * job-control.cc: Fix indentation. * signals.cc: Fix indentation. Change-Id: I4bad7ae6be0fbe14168b8ebafb98ffe14964a695
2020-11-02Fix gdb.base/print-file-var.exp with ClangGary Benson2-8/+16
The C++ parts of gdb.base/print-file-var.exp failed to build with Clang because the "-x c++" option added by gdb_compile caused the compiler to attempt to parse .so files as C++. This commit splits the compiler and linker options into separate lists, and switches to building via build_executable_from_specs which can accommodate this separation. gdb/testsuite/ChangeLog: * gdb.base/print-file-var.exp (test): Separate compiler and linker options, and build using build_executable_from_specs to accommodate this.
2020-11-02Detect and report incompatible gdb_compile optionsGary Benson2-3/+20
In commits 221db974e653659edb280787af1b3efdd1615083 and 68d654afdfcff840ebb3ae432ed72dca0521d670, these patches: 2020-06-24 Pedro Alves <palves@redhat.com> * lib/gdb.exp (gdb_compile): Pass "-x c++" explicitly when compiling C++ programs. 2020-09-25 Gary Benson <gbenson@redhat.com> * lib/gdb.exp (gdb_compile): Pass "-x c++" earlier, and only for .c files. attempted to fix problems with testcases that compile .c files using the C++ compiler. These patches cause gdb_compile to add "-x c++" to the compiler options when using Clang. This fix does not work for gdb.base/print-file-var.exp, however, which attempts to compile a .c input file to an executable linked with shared libraries: the resulting command caused the compiler to attempt to parse the .so files as C++. This commit causes gdb_compile to reject this combination of options. gdb/testsuite/ChangeLog: * lib/gdb.exp (gdb_compile): Inhibit passing "-x c++" for .c files compiled as C++ with Clang if any shared libraries are specified.
2020-11-02Fix testcases using __attribute__((noclone)) with ClangGary Benson5-36/+89
Clang fails to compile a number of files with the following warning: unknown attribute 'noclone' ignored [-Wunknown-attributes]. This commit adds a new header, lib/noclone.h, which defines the macro ATTRIBUTE_NOCLONE accordingly, and updates the relevant testcases to use it. gdb/testsuite/ChangeLog: * lib/attributes.h: New header. * gdb.base/backtrace.c: Include the above. Replace __attribute__(noclone)) with ATTRIBUTE_NOCLONE. * gdb.base/infcall-nested-structs.c: Likewise. * gdb.base/vla-optimized-out.c: Likewise.
2020-11-02[gdb/testsuite] Remove .debug_line.dwo from gdb.dwarf2/fission-multi-cu.STom de Vries2-14/+4
Consider test-case gdb.dwarf2/fission-multi-cu.exp. It produces an executable fission-multi-cu and a dwo file fission-multi-cu.dwo. The file fission-multi-cu.dwo contains a .debug_line.dwo section, which according to the DWARF v5 standard is a "specialized line number table" for type units in the .debug_info.dwo section, and contains only the directory and filename lists. When reading the actual .debug_line.dwo section using readelf -w, we get: ... The Directory Table is empty. The File Name Table is empty. No Line Number Statements. ... So, the section does not contain any actual information. Furthermore, no information is required because the .debug_line.dwo section does not contain any type units. This is confirmed by: - re-doing the commands listed at the start of fission-multi-cu.S, which were used as starting point for fission-multi-cu.S, and - compiling the fission-multi-cu{1,2}.c files with clang -flto -g -gsplit-dwarf In both cases, no .debug_line.dwo section is generated. Remove the .debug_line.dwo section, to make it fit how split dwarf is actually generated by clang. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-11-02 Tom de Vries <tdevries@suse.de> * gdb.dwarf2/fission-multi-cu.S: Remove .debug_line.dwo section.
2020-11-02gdb/riscv: read frame base register as unsigned in the unwinderAndrew Burgess2-1/+7
I noticed an issue with the RISC-V prologue scanning stack unwinder. We currently read the frame base register (either $sp or $fp) as a signed value. This means that the frame_id's stack_addr field will be a signed value. In other contexts though these registers are data pointers, and so are unsigned. There's not many places where this mismatch actually shows though, but I did find one place. Consider this GDB session: (gdb) maintenance set dwarf unwinders off (gdb) set backtrace past-main on ... (gdb) b main Breakpoint 1 at 0x20400344: file main.c, line 86. (gdb) run ... (gdb) bt #0 main () at main.c:86 #1 0x2040005c in _start () at start.S:59 Backtrace stopped: frame did not save the PC (gdb) info frame 1 Stack frame at 0x80000a1c: pc = 0x2040005c in _start (start.S:59); saved pc = <not saved> Outermost frame: frame did not save the PC caller of frame at 0x80000a1c source language asm. Arglist at 0x80000a1c, args: Locals at 0x80000a1c, Previous frame's sp is 0x80000a1c (gdb) frame address 0x80000a1c No frame at address 0x80000a1c. (gdb) frame address 0xffffffff80000a1c #1 0x2040005c in _start () at start.S:59 59 call main Notice that the 'info frame 1' reports that the frame is at '0x80000a1c', this is the unsigned frame base value, but when I try to select a frame using this address I can't. The reason is that the frame_id for frame #1 actually has the unsigned (and hence sign-extended) stack_addr value. When I use the sign extended address I can correctly select the frame. I propose changing the prologue scanning unwinder to read the frame base as unsigned. After this in the above case I can now do this: (gdb) frame address 0x80000a1c #1 0x2040005c in _start () at start.S:59 59 call main (gdb) frame address 0xffffffff80000a1c No frame at address 0xffffffff80000a1c. Which I think makes more sense. This issue causes failures in gdb.base/frame-selection.exp if you compile for RV32 with a linker script that places the stack in the correct location, which are resolved by this patch. gdb/ChangeLog: * riscv-tdep.c (riscv_frame_cache): Read the frame base register as an unsigned value.
2020-11-01Change end_psymtab_common to a methodTom Tromey7-24/+33
This changes end_psymtab_common to be a method on partial_symtab. This seems a little cleaner to me. gdb/ChangeLog 2020-11-01 Tom Tromey <tom@tromey.com> * dbxread.c (dbx_end_psymtab): Update. * dwarf2/read.c (process_psymtab_comp_unit_reader) (build_type_psymtabs_reader): Update. * xcoffread.c (xcoff_end_psymtab): Update. * ctfread.c (scan_partial_symbols): Update. * psymtab.c (sort_pst_symbols): Remove. (partial_symtab::end): Rename from end_psymtab_common. Inline sort_pst_symbols. * psympriv.h (struct partial_symtab) <end>: New method. (end_psymtab_common): Don't declare.
2020-11-01Remove partial symbol statisticsTom Tromey4-17/+28
The "n_psyms" statistic in the per-objfile stats is not really needed, but its use requires passing the objfile to add_psymbol. This patch removes the field in favor of counting the psyms when needed. Note that this is not exactly equivalent -- in the old approach, a psymbol can in theory be created and then the psymtab discarded, which would increment the counter. This does not seem very important to me. I rewrote the code to count partial symbols; though TBH I think that this information is not really very useful. gdb/ChangeLog 2020-11-01 Tom Tromey <tom@tromey.com> * symmisc.c (count_psyms): New function. (print_objfile_statistics): Use it. * psymtab.c (append_psymbol_to_list): Remove. (partial_symtab::add_psymbol): Inline append_psymbol_to_list. * objfiles.h (struct objstats) <n_psyms>: Remove.
2020-11-01Remove parameter from end_psymtab_commonTom Tromey7-10/+20
The objfile parameter to end_psymtab_common is no longer needed, so this removes it. gdb/ChangeLog 2020-11-01 Tom Tromey <tom@tromey.com> * dbxread.c (dbx_end_psymtab): Update. * dwarf2/read.c (process_psymtab_comp_unit_reader): Update. (build_type_psymtabs_reader): Update. * xcoffread.c (xcoff_end_psymtab): Update. * ctfread.c (scan_partial_symbols): Update. * psympriv.h (end_psymtab_common): Update. * psymtab.c (end_psymtab_common): Remove objfile parameter. (sort_pst_symbols): Likewise.
2020-11-01Remove init_psymbol_listTom Tromey6-24/+8
init_psymbol_list is now empty, and so this removes it. gdb/ChangeLog 2020-11-01 Tom Tromey <tom@tromey.com> * dbxread.c (dbx_symfile_read): Update. * dwarf2/read.c (dwarf2_build_psymtabs): Update. * xcoffread.c (xcoff_initial_scan): Update. * psympriv.h (init_psymbol_list): Don't declare. * psymtab.c (init_psymbol_list): Remove.