Skip to content
Snippets Groups Projects
  1. Feb 13, 2023
  2. Jan 01, 2023
  3. Nov 11, 2022
    • Lancelot SIX's avatar
      gdb/py-inferior: Keep inferior threads in a map · 40b355f2
      Lancelot SIX authored
      The python code maintains a list of threads for each inferior.  This
      list is implemented as a linked list.  When the number of threads grows
      high, this implementation can begin to be a performance bottleneck as
      finding a particular thread_object in the list has a complexity of O(N).
      
      We see this in ROCgdb[1], a downstream port of GDB for AMDGUP.  On
      AMDGPU devices, the number of threads can get significantly higher than
      on usual GDB workloads.
      
      In some situations, we can reach the end of the inferior process with
      GDB still having a substantial list of known threads.  While running
      target_mourn_inferior, we end up in inferior::clear_thread_list which
      iterates over all remaining threads and marks each thread exited.  This
      fires the gdb::observers::thread_exit observer and eventually
      py-inferior.c:set_thread_exited gets called.  This function searches in
      the linked list with poor performances.
      
      This patch proposes to change the linked list that keeps the per
      inferior_object list of thread_objects into a std::unordered_map.  This
      allows to have the search operation complexity be O(1) on average
      instead of O(N).
      
      With this patch, we can complete clear_thread_list in about 2.5 seconds
      compared to 10 minutes without it.
      
      Except for the performance change, no user visible change is expected.
      
      Regression tested on Ubuntu-22.04 x86_64.
      
      [1] https://github.com/ROCm-Developer-Tools/ROCgdb
      40b355f2
  4. Oct 10, 2022
    • Tom Tromey's avatar
      Change GDB to use frame_info_ptr · bd2b40ac
      Tom Tromey authored
      
      This changes GDB to use frame_info_ptr instead of frame_info *
      The substitution was done with multiple sequential `sed` commands:
      
      sed 's/^struct frame_info;/class frame_info_ptr;/'
      sed 's/struct frame_info \*/frame_info_ptr /g' - which left some
          issues in a few files, that were manually fixed.
      sed 's/\<frame_info \*/frame_info_ptr /g'
      sed 's/frame_info_ptr $/frame_info_ptr/g' - used to remove whitespace
          problems.
      
      The changed files were then manually checked and some 'sed' changes
      undone, some constructors and some gets were added, according to what
      made sense, and what Tromey originally did
      
      Co-Authored-By: default avatarBruno Larsen <blarsen@redhat.com>
      Approved-by: default avatarTom Tomey <tom@tromey.com>
      bd2b40ac
  5. Sep 21, 2022
    • Simon Marchi's avatar
      gdb: remove TYPE_LENGTH · df86565b
      Simon Marchi authored
      Remove the macro, replace all uses with calls to type::length.
      
      Change-Id: Ib9bdc954576860b21190886534c99103d6a47afb
      df86565b
  6. Jul 28, 2022
    • Tom Tromey's avatar
      Rewrite registry.h · 08b8a139
      Tom Tromey authored
      This rewrites registry.h, removing all the macros and replacing it
      with relatively ordinary template classes.  The result is less code
      than the previous setup.  It replaces large macros with a relatively
      straightforward C++ class, and now manages its own cleanup.
      
      The existing type-safe "key" class is replaced with the equivalent
      template class.  This approach ended up requiring relatively few
      changes to the users of the registry code in gdb -- code using the key
      system just required a small change to the key's declaration.
      
      All existing users of the old C-like API are now converted to use the
      type-safe API.  This mostly involved changing explicit deletion
      functions to be an operator() in a deleter class.
      
      The old "save/free" two-phase process is removed, and replaced with a
      single "free" phase.  No existing code used both phases.
      
      The old "free" callbacks took a parameter for the enclosing container
      object.  However, this wasn't truly needed and is removed here as
      well.
      
      
      08b8a139
  7. Jul 18, 2022
    • Tom Tromey's avatar
      Add gdb.free_objfile event registry · 0b4fe76f
      Tom Tromey authored
      Currently, Python code can use event registries to detect when gdb
      loads a new objfile, and when gdb clears the objfile list.  However,
      there's no way to detect the removal of an objfile, say when the
      inferior calls dlclose.
      
      This patch adds a gdb.free_objfile event registry and arranges for an
      event to be emitted in this case.
      
      0b4fe76f
  8. Mar 23, 2022
    • Simon Marchi's avatar
      gdb/python: remove Python 2/3 compatibility macros · 5aee4587
      Simon Marchi authored
      New in this version:
      
       - Rebase on master, fix a few more issues that appeared.
      
      python-internal.h contains a number of macros that helped make the code
      work with both Python 2 and 3.  Remove them and adjust the code to use
      the Python 3 functions.
      
      Change-Id: I99a3d80067fb2d65de4f69f6473ba6ffd16efb2d
      5aee4587
  9. Jan 26, 2022
    • Tom Tromey's avatar
      Change how Python architecture and language are handled · 1da5d0e6
      Tom Tromey authored
      Currently, gdb's Python layer captures the current architecture and
      language when "entering" Python code.  This has some undesirable
      effects, and so this series changes how this is handled.
      
      First, there is code like this:
      
        gdbpy_enter enter_py (python_gdbarch, python_language);
      
      This is incorrect, because both of these are NULL when not otherwise
      assigned.  This can cause crashes in some cases -- I've added one to
      the test suite.  (Note that this crasher is just an example, other
      ones along the same lines are possible.)
      
      Second, when the language is captured in this way, it means that
      Python code cannot affect the current language for its own purposes.
      It's reasonable to want to write code like this:
      
          gdb.execute('set language mumble')
          ... stuff using the current language
          gdb.execute('set language previous-value')
      
      However, this won't actually work, because the language is captured on
      entry.  I've added a test to show this as well.
      
      This patch changes gdb to try to avoid capturing the current values.
      The Python concept of the current gdbarch is only set in those few
      cases where a non-default value is computed or needed; and the
      language is not captured at all -- instead, in the cases where it's
      required, the current language is temporarily changed.
      
      1da5d0e6
  10. Jan 05, 2022
  11. Jan 01, 2022
  12. Nov 30, 2021
    • Andrew Burgess's avatar
      gdb/python: introduce gdb.TargetConnection object type · 0e3b7c25
      Andrew Burgess authored
      This commit adds a new object type gdb.TargetConnection.  This new
      type represents a connection within GDB (a connection as displayed by
      'info connections').
      
      There's three ways to find a gdb.TargetConnection, there's a new
      'gdb.connections()' function, which returns a list of all currently
      active connections.
      
      Or you can read the new 'connection' property on the gdb.Inferior
      object type, this contains the connection for that inferior (or None
      if the inferior has no connection, for example, it is exited).
      
      Finally, there's a new gdb.events.connection_removed event registry,
      this emits a new gdb.ConnectionEvent whenever a connection is removed
      from GDB (this can happen when all inferiors using a connection exit,
      though this is not always the case, depending on the connection type).
      The gdb.ConnectionEvent has a 'connection' property, which is the
      gdb.TargetConnection being removed from GDB.
      
      The gdb.TargetConnection has an 'is_valid()' method.  A connection
      object becomes invalid when the underlying connection is removed from
      GDB (as discussed above, this might be when all inferiors using a
      connection exit, or it might be when the user explicitly replaces a
      connection in GDB by issuing another 'target' command).
      
      The gdb.TargetConnection has the following read-only properties:
      
        'num': The number for this connection,
      
        'type': e.g. 'native', 'remote', 'sim', etc
      
        'description': The longer description as seen in the 'info
                       connections' command output.
      
        'details': A string or None.  Extra details for the connection, for
                   example, a remote connection's details might be
                   'hostname:port'.
      0e3b7c25
  13. Nov 08, 2021
    • Simon Marchi's avatar
      gdb: remove bpstat typedef, rename bpstats to bpstat · 313f3b21
      Simon Marchi authored
      I don't find that the bpstat typedef, which hides a pointer, is
      particularly useful.  In fact, it confused me many times, and I just see
      it as something to remember that adds cognitive load.  Also, with C++,
      we might want to be able to pass bpstats objects by const-reference, not
      necessarily by pointer.
      
      So, remove the bpstat typedef and rename struct bpstats to bpstat (since
      it represents one bpstat, it makes sense that it is singular).
      
      Change-Id: I52e763b6e54ee666a9e045785f686d37b4f5f849
      313f3b21
  14. Oct 25, 2021
    • Simon Marchi's avatar
      gdb: change functions returning value contents to use gdb::array_view · 50888e42
      Simon Marchi authored
      The bug fixed by this [1] patch was caused by an out-of-bounds access to
      a value's content.  The code gets the value's content (just a pointer)
      and then indexes it with a non-sensical index.
      
      This made me think of changing functions that return value contents to
      return array_views instead of a plain pointer.  This has the advantage
      that when GDB is built with _GLIBCXX_DEBUG, accesses to the array_view
      are checked, making bugs more apparent / easier to find.
      
      This patch changes the return types of these functions, and updates
      callers to call .data() on the result, meaning it's not changing
      anything in practice.  Additional work will be needed (which can be done
      little by little) to make callers propagate the use of array_view and
      reap the benefits.
      
      [1] https://sourceware.org/pipermail/gdb-patches/2021-September/182306.html
      
      Change-Id: I5151f888f169e1c36abe2cbc57620110673816f3
      50888e42
  15. Oct 22, 2021
    • Andrew Burgess's avatar
      gdb/python: move gdb.Membuf support into a new file · 625f7b1c
      Andrew Burgess authored
      In a future commit I'm going to be creating gdb.Membuf objects from a
      new file within gdb/python/py*.c.  Currently all gdb.Membuf objects
      are created directly within infpy_read_memory (as a result of calling
      gdb.Inferior.read_memory()).
      
      Initially I split out the Membuf creation code into a new function,
      and left the new function in gdb/python/py-inferior.c, however, it
      felt a little random that the Membuf creation code should live with
      the inferior handling code.
      
      So, then I moved all of the Membuf related code out into a new file,
      gdb/python/py-membuf.c, the interface is gdbpy_buffer_to_membuf, which
      wraps an array of bytes into a gdb.Membuf object.
      
      Most of the code is moved directly from py-inferior.c with only minor
      tweaks to layout and replacing NULL with nullptr, hence, I've left the
      copyright date on py-membuf.c as 2009-2021 to match py-inferior.c.
      
      Currently, the only user of this code is still py-inferior.c, but in
      later commits this will change.
      
      There should be no user visible changes after this commit.
      625f7b1c
  16. Oct 05, 2021
    • Andrew Burgess's avatar
      gdb/python: fix memory leak in python inferior code · cb6e6bb8
      Andrew Burgess authored
      When a user creates a gdb.Inferior object for the first time a new
      Python object is created.  This object is then cached within GDB's
      inferior object using the registry mechanism (see
      inferior_to_inferior_object in py-inferior.c, specifically the calls
      to inferior_data and set_inferior_data).
      
      The Python Reference to the gdb.Inferior object held within the real
      inferior object ensures that the reference count on the Python
      gdb.Inferior object never reaches zero while the GDB inferior object
      continues to exist.
      
      At the same time, the gdb.Inferior object maintains a C++ pointer back
      to GDB's real inferior object.  We therefore end up with a system that
      looks like this:
      
                         Python Reference
                               |
                               |
          .----------.         |          .--------------.
          |          |------------------->|              |
          | inferior |                    | gdb.Inferior |
          |          |<-------------------|              |
          '----------'         |          '--------------'
                               |
                               |
                          C++ Pointer
      
      When GDB's inferior object is deleted (say the inferior exits) then
      py_free_inferior is called (thanks to the registry system), this
      function looks up the Python gdb.Inferior object and sets the C++
      pointer to nullptr and finally reduces the reference count on the
      Python gdb.Inferior object.
      
      If at this point the user still holds a reference to the Python
      gdb.Inferior object then nothing happens.  However, the gdb.Inferior
      object is now in the non-valid state (see infpy_is_valid in
      py-inferior.c), but otherwise, everything is fine.
      
      However, if there are no further references to the Python gdb.Inferior
      object, or, once the user has given up all their references to the
      gdb.Inferior object, then infpy_dealloc is called.
      
      This function currently checks to see if the inferior pointer within
      the gdb.Inferior object is nullptr or not.  If the pointer is nullptr
      then infpy_dealloc immediately returns.
      
      Only when the inferior point in the gdb.Inferior is not nullptr do
      we (a) set the gdb.Inferior reference inside GDB's inferior to
      nullptr, and (b) call the underlying Python tp_free function.
      
      There are a number things wrong here:
      
        1.  The Python gdb.Inferior reference within GDB's inferior object
        holds a reference count, thus, setting this reference to nullptr
        without first decrementing the reference count would leak a
        reference, however...
      
        2. As GDB's inferior holds a reference then infpy_dealloc will never
        be called until GDB's inferior object is deleted.  Deleting a GDB
        inferior ohject calls py_free_inferior, and so gives up the
        reference.  At this point there is no longer a need to call
        set_inferior_data to set the field back to NULL, that field must
        have been cleared in order to get the reference count to zero, which
        means...
      
        3. If we know that py_free_inferior must be called before
        infpy_dealloc, then we know that the inferior pointer in
        gdb.Inferior will always be nullptr when infpy_dealloc is called,
        this means that the call to the underlying tp_free function will
        always be skipped.  Skipping this call will cause Python to leak the
        memory associated with the gdb.Inferior object, which is what we
        currently always do.
      
      Given all of the above, I assert that the C++ pointer within
      gdb.Inferior will always be nullptr when infpy_dealloc is called.
      That's what this patch does.
      
      I wrote a test for this issue making use of Pythons tracemalloc
      module, which allows us to spot this memory leak.
      cb6e6bb8
  17. Sep 09, 2021
    • Andrew Burgess's avatar
      gdb/python: remove all uses of Py_TPFLAGS_HAVE_ITER · 0b233e34
      Andrew Burgess authored
      Python 2 has a bit flag Py_TPFLAGS_HAVE_ITER which can be passed as
      part of the tp_flags field when defining a new object type.  This flag
      is not defined in Python 3 and so we define it to 0 in
      python-internal.h (when IS_PY3K is defined).
      
      The meaning of this flag is that the object has the fields tp_iter and
      tp_iternext.  Note the use of "has" here, the flag says nothing about
      the values in those fields, just that the type object has the fields.
      
      In early versions of Python 2 these fields were no part of the
      PyTypeObject struct, they were added in version 2.2 (see
      https://docs.python.org/release/2.3/api/type-structs.html).  And so,
      there could be a some code compiled out there which has a PyTypeObject
      structure within it that doesn't even have the tp_iter and tp_iternext
      fields, attempting to access these fields would be undefined
      behaviour.
      
      And so Python added the Py_TPFLAGS_HAVE_ITER flag.  If the flag is
      present then Python is free to access the tp_iter and tp_iternext
      fields.
      
      If we consider GDB then we always assume that the tp_iter and
      tp_iternext fields are part of PyTypeObject.  If someone was crazy
      enough to try and compile GDB against Python 2.1 then we'd get lots of
      build errors saying that we were passing too many fields when
      initializing PyTypeObject structures.  And so, I claim, we can be sure
      that GDB will always be compiled with a version of Python that has the
      tp_iter and tp_iternext fields in PyTypeObject.
      
      Next we can look at the Py_TPFLAGS_DEFAULT flag.  In Python 2, each
      time additional fields are added to PyTypeObject a new Py_TPFLAGS_*
      flag would be defined to indicate whether those flags are present or
      not.  And, those new flags would be added to Py_TPFLAGS_DEFAULT.  And
      so, in the latest version of Python 2 the Py_TPFLAGS_DEFAULT flag
      includes Py_TPFLAGS_HAVE_ITER (see
      https://docs.python.org/2.7/c-api/typeobj.html).
      
      In GDB we pass Py_TPFLAGS_DEFAULT as part of the tp_flags for all
      objects we define.
      
      And so, in this commit, I propose to remove all uses of
      Py_TPFLAGS_HAVE_ITER from GDB, it's simply not needed.
      
      There should be no user visible changes after this commit.
      0b233e34
  18. Jul 13, 2021
    • Simon Marchi's avatar
      gdb: make thread_info::suspend private, add getters / setters · 1edb66d8
      Simon Marchi authored
      A following patch will want to take some action when a pending wait
      status is set on or removed from a thread.  Add a getter and a setter on
      thread_info for the pending waitstatus, so that we can add some code in
      the setter later.
      
      The thing is, the pending wait status field is in the
      thread_suspend_state, along with other fields that we need to backup
      before and restore after the thread does an inferior function call.
      Therefore, make the thread_suspend_state member private
      (thread_info::suspend becomes thread_info::m_suspend), and add getters /
      setters for all of its fields:
      
       - pending wait status
       - stop signal
       - stop reason
       - stop pc
      
      For the pending wait status, add the additional has_pending_waitstatus
      and clear_pending_waitstatus methods.
      
      I think this makes the thread_info interface a bit nicer, because we
      now access the fields as:
      
        thread->stop_pc ()
      
      rather than
      
        thread->suspend.stop_pc
      
      The stop_pc field being in the `suspend` structure is an implementation
      detail of thread_info that callers don't need to be aware of.
      
      For the backup / restore of the thread_suspend_state structure, add
      save_suspend_to and restore_suspend_from methods.  You might wonder why
      `save_suspend_to`, as opposed to a simple getter like
      
        thread_suspend_state &suspend ();
      
      I want to make it clear that this is to be used only for backing up and
      restoring the suspend state, _not_ to access fields like:
      
        thread->suspend ()->stop_pc
      
      Adding some getters / setters allows adding some assertions.  I find
      that this helps understand how things are supposed to work.  Add:
      
       - When getting the pending status (pending_waitstatus method), ensure
         that there is a pending status.
       - When setting a pending status (set_pending_waitstatus method), ensure
         there is no pending status.
      
      There is one case I found where this wasn't true - in
      remote_target::process_initial_stop_replies - which needed adjustments
      to respect that contract.  I think it's because
      process_initial_stop_replies is kind of (ab)using the
      thread_info::suspend::waitstatus to store some statuses temporarily, for
      its internal use (statuses it doesn't intent on leaving pending).
      
      process_initial_stop_replies pulls out stop replies received during the
      initial connection using target_wait.  It always stores the received
      event in `evthread->suspend.waitstatus`.  But it only sets
      waitstatus_pending_p, if it deems the event interesting enough to leave
      pending, to be reported to the core:
      
            if (ws.kind != TARGET_WAITKIND_STOPPED
      	  || ws.value.sig != GDB_SIGNAL_0)
      	evthread->suspend.waitstatus_pending_p = 1;
      
      It later uses this flag a bit below, to choose which thread to make the
      "selected" one:
      
            if (selected == NULL
      	  && thread->suspend.waitstatus_pending_p)
      	selected = thread;
      
      And ultimately that's used if the user-visible mode is all-stop, so that
      we print the stop for that interesting thread:
      
        /* In all-stop, we only print the status of one thread, and leave
           others with their status pending.  */
        if (!non_stop)
          {
            thread_info *thread = selected;
            if (thread == NULL)
      	thread = lowest_stopped;
            if (thread == NULL)
      	thread = first;
      
            print_one_stopped_thread (thread);
          }
      
      But in any case (all-stop or non-stop), print_one_stopped_thread needs
      to access the waitstatus value of these threads that don't have a
      pending waitstatus (those that had TARGET_WAITKIND_STOPPED +
      GDB_SIGNAL_0).  This doesn't work with the assertions I've
      put.
      
      So, change the code to only set the thread's wait status if it is an
      interesting one that we are going to leave pending.  If the thread
      stopped due to a non-interesting event (TARGET_WAITKIND_STOPPED +
      GDB_SIGNAL_0), don't store it.  Adjust print_one_stopped_thread to
      understand that if a thread has no pending waitstatus, it's because it
      stopped with TARGET_WAITKIND_STOPPED + GDB_SIGNAL_0.
      
      The call to set_last_target_status also uses the pending waitstatus.
      However, given that the pending waitstatus for the thread may have been
      cleared in print_one_stopped_thread (and that there might not even be a
      pending waitstatus in the first place, as explained above), it is no
      longer possible to do it at this point.  To fix that, move the call to
      set_last_target_status in print_one_stopped_thread.  I think this will
      preserve the existing behavior, because set_last_target_status is
      currently using the current thread's wait status.  And the current
      thread is the last one for which print_one_stopped_thread is called.  So
      by calling set_last_target_status in print_one_stopped_thread, we'll get
      the same result.  set_last_target_status will possibly be called
      multiple times, but only the last call will matter.  It just means
      possibly more calls to set_last_target_status, but those are cheap.
      
      Change-Id: Iedab9653238eaf8231abcf0baa20145acc8b77a7
      1edb66d8
  19. Jun 21, 2021
    • Andrew Burgess's avatar
      gdb/python: move PyLong_From* calls into py-utils.c · 8b9c48b2
      Andrew Burgess authored
      We already have two helper functions in py-utils.c:
      
        gdb_py_object_from_longest (LONGEST l)
        gdb_py_object_from_ulongest (ULONGEST l)
      
      these wrap around calls to either PyLong_FromLongLong,
      PyLong_FromLong, or PyInt_From_Long (if Python 2 is being used).
      
      There is one place in gdb/python/* where a call to PyLong_FromLong was
      added outside of the above utility functions, this was done in the
      recent commit:
      
        commit 55789354
        Date:   Fri May 14 11:56:31 2021 +0200
      
            gdb/python: add a 'connection_num' attribute to Inferior objects
      
      In this commit I replace the direct use of PyLong_FromLong with a call
      to gdb_py_object_from_longest.  The only real change with this commit,
      is that, for Python 2, we will now end up calling PyInt_FromLong
      instead of PyLong_FromLong, but this should be invisible to the user.
      For Python 3 there should be absolutely no change.
      
      gdb/ChangeLog:
      
      	* python/py-inferior.c (infpy_get_connection_num): Call
      	gdb_py_object_from_longest instead of PyLong_FromLong directly.
      8b9c48b2
  20. May 14, 2021
    • Tankut Baris Aktemur's avatar
      gdb/python: add a 'connection_num' attribute to Inferior objects · 55789354
      Tankut Baris Aktemur authored
      Define a 'connection_num' attribute for Inferior objects.  The
      read-only attribute is the ID of the connection of an inferior, as
      printed by "info inferiors".  In GDB's internal terminology, that's
      the process stratum target of the inferior.  If the inferior has no
      target connection, the attribute is None.
      
      gdb/ChangeLog:
      2021-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
      
      	* python/py-inferior.c (infpy_get_connection_num): New function.
      	(inferior_object_getset): Add a new element for 'connection_num'.
      	* NEWS: Mention the 'connection_num' attribute of Inferior objects.
      
      gdb/doc/ChangeLog:
      2021-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
      
      	* python.texi (Inferiors In Python): Mention the 'connection_num'
      	attribute.
      
      gdb/testsuite/ChangeLog:
      2021-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
      
      	* gdb.python/py-inferior.exp: Add test cases for 'connection_num'.
      55789354
  21. Apr 28, 2021
    • Andrew Burgess's avatar
      gdb: delay python initialisation until gdbpy_finish_initialization · 8e3685bf
      Andrew Burgess authored
      Delay Python initialisation until gdbpy_finish_initialization.
      
      This is mostly about splitting the existing gdbpy_initialize_*
      functions in two, all the calls to register_objfile_data_with_cleanup,
      gdbarch_data_register_post_init, etc are moved into new _initialize_*
      functions, but everything else is left in the gdbpy_initialize_*
      functions.
      
      Then the call to do_start_initialization (in python/python.c) is moved
      from the _initialize_python function into gdbpy_finish_initialization.
      
      There should be no user visible changes after this commit.
      
      gdb/ChangeLog:
      
      	* python/py-arch.c (_initialize_py_arch): New function.
      	(gdbpy_initialize_arch): Move code to _initialize_py_arch.
      	* python/py-block.c (_initialize_py_block): New function.
      	(gdbpy_initialize_blocks): Move code to _initialize_py_block.
      	* python/py-inferior.c (_initialize_py_inferior): New function.
      	(gdbpy_initialize_inferior): Move code to _initialize_py_inferior.
      	* python/py-objfile.c (_initialize_py_objfile): New function.
      	(gdbpy_initialize_objfile): Move code to _initialize_py_objfile.
      	* python/py-progspace.c (_initialize_py_progspace): New function.
      	(gdbpy_initialize_pspace): Move code to _initialize_py_progspace.
      	* python/py-registers.c (_initialize_py_registers): New function.
      	(gdbpy_initialize_registers): Move code to
      	_initialize_py_registers.
      	* python/py-symbol.c (_initialize_py_symbol): New function.
      	(gdbpy_initialize_symbols): Move code to _initialize_py_symbol.
      	* python/py-symtab.c (_initialize_py_symtab): New function.
      	(gdbpy_initialize_symtabs): Move code to _initialize_py_symtab.
      	* python/py-type.c (_initialize_py_type): New function.
      	(gdbpy_initialize_types): Move code to _initialize_py_type.
      	* python/py-unwind.c (_initialize_py_unwind): New function.
      	(gdbpy_initialize_unwind): Move code to _initialize_py_unwind.
      	* python/python.c (_initialize_python): Move call to
      	do_start_initialization to gdbpy_finish_initialization.
      	(gdbpy_finish_initialization): Add call to
      	do_start_initialization.
      8e3685bf
  22. Apr 27, 2021
    • Michael Weghorn's avatar
      gdb: do autoload before notifying Python side in new_objfile event · 2c473def
      Michael Weghorn authored
      Without any explicit dependencies specified, the observers attached
      to the 'gdb::observers::new_objfile' observable are always notified
      in the order in which they have been attached.
      
      The new_objfile observer callback to auto-load scripts is attached in
      '_initialize_auto_load'.
      The new_objfile observer callback that propagates the new_objfile event
      to the Python side is attached in 'gdbpy_initialize_inferior', which is
      called via '_initialize_python'.
      With '_initialize_python' happening before '_initialize_auto_load',
      the consequence was that the new_objfile event was emitted on the Python
      side before autoloaded scripts had been executed when a new objfile was
      loaded.
      As a result, trying to access the objfile's pretty printers (defined in
      the autoloaded script) from a handler for the Python-side
      'new_objfile' event would fail. Those would only be initialized later on
      (when the 'auto_load_new_objfile' callback was called).
      
      To make sure that the objfile passed to the Python event handler
      is properly initialized (including its 'pretty_printers' member),
      make sure that the 'auto_load_new_objfile' observer is notified
      before the 'python_new_objfile' one that propagates the event
      to the Python side.
      
      To do this, make use of the mechanism to explicitly specify
      dependencies between observers (introduced in a preparatory commit).
      
      Add a corresponding testcase that involves a test library with an autoloaded
      Python script and a handler for the Python 'new_objfile' event.
      
      (The real world use case where I came across this issue was in an attempt
      to extend handling for GDB pretty printers for dynamically loaded
      objfiles in the Qt Creator IDE, s. [1] and [2] for more background.)
      
      [1] https://bugreports.qt.io/browse/QTCREATORBUG-25339
      [2] https://codereview.qt-project.org/c/qt-creator/qt-creator/+/333857/1
      
      Tested on x86_64-linux (Debian testing).
      
      gdb/ChangeLog:
      
      	* gdb/auto-load.c (_initialize_auto_load): 'Specify token
      	when attaching the 'auto_load_new_objfile' observer, so
      	other observers can specify it as a dependency.
      	* gdb/auto-load.h (struct token): Declare
      	'auto_load_new_objfile_observer_token' as token to be used
      	for the 'auto_load_new_objfile' observer.
      	* gdb/python/py-inferior.c (gdbpy_initialize_inferior): Make
      	'python_new_objfile' observer depend on 'auto_load_new_objfile'
      	observer, so it gets notified after the latter.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.python/libpy-autoloaded-pretty-printers-in-newobjfile-event.so-gdb.py: New test.
      	* gdb.python/py-autoloaded-pretty-printers-in-newobjfile-event-lib.cc: New test.
      	* gdb.python/py-autoloaded-pretty-printers-in-newobjfile-event-lib.h: New test.
      	* gdb.python/py-autoloaded-pretty-printers-in-newobjfile-event-main.cc: New test.
      	* gdb.python/py-autoloaded-pretty-printers-in-newobjfile-event.exp: New test.
      	* gdb.python/py-autoloaded-pretty-printers-in-newobjfile-event.py: New test.
      
      Change-Id: I8275b3f4c3bec32e56dd7892f9a59d89544edf89
      2c473def
  23. Apr 25, 2021
    • Simon Marchi's avatar
      gdbsupport, gdb: give names to observers · c90e7d63
      Simon Marchi authored
      Give a name to each observer, this will help produce more meaningful
      debug message.
      
      gdbsupport/ChangeLog:
      
      	* observable.h (class observable) <struct observer> <observer>:
      	Add name parameter.
      	<name>: New field.
      	<attach>: Add name parameter, update all callers.
      
      Change-Id: Ie0cc4664925215b8d2b09e026011b7803549fba0
      c90e7d63
  24. Jan 01, 2021
  25. Dec 04, 2020
    • Tom Tromey's avatar
      Remove redundant typedefs · f99b5177
      Tom Tromey authored
      I was inspired by this patch of Simon's:
      
      https://sourceware.org/pipermail/gdb-patches/2020-November/173522.html
      
      ... to remove other typedefs that are no longer necessary now that gdb
      uses C++.
      
      I didn't remove absolutely every one -- I didn't touch the tdep files.
      However, I removed many of them.  In some cases, I removed an existing
      different struct tag.
      
      2020-12-04  Tom Tromey  <tromey@adacore.com>
      
      	* linespec.c (struct linespec_token): Rename; remove typedef.
      	* guile/scm-block.c (struct block_smob): Remove typedef.
      	(struct block_syms_progress_smob): Likewise.
      	* guile/scm-symbol.c (struct symbol_smob): Remove typedef.
      	* guile/scm-symtab.c (symtab_smob): Remove typedef.
      	(struct sal_smob): Remove typedef.
      	* guile/scm-param.c (struct param_smob): Remove typedef.
      	* guile/scm-progspace.c (struct pspace_smob): Rename.
      	* guile/scm-objfile.c (struct objfile_smob): Rename.
      	* guile/scm-iterator.c (struct iterator_smob): Rename.
      	* guile/scm-frame.c (struct frame_smob): Rename.
      	* guile/scm-arch.c (struct arch_smob): Rename.
      	* guile/scm-type.c (struct field_smob): Remove typedef.
      	(struct type_smob): Rename.
      	* guile/scm-cmd.c (struct command_smob): Remove typedef.
      	* guile/scm-ports.c (struct ioscm_memory_port): Remove typedef.
      	* guile/scm-value.c (struct value_smob): Remove typedef.
      	* guile/scm-lazy-string.c (lazy_string_smob): Remove typedef.
      	* guile/guile-internal.h (struct scheme_variable)
      	(struct scheme_function, struct scheme_integer_constant)
      	(struct gdb_smob, struct chained_gdb_smob)
      	(struct eqable_gdb_smob, arch_smob, frame_smob, iterator_smob)
      	(objfile_smob, pspace_smob, type_smob): Remove typedef.
      	* guile/scm-pretty-print.c (pretty_printer_smob): Remove typedef.
      	(struct pretty_printer_worker_smob): Remove typedef.
      	* guile/scm-exception.c (struct exception_smob): Remove typedef.
      	* python/py-block.c (struct block_object): Remove typedef.
      	(block_syms_iterator_object): Update.
      	(set_block): Update.
      	(block_syms_iterator_object): Remove typedef.
      	* python/py-inferior.c (struct membuf_object): Remove typedef.
      	* python/py-symtab.c (struct symtab_object): Remove typedef.
      	(set_symtab): Update.
      	(sal_object): Remove typedef.
      	(set_sal): Update.
      	* python/py-frame.c (frame_object): Remove typedef.
      	* python/py-record-btrace.c (struct btpy_list_object): Remove
      	typedef.
      	* python/py-arch.c (struct arch_object): Remove typedef.
      	* python/py-linetable.c (struct linetable_entry_object)
      	(linetable_object, struct ltpy_iterator_object): Remove typedef.
      	* python/py-events.h (eventregistry_object): Remove typedef.
      	(struct events_object): Remove typedef.
      	* python/python-internal.h (gdbpy_breakpoint_object): Remove
      	typedef.
      	(thread_object): Remove typedef.
      	* python/py-progspace.c (pspace_object): Remove typedef.
      	* python/py-value.c (struct value_object): Remove typedef.
      	* python/py-record.h (recpy_record_object): Remove typedef.
      	(struct recpy_element_object): Remove typedef.
      	* python/py-lazy-string.c (lazy_string_object): Remove typedef.
      	* python/py-objfile.c (objfile_object): Remove typedef.
      	* python/py-cmd.c (struct cmdpy_object): Remove typedef.
      	* python/py-type.c (type_object): Remove typedef.
      	(typy_iterator_object): Update.
      	(set_type): Update.
      	(field_object): Remove typedef.
      	(typy_iterator_object): Remove typedef.
      	* python/py-registers.c (register_descriptor_iterator_object):
      	Remove typedef.
      	(struct register_descriptor_object)
      	(struct reggroup_iterator_object, struct reggroup_object): Remove
      	typedef.
      	* python/py-record.c (recpy_gap_object): Remove typedef.
      	* python/py-symbol.c (symbol_object): Remove typedef.
      	(set_symbol): Update.
      	* python/py-event.h (event_object): Remove typedef.
      	* python/py-param.c (parmpy_object): Remove typedef.
      	* python/py-instruction.c (struct py_insn_obj): Remove typedef.
      	* python/py-unwind.c (struct pending_frame_object): Remove typedef.
      	(unwind_info_object, struct cached_frame_info): Likewise.
      f99b5177
  26. Nov 02, 2020
    • Simon Marchi's avatar
      gdb, gdbserver, gdbsupport: fix leading space vs tabs issues · dda83cd7
      Simon Marchi authored
      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
      dda83cd7
  27. Sep 15, 2020
    • Tom Tromey's avatar
      Don't use PyLong_FromLong · 062534d4
      Tom Tromey authored
      This changes gdb to avoid PyLong_FromLong, preferring to
      gdb_py_object_from_longest instead.
      
      gdb/ChangeLog
      2020-09-15  Tom Tromey  <tromey@adacore.com>
      
      	* python/python.c (gdbpy_parameter_value): Use
      	gdb_py_object_from_longest.
      	* python/py-type.c (convert_field, typy_range): Use
      	gdb_py_object_from_longest.
      	* python/py-tui.c (gdbpy_tui_width, gdbpy_tui_height): Use
      	gdb_py_object_from_longest.
      	* python/py-lazy-string.c (stpy_get_length): Use
      	gdb_py_object_from_longest.
      	* python/py-infthread.c (thpy_get_num, thpy_get_global_num): Use
      	gdb_py_object_from_longest.
      	* python/py-infevents.c (create_memory_changed_event_object): Use
      	gdb_py_object_from_longest.
      	* python/py-inferior.c (infpy_get_num): Use
      	gdb_py_object_from_longest.
      	(infpy_get_pid): Likewise.
      062534d4
  28. Aug 17, 2020
    • Tom Tromey's avatar
      Convert CORE_ADDR to Python using gdb_py_object_from_ulongest · b017825f
      Tom Tromey authored
      An internal test failed on a riscv64-elf cross build because
      Inferior.search_memory returned a negative value.  I tracked this down
      to to use of PyLong_FromLong in infpy_search_memory.  Then, I looked
      at other conversions of CORE_ADDR to Python and fixed these as well.
      
      I don't think there is a good way to write a test for this.
      
      gdb/ChangeLog
      2020-08-17  Tom Tromey  <tromey@adacore.com>
      
      	* python/py-inferior.c (infpy_search_memory): Use
      	gdb_py_object_from_ulongest.
      	* python/py-infevents.c (create_inferior_call_event_object)
      	(create_memory_changed_event_object): Use
      	gdb_py_object_from_ulongest.
      	* python/py-linetable.c (ltpy_entry_get_pc): Use
      	gdb_py_object_from_ulongest.
      b017825f
  29. Apr 18, 2020
    • Tom Tromey's avatar
      Change get_objfile_arch to a method on objfile · 08feed99
      Tom Tromey authored
      This changes get_objfile_arch to be a new inline method,
      objfile::arch.
      
      To my surprise, this function came up while profiling DWARF psymbol
      reading.  Making this change improved performance from 1.986 seconds
      to 1.869 seconds.  Both measurements were done by taking the mean of
      10 runs on a fixed copy of the gdb executable.
      
      gdb/ChangeLog
      2020-04-18  Tom Tromey  <tom@tromey.com>
      
      	* xcoffread.c (enter_line_range, scan_xcoff_symtab): Update.
      	* value.c (value_fn_field): Update.
      	* valops.c (find_function_in_inferior)
      	(value_allocate_space_in_inferior): Update.
      	* tui/tui-winsource.c (tui_update_source_windows_with_line):
      	Update.
      	* tui/tui-source.c (tui_source_window::set_contents): Update.
      	* symtab.c (lookup_global_or_static_symbol)
      	(find_function_start_sal_1, skip_prologue_sal)
      	(print_msymbol_info, find_gnu_ifunc, symbol_arch): Update.
      	* symmisc.c (dump_msymbols, dump_symtab_1)
      	(maintenance_print_one_line_table): Update.
      	* symfile.c (init_entry_point_info, section_is_mapped)
      	(list_overlays_command, simple_read_overlay_table)
      	(simple_overlay_update_1): Update.
      	* stap-probe.c (handle_stap_probe): Update.
      	* stabsread.c (dbx_init_float_type, define_symbol)
      	(read_one_struct_field, read_enum_type, read_range_type): Update.
      	* source.c (info_line_command): Update.
      	* python/python.c (gdbpy_source_objfile_script)
      	(gdbpy_execute_objfile_script): Update.
      	* python/py-type.c (save_objfile_types): Update.
      	* python/py-objfile.c (py_free_objfile): Update.
      	* python/py-inferior.c (python_new_objfile): Update.
      	* psymtab.c (psym_find_pc_sect_compunit_symtab, dump_psymtab)
      	(dump_psymtab_addrmap_1, maintenance_info_psymtabs)
      	(maintenance_check_psymtabs): Update.
      	* printcmd.c (info_address_command): Update.
      	* objfiles.h (struct objfile) <arch>: New method, from
      	get_objfile_arch.
      	(get_objfile_arch): Don't declare.
      	* objfiles.c (get_objfile_arch): Remove.
      	(filter_overlapping_sections): Update.
      	* minsyms.c (msymbol_is_function): Update.
      	* mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines)
      	(output_nondebug_symbol): Update.
      	* mdebugread.c (parse_symbol, basic_type, parse_partial_symbols)
      	(mdebug_expand_psymtab): Update.
      	* machoread.c (macho_add_oso_symfile): Update.
      	* linux-tdep.c (linux_infcall_mmap, linux_infcall_munmap):
      	Update.
      	* linux-fork.c (checkpoint_command): Update.
      	* linespec.c (convert_linespec_to_sals): Update.
      	* jit.c (finalize_symtab): Update.
      	* infrun.c (insert_exception_resume_from_probe): Update.
      	* ia64-tdep.c (ia64_find_unwind_table): Update.
      	* hppa-tdep.c (internalize_unwinds): Update.
      	* gdbtypes.c (get_type_arch, init_float_type, objfile_type):
      	Update.
      	* gcore.c (call_target_sbrk): Update.
      	* elfread.c (record_minimal_symbol, elf_symtab_read)
      	(elf_rel_plt_read, elf_gnu_ifunc_record_cache)
      	(elf_gnu_ifunc_resolve_by_got): Update.
      	* dwarf2/read.c (create_addrmap_from_index)
      	(create_addrmap_from_aranges, dw2_find_pc_sect_compunit_symtab)
      	(read_debug_names_from_section)
      	(process_psymtab_comp_unit_reader, add_partial_symbol)
      	(add_partial_subprogram, process_full_comp_unit)
      	(read_file_scope, read_func_scope, read_lexical_block_scope)
      	(read_call_site_scope, dwarf2_ranges_read)
      	(dwarf2_record_block_ranges, dwarf2_add_field)
      	(mark_common_block_symbol_computed, read_tag_pointer_type)
      	(read_tag_string_type, dwarf2_init_float_type)
      	(dwarf2_init_complex_target_type, read_base_type)
      	(partial_die_info::read, partial_die_info::read)
      	(read_attribute_value, dwarf_decode_lines_1, new_symbol)
      	(dwarf2_fetch_die_loc_sect_off): Update.
      	* dwarf2/loc.c (dwarf2_find_location_expression)
      	(class dwarf_evaluate_loc_desc, rw_pieced_value)
      	(dwarf2_evaluate_loc_desc_full, dwarf2_locexpr_baton_eval)
      	(dwarf2_loc_desc_get_symbol_read_needs)
      	(locexpr_describe_location_piece, locexpr_describe_location_1)
      	(loclist_describe_location): Update.
      	* dwarf2/index-write.c (write_debug_names): Update.
      	* dwarf2/frame.c (dwarf2_build_frame_info): Update.
      	* dtrace-probe.c (dtrace_process_dof): Update.
      	* dbxread.c (read_dbx_symtab, dbx_end_psymtab)
      	(process_one_symbol): Update.
      	* ctfread.c (ctf_init_float_type, read_base_type): Update.
      	* coffread.c (coff_symtab_read, enter_linenos, decode_base_type)
      	(coff_read_enum_type): Update.
      	* cli/cli-cmds.c (edit_command, list_command): Update.
      	* buildsym.c (buildsym_compunit::finish_block_internal): Update.
      	* breakpoint.c (create_overlay_event_breakpoint)
      	(create_longjmp_master_breakpoint)
      	(create_std_terminate_master_breakpoint)
      	(create_exception_master_breakpoint, get_sal_arch): Update.
      	* block.c (block_gdbarch): Update.
      	* annotate.c (annotate_source_line): Update.
      08feed99
  30. Jan 17, 2020
  31. Jan 01, 2020
  32. Nov 18, 2019
    • Philippe Waroquiers's avatar
      Fix a bunch of python leaks due to missing calls to tp_free in *_dealloc functions. · 2e953aca
      Philippe Waroquiers authored
      valgrind reports leaks in many python tests, such as:
      ==17162== VALGRIND_GDB_ERROR_BEGIN
      ==17162== 8,208 (5,472 direct, 2,736 indirect) bytes in 57 blocks are definitely lost in loss record 7,551 of 7,679
      ==17162==    at 0x4835753: malloc (vg_replace_malloc.c:307)
      ==17162==    by 0x6EAFD1: _PyObject_New (object.c:279)
      ==17162==    by 0x4720E6: blpy_iter(_object*) (py-block.c:92)
      ==17162==    by 0x698772: PyObject_GetIter (abstract.c:2577)
      ==17162==    by 0x2343BE: _PyEval_EvalFrameDefault (ceval.c:3159)
      ==17162==    by 0x22E9E2: function_code_fastcall (call.c:283)
      ==17162==    by 0x2340A8: _PyObject_Vectorcall (abstract.h:127)
      ==17162==    by 0x2340A8: call_function (ceval.c:4987)
      ==17162==    by 0x2340A8: _PyEval_EvalFrameDefault (ceval.c:3486)
      ==17162==    by 0x22E9E2: function_code_fastcall (call.c:283)
      ==17162==    by 0x82172B: _PyObject_Vectorcall (abstract.h:127)
      ==17162==    by 0x82172B: method_vectorcall (classobject.c:67)
      ==17162==    by 0x6AF474: _PyObject_Vectorcall (abstract.h:127)
      ==17162==    by 0x6AF474: _PyObject_CallNoArg (abstract.h:153)
      ==17162==    by 0x6AF474: _PyObject_CallFunctionVa (call.c:914)
      ==17162==    by 0x6B0673: callmethod (call.c:1010)
      ==17162==    by 0x6B0673: _PyObject_CallMethod_SizeT (call.c:1103)
      ==17162==    by 0x477DFE: gdb_PyObject_CallMethod<> (python-internal.h:182)
      ==17162==    by 0x477DFE: get_py_iter_from_func(_object*, char const*) (py-framefilter.c:272)
      ==17162==    by 0x4791B4: py_print_args (py-framefilter.c:706)
      ==17162==    by 0x4791B4: py_print_frame(_object*, enum_flags<frame_filter_flag>, ext_lang_frame_args, ui_out*, int, htab*) (py-framefilter.c:960)
      ==17162==    by 0x47A130: gdbpy_apply_frame_filter(extension_language_defn const*, frame_info*, enum_flags<frame_filter_flag>, ext_lang_frame_args, ui_out*, int, int) (py-framefilter.c:1236)
      ==17162==    by 0x369C39: apply_ext_lang_frame_filter(frame_info*, enum_flags<frame_filter_flag>, ext_lang_frame_args, ui_out*, int, int) (extension.c:563)
      ==17162==    by 0x4EC9C9: backtrace_command_1 (stack.c:2031)
      ==17162==    by 0x4EC9C9: backtrace_command(char const*, int) (stack.c:2183)
      ...
      
      Most of the leaks in python tests are due to the fact that many
      PyObject xxxxx_dealloc functions are missing the line to free self
      or obj such as:
         Py_TYPE (self)->tp_free (self);
      or
         Py_TYPE (obj)->tp_free (obj);
      
      With this patch, the number of python tests leaking decreases from 52 to 12.
      
      gdb/ChangeLog
      
      2019-11-18  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* python/py-block.c (blpy_dealloc): Call tp_free.
      	(blpy_block_syms_dealloc): Likewise.
      	* python/py-finishbreakpoint.c (bpfinishpy_dealloc): Likewise.
      	* python/py-inferior.c (infpy_dealloc): Likewise.
      	* python/py-lazy-string.c (stpy_dealloc): Likewise.
      	* python/py-linetable.c (ltpy_iterator_dealloc): Likewise.
      	* python/py-symbol.c (sympy_dealloc): Likewise.
      	* python/py-symtab.c (stpy_dealloc): Likewise.
      	* python/py-type.c (typy_iterator_dealloc): Likewise.
      2e953aca
  33. Jul 11, 2019
    • Tom Tromey's avatar
      Fix use-after-move bug in add_thread_object · 72ee03ff
      Tom Tromey authored
      commit 05b08ac1 ("Reduce manual reference counting in
      py-inferior.c") introduced a use-after-move bug in add_thread_object,
      causing a test suite failure.  This patch fixes the bug.
      
      Tested on x86-64 Fedora 29.
      
      gdb/ChangeLog
      2019-07-11  Tom Tromey  <tromey@adacore.com>
      
      	* python/py-inferior.c (add_thread_object): Don't use thread_obj
      	after it has been moved.
      72ee03ff
  34. Jul 10, 2019
    • Tom Tromey's avatar
      Reduce manual reference counting in py-inferior.c · 05b08ac1
      Tom Tromey authored
      This patch changes py-inferior.c to use gdbpy_ref<> when possible,
      reducing the amount of manual reference counting.
      
      Tested on x86-64 Fedora 29.
      
      gdb/ChangeLog
      2019-07-10  Tom Tromey  <tromey@adacore.com>
      
      	* python/python-internal.h (create_thread_object): Return
      	gdbpy_ref.
      	* python/py-infthread.c (create_thread_object): Return gdbpy_ref.
      	* python/py-inferior.c (struct threadlist_entry): Add
      	constructor.
      	<thread_obj>: Now a gdbpy_ref.
      	(thread_to_thread_object): Update.
      	(add_thread_object): Use new.
      	(delete_thread_object): Use delete.
      	(infpy_threads): Update.
      	(py_free_inferior): Update.  Construct "inf_obj" after acquiring
      	GIL.
      05b08ac1
  35. Jul 09, 2019
    • Tom Tromey's avatar
      Rename common to gdbsupport · 268a13a5
      Tom Tromey authored
      This is the next patch in the ongoing series to move gdbsever to the
      top level.
      
      This patch just renames the "common" directory.  The idea is to do
      this move in two parts: first rename the directory (this patch), then
      move the directory to the top.  This approach makes the patches a bit
      more tractable.
      
      I chose the name "gdbsupport" for the directory.  However, as this
      patch was largely written by sed, we could pick a new name without too
      much difficulty.
      
      Tested by the buildbot.
      
      gdb/ChangeLog
      2019-07-09  Tom Tromey  <tom@tromey.com>
      
      	* contrib/ari/gdb_ari.sh: Change common to gdbsupport.
      	* configure: Rebuild.
      	* configure.ac: Change common to gdbsupport.
      	* gdbsupport: Rename from common.
      	* acinclude.m4: Change common to gdbsupport.
      	* Makefile.in (CONFIG_SRC_SUBDIR, COMMON_SFILES)
      	(HFILES_NO_SRCDIR, stamp-version, ALLDEPFILES): Change common to
      	gdbsupport.
      	* aarch64-tdep.c, ada-lang.c, ada-lang.h, agent.c, alloc.c,
      	amd64-darwin-tdep.c, amd64-dicos-tdep.c, amd64-fbsd-nat.c,
      	amd64-fbsd-tdep.c, amd64-linux-nat.c, amd64-linux-tdep.c,
      	amd64-nbsd-tdep.c, amd64-obsd-tdep.c, amd64-sol2-tdep.c,
      	amd64-tdep.c, amd64-windows-tdep.c, arch-utils.c,
      	arch/aarch64-insn.c, arch/aarch64.c, arch/aarch64.h, arch/amd64.c,
      	arch/amd64.h, arch/arm-get-next-pcs.c, arch/arm-linux.c,
      	arch/arm.c, arch/i386.c, arch/i386.h, arch/ppc-linux-common.c,
      	arch/riscv.c, arch/riscv.h, arch/tic6x.c, arm-tdep.c, auto-load.c,
      	auxv.c, ax-gdb.c, ax-general.c, ax.h, breakpoint.c, breakpoint.h,
      	btrace.c, btrace.h, build-id.c, build-id.h, c-lang.h, charset.c,
      	charset.h, cli/cli-cmds.c, cli/cli-cmds.h, cli/cli-decode.c,
      	cli/cli-dump.c, cli/cli-option.h, cli/cli-script.c,
      	coff-pe-read.c, command.h, compile/compile-c-support.c,
      	compile/compile-c.h, compile/compile-cplus-symbols.c,
      	compile/compile-cplus-types.c, compile/compile-cplus.h,
      	compile/compile-loc2c.c, compile/compile.c, completer.c,
      	completer.h, contrib/ari/gdb_ari.sh, corefile.c, corelow.c,
      	cp-support.c, cp-support.h, cp-valprint.c, csky-tdep.c, ctf.c,
      	darwin-nat.c, debug.c, defs.h, disasm-selftests.c, disasm.c,
      	disasm.h, dtrace-probe.c, dwarf-index-cache.c,
      	dwarf-index-cache.h, dwarf-index-write.c, dwarf2-frame.c,
      	dwarf2expr.c, dwarf2loc.c, dwarf2read.c, event-loop.c,
      	event-top.c, exceptions.c, exec.c, extension.h, fbsd-nat.c,
      	features/aarch64-core.c, features/aarch64-fpu.c,
      	features/aarch64-pauth.c, features/aarch64-sve.c,
      	features/i386/32bit-avx.c, features/i386/32bit-avx512.c,
      	features/i386/32bit-core.c, features/i386/32bit-linux.c,
      	features/i386/32bit-mpx.c, features/i386/32bit-pkeys.c,
      	features/i386/32bit-segments.c, features/i386/32bit-sse.c,
      	features/i386/64bit-avx.c, features/i386/64bit-avx512.c,
      	features/i386/64bit-core.c, features/i386/64bit-linux.c,
      	features/i386/64bit-mpx.c, features/i386/64bit-pkeys.c,
      	features/i386/64bit-segments.c, features/i386/64bit-sse.c,
      	features/i386/x32-core.c, features/riscv/32bit-cpu.c,
      	features/riscv/32bit-csr.c, features/riscv/32bit-fpu.c,
      	features/riscv/64bit-cpu.c, features/riscv/64bit-csr.c,
      	features/riscv/64bit-fpu.c, features/tic6x-c6xp.c,
      	features/tic6x-core.c, features/tic6x-gp.c, filename-seen-cache.h,
      	findcmd.c, findvar.c, fork-child.c, gcore.c, gdb_bfd.c, gdb_bfd.h,
      	gdb_proc_service.h, gdb_regex.c, gdb_select.h, gdb_usleep.c,
      	gdbarch-selftests.c, gdbthread.h, gdbtypes.h, gnu-nat.c,
      	go32-nat.c, guile/guile.c, guile/scm-ports.c,
      	guile/scm-safe-call.c, guile/scm-type.c, i386-fbsd-nat.c,
      	i386-fbsd-tdep.c, i386-go32-tdep.c, i386-linux-nat.c,
      	i386-linux-tdep.c, i386-tdep.c, i387-tdep.c,
      	ia64-libunwind-tdep.c, ia64-linux-nat.c, inf-child.c,
      	inf-ptrace.c, infcall.c, infcall.h, infcmd.c, inferior-iter.h,
      	inferior.c, inferior.h, inflow.c, inflow.h, infrun.c, infrun.h,
      	inline-frame.c, language.h, linespec.c, linux-fork.c, linux-nat.c,
      	linux-tdep.c, linux-thread-db.c, location.c, machoread.c,
      	macrotab.h, main.c, maint.c, maint.h, memattr.c, memrange.h,
      	mi/mi-cmd-break.h, mi/mi-cmd-env.c, mi/mi-cmd-stack.c,
      	mi/mi-cmd-var.c, mi/mi-interp.c, mi/mi-main.c, mi/mi-parse.h,
      	minsyms.c, mips-linux-tdep.c, namespace.h,
      	nat/aarch64-linux-hw-point.c, nat/aarch64-linux-hw-point.h,
      	nat/aarch64-linux.c, nat/aarch64-sve-linux-ptrace.c,
      	nat/amd64-linux-siginfo.c, nat/fork-inferior.c,
      	nat/linux-btrace.c, nat/linux-btrace.h, nat/linux-namespaces.c,
      	nat/linux-nat.h, nat/linux-osdata.c, nat/linux-personality.c,
      	nat/linux-procfs.c, nat/linux-ptrace.c, nat/linux-ptrace.h,
      	nat/linux-waitpid.c, nat/mips-linux-watch.c,
      	nat/mips-linux-watch.h, nat/ppc-linux.c, nat/x86-dregs.c,
      	nat/x86-dregs.h, nat/x86-linux-dregs.c, nat/x86-linux.c,
      	nto-procfs.c, nto-tdep.c, objfile-flags.h, objfiles.c, objfiles.h,
      	obsd-nat.c, observable.h, osdata.c, p-valprint.c, parse.c,
      	parser-defs.h, ppc-linux-nat.c, printcmd.c, probe.c, proc-api.c,
      	procfs.c, producer.c, progspace.h, psymtab.h,
      	python/py-framefilter.c, python/py-inferior.c, python/py-ref.h,
      	python/py-type.c, python/python.c, record-btrace.c, record-full.c,
      	record.c, record.h, regcache-dump.c, regcache.c, regcache.h,
      	remote-fileio.c, remote-fileio.h, remote-sim.c, remote.c,
      	riscv-tdep.c, rs6000-aix-tdep.c, rust-exp.y, s12z-tdep.c,
      	selftest-arch.c, ser-base.c, ser-event.c, ser-pipe.c, ser-tcp.c,
      	ser-unix.c, skip.c, solib-aix.c, solib-target.c, solib.c,
      	source-cache.c, source.c, source.h, sparc-nat.c, spu-linux-nat.c,
      	stack.c, stap-probe.c, symfile-add-flags.h, symfile.c, symfile.h,
      	symtab.c, symtab.h, target-descriptions.c, target-descriptions.h,
      	target-memory.c, target.c, target.h, target/waitstatus.c,
      	target/waitstatus.h, thread-iter.h, thread.c, tilegx-tdep.c,
      	top.c, top.h, tracefile-tfile.c, tracefile.c, tracepoint.c,
      	tracepoint.h, tui/tui-io.c, ui-file.c, ui-out.h,
      	unittests/array-view-selftests.c,
      	unittests/child-path-selftests.c, unittests/cli-utils-selftests.c,
      	unittests/common-utils-selftests.c,
      	unittests/copy_bitwise-selftests.c, unittests/environ-selftests.c,
      	unittests/format_pieces-selftests.c,
      	unittests/function-view-selftests.c,
      	unittests/lookup_name_info-selftests.c,
      	unittests/memory-map-selftests.c, unittests/memrange-selftests.c,
      	unittests/mkdir-recursive-selftests.c,
      	unittests/observable-selftests.c,
      	unittests/offset-type-selftests.c, unittests/optional-selftests.c,
      	unittests/parse-connection-spec-selftests.c,
      	unittests/ptid-selftests.c, unittests/rsp-low-selftests.c,
      	unittests/scoped_fd-selftests.c,
      	unittests/scoped_mmap-selftests.c,
      	unittests/scoped_restore-selftests.c,
      	unittests/string_view-selftests.c, unittests/style-selftests.c,
      	unittests/tracepoint-selftests.c, unittests/unpack-selftests.c,
      	unittests/utils-selftests.c, unittests/xml-utils-selftests.c,
      	utils.c, utils.h, valarith.c, valops.c, valprint.c, value.c,
      	value.h, varobj.c, varobj.h, windows-nat.c, x86-linux-nat.c,
      	xml-support.c, xml-support.h, xml-tdesc.h, xstormy16-tdep.c,
      	xtensa-linux-nat.c, dwarf2read.h: Change common to gdbsupport.
      
      gdb/gdbserver/ChangeLog
      2019-07-09  Tom Tromey  <tom@tromey.com>
      
      	* configure: Rebuild.
      	* configure.ac: Change common to gdbsupport.
      	* acinclude.m4: Change common to gdbsupport.
      	* Makefile.in (SFILES, OBS, GDBREPLAY_OBS, IPA_OBJS)
      	(version-generated.c, gdbsupport/%-ipa.o, gdbsupport/%.o): Change
      	common to gdbsupport.
      	* ax.c, event-loop.c, fork-child.c, gdb_proc_service.h,
      	gdbreplay.c, gdbthread.h, hostio-errno.c, hostio.c, i387-fp.c,
      	inferiors.c, inferiors.h, linux-aarch64-tdesc-selftest.c,
      	linux-amd64-ipa.c, linux-i386-ipa.c, linux-low.c,
      	linux-tic6x-low.c, linux-x86-low.c, linux-x86-tdesc-selftest.c,
      	linux-x86-tdesc.c, lynx-i386-low.c, lynx-low.c, mem-break.h,
      	nto-x86-low.c, regcache.c, regcache.h, remote-utils.c, server.c,
      	server.h, spu-low.c, symbol.c, target.h, tdesc.c, tdesc.h,
      	thread-db.c, tracepoint.c, win32-i386-low.c, win32-low.c: Change
      	common to gdbsupport.
      268a13a5
  36. Apr 25, 2019
    • Tom Tromey's avatar
      Make exception handling more efficient · 94aeb44b
      Tom Tromey authored
      This makes exception handling more efficient in a few spots, through
      the use of const- and rvalue-references.
      
      I wrote this patch by commenting out the gdb_exception copy
      constructor and then examining the resulting error messages one by
      one, introducing the use of std::move where appropriate.
      
      gdb/ChangeLog
      2019-04-25  Tom Tromey  <tromey@adacore.com>
      
      	* xml-support.c (struct gdb_xml_parser) <set_error>: Take an
      	rvalue reference.
      	(gdb_xml_start_element_wrapper, gdb_xml_end_element_wrapper)
      	(gdb_xml_parser::parse): Use std::move.
      	* python/python-internal.h (gdbpy_convert_exception): Take a const
      	reference.
      	* python/py-value.c (valpy_getitem, valpy_nonzero): Use
      	std::move.
      	* python/py-utils.c (gdbpy_convert_exception): Take a const
      	reference.
      	* python/py-inferior.c (infpy_write_memory, infpy_search_memory):
      	Use std::move.
      	* python/py-breakpoint.c (bppy_set_condition, bppy_set_commands):
      	Use std::move.
      	* mi/mi-main.c (mi_print_exception): Take a const reference.
      	* main.c (handle_command_errors): Take a const reference.
      	* linespec.c (parse_linespec): Use std::move.
      	* infcall.c (run_inferior_call): Use std::move.
      	(call_function_by_hand_dummy): Use std::move.
      	* exec.c (try_open_exec_file): Use std::move.
      	* exceptions.h (exception_print, exception_fprintf)
      	(exception_print_same): Update.
      	* exceptions.c (print_exception, exception_print)
      	(exception_fprintf, exception_print_same): Change parameters to
      	const reference.
      	* event-top.c (gdb_rl_callback_read_char_wrapper): Update.
      	* common/new-op.c: Use std::move.
      	* common/common-exceptions.h (struct gdb_exception): Add move
      	constructor.
      	(struct gdb_exception_error, struct gdb_exception_quit, struct
      	gdb_quit_bad_alloc): Change constructor to move constructor.
      	(throw_exception): Change parameter to rvalue reference.
      	* common/common-exceptions.c (throw_exception): Take rvalue
      	reference.
      	* cli/cli-interp.c (safe_execute_command): Use std::move.
      	* breakpoint.c (insert_bp_location, location_to_sals): Use
      	std::move.
      94aeb44b
    • Tom Tromey's avatar
      Remove exception_none · cc06b668
      Tom Tromey authored
      Now that gdb_exception has a constructor, there's no need for
      exception_none.  This patch removes it.
      
      gdb/ChangeLog
      2019-04-25  Tom Tromey  <tromey@adacore.com>
      
      	* xml-support.c (gdb_xml_parser::gdb_xml_parser): Update.
      	* python/py-value.c (valpy_getitem, valpy_nonzero): Update.
      	* python/py-inferior.c (infpy_write_memory, infpy_search_memory):
      	Update.
      	* python/py-breakpoint.c (bppy_set_condition, bppy_set_commands):
      	Update.
      	* mi/mi-interp.c (mi_interp::exec): Update.
      	* linespec.c (parse_linespec): Update.
      	* infcall.c (run_inferior_call): Update.
      	* guile/scm-value.c (gdbscm_value_to_lazy_string): Update.
      	* guile/scm-symbol.c (gdbscm_lookup_symbol)
      	(gdbscm_lookup_global_symbol): Update.
      	* guile/scm-param.c (gdbscm_parameter_value): Update.
      	* guile/scm-frame.c (gdbscm_frame_read_register)
      	(gdbscm_frame_read_var): Update.
      	* guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Update.
      	* exec.c (try_open_exec_file): Update.
      	* event-top.c (gdb_rl_callback_read_char_wrapper_noexcept)
      	(gdb_rl_callback_handler): Update.
      	* common/common-exceptions.h (exception_none): Don't declare.
      	* common/common-exceptions.c (exception_none): Don't define.
      	(struct catcher) <exception>: Update.
      	* cli/cli-interp.c (safe_execute_command): Update.
      	* breakpoint.c (insert_bp_location, location_to_sals): Update.
      cc06b668
  37. Apr 09, 2019
    • Kevin Buettner's avatar
      Rename python function thread_from_thread_handle to thread_from_handle · 2b0c8b01
      Kevin Buettner authored
      This renaming was done to stay consistent with the naming of the new
      gdb.InferiorThread.handle method.  I had initially named it "thread_handle"
      but Tom Tromey suggested just "handle".
      
      The old name (thread_from_thread_handle) still works, but is marked as
      deprecated in comments in the code as well as in the documentation.
      
      I have some code which uses these functions.  I very much like the
      brevity of the new names.
      
      gdb/doc/ChangeLog:
      
      	* python.texi (Inferiors In Python): Rename
      	Inferior.thread_from_thread_handle to Inferior.thread_from_handle.
      	Add note about the former being deprecated.
      
      gdb/ChangeLog:
      
      	* python/py-inferior.c (infpy_thread_from_thread_handle):
      	Adjust comments to reflect renaming of thread_from_thread_handle
      	to thread_from_handle.  Adjust keywords.  Fix type error message.
      	(inferior_object_methods): Add thread_from_handle.  Retain
      	thread_from_thread_handle, but mark it as deprecated.
      
      testsuite/ChangeLog:
      
      	* gdb.python/py-thrhandle.exp: Adjust tests to call
      	thread_from_handle instead of thread_from_thread_handle.
      2b0c8b01
    • Kevin Buettner's avatar
      Support buffer objects as handles in Inferior.thread_from_thread_handle() · 50a82723
      Kevin Buettner authored
      InferiorThread.handle() returns a python bytes object.  We'd like to
      be able to pass the output of this function, a thread handle, to
      Inferior.thread_from_thread_handle().  Up to now,
      thread_from_thread_handle() expects to receive a gdb.Value input.
      This commit adds support to also allow a python buffer object to be
      passed as the handle.
      
      infpy_thread_from_thread_handle() calls find_thread_by_handle() which
      has the obvious functionality.  It used to pass the thread handle via
      a struct value pointer.  I've revised this interface to instead pass a
      gdb::array_view<const gdb_byte> object.  (Thanks to Tom Tromey for
      suggesting this data structure over an earlier version which passed a
      gdb_byte pointer and length.)
      
      gdb/ChangeLog:
      
      	* gdbthread.h (find_thread_by_handle): Revise declaration.
      	* thread.c (find_thread_by_handle): Likewise.  Adjust
      	implementation too.
      	* python/py-inferior.c (infpy_thread_from_thread_handle): Add
      	support for buffer objects as handles.
      50a82723
Loading