]> git.ipfire.org Git - thirdparty/gcc.git/commit
gdbhooks: Handle references to vec* in VecPrinter
authorAlex Coplan <alex.coplan@arm.com>
Tue, 26 Nov 2024 15:10:29 +0000 (15:10 +0000)
committerAlex Coplan <alex.coplan@arm.com>
Tue, 26 Nov 2024 15:10:29 +0000 (15:10 +0000)
commit098a41cb972d3711ebcb518a72a1addfdb6c70cf
tree5734c60f247870a2990a8f7539949dd72af3c0d9
parenta22dfe208d94105a6e587a3b25e8fe8d62444d8a
gdbhooks: Handle references to vec* in VecPrinter

vec.h has this method:

  template<typename T, typename A>
  inline T *
  vec_safe_push (vec<T, A, vl_embed> *&v, const T &obj CXX_MEM_STAT_INFO)

where v is a reference to a pointer to vec.  This matches the regex for
VecPrinter, so gdbhooks.py attempts to print it but chokes on the reference.
I see the following:

  #1  0x0000000002b84b7b in vec_safe_push<edge_def*, va_gc> (v=Traceback (most
  recent call last):
    File "$SRC/gcc/gcc/gdbhooks.py", line 486, in to_string
      return '0x%x' % intptr(self.gdbval)
    File "$SRC/gcc/gcc/gdbhooks.py", line 168, in intptr
      return long(gdbval) if sys.version_info.major == 2 else int(gdbval)
  gdb.error: Cannot convert value to long.

This patch makes VecPrinter handle such references by stripping them
(dereferencing) at the top of the relevant functions.

gcc/ChangeLog:

* gdbhooks.py (strip_ref): New. Use it ...
(VecPrinter.to_string): ... here,
(VecPrinter.children): ... and here.
gcc/gdbhooks.py