55 PyVarObject_HEAD_INIT (NULL, 0)
114 PyErr_Format (
gdbpy_gdb_error, _(
"Must be gdb.RecordFunctionSegment"));
157 const btrace_config *config;
158 const char *err_string;
173 PyTypeObject *element_type)
187 return (PyObject *) obj;
197 PyObject *result = NULL;
206 catch (
const gdb_exception &except)
266 gdb::byte_vector buffer;
274 buffer.resize (insn->
size);
277 catch (
const gdb_exception &except)
282 object = PyBytes_FromStringAndSize ((
const char *) buffer.data (),
288 return PyMemoryView_FromObject (
object);
307 catch (
const gdb_exception &except)
314 return PyBytes_FromString (strfile.
string ().c_str ());
331 +
func->level).release ();
345 if (
func->sym == NULL)
363 len =
func->insn.size ();
370 func->insn_offset,
func->insn_offset + len, 1,
434 const Py_ssize_t distance = obj->
last - obj->
first;
435 const Py_ssize_t result = distance / obj->
step;
437 if ((distance % obj->
step) == 0)
454 return PyErr_Format (PyExc_IndexError, _(
"Index out of range: %zd."),
457 number = obj->
first + (obj->
step * index);
472 Py_ssize_t start, stop, step, slicelength;
474 if (PyLong_Check (
value))
476 Py_ssize_t index = PyLong_AsSsize_t (
value);
485 if (!PySlice_Check (
value))
486 return PyErr_Format (PyExc_TypeError, _(
"Index must be int or slice."));
488 if (0 != PySlice_GetIndicesEx (
value, length, &start, &stop,
489 &step, &slicelength))
505 Py_ssize_t index = obj->
number;
513 if (index < list_obj->first || index > list_obj->
last)
516 index -= list_obj->
first;
518 if (index % list_obj->
step != 0)
521 return index / list_obj->
step;
543 return PyErr_Format (PyExc_ValueError, _(
"Not in list."));
568 if (Py_TYPE (self) != Py_TYPE (other))
570 Py_INCREF (Py_NotImplemented);
571 return Py_NotImplemented;
600 Py_INCREF (Py_NotImplemented);
601 return Py_NotImplemented;
610 return PyUnicode_FromString (
"btrace");
620 const struct thread_info *
const tinfo = record->thread;
621 const struct btrace_config * config;
631 return PyUnicode_FromString (btrace_format_short_string (config->format));
646 if (tinfo->
btrace.replay == NULL)
706 unsigned long first = 0;
707 unsigned long last = 0;
735 unsigned long first = 0;
736 unsigned long last = 0;
768 if (!PyArg_ParseTuple (args,
"O", &parse_obj))
772 return PyErr_Format (PyExc_TypeError, _(
"Argument must be instruction."));
786 catch (
const gdb_exception &except)
struct gdbarch * target_gdbarch(void)
const struct btrace_function * btrace_call_get(const struct btrace_call_iterator *it)
unsigned int btrace_call_number(const struct btrace_call_iterator *it)
void btrace_insn_end(struct btrace_insn_iterator *it, const struct btrace_thread_info *btinfo)
int btrace_find_insn_by_number(struct btrace_insn_iterator *it, const struct btrace_thread_info *btinfo, unsigned int number)
void btrace_call_begin(struct btrace_call_iterator *it, const struct btrace_thread_info *btinfo)
const char * btrace_decode_error(enum btrace_format format, int errcode)
int btrace_find_call_by_number(struct btrace_call_iterator *it, const struct btrace_thread_info *btinfo, unsigned int number)
void btrace_fetch(struct thread_info *tp, const struct btrace_cpu *cpu)
const struct btrace_config * btrace_conf(const struct btrace_thread_info *btinfo)
const struct btrace_insn * btrace_insn_get(const struct btrace_insn_iterator *it)
unsigned int btrace_insn_number(const struct btrace_insn_iterator *it)
int btrace_insn_get_error(const struct btrace_insn_iterator *it)
int btrace_is_empty(struct thread_info *tp)
void btrace_insn_begin(struct btrace_insn_iterator *it, const struct btrace_thread_info *btinfo)
void btrace_call_end(struct btrace_call_iterator *it, const struct btrace_thread_info *btinfo)
@ BTRACE_INSN_FLAG_SPECULATIVE
const std::string & string()
void read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
int gdb_print_insn(struct gdbarch *gdbarch, CORE_ADDR memaddr, struct ui_file *stream, int *branch_delay_insns)
PyObject * recpy_bt_func_prev(PyObject *self, void *closure)
PyObject * recpy_bt_func_instructions(PyObject *self, void *closure)
PyObject * recpy_bt_func_up(PyObject *self, void *closure)
static int btpy_list_contains(PyObject *self, PyObject *value)
PyObject * recpy_bt_format(PyObject *self, void *closure)
static PySequenceMethods btpy_list_sequence_methods
static PyObject * btpy_list_index(PyObject *self, PyObject *value)
static PyObject * btpy_list_richcompare(PyObject *self, PyObject *other, int op)
static const btrace_insn * btrace_insn_from_recpy_insn(const PyObject *const pyobject)
static const btrace_function * btrace_func_from_recpy_func(const PyObject *const pyobject)
PyObject * recpy_bt_insn_pc(PyObject *self, void *closure)
static PyTypeObject btpy_list_type
PyObject * recpy_bt_func_symbol(PyObject *self, void *closure)
PyObject * recpy_bt_begin(PyObject *self, void *closure)
static Py_ssize_t btpy_list_length(PyObject *self)
PyObject * recpy_bt_insn_sal(PyObject *self, void *closure)
PyObject * recpy_bt_goto(PyObject *self, PyObject *args)
static PyObject * btpy_insn_or_gap_new(thread_info *tinfo, Py_ssize_t number)
static LONGEST btpy_list_position(PyObject *self, PyObject *value)
PyObject * recpy_bt_end(PyObject *self, void *closure)
PyObject * recpy_bt_method(PyObject *self, void *closure)
static PyObject * btpy_list_slice(PyObject *self, PyObject *value)
PyObject * recpy_bt_func_level(PyObject *self, void *closure)
static PyObject * btpy_list_count(PyObject *self, PyObject *value)
static PyObject * btpy_list_item(PyObject *self, Py_ssize_t index)
PyObject * recpy_bt_insn_decoded(PyObject *self, void *closure)
PyObject * recpy_bt_replay_position(PyObject *self, void *closure)
PyObject * recpy_bt_insn_data(PyObject *self, void *closure)
PyObject * recpy_bt_func_next(PyObject *self, void *closure)
static PyMappingMethods btpy_list_mapping_methods
PyObject * recpy_bt_instruction_history(PyObject *self, void *closure)
static PyObject * btpy_list_new(thread_info *thread, Py_ssize_t first, Py_ssize_t last, Py_ssize_t step, PyTypeObject *element_type)
PyObject * recpy_bt_insn_is_speculative(PyObject *self, void *closure)
PyObject * recpy_bt_insn_size(PyObject *self, void *closure)
static PyMethodDef btpy_list_methods[]
PyObject * recpy_bt_function_call_history(PyObject *self, void *closure)
int gdbpy_initialize_btrace(void)
PyTypeObject recpy_func_type
PyObject * recpy_gap_new(int reason_code, const char *reason_string, Py_ssize_t number)
PyObject * recpy_func_new(thread_info *thread, enum record_method method, Py_ssize_t number)
PyObject * recpy_insn_new(thread_info *thread, enum record_method method, Py_ssize_t number)
PyTypeObject recpy_insn_type
PyObject * symbol_to_symbol_object(struct symbol *sym)
PyObject * symtab_and_line_to_sal_object(struct symtab_and_line sal)
gdbpy_ref gdb_py_object_from_longest(LONGEST l)
void gdbpy_convert_exception(const struct gdb_exception &exception)
gdbpy_ref gdb_py_object_from_ulongest(ULONGEST l)
PyObject * gdbpy_gdb_error
#define GDB_PY_HANDLE_EXCEPTION(Exception)
const struct btrace_cpu * record_btrace_get_cpu(void)
void(* func)(remote_target *remote, char *)
PyTypeObject * element_type
PyObject_HEAD thread_info * thread
PyObject_HEAD thread_info * thread
struct symtab_and_line find_pc_line(CORE_ADDR pc, int notcurrent)
void target_goto_record(ULONGEST insn)
void target_goto_record_end(void)