]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/m2/gm2-libs/gdbif.mod
Update copyright years.
[thirdparty/gcc.git] / gcc / m2 / gm2-libs / gdbif.mod
CommitLineData
1eee94d3
GM
1(* gdbif.mod enable interactive connectivity with gdb.
2
a945c346 3Copyright (C) 2011-2024 Free Software Foundation, Inc.
1eee94d3
GM
4Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
5
6This file is part of GNU Modula-2.
7
8GNU Modula-2 is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 3, or (at your option)
11any later version.
12
13GNU Modula-2 is distributed in the hope that it will be useful, but
14WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16General Public License for more details.
17
18Under Section 7 of GPL version 3, you are granted additional
19permissions described in the GCC Runtime Library Exception, version
203.1, as published by the Free Software Foundation.
21
22You should have received a copy of the GNU General Public License and
23a copy of the GCC Runtime Library Exception along with this program;
24see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
25<http://www.gnu.org/licenses/>. *)
26
27IMPLEMENTATION MODULE gdbif ;
28
29
30FROM libc IMPORT printf, getpid, sleep ;
31FROM FIO IMPORT File, WriteString, WriteLine, OpenToWrite, Close, IsNoError ;
32FROM StringConvert IMPORT itos ;
33FROM DynamicStrings IMPORT String, KillString ;
34IMPORT SFIO ;
35
36VAR
37 invoked,
38 mustWait: BOOLEAN ;
39
40
41(*
42 connectSpin - breakpoint placeholder.
43*)
44
45PROCEDURE connectSpin ;
46BEGIN
47 (* do nothing, its purpose is to allow gdb to set breakpoints here. *)
48END connectSpin ;
49
50
51(*
52 sleepSpin - waits for the boolean variable mustWait to become FALSE.
53 It sleeps for a second between each test of the variable.
54*)
55
56PROCEDURE sleepSpin ;
57BEGIN
58 IF mustWait
59 THEN
60 printf ("process %d is waiting for you to:\n", getpid ());
61 printf ("(gdb) attach %d\n", getpid ());
62 printf ("(gdb) break connectSpin\n");
63 printf ("(gdb) print finishSpin()\n");
64 REPEAT
65 sleep (1);
66 printf (".")
67 UNTIL NOT mustWait ;
68 printf ("ok continuing\n");
69 connectSpin
70 END
71END sleepSpin ;
72
73
74(*
75 finishSpin - sets boolean mustWait to FALSE.
76*)
77
78PROCEDURE finishSpin ;
79BEGIN
80 mustWait := FALSE
81END finishSpin ;
82
83
84(*
85 gdbinit -
86*)
87
88PROCEDURE gdbinit ;
89VAR
90 file: File ;
91 s : String ;
92BEGIN
93 file := OpenToWrite (".gdbinit") ;
94 IF IsNoError (file)
95 THEN
96 WriteString (file, "attach ") ;
97 s := SFIO.WriteS (file, itos (getpid (), 6, " ", FALSE)) ;
98 WriteString (file, "break connectSpin") ; WriteLine (file) ;
99 WriteString (file, "print finishSpin()") ; WriteLine (file) ;
100 s := KillString (s) ;
101 Close (file) ;
102 sleepSpin
103 END
104END gdbinit ;
105
106
107BEGIN
108 mustWait := TRUE
109END gdbif.