# Copyright (C) 2001-2020 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.

define help-gcc-hooks
help help-gcc-hooks
end

document help-gcc-hooks
GCC gdbinit file introduces several debugging shorthands:

    pr [rtx], prl [rtx], prc [rtx], pi [rtx_insn],
    pt [tree], pct [tree], ptc [tree], trt [tree],
    pgs [tree], pge [tree], pdn [tree], ptn [tree],
    pgg [gimple], pgq [gimple_seq],
    pmz [mpz_t],
    pdd [dw_die_ref],
    pbm [bitmap],
    pel [location_t],
    pp, pbs, pcfun

They are generally implemented by calling a function that prints to stderr,
and therefore will not work when the compiler is not executing.

Most shorthands accept an optional argument. When it is not supplied,
they use value in GDB register $, i.e. the last printed value.
end

define pp
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
call debug ($debug_arg)
end

document pp
GCC hook: pp [any]
Print a representation of any GCC data structure for which an instance of
overloaded function 'debug' is available.
See also 'help-gcc-hooks'.
end

define pr
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
call debug_rtx ($debug_arg)
end

document pr
GCC hook: pr [rtx]
Print the full structure of given rtx.
See also 'help-gcc-hooks'.
end

define prl
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
call debug_rtx_list ($debug_arg, debug_rtx_count)
end

document prl
GCC hook: prl [rtx]
Print the full structure of all rtx insns beginning at given rtx.
Uses variable debug_rtx_count to control number of insns printed:
  debug_rtx_count > 0: print from given rtx on.
  debug_rtx_count < 0: print a window around given rtx.

There is also debug_rtx_find (rtx, uid) that will scan a list for UID and print
it using debug_rtx_list. Usage example: set $foo=debug_rtx_find(first, 42)
end

define pt
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
call debug_tree ($debug_arg)
end

document pt
GCC hook: pt [tree]
Print the full structure of given tree.
See also 'help-gcc-hooks'.
end

define pct
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
call debug_c_tree ($debug_arg)
end

document pct
GCC hook: pct [tree]
Print given tree in C syntax.
See also 'help-gcc-hooks'.
end

define pgg
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
call debug_gimple_stmt ($debug_arg)
end

document pgg
GCC hook: pgg [gimple]
Print given GIMPLE statement in C syntax.
See also 'help-gcc-hooks'.
end

define pgq
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
call debug_gimple_seq ($debug_arg)
end

document pgq
GCC hook: pgq [gimple_seq]
Print given GIMPLE sequence in C syntax.
See also 'help-gcc-hooks'.
end

define pgs
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
call debug_generic_stmt ($debug_arg)
end

document pgs
GCC hook: pgs [tree]
Print given GENERIC statement in C syntax.
See also 'help-gcc-hooks'.
end

define pge
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
call debug_generic_expr ($debug_arg)
end

document pge
GCC hook: pge [tree]
Print given GENERIC expression in C syntax.
See also 'help-gcc-hooks'.
end

define pmz
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
call mpz_out_str(stderr, 10, $debug_arg)
end

document pmz
GCC hook: pmz [mpz_t]
Print given mpz value.
See also 'help-gcc-hooks'.
end

define ptc
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
output (enum tree_code) $debug_arg.base.code
echo \n
end

document ptc
GCC hook: ptc [tree]
Print the tree-code of given tree node.
See also 'help-gcc-hooks'.
end

define pdn
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
output $debug_arg.decl_minimal.name->identifier.id.str
echo \n
end

document pdn
GCC hook: pdn [tree]
Print the name of given decl-node.
See also 'help-gcc-hooks'.
end

define ptn
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
output $debug_arg.type.name->decl_minimal.name->identifier.id.str
echo \n
end

document ptn
GCC hook: ptn [tree]
Print the name of given type-node.
See also 'help-gcc-hooks'.
end

define pdd
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
call debug_dwarf_die ($debug_arg)
end

document pdd
GCC hook: pdd [dw_die_ref]
Print given dw_die_ref.
See also 'help-gcc-hooks'.
end

define prc
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
output (enum rtx_code) $debug_arg.code
echo \ (
output $debug_arg.mode
echo )\n
end

document prc
GCC hook: prc [rtx]
Print the rtx-code and machine mode of given rtx.
See also 'help-gcc-hooks'.
end

define pi
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
print $debug_arg.u.fld[0].rt_rtx@7
end

document pi
GCC hook: pi [rtx_insn]
Print the fields of given RTL instruction.
See also 'help-gcc-hooks'.
end

define pbs
call print_binding_stack ()
end

document pbs
In cc1plus, print the current binding stack, frame by frame, up to and
including the global binding level.
end

define pbm
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
call bitmap_print (stderr, $debug_arg, "", "\n")
end

document pbm
GCC hook: pbm [bitmap]
Dump given bitmap as a comma-separated list of numbers.
See also 'help-gcc-hooks'.
end

define pel
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
output expand_location ($debug_arg)
echo \n
end

document pel
GCC hook: pel [location_t]
Print given location.
See also 'help-gcc-hooks'.
end

define pcfun
output debug_function (cfun ? cfun->decl : current_function_decl, 0)
echo \n
end

document pcfun
Print current function.
end

define trt
eval "set $debug_arg = $%s", $argc ? "arg0" : ""
print ($debug_arg.typed.type)
end

document trt
GCC hook: trt [tree]
Print TREE_TYPE of given tree node.
See also 'help-gcc-hooks'.
end

define break-on-diagnostic
break diagnostic_show_locus
end

document break-on-diagnostic
Put a breakpoint on diagnostic_show_locus, called whenever a diagnostic
is emitted (as opposed to those warnings that are suppressed by
command-line options).
end

define break-on-saved-diagnostic
break ana::diagnostic_manager::add_diagnostic
end

document break-on-saved-diagnostic
Put a breakpoint on ana::diagnostic_manager::add_diagnostic, called within
the analyzer whenever a diagnostic is saved for later de-duplication and
possible emission.
end

define reload-gdbhooks
python import imp; imp.reload(gdbhooks)
end

document reload-gdbhooks
Load the gdbhooks.py module again in order to pick up any changes made to it.
end

alias rh = reload-gdbhooks

# Define some macros helpful to gdb when it is expanding macros.
macro define __FILE__ "gdb"
macro define __LINE__ 1
macro define __FUNCTION__ "gdb"
macro define __null 0
macro define input_line expand_location(input_location).line
macro define input_filename expand_location(input_location).file

# Remember previous pagination status and turn it off, so that
# the messages for skip commands don't require pagination.
python __gcc_prev_pagination=gdb.parameter("pagination")
set pagination off

# Gracefully handle aborts in functions used from gdb.
set unwindonsignal on

# Put breakpoints at exit and fancy_abort in case abort is mapped
# to either fprintf/exit or fancy_abort.
b fancy_abort

# Put a breakpoint on internal_error to help with debugging ICEs.
b internal_error

set complaints 0
# Don't let abort actually run, as it will make
# stdio stop working and therefore the `pr' command above as well.
# Put this last because gcc does not reference it any more unless
# USE_SYSTEM_ABORT is defined, so gdb may complain and bail out.
b exit
b abort

# Disable strict type checking.  This allows developers to (for example)
# make inferior calls without casting absolute address to a suitable
# pointer type.
set check type off

# Skip all inline functions in tree.h.
# These are used in accessor macros.
# Note that this is added at the end because older gdb versions
# do not understand the 'skip' command.
# See https://sourceware.org/gdb/current/onlinedocs/gdb/Skipping-Over-Functions-and-Files.html
skip file tree.h

# Also skip inline functions in is-a.h.
skip file is-a.h

# And line-map.h.
skip file line-map.h

# And timevar.h.
skip file timevar.h

# Likewise, skip various inline functions in rtl.h.
skip rtx_expr_list::next
skip rtx_expr_list::element
skip rtx_insn_list::next
skip rtx_insn_list::insn
skip rtx_sequence::len
skip rtx_sequence::element
skip rtx_sequence::insn
skip INSN_UID
skip PREV_INSN
skip SET_PREV_INSN
skip NEXT_INSN
skip SET_NEXT_INSN
skip BLOCK_FOR_INSN
skip PATTERN
skip INSN_LOCATION
skip INSN_HAS_LOCATION
skip JUMP_LABEL_AS_INSN

# Restore pagination to the previous state.
python if __gcc_prev_pagination: gdb.execute("set pagination on")
