-/* Copyright (c) 2015-2017. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2015-2019. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "src/mc/mc_forward.hpp"
#include "xbt/base.h"
-#include <libunwind.h>
#include <cstdio>
-#include <sys/types.h>
+#include <libunwind.h>
namespace simgrid {
namespace unw {
XBT_PRIVATE unw_addr_space_t create_addr_space();
XBT_PRIVATE void* create_context(unw_addr_space_t as, pid_t pid);
-
}
}
public:
UnwindContext() = default;
+ UnwindContext(const UnwindContext&) = default;
+ UnwindContext& operator=(const UnwindContext&) = default;
~UnwindContext() { clear(); }
void initialize(simgrid::mc::RemoteClient* process, unw_context_t* c);
void clear();
unw_cursor_t cursor();
private: // Methods and virtual table for libunwind
- static int find_proc_info(unw_addr_space_t as,
- unw_word_t ip, unw_proc_info_t *pip,
- int need_unwind_info, void* arg) noexcept;
- static void put_unwind_info(unw_addr_space_t as,
- unw_proc_info_t *pip, void* arg) noexcept;
- static int get_dyn_info_list_addr(unw_addr_space_t as,
- unw_word_t *dilap, void* arg) noexcept;
- static int access_mem(unw_addr_space_t as,
- unw_word_t addr, unw_word_t *valp,
- int write, void* arg) noexcept;
+ static int find_proc_info(unw_addr_space_t as, unw_word_t ip, unw_proc_info_t* pip, int need_unwind_info,
+ void* arg) noexcept;
+ static void put_unwind_info(unw_addr_space_t as, unw_proc_info_t* pip, void* arg) noexcept;
+ static int get_dyn_info_list_addr(unw_addr_space_t as, unw_word_t* dilap, void* arg) noexcept;
+ static int access_mem(unw_addr_space_t as, unw_word_t addr, unw_word_t* valp, int write, void* arg) noexcept;
static void* get_reg(unw_context_t* context, unw_regnum_t regnum) noexcept;
- static int access_reg(unw_addr_space_t as,
- unw_regnum_t regnum, unw_word_t *valp,
- int write, void* arg) noexcept;
- static int access_fpreg(unw_addr_space_t as,
- unw_regnum_t regnum, unw_fpreg_t *fpvalp,
- int write, void* arg) noexcept;
- static int resume(unw_addr_space_t as,
- unw_cursor_t *cp, void* arg) noexcept;
- static int get_proc_name(unw_addr_space_t as,
- unw_word_t addr, char *bufp,
- size_t buf_len, unw_word_t *offp,
- void* arg) noexcept;
+ static int access_reg(unw_addr_space_t as, unw_regnum_t regnum, unw_word_t* valp, int write, void* arg) noexcept;
+ static int access_fpreg(unw_addr_space_t as, unw_regnum_t regnum, unw_fpreg_t* fpvalp, int write, void* arg) noexcept;
+ static int resume(unw_addr_space_t as, unw_cursor_t* cp, void* arg) noexcept;
+ static int get_proc_name(unw_addr_space_t as, unw_word_t addr, char* bufp, size_t buf_len, unw_word_t* offp,
+ void* arg) noexcept;
static unw_accessors_t accessors;
+
public:
// Create a libunwind address space:
static unw_addr_space_t createUnwindAddressSpace();
};
-void MC_dump_stack_unw(FILE* file, unw_cursor_t cursor);
void dumpStack(FILE* file, unw_cursor_t cursor);
void dumpStack(FILE* file, pid_t pid);
-
}
}