# Copyright (C) 2001-2018 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 pr
set debug_rtx ($)
end

document pr
Print the full structure of the rtx that is $.
Works only when an inferior is executing.
end

define prl
set debug_rtx_list ($, debug_rtx_count)
end

document prl
Print the full structure of all rtx insns beginning at $.
Works only when an inferior is executing.
Uses variable debug_rtx_count to control number of insns printed:
  debug_rtx_count > 0: print from $ on.
  debug_rtx_count < 0: print a window around $.

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
set debug_tree ($)
end

document pt
Print the full structure of the tree that is $.
Works only when an inferior is executing.
end

define pct
set debug_c_tree ($)
end

document pct
Print the tree that is $ in C syntax.
Works only when an inferior is executing.
end

define pgg
set debug_gimple_stmt ($)
end

document pgg
Print the Gimple statement that is $ in C syntax.
Works only when an inferior is executing.
end

define pgq
set debug_gimple_seq ($)
end

document pgq
Print the Gimple sequence that is $ in C syntax.
Works only when an inferior is executing.
end

define pgs
set debug_generic_stmt ($)
end

document pgs
Print the statement that is $ in C syntax.
Works only when an inferior is executing.
end

define pge
set debug_generic_expr ($)
end

document pge
Print the expression that is $ in C syntax.
Works only when an inferior is executing.
end

define pmz
set mpz_out_str(stderr, 10, $)
end

document pmz
Print the mpz value that is $
Works only when an inferior is executing.
end

define ptc
output (enum tree_code) $.common.code
echo \n
end

document ptc
Print the tree-code of the tree node that is $.
end

define pdn
output $.decl_minimal.name->identifier.id.str
echo \n
end

document pdn
Print the name of the decl-node that is $.
end

define ptn
output $.type.name->decl_minimal.name->identifier.id.str
echo \n
end

document ptn
Print the name of the type-node that is $.
end

define pdd
set debug_dwarf_die ($)
end

document pdd
Print the dw_die_ref that is in $.
end

define prc
output (enum rtx_code) $.code
echo \ (
output $.mode
echo )\n
end

document prc
Print the rtx-code and machine mode of the rtx that is $.
end

define pi
print $.u.fld[0].rt_rtx@7
end

document pi
Print the fields of an instruction that is $.
end

define pbs
set 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 pbb
set debug ($)
end

document pbb
Dump the basic block that is in $, including rtx.
end

define pbm
set bitmap_print (stderr, $, "", "\n")
end

document pbm
Dump the bitmap that is in $ as a comma-separated list of numbers.
end

define pel
output expand_location ($)
echo \n
end

document pel
Print expanded location of $.
end

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

document pcfun
Print current function.
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 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

# 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
