summaryrefslogtreecommitdiffstats
path: root/build/.gdbinit
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /build/.gdbinit
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--build/.gdbinit208
-rw-r--r--build/.gdbinit.loader29
-rw-r--r--build/.gdbinit.py.in19
3 files changed, 256 insertions, 0 deletions
diff --git a/build/.gdbinit b/build/.gdbinit
new file mode 100644
index 0000000000..870c0a81da
--- /dev/null
+++ b/build/.gdbinit
@@ -0,0 +1,208 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# .gdbinit file for debugging Mozilla
+
+# You may need to put an 'add-auto-load-safe-path' command in your
+# $HOME/.gdbinit file to get GDB to trust this file. If your builds are
+# generally in $HOME/moz, then you can say:
+#
+# add-auto-load-safe-path ~/moz
+
+# Don't stop for the SIG32/33/etc signals that Flash produces
+handle SIG32 noprint nostop pass
+handle SIG33 noprint nostop pass
+handle SIGPIPE noprint nostop pass
+
+# Don't stop for certain other signals where it's not useful,
+# such as the SIG64 signals triggered by the Linux
+# sandboxing code on older kernels.
+handle SIG38 noprint nostop pass
+handle SIG64 noprint nostop pass
+handle SIGSYS noprint nostop pass
+
+# Show the concrete types behind nsIFoo
+set print object on
+
+# run when using the auto-solib-add trick
+define prun
+ tbreak main
+ run
+ set auto-solib-add 0
+ cont
+end
+
+# run -mail, when using the auto-solib-add trick
+define pmail
+ tbreak main
+ run -mail
+ set auto-solib-add 0
+ cont
+end
+
+# Define a "pu" command to display PRUnichar * strings (100 chars max)
+# Also allows an optional argument for how many chars to print as long as
+# it's less than 100.
+define pu
+ set $uni = $arg0
+ if $argc == 2
+ set $limit = $arg1
+ if $limit > 100
+ set $limit = 100
+ end
+ else
+ set $limit = 100
+ end
+ # scratch array with space for 100 chars plus null terminator. Make
+ # sure to not use ' ' as the char so this copy/pastes well.
+ set $scratch = "____________________________________________________________________________________________________"
+ set $i = 0
+ set $scratch_idx = 0
+ while (*$uni && $i++ < $limit)
+ if (*$uni < 0x80)
+ set $scratch[$scratch_idx++] = *(char*)$uni++
+ else
+ if ($scratch_idx > 0)
+ set $scratch[$scratch_idx] = '\0'
+ print $scratch
+ set $scratch_idx = 0
+ end
+ print /x *(short*)$uni++
+ end
+ end
+ if ($scratch_idx > 0)
+ set $scratch[$scratch_idx] = '\0'
+ print $scratch
+ end
+end
+
+# Define a "ps" command to display subclasses of nsAC?String. Note that
+# this assumes strings as of Gecko 1.9 (well, and probably a few
+# releases before that as well); going back far enough will get you
+# to string classes that this function doesn't work for.
+define ps
+ set $str = $arg0
+ if (sizeof(*$str.mData) == 1 && ($str.mFlags & 1) != 0)
+ print $str.mData
+ else
+ pu $str.mData $str.mLength
+ end
+end
+
+# Define a "pa" command to display the string value for an nsAtom
+define pa
+ set $atom = $arg0
+ if (sizeof(*((&*$atom)->mString)) == 2)
+ pu (&*$atom)->mString
+ end
+end
+
+# define a "pxul" command to display the type of a XUL element from
+# an nsXULElement* pointer.
+define pxul
+ set $p = $arg0
+ print $p->mNodeInfo.mRawPtr->mInner.mName->mStaticAtom->mString
+end
+
+# define a "prefcnt" command to display the refcount of an XPCOM obj
+define prefcnt
+ set $p = $arg0
+ print ((nsPurpleBufferEntry*)$p->mRefCnt.mTagged)->mRefCnt
+end
+
+# define a "ptag" command to display the tag name of a content node
+define ptag
+ set $p = $arg0
+ pa $p->mNodeInfo.mRawPtr->mInner.mName
+end
+
+##
+## nsTArray
+##
+define ptarray
+ if $argc == 0
+ help ptarray
+ else
+ set $size = $arg0.mHdr->mLength
+ set $capacity = $arg0.mHdr->mCapacity
+ set $size_max = $size - 1
+ set $elts = $arg0.Elements()
+ end
+ if $argc == 1
+ set $i = 0
+ while $i < $size
+ printf "elem[%u]: ", $i
+ p *($elts + $i)
+ set $i++
+ end
+ end
+ if $argc == 2
+ set $idx = $arg1
+ if $idx < 0 || $idx > $size_max
+ printf "idx1, idx2 are not in acceptable range: [0..%u].\n", $size_max
+ else
+ printf "elem[%u]: ", $idx
+ p *($elts + $idx)
+ end
+ end
+ if $argc == 3
+ set $start_idx = $arg1
+ set $stop_idx = $arg2
+ if $start_idx > $stop_idx
+ set $tmp_idx = $start_idx
+ set $start_idx = $stop_idx
+ set $stop_idx = $tmp_idx
+ end
+ if $start_idx < 0 || $stop_idx < 0 || $start_idx > $size_max || $stop_idx > $size_max
+ printf "idx1, idx2 are not in acceptable range: [0..%u].\n", $size_max
+ else
+ set $i = $start_idx
+ while $i <= $stop_idx
+ printf "elem[%u]: ", $i
+ p *($elts + $i)
+ set $i++
+ end
+ end
+ end
+ if $argc > 0
+ printf "nsTArray length = %u\n", $size
+ printf "nsTArray capacity = %u\n", $capacity
+ printf "Element "
+ whatis *$elts
+ end
+end
+
+document ptarray
+ Prints nsTArray information.
+ Syntax: ptarray
+ Note: idx, idx1 and idx2 must be in acceptable range [0...size()-1].
+ Examples:
+ ptarray a - Prints tarray content, size, capacity and T typedef
+ ptarray a 0 - Prints element[idx] from tarray
+ ptarray a 1 2 - Prints elements in range [idx1..idx2] from tarray
+end
+
+define js
+ call DumpJSStack()
+end
+
+define ct
+ call $arg0->Dump()
+end
+
+define ft
+ call $arg0->DumpFrameTree()
+end
+
+define ftp
+ call $arg0->DumpFrameTreeInCSSPixels()
+end
+
+define ftl
+ call $arg0->DumpFrameTreeLimited()
+end
+
+define ftlp
+ call $arg0->DumpFrameTreeLimitedInCSSPixels()
+end
diff --git a/build/.gdbinit.loader b/build/.gdbinit.loader
new file mode 100644
index 0000000000..e8a13432f7
--- /dev/null
+++ b/build/.gdbinit.loader
@@ -0,0 +1,29 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# loader for .gdbinit file
+
+# This file provides a guard against multiple inclusion. GDB command syntax is
+# rather limited in that you cannot have a `documentation` command inside of an
+# `if`. So we use a separate loader file that sources `.gdbinit` within the
+# `if`.
+
+# You may need to put an 'add-auto-load-safe-path' command in your
+# $HOME/.gdbinit file to get GDB to trust this file. If your builds are
+# generally in $HOME/moz, then you can say:
+#
+# add-auto-load-safe-path ~/moz
+
+# Multiple include guard
+if $_moz_gdbinit_loaded
+ # already loaded
+else
+ set $_moz_gdbinit_loaded=1
+
+ source -s build/.gdbinit
+
+ # This requires $objdir to have been added to gdb's source directory search
+ # path. Normally this will be done by libxul.so-gdb.py or js-gdb.py.
+ source -s build/.gdbinit.py
+end
diff --git a/build/.gdbinit.py.in b/build/.gdbinit.py.in
new file mode 100644
index 0000000000..ec8c11b51b
--- /dev/null
+++ b/build/.gdbinit.py.in
@@ -0,0 +1,19 @@
+#filter substitution
+
+import os
+import sys
+
+sys.path.append(os.path.join('@topsrcdir@', 'js', 'src', 'gdb'))
+sys.path.append(os.path.join('@topsrcdir@', 'python', 'gdbpp'))
+
+# JS prettyprinters
+
+import mozilla.autoload
+mozilla.autoload.register(gdb.current_objfile())
+
+import mozilla.asmjs
+mozilla.asmjs.install()
+
+# Gecko prettyprinters
+
+import gdbpp