summarylogtreecommitdiffstats
path: root/gdb.patch
blob: 6b2583f84571784f3336de1c34f2124c28e2517f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
diff --color -rup gdb-7.8+os161-2.1/gdb/python/python.c gdb-7.8+os161-2.1-new/gdb/python/python.c
--- gdb-7.8+os161-2.1/gdb/python/python.c	2014-09-30 23:00:34.000000000 -0300
+++ gdb-7.8+os161-2.1-new/gdb/python/python.c	2023-03-19 02:50:07.564662354 -0300
@@ -108,7 +108,7 @@ int gdb_python_initialized;
 static PyMethodDef GdbMethods[];
 
 #ifdef IS_PY3K
-static struct PyModuleDef GdbModuleDef;
+extern struct PyModuleDef GdbModuleDef;
 #endif
 
 PyObject *gdb_module;
@@ -272,8 +272,16 @@ ensure_python_env (struct gdbarch *gdbar
 static void
 gdbpy_clear_quit_flag (const struct extension_language_defn *extlang)
 {
+  if(!gdb_python_initialized)
+    return;
+
+  PyGILState_STATE m_state;
+  m_state = PyGILState_Ensure();
+
   /* This clears the flag as a side effect.  */
   PyOS_InterruptOccurred ();
+  PyGILState_Release(m_state);
+  return;
 }
 
 /* Set the quit flag.  */
@@ -289,7 +297,14 @@ gdbpy_set_quit_flag (const struct extens
 static int
 gdbpy_check_quit_flag (const struct extension_language_defn *extlang)
 {
-  return PyOS_InterruptOccurred ();
+  if (!gdb_python_initialized)
+    return 0;
+
+  PyGILState_STATE m_state;
+  m_state = PyGILState_Ensure();
+  int res = PyOS_InterruptOccurred ();
+  PyGILState_Release(m_state);
+  return res;
 }
 
 /* Evaluate a Python command like PyRun_SimpleString, but uses
@@ -1552,10 +1567,22 @@ finalize_python (void *ignore)
 
   Py_Finalize ();
 
+  gdb_python_initialized = 0;
   restore_active_ext_lang (previous_active);
 }
 #endif
 
+#ifdef IS_PY3K
+/* This is called via the PyImport_AppendInittab mechanism called
+   during initialization, to make the built-in _gdb module known to
+   Python.  */
+PyMODINIT_FUNC
+init__gdb_module (void)
+{
+  return PyModule_Create (&GdbModuleDef);
+}
+#endif
+
 /* Provide a prototype to silence -Wmissing-prototypes.  */
 extern initialize_file_ftype _initialize_python;
 
@@ -1677,6 +1704,9 @@ message == an error message without a st
      remain alive for the duration of the program's execution, so
      it is not freed after this call.  */
   Py_SetProgramName (progname_copy);
+
+  /* Define _gdb as a built-in module.  */
+  PyImport_AppendInittab ("_gdb", init__gdb_module);
 #else
   Py_SetProgramName (progname);
 #endif
@@ -1686,9 +1716,7 @@ message == an error message without a st
   PyEval_InitThreads ();
 
 #ifdef IS_PY3K
-  gdb_module = PyModule_Create (&GdbModuleDef);
-  /* Add _gdb module to the list of known built-in modules.  */
-  _PyImport_FixupBuiltin (gdb_module, "_gdb");
+  gdb_module = PyImport_ImportModule ("_gdb");
 #else
   gdb_module = Py_InitModule ("_gdb", GdbMethods);
 #endif
@@ -1782,8 +1810,7 @@ message == an error message without a st
     goto fail;
 
   /* Release the GIL while gdb runs.  */
-  PyThreadState_Swap (NULL);
-  PyEval_ReleaseLock ();
+  PyEval_SaveThread();
 
   make_final_cleanup (finalize_python, NULL);
 
@@ -2005,7 +2032,7 @@ Return a tuple containing all inferiors.
 };
 
 #ifdef IS_PY3K
-static struct PyModuleDef GdbModuleDef =
+extern struct PyModuleDef GdbModuleDef =
 {
   PyModuleDef_HEAD_INIT,
   "_gdb",
diff --color -rup gdb-7.8+os161-2.1/sim/common/sim-arange.c gdb-7.8+os161-2.1-new/sim/common/sim-arange.c
--- gdb-7.8+os161-2.1/sim/common/sim-arange.c	2014-09-30 23:01:49.000000000 -0300
+++ gdb-7.8+os161-2.1-new/sim/common/sim-arange.c	2023-03-19 02:50:07.841329026 -0300
@@ -280,11 +280,7 @@ sim_addr_range_delete (ADDR_RANGE *ar, a
   build_search_tree (ar);
 }
 
-#endif /* DEFINE_NON_INLINE_P */
-
-#if DEFINE_INLINE_P
-
-SIM_ARANGE_INLINE int
+int
 sim_addr_range_hit_p (ADDR_RANGE *ar, address_word addr)
 {
   ADDR_RANGE_TREE *t = ar->range_tree;
@@ -301,4 +297,4 @@ sim_addr_range_hit_p (ADDR_RANGE *ar, ad
   return 0;
 }
 
-#endif /* DEFINE_INLINE_P */
+#endif /* DEFINE_NON_INLINE_P */
diff --color -rup gdb-7.8+os161-2.1/sim/common/sim-arange.h gdb-7.8+os161-2.1-new/sim/common/sim-arange.h
--- gdb-7.8+os161-2.1/sim/common/sim-arange.h	2014-09-30 23:01:49.000000000 -0300
+++ gdb-7.8+os161-2.1-new/sim/common/sim-arange.h	2023-03-19 02:50:07.841329026 -0300
@@ -62,7 +62,7 @@ extern void sim_addr_range_delete (ADDR_
 
 /* Return non-zero if ADDR is in range AR, traversing the entire tree.
    If no range is specified, that is defined to mean "everything".  */
-extern INLINE int
+extern int
 sim_addr_range_hit_p (ADDR_RANGE * /*ar*/, address_word /*addr*/);
 #define ADDR_RANGE_HIT_P(ar, addr) \
   ((ar)->range_tree == NULL || sim_addr_range_hit_p ((ar), (addr)))