1. Feb 27, 2021
    • Tom Tromey's avatar
      Minor fix in skip_ctf_tests · 573dc0cc
      Tom Tromey authored
      I noticed an oddity in skip_ctf_tests -- for me it ends up caching the
      string "!0", because it ends with 'return ![...]'.  In Tcl, this is
      just string concatenation.
      
      The result works because the users of this function have unbraced if
      conditions, like:
      
          if [skip_ctf_tests] {
      
      ... which works because "if" re-parses the returned string as an
      expression, and evaluates that.
      
      There's only a latent bug here, but this is also un-idiomatic, so I am
      checking in this patch to fix it.  This way, if someone in the future
      uses a braced condition (which is what I normally recommend), it will
      continue to work.
      
      gdb/testsuite/ChangeLog
      2021-02-26  Tom Tromey  <tom@tromey.com>
      
      	* lib/gdb.exp (skip_ctf_tests): Use expr on result.
      573dc0cc
    • GDB Administrator's avatar
      Automatic date update in version.in · 0cf9ea0b
      GDB Administrator authored
      0cf9ea0b
    • Fangrui Song's avatar
      nm: Add --quiet to suppress "no symbols" diagnostic · 7fe1b138
      Fangrui Song authored
      	PR binutils/27408
      	* readelf.c (quiet): New option flag.
      	(enum long_option_values): New enum to hold long option value.
      	(long_options): Add --quiet.
      	(usage): Mention --quiet.
      	(display_rel_file): If quiet is enabled, suppress "no symbols".
      	(main): Handle the new option.
      	* NEWS: Mention --quiet.
      	* docs/binutils.texi: Document --quiet.
      7fe1b138
    • Nick Clifton's avatar
      Correct an error message in the ARM assembler. · fe0171d2
      Nick Clifton authored
      	PR 27411
      	* config/tc-arm.c (do_t_add_sub): Correct error message.
      	* testsuite/gas/arm/pr27411.s: New test.
      	* testsuite/gas/arm/pr27411.d: New test driver.
      	* testsuite/gas/arm/pr27411.l: Expected error output for new test.
      fe0171d2
  2. Feb 26, 2021
    • Tom de Vries's avatar
      Add support for decoding DWARF v5 DW_AT_addr_base tags. · 0e12f6c8
      Tom de Vries authored
      	* dwarf.c (display_debug_addr): Handle dwarf-5 .debug_addr bits.
      0e12f6c8
    • Jan Vrany's avatar
      testsuite: Remove extra \n from expected output of tsv notifications · f8218786
      Jan Vrany authored
      Commit 2450ad54 removed extra trailing \n from tsv notifications but
      did not update gdb.trace/mi-tsv-changed.exp accordingly. This commit
      removes the extra \n from expected output so gdb.trace/mi-tsv-changed.exp
      passes again.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.trace/mi-tsv-changed.exp (test_create_delete_modify_tsv):
      	Remove trailing \n from expected output.
      f8218786
    • Tom de Vries's avatar
      Add support for the split DWARF forms. · 32e4f96c
      Tom de Vries authored
      	PR 27390
      	* dwarf.c: (skip_attr_bytes): Add support for DW_FORM_str* and
      	DW_FORM_addrx*.
      	(read_and_display_attr_value): Likewise.
      32e4f96c
    • Markus Metzger's avatar
      testsuite: note on use_gdb_stub usage · cb51b708
      Markus Metzger authored
      Add a note to the comment on use_gdb_stub explaining the use of this check
      for skipping tests that spawn new inferiors as discussed here:
      
          https://sourceware.org/pipermail/gdb-patches/2020-December/174186.html
      cb51b708
    • Alan Modra's avatar
      Add PR27441 testcase · bfece756
      Alan Modra authored
      	PR 27441
      	* testsuite/ld-plugin/pr27441a.c,
      	* testsuite/ld-plugin/pr27441b.c,
      	* testsuite/ld-plugin/pr27441c.c,
      	* testsuite/ld-plugin/pr27441c.d: New test.
      	* testsuite/ld-plugin/lto.exp: Run it.
      bfece756
    • Alan Modra's avatar
      libctf regen for NEWS · 8255cf42
      Alan Modra authored
      The previous regen was done on a tree without the new NEWS file.
      
      	* Makefile.in: Regenerate.
      8255cf42
    • GDB Administrator's avatar
      Automatic date update in version.in · 06172a2c
      GDB Administrator authored
      06172a2c
    • Kevin Buettner's avatar
      Fix date in ChangeLog · 26b43ca6
      Kevin Buettner authored
      26b43ca6
    • Kevin Buettner's avatar
      Add comment regarding include order of <sys/ptrace.h> and <asm/ptrace.h> · 0f977b77
      Kevin Buettner authored
      I added the same comment for nat/aarch64-linux-hw-point.c yesterday.
      Christian suggested adding the comment for the other file that I had
      identified as including both <sys/ptrace.h> and <asm/ptrace.h>.
      
      I searched the sources in gdb/, but found no other files which include
      both of these headers.
      
      If possible, I would prefer to see us use <sys/ptrace.h> when possible,
      however, from past experience, I've found that this file does not always
      contain all of the constants, etc. required by the particular source
      file.
      
      gdb/ChangeLog:
      
      	* nat/aarch64-sve-linux-ptrace.h: Add comment regarding include
      	order for <sys/ptrace.h> and <asm/ptrace.h>.
      0f977b77
    • Simon Marchi's avatar
      gdb: relax assertion in target_mourn_inferior · dffdd8b5
      Simon Marchi authored
      As reported in PR 26861, when killing an inferior on macOS, we hit the
      assert:
      
          ../../gdb-10.1/gdb/target.c:2149: internal-error: void target_mourn_inferior(ptid_t): Assertion `ptid == inferior_ptid' failed.
      
      This is because darwin_nat_target::kill passes a pid-only ptid to
      target_mourn_inferior, with the pid of the current inferior:
      
          target_mourn_inferior (ptid_t (inf->pid));
      
      ... which doesn't satisfy the assert in target_mourn_inferior:
      
          gdb_assert (ptid == inferior_ptid);
      
      The reason for this assertion is that target_mourn_inferior is a
      prototype shared between GDB and GDBserver, so that shared code in
      gdb/nat (used in both GDB and GDBserver) can call target_mourn_inferior.
      In GDB's implementation, it is likely that some targets still rely on
      inferior_ptid being set to "the current thread we are working on".  So
      until targets are completely decoupled from inferior_ptid (at least
      their mourn_inferior implementations), we need to ensure the passed in
      ptid matches inferior_ptid, to ensure the calling code called
      target_mourn_inferior with the right global context.
      
      However, I think the assert is a bit too restrictive.  The
      mourn_inferior operation works on an inferior, not a specific thread.
      And by the time we call mourn_inferior, the threads of the inferior
      don't exist anymore, the process is gone, so it doesn't really make
      sense to require inferior_ptid to point a specific thread.
      
      I looked at all the target_ops::mourn_inferior implementations, those
      that read inferior_ptid only care about the pid field, which supports
      the idea that only the inferior matters.  Other implementations look at
      the current inferior (call `current_inferior ()`).
      
      I think it would make sense to change target_mourn_inferior to accept
      only a pid rather than a ptid.  It would then assert that the pid is the
      same as the current inferior's pid.  However, this would be a quite
      involved change, so I'll keep it for later.
      
      To fix the macOS issue immediately, I propose to relax the assert to
      only compare the pids, as is done in this patch.
      
      Another solution would obviously be to make darwin_nat_target::kill pass
      inferior_ptid to target_mourn_inferior.  However, the solution I propose
      is more in line with where I think we want to go (passing a pid to
      target_mourn_inferior).
      
      gdb/ChangeLog:
      
      	PR gdb/26861
      	* target.c (target_mourn_inferior): Only compare pids in
      	target_mourn_inferior.
      
      Change-Id: If2439ccc5aa67272ea16148a43c5362ef23fb2b8
      dffdd8b5
    • Jan Matyas's avatar
      Fix initial thread state of non-threaded remote targets · 64d38fdd
      Jan Matyas authored
      This change fixes the initial state of the main thread of remote
      targets which have no concept of threading. Such targets are
      treated as single-threaded by gdb, and this single thread needs
      to be initially set to the "resumed" state, in the same manner as
      threads in thread-aware remote targets (see remote.c,
      remote_target::remote_add_thread).
      
      Without this fix, the following assert was triggered on thread-
      unaware remote targets:
      
          remote_target::select_thread_for_ambiguous_stop_reply(const target_waitstatus*): Assertion `first_resumed_thread != nullptr' failed.
      
      The bug can be reproduced using gdbserver
      
          * by disabling packets 'T' and 'qThreadInfo', or
          * by disabling all thread-related packets.
      
      The test suite has been updated to include these two scenarios, see
      gdb.server/stop-reply-no-thread.exp.
      
      Change-Id: I2c39c9de17e8d6922a8c1b9e259eb316a554a43d
      64d38fdd
    • Nick Clifton's avatar
      Add initial support for .debug_sup sections. · e38332c2
      Nick Clifton authored
      	* dwarf.c (get_type_abbrev_from_form): Accept but ignore sup
      	forms.
      	(read_and_display_attr_value): Handle sup forms.
      	(display_debug_sup): New function.  Displays the contents of a
      	.debug_sup section.
      	(load_debug_sup_file): New function.  Loads the contents of a file
      	referenced by a .debug_sup section.
      	(check_for_and_load_links): Call load_debug_sup_file.
      	(debug_displays): Add entry for .debug_sup.
      	* dwarf.h (enum dwarf_section_display_enum): Add debug_sup.
      	* readelf.c (process_section_headers): Add support for debug_sup.
      	* doc/debug.options.texi: Note that the =links option will display
      	the contents of .debug_sup sections.
      	* NEWS: Mention the new support.
      e38332c2
    • Andrew Burgess's avatar
      gdb/testsuite: Add a missing -wrap in gdb_test_multiple · d4ff3cbf
      Andrew Burgess authored
      In commit:
      
        commit faeb9f13
        Date:   Wed Feb 24 12:50:00 2021 +0000
      
            gdb/fortran: add support for ASSOCIATED builtin
      
      A test was added that fails to process the trailing gdb prompt inside
      a gdb_test_multiple call, this will cause a failure if the tests are
      run with READ1=1, or randomly at other times depending on how the
      expect buffers are read in.
      
      Fixed by adding a -wrap argument.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.fortran/associated.exp: Add missing '-wrap' argument.
      d4ff3cbf
    • Jan Vrany's avatar
      gdb/mi: Remove extra \n from tsv and and traceframe notifications · 2450ad54
      Jan Vrany authored
      An extra \n in calls to fprintf_unfiltered() caused invalid MI records
      to be emitted:
      
         > gdb -i mi3 -ex "target remote :7000"
         =thread-group-added,id="i1"
         ~"GNU gdb (GDB) 11.0.50.20201019-git\n"
         ~"Copyright (C) 2020 Free Software Foundation, Inc.\n"
         ...
         ~"Remote debugging using :7001\n"
         =tsv-created,name="trace_timestamp",initial="0"\n
         =thread-group-started,id="i1",pid="304973"
      
      This commit fixes the problem.
      
      gdb/ChangeLog:
      
              * gdb/mi/mi-interp.c (mi_traceframe_changed): Remove trailing \n from output.
              (mi_tsv_created): Likewise.
              (mi_tsv_deleted): Likewise.
      2450ad54
  3. Feb 25, 2021
    • Tom de Vries's avatar
      [gdb/symtab] Fix wrong unit_type Dwarf Error · 30c80d88
      Tom de Vries authored
      When running test-case gdb.dwarf2/fission-mix.exp using gcc-11 (and using the
      tentative fix for PR27353 to get past that assertion failure), I run into:
      ...
      (gdb) file fission-mix^M
      Reading symbols from fission-mix...^M
      Dwarf Error: wrong unit_type in compilation unit header \
        (is DW_UT_split_compile (0x05), should be DW_UT_type (0x02)) \
        [in module fission-mix2.dwo]^M
      (No debugging symbols found in fission-mix)^M
      ...
      
      The compilation unit that is complained about is:
      ...
      Contents of the .debug_info.dwo section (loaded from fission-mix2.dwo):
      
        Compilation Unit @ offset 0x0:
         Length:        0x57 (32-bit)
         Version:       5
         Unit Type:     DW_UT_split_compile (5)
         Abbrev Offset: 0x0
         Pointer Size:  8
         DWO ID:        0x3e3930d3cc1805df
       <0><14>: Abbrev Number: 1 (DW_TAG_compile_unit)
      ...
      
      And the dwarf error is triggered here in read_comp_unit_head:
      ...
              case DW_UT_split_compile:
                if (section_kind != rcuh_kind::COMPILE)
                  error (_("Dwarf Error: wrong unit_type in compilation unit header "
                         "(is %s, should be %s) [in module %s]"),
                         dwarf_unit_type_name (cu_header->unit_type),
                         dwarf_unit_type_name (DW_UT_type), filename);
                break;
      ...
      due to passing rcuh_kind::TYPE here in open_and_init_dwo_file:
      ...
            create_debug_type_hash_table (per_objfile, dwo_file.get (),
                                          &dwo_file->sections.info, dwo_file->tus,
                                          rcuh_kind::TYPE);
      ...
      
      Fix this by changing the section_kind argument to create_debug_type_hash_table
      to rcuh_kind::COMPILE, to reflect that we're passing &dwo_file->sections.info
      rather than &dwo_file->sections.types.
      
      Tested on x86_64-linux.
      
      gdb/ChangeLog:
      
      2021-02-25  Tom de Vries  <tdevries@suse.de>
      
      	PR symtab/27354
      	* dwarf2/read.c (open_and_init_dwo_file): Use rcuh_kind::COMPILE as
      	section_kind for &dwo_file->sections.info.
      30c80d88
    • Jan Beulich's avatar
      ld: correct description of behavior for symbols redefined by script · 3c27360b
      Jan Beulich authored
      Prior to 89753bbf ("Warn when a script redefines a symbol") there
      was no diagnostic at all. As of that commit, it's a warning, not an
      error.
      3c27360b
    • Andrew Burgess's avatar
      gdb/fortran: don't access non-existent type fields · 68337b8b
      Andrew Burgess authored
      When attempting to call a Fortran function for which there is no debug
      information we currently trigger undefined behaviour in GDB by
      accessing non-existent type fields.
      
      The reason is that in order to prepare the arguments, for a call to a
      Fortran function, we need to know the type of each argument.  If the
      function being called has no debug information then obviously GDB
      doesn't know about the argument types and we should either give the
      user an error or pick a suitable default.  What we currently do is
      just assume the field exist and access undefined memory, which is
      clearly wrong.
      
      The reason GDB needs to know the argument type is to tell if the
      argument is artificial or not, artificial arguments will be passed by
      value while non-artificial arguments will be passed by reference.
      
      An ideal solution for this problem would be to allow the user to cast
      the function to the correct type, we already do this to some degree
      with the return value, for example:
      
        (gdb) print some_func_ ()
        'some_func_' has unknown return type; cast the call to its declared return type
        (gdb) print (integer) some_func_ ()
        $1 = 1
      
      But if we could extend this to allow casting to the full function
      type, GDB could figure out from the signature what are real
      parameters, and what are artificial parameters.  Maybe something like
      this:
      
        (gdb) print ((integer () (integer, double)) some_other_func_ (1, 2.3)
      
      Alas, right now the Fortran expression parser doesn't seem to support
      parsing function signatures, and we certainly don't have support for
      figuring out real vs artificial arguments from a signature.
      
      Still, I think we can prevent GDB from accessing undefined memory and
      provide a reasonable default behaviour.
      
      In this commit I:
      
        - Only ask if the argument is artificial if the type of the argument
        is actually known.
      
        - Unknown arguments are assumed to be artificial and passed by
        value (non-artificial arguments are pass by reference).
      
        - If an artificial argument is prefixed with '&' by the user then we
        treat the argument as pass-by-reference.
      
      With these three changes we avoid undefined behaviour in GDB, and
      allow the user, in most cases, to get a reasonably natural default
      behaviour.
      
      gdb/ChangeLog:
      
      	PR fortran/26155
      	* f-lang.c (fortran_argument_convert): Delete declaration.
      	(fortran_prepare_argument): New function.
      	(evaluate_subexp_f): Move logic to new function
      	fortran_prepare_argument.
      
      gdb/testsuite/ChangeLog:
      
      	PR fortran/26155
      	* gdb.fortran/call-no-debug-func.f90: New file.
      	* gdb.fortran/call-no-debug-prog.f90: New file.
      	* gdb.fortran/call-no-debug.exp: New file.
      68337b8b
    • Andrew Burgess's avatar
      gdb/fortran: add support for ASSOCIATED builtin · faeb9f13
      Andrew Burgess authored
      This commit adds support for the ASSOCIATED builtin to the Fortran
      expression evaluator.  The ASSOCIATED builtin takes one or two
      arguments.
      
      When passed a single pointer argument GDB returns a boolean indicating
      if the pointer is associated with anything.
      
      When passed two arguments the second argument should either be some a
      pointer could point at or a second pointer.
      
      If the second argument is a pointer target, then the result from
      associated indicates if the pointer is pointing at this target.
      
      If the second argument is another pointer, then the result from
      associated indicates if the two pointers are pointing at the same
      thing.
      
      gdb/ChangeLog:
      
      	* f-exp.y (f77_keywords): Add 'associated'.
      	* f-lang.c (fortran_associated): New function.
      	(evaluate_subexp_f): Handle FORTRAN_ASSOCIATED.
      	(operator_length_f): Likewise.
      	(print_unop_or_binop_subexp_f): New function.
      	(print_subexp_f): Make use of print_unop_or_binop_subexp_f for
      	FORTRAN_ASSOCIATED, FORTRAN_LBOUND, and FORTRAN_UBOUND.
      	(dump_subexp_body_f): Handle FORTRAN_ASSOCIATED.
      	(operator_check_f): Likewise.
      	* std-operator.def: Add FORTRAN_ASSOCIATED.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.fortran/associated.exp: New file.
      	* gdb.fortran/associated.f90: New file.
      faeb9f13
    • Andrew Burgess's avatar
      gdb/fortran: add support for legacy .xor. operator · 170f4b23
      Andrew Burgess authored
      gfortran supports .xor. as an alias for .neqv., see:
      
        https://gcc.gnu.org/onlinedocs/gfortran/_002eXOR_002e-operator.html
      
      this commit adds support for this operator to GDB.
      
      gdb/ChangeLog:
      
      	* f-exp.y (fortran_operators): Add ".xor.".
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.fortran/dot-ops.exp (dot_operations): Test ".xor.".
      170f4b23
    • Alan Modra's avatar
      PR27441, inconsistency in weak definitions · bbaddd4b
      Alan Modra authored
      This makes IR objects use the same logic as normal objects with
      respect to what sort of ref/def makes an as-needed library needed.
      Testing the binding of the definition is just plain wrong.  What
      matters is the binding of the reference.
      
      	PR 27441
      	* elf-bfd.h (struct elf_link_hash_entry): Add ref_ir_nonweak.
      	* elflink.c (elf_link_add_object_symbols): Set ref_ir_nonweak and
      	use when deciding an as-needed library should be loaded instead
      	of using the binding of the library definition.
      bbaddd4b
    • GDB Administrator's avatar
      Automatic date update in version.in · 39b07596
      GDB Administrator authored
      39b07596
    • Alan Modra's avatar
      Re: Use make_tempname file descriptor in smart_rename · 40b02646
      Alan Modra authored
      	PR 27456
      	* rename.c (simple_copy): Mark target_stat ATTRIBUTE_UNUSED.
      40b02646
    • Tom de Vries's avatar
      [gdb/symtab] Handle DW_AT_decl_file with form DW_FORM_implicit_const · aa659cfa
      Tom de Vries authored
      With test-case gdb.cp/temargs.exp on target board \
      unix/gdb:debug_flags=-gdwarf-5 I run into:
      ...
      (gdb) info addr I^M
      ERROR: GDB process no longer exists
      GDB process exited with wait status 32286 exp19 0 0 CHILDKILLED SIGABRT SIGABRT
      UNRESOLVED: gdb.cp/temargs.exp: test address of I in templ_m
      ...
      
      This is a regression since commit 529908cb "Remove DW_UNSND".
      
      The problem is that this DW_AT_decl_file:
      ...
       <1><221>: Abbrev Number: 4 (DW_TAG_structure_type)
          <222>   DW_AT_name        : Base<double, 23, (& a_global), &S::f>
          <226>   DW_AT_byte_size   : 1
          <226>   DW_AT_decl_file   : 1
          <226>   DW_AT_decl_line   : 30
          <227>   DW_AT_sibling     : <0x299>
      ...
      is not read by this code in new_symbol:
      ....
            attr = dwarf2_attr (die,
                                inlined_func ? DW_AT_call_file : DW_AT_decl_file,
                                cu);
            if (attr != nullptr && attr->form_is_unsigned ())
      ...
      because DW_AT_decl_file has form DW_FORM_implicit_const:
      ...
         4      DW_TAG_structure_type    [has children]
          DW_AT_name         DW_FORM_strp
          DW_AT_byte_size    DW_FORM_implicit_const: 1
          DW_AT_decl_file    DW_FORM_implicit_const: 1
          DW_AT_decl_line    DW_FORM_data1
          DW_AT_sibling      DW_FORM_ref4
          DW_AT value: 0     DW_FORM value: 0
      ...
      which is a signed LEB128, so attr->form_is_unsigned () returns false.
      
      Fix this by introducing new functions is_nonnegative and as_nonnegative, and
      use these instead of form_is_unsigned and as_unsigned.
      
      Tested on x86_64-linux.
      
      gdb/ChangeLog:
      
      2021-02-24  Tom de Vries  <tdevries@suse.de>
      
      	PR symtab/27336
      	* dwarf2/attribute.c (attribute::form_is_signed): New function
      	factored out of ...
      	* dwarf2/attribute.h (attribute::as_signed): ... here.
      	(attribute::is_nonnegative, attribute::as_nonnegative): New function.
      	(attribute::form_is_signed): Declare.
      	* dwarf2/read.c (new_symbol): Use is_nonnegative and as_nonnegative
      	for DW_AT_decl_file.
      aa659cfa
    • Kevin Buettner's avatar
      Add comment regarding include order of <sys/ptrace.h> and <asm/ptrace.h> · 268c77c1
      Kevin Buettner authored
      gdb/ChangeLog:
      
      	* nat/aarch64-linux-hw-point.c: Add comment regarding include
      	order for <sys/ptrace.h> and <asm/ptrace.h>.
      268c77c1
    • Kevin Buettner's avatar
      Fix aarch64-linux-hw-point.c build problem · 665af52e
      Kevin Buettner authored
      Due to a recent glibc header file change, the file
      nat/aarch64-linux-hw-point.c no longer builds on Fedora rawhide.
      
      An enum for PTRACE_SYSEMU is now provided by <sys/ptrace.h>.  In the
      past, PTRACE_SYSEMU was defined only in <asm/ptrace.h>.  This is
      what it looks like...
      
      In <asm/ptrace.h>:
      
       #define PTRACE_SYSEMU		  31
      
      In <sys/ptrace.h>:
      
      enum __ptrace_request
      {
        ...
        PTRACE_SYSEMU = 31,
       #define PT_SYSEMU PTRACE_SYSEMU
      
        ...
      }
      
      When <asm/ptrace.h> and <sys/ptrace.h> are both included in a source
      file, we run into the following build problem when the former is
      included before the latter:
      
      In file included from nat/aarch64-linux-hw-point.c:26:
      /usr/include/sys/ptrace.h:86:3: error: expected identifier before numeric constant
         86 |   PTRACE_SYSEMU = 31,
            |   ^~~~~~~~~~~~~
      
      (There are more errors after this one too.)
      
      The file builds without error when <asm/ptrace.h> is included after
      <sys/ptrace.h>.  I found that this is already done in
      nat/aarch64-sve-linux-ptrace.h (which is included by
      nat/aarch64-linux-ptrace.c).
      
      I've tested this change on Fedora rawhide and Fedora 33, both
      running on an aarch64 machine.
      
      gdb/ChangeLog:
      
      	* nat/aarch64-linux-hw-point.c: Include <asm/ptrace.h> after
      	<sys/ptrace.h>.
      665af52e
    • Andrew Burgess's avatar
      gdb: use std::string instead of a fixed size buffer · dd80d750
      Andrew Burgess authored
      The 'section' command uses a fixed size buffer into which a section
      name is copied.  This commit replaces this with a use of std::string
      so we can now display very long section names.
      
      The expected results of one test need to be updated.
      
      gdb/ChangeLog:
      
      	* exec.c (set_section_command): Move variable declarations into
      	the function body, and use std::string instead of a fixed size
      	buffer.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.base/sect-cmd.exp: Update expected results.
      dd80d750
    • Andrew Burgess's avatar
      gdb: move get_section_table from exec_target to dummy_target · 336aa7b7
      Andrew Burgess authored
      The only target that implements target_ops::get_section_table in a
      meaningful way is exec_target.  This target calls back into the
      program space to return the current global section_table.
      
      The global section table is populated whenever the user provides GDB
      with an executable, or when a symbol file is loaded, e.g. when a
      dynamic library is loaded, or when the user does add-symbol-file.
      
      I recently ran into a situation where a user, debugging a remote
      target, was not supplying GDB with a main executable at all.  Instead
      the user attached to the target then did add-symbol-file, and then
      proceeded to debug the target.
      
      This works fine, but it was noticed that even when
      trust-readonly-sections was on GDB was still accessing the target to
      get the contents of readonly sections.
      
      The problem is that by not providing an executable there was no
      exec_target in the target stack, and so when GDB calls the
      target_ops::get_section_table function GDB ends up in
      dummy_target::get_section_table, which just returns NULL.
      
      What I want is that even when GDB doesn't have an exec_target in the
      target stack, a call to target_ops::get_section_table will still
      return the section_table from the current program space.
      
      When considering how to achieve this my first though was, why is the
      request for the section table going via the target stack at all?  The
      set of sections loaded is a property of the program space, not the
      target.  This is, after all, why the data is being stored in the
      program space.
      
      So I initially tried changing target_get_section_table so that,
      instead of calling into the target it just returns
      current_program_space->target_sections ().
      
      This would be fine except for one issue, target_bfd (from
      bfd-target.c).  This code is used from solib-svr4.c to create a
      temporary target_ops structure that implements two functions
      target_bfd::xfer_partial and target_bfd::get_section_table.
      
      The purpose behind the code is to enable two targets, ppc64 and frv to
      decode function descriptors from the dynamic linker, based on the
      non-relocated addresses from within the dynamic linker bfd object.
      
      Both of the implemented functions in target_bfd rely on the target_bfd
      object holding a section table, and the ppc64 target requires that the
      target_bfd implement ::get_section_table.
      
      The frv target doesn't require ::get_section_table, instead it
      requires the ::xfer_partial.  We could in theory change the ppc64
      target to use the same approach as frv, however, this would be a bad
      idea.  I believe that the frv target approach is broken.  I'll
      explain:
      
      The frv target calls get_target_memory_unsigned to read the function
      descriptor.  The address being read is the non-relocated address read
      from the dynamic linker in solib-srv4.c:enable_break.  Calling
      get_target_memory_unsigned eventually ends up in target_xfer_partial
      with an object type of TARGET_OBJECT_RAW_MEMORY.  This will then call
      memory_xfer_check_region.  I believe that it is quite possible that a
      the non-relocated addresses pulled from the dynamic linker could be in
      a memory region that is not readable, while the relocated addresses
      are in a readable memory region.  If this was ever the case for the
      frv target then GDB would reject the attempt to read the non-relocated
      function pointer.
      
      In contrast the ppc64 target calls target_section_by_addr, which calls
      target_get_section_table, which then calls the ::get_section_table
      function on the target.
      
      Thus, when reflecting on target_bfd we see two functions,
      ::xfer_partial and ::get_section_table.  The former is required by the
      frv target, but that target is (I think) potentially broken.  While
      the latter is required by the ppc64 target, but this forces
      ::get_section_table to exist as a target_ops member function.
      
      So my original plan, have target_get_section_table NOT call a
      target_ops member function appears to be flawed.
      
      My next idea was to remove exec_target::get_section_table, and instead
      move the implementation into dummy_target::get_section_table.
      Currently the dummy_target implementation always returns NULL
      indicating no section table, but plenty of other dummy_target member
      functions do more than just return null values.
      
      So now, dummy_target::get_section_table returns the section table from
      the current program space.  This allows target_bfd to remain
      unchanged, so ppc64 and frv should not be affected.
      
      Making this change removes the requirement for the user to provide an
      executable, GDB can now always access the section_table, as the
      dummy_target always exists in the target stack.
      
      Finally, there's a test that the target_section table is not empty in
      the case where the user does add-symbol-file without providing an
      executable.
      
      gdb/ChangeLog:
      
      	* exec.c (exec_target::get_section_table): Delete member function.
      	(section_table_read_available_memory): Use current_top_target, not
      	just the exec_ops target.
      	* target-delegates.c: Regenerate.
      	* target.c (default_get_section_table): New function.
      	* target.h (target_ops::get_section_table): Change default
      	behaviour to call default_get_section_table.
      	(default_get_section_table): Declare.
      336aa7b7
    • Andrew Burgess's avatar
      gdb: make the target_sections table private within program_space · 02f7d26b
      Andrew Burgess authored
      Following on from earlier commits which made access to the
      target_sections table more 'const', this commit makes the table
      private within the program_space class and provides member functions
      to access the table.
      
      Ideally I would have liked for the new target_sections member
      function (on program_space) to return a 'const' reference to the table
      within the program_space.  Unfortunately, there are two places in
      solib-*.c, where code outside of the program_space class modifies the
      target_sections table, and so to support this we need to return a
      non-const reference.
      
      There should be no user visible changes after this commit.
      
      gdb/ChangeLog:
      
      	* exec.c (exec_target::close): Call new clear_target_sections
      	function.
      	(program_space::add_target_sections): Update name of member
      	variable.
      	(program_space::foreach_target_section): New function.
      	(program_space::add_target_sections): Update name of member
      	variable.
      	(program_space::remove_target_sections): Likewise.
      	(exec_one_fork): Use new target_sections member function.
      	(exec_target::get_section_table): Likewise.
      	(exec_target::files_info): Likewise.
      	(set_section_command): Use new foreach_target_section member
      	function.
      	(exec_set_section_address): Likewise.
      	(exec_target::has_memory): Use new target_sections member
      	function.
      	* progspace.h (program_space::clear_target_sections): New member
      	function.
      	(program_space::target_sections): Rename member variable to
      	m_target_sections, replace with a new member function.
      	(program_space::foreach_target_section): Declare new member
      	function.
      	(program_space::m_target_sections): New member variable.
      	* solib-dsbt.c (scan_dyntag): Use new member function.
      	* solib-svr4.c (scan_dyntag): Likewise.
      02f7d26b
    • Andrew Burgess's avatar
      gdb/testsuite: enable gdb.base/sect-cmd.exp test for all targets · b91919ac
      Andrew Burgess authored
      During review of the next patch (which changes the 'section' command),
      a bug was pointed out.  I wondered why no tests spotted this bug and I
      found that the 'section' command test (sect-cmd.exp) is only run on
      hppa targets!
      
      In this commit I have given this test script a bit of a spring clean,
      bringing it up to date with current testsuite style.  I have made some
      of the patterns a little more robust, but in general my intention was
      not to change the underlying meaning of any of these tests.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.base/sect-cmd.exp: Rewrite using modern testsuite
      	techniques.  Enable the test for all targets.
      b91919ac
    • Andrew Burgess's avatar
      gdb: spread a little 'const' through the target_section_table code · 19cf757a
      Andrew Burgess authored
      The code to access the target section table can be made more const, so
      lets do that.  There should be no user visible changes after this
      commit.
      
      gdb/ChangeLog:
      
      	* gdb/bfd-target.c (class target_bfd) <get_section_table>: Make
      	return type const.
      	* gdb/exec.c (struct exec_target) <get_section_table>: Likewise.
      	(section_table_read_available_memory): Make local const.
      	(exec_target::xfer_partial): Make local const.
      	(print_section_info): Make parameter const.
      	* gdb/exec.h (print_section_info): Likewise.
      	* gdb/ppc64-tdep.c (ppc64_convert_from_func_ptr_addr): Make local
      	const.
      	* gdb/record-btrace.c (record_btrace_target::xfer_partial):
      	Likewise.
      	* gdb/remote.c (remote_target::remote_xfer_live_readonly_partial):
      	Likewise.
      	* gdb/s390-tdep.c (s390_load): Likewise.
      	* gdb/solib-dsbt.c (scan_dyntag): Likewise.
      	* gdb/solib-svr4.c (scan_dyntag): Likewise.
      	* gdb/target-debug.h (target_debug_print_target_section_table_p):
      	Rename to...
      	(target_debug_print_const_target_section_table_p): ...this.
      	* gdb/target-delegates.c: Regenerate.
      	* gdb/target.c (target_get_section_table): Make return type const.
      	(target_section_by_addr): Likewise.  Also make some locals const.
      	(memory_xfer_partial_1): Make some locals const.
      	* gdb/target.h (struct target_ops) <get_section_table>: Make
      	return type const.
      	(target_section_by_addr): Likewise.
      	(target_get_section_table): Likewise.
      19cf757a
    • Andrew Burgess's avatar
      gdb: add a new 'maint info target-sections' command · 02a79309
      Andrew Burgess authored
      We already have a command 'maint info sections', this command prints
      all sections from all known object files.
      
      However, GDB maintains a second section table internally.  This
      section table is used when GDB wants to read directly from an object
      file rather than actually reading memory on the target.  As such only
      some sections (the allocatable ones) are added to this secondary
      section table.
      
      I recently ran into a situation where some of GDB's optimisations for
      reading directly from the files were not working.  In 'maint info
      sections' I could see that GDB knew about the object file, and did
      know about the sections that it _should_ have been reading from.  But
      I couldn't ask GDB which sections it had copied into its secondary
      section table.
      
      This commit adds a new command 'maint info target-sections' that fills
      this gap.  This command lists only those sections that GDB has copied
      into its secondary table.
      
      You'll notice that the testsuite includes a comment indicating that
      there's a bug in GDB.  Normally this is not something I would add to
      the testsuite, instead we should raise an actual bugzilla bug and then
      mark an xfail, however, a later patch in this series will remove this
      comment once the actual bug in GDB is fixed.
      
      gdb/ChangeLog:
      
      	* NEWS: Mention new 'maint info target-sections' command.
      	* maint.c (maintenance_info_target_sections): New function.
      	(_initialize_maint_cmds): Register new command.
      
      gdb/doc/ChangeLog:
      
      	* gdb.texinfo (Files): Document new 'maint info target-sections'
      	command.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.base/maint-info-sections.exp: Add new tests.
      	(check_maint_info_target_sections_output): New proc.
      02a79309
    • Andrew Burgess's avatar
      gdb/riscv: select rv32 target by default when requested · 895b7b4e
      Andrew Burgess authored
      GDB for RISC-V always uses target descriptions.  When the target
      doesn't provide a target description then a default is selected.
      Usually this default is selected based on the properties of the
      executable being debugged.  However, when there is no executable being
      debugged we currently fallback to the riscv:rv64 target description as
      the default.  This leads to strange behaviour like this:
      
        $ gdb
        (gdb) set architecture riscv:rv32
        (gdb) p sizeof ($pc)
        $1 = 8
      
      Despite the users specifically setting the architecture to riscv:rv32
      GDB still thinks that the target has riscv:rv64 register sizes.
      
      The above is a bit of a contrived situation.  I actually ran into this
      situation while trying to connect to a running riscv:rv32 target
      without supplying an executable (the target didn't provide a target
      description).  When I tried to set a register on the target I ran into
      errors because GDB was passing 8 bytes to the target rather than the
      expected 4.  Even when I manually specified the architecture (as
      above) I couldn't convince GDB to only send 4 bytes.
      
      This patch fixes this issue.  Now, when we selected a default target
      description we will make use of the user selected architecture to
      guide our choice.  In the above example we now get:
      
        $ gdb
        (gdb) set architecture riscv:rv32
        (gdb) p sizeof ($pc)
        $1 = 4
      
      And my real world example of connecting to a remote without an
      executable works fine.
      
      I've used the fact that we can ask GDB about $pc even when no
      executable is loaded as the basis for a test to cover this situation.
      
      gdb/ChangeLog:
      
      	* riscv-tdep.c (riscv_features_from_gdbarch_info): Rename to...
      	(riscv_features_from_bfd): ...this.  Change parameter type to
      	'bfd*', and update as required.
      	(riscv_find_default_target_description): Update call to
      	riscv_features_from_bfd.  Select a default xlen based on
      	info.bfd_arch_info.
      	(riscv_gdbarch_init): Update call to riscv_features_from_bfd.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.arch/riscv-default-tdesc.exp: New file.
      895b7b4e
  4. Feb 24, 2021
    • Andrew Burgess's avatar
      gdb: call value_ind for pointers to dynamic types in UNOP_IND evaluation · bc3c0632
      Andrew Burgess authored
      When evaluating and expression containing UNOP_IND in mode
      EVAL_AVOID_SIDE_EFFECTS, GDB currently (mostly) returns the result of
      a call to value_zero meaning we get back an object with the correct
      type, but its contents are all zero.
      
      If the target type contains fields with dynamic type then in order to
      resolve these dynamic fields GDB will need to read the value of the
      field from within the parent object.  In this case the field value
      will be zero as a result of the call to value_zero mentioned above.
      
      The idea behind EVAL_AVOID_SIDE_EFFECTS is to avoid the chance that
      doing something like `ptype` will modify state within the target, for
      example consider: ptype i++.
      
      However, there is already precedence within GDB that sometimes, in
      order to get accurate type results, we can't avoid reading from the
      target, even when EVAL_AVOID_SIDE_EFFECTS is in effect.  For example I
      would point to eval.c:evaluate_var_value, the handling of OP_REGISTER,
      the handling of value_x_unop in many places.  I believe the Ada
      expression evaluator also ignore EVAL_AVOID_SIDE_EFFECTS in some
      cases.
      
      I am therefor proposing that, in the case where a pointer points at a
      dynamic type, we allow UNOP_IND to perform the actual indirection.
      This allows accurate types to be displayed in more cases.
      
      gdb/ChangeLog:
      
      	* eval.c (evaluate_subexp_standard): Call value_ind for points to
      	dynamic types in UNOP_IND.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.fortran/pointer-to-pointer.exp: Additional tests.
      bc3c0632
    • Nick Clifton's avatar
      Fix a potential integer overflow when adding together section sizes for the AVR port of objdump. · 9d3fcfe0
      Nick Clifton authored
      	PR 27285
      	* od-elf32_avr.c (elf32_avr_get_memory_usage): Check for overflows
      	when adding together the section sizes.
      9d3fcfe0
    • Nick Clifton's avatar
      Remove support for old v1 & v2 style GNU build notes. · c74147bb
      Nick Clifton authored
      	* objcopy.c (merge_gnu_build_notes): Remove support for v1/v2 GNU
      	build notes.
      	* readelf.c (print_gnu_build_attribute_description): Likewise.
      c74147bb
    • Alan Modra's avatar
      PR27459, segmentation fault in go32exe_check_format · 93af1b04
      Alan Modra authored
      	PR 27459
      	* coff-stgo32.c (go32exe_check_format): Sanity check size of
      	header to avoid a buffer overflow.
      93af1b04