A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Compute the weight using bandwidth if needed for the new LegrandVelho model.
[simgrid.git]
/
src
/
xbt
/
backtrace_linux.c
diff --git
a/src/xbt/backtrace_linux.c
b/src/xbt/backtrace_linux.c
index 2bc22c5f3e5ca04274c165de628ca0c76722b92b..c4ef0dceaaf6a87ffcd11d05f634ea0fecf59a7b 100644
(file)
--- a/
src/xbt/backtrace_linux.c
+++ b/
src/xbt/backtrace_linux.c
@@
-11,18
+11,27
@@
extern char **environ; /* the environment, as specified by the opengroup */
extern char **environ; /* the environment, as specified by the opengroup */
+/* Module creation/destruction: nothing to do on linux */
+void xbt_backtrace_init(void) { }
+void xbt_backtrace_exit(void) { }
+
+void xbt_backtrace_current(xbt_ex_t * e) {
+ e->used = backtrace((void **) e->bt, XBT_BACKTRACE_SIZE);
+}
+
+
void xbt_ex_setup_backtrace(xbt_ex_t * e)
{
int i;
/* to get the backtrace from the libc */
void xbt_ex_setup_backtrace(xbt_ex_t * e)
{
int i;
/* to get the backtrace from the libc */
- char **backtrace_syms
= backtrace_symbols(e->bt, e->used)
;
+ char **backtrace_syms;
/* To build the commandline of addr2line */
char *cmd, *curr;
/* to extract the addresses from the backtrace */
/* To build the commandline of addr2line */
char *cmd, *curr;
/* to extract the addresses from the backtrace */
- char **addrs
= xbt_new(char *, e->used)
;
+ char **addrs;
char buff[256], *p;
/* To read the output of addr2line */
char buff[256], *p;
/* To read the output of addr2line */
@@
-36,7
+45,11
@@
void xbt_ex_setup_backtrace(xbt_ex_t * e)
struct stat stat_buf;
char *binary_name = NULL;
struct stat stat_buf;
char *binary_name = NULL;
- e->used = backtrace((void **) e->bt, XBT_BACKTRACE_SIZE);
+ xbt_assert0(e && e->used,"Backtrace not setup yet, cannot set it up for display");
+
+ backtrace_syms = backtrace_symbols(e->bt, e->used);
+ addrs = xbt_new(char *, e->used);
+
e->bt_strings = NULL;
/* Some arches only have stubs of backtrace, no implementation (hppa comes to mind) */
e->bt_strings = NULL;
/* Some arches only have stubs of backtrace, no implementation (hppa comes to mind) */
@@
-171,7
+184,7
@@
void xbt_ex_setup_backtrace(xbt_ex_t * e)
if (found) {
DEBUG3("%#lx in [%#lx-%#lx]", addr, first, last);
DEBUG0
if (found) {
DEBUG3("%#lx in [%#lx-%#lx]", addr, first, last);
DEBUG0
-
("Symbol found, map lines not further displayed (even if looking for next ones)");
+ ("Symbol found, map lines not further displayed (even if looking for next ones)");
}
}
fclose(maps);
}
}
fclose(maps);
@@
-179,13
+192,13
@@
void xbt_ex_setup_backtrace(xbt_ex_t * e)
if (!found) {
VERB0
if (!found) {
VERB0
-
("Problem while reading the maps file. Following backtrace will be mangled.");
+ ("Problem while reading the maps file. Following backtrace will be mangled.");
DEBUG1("No dynamic. Static symbol: %s", backtrace_syms[i]);
e->bt_strings[i] = bprintf("** In ?? (%s)", backtrace_syms[i]);
continue;
}
DEBUG1("No dynamic. Static symbol: %s", backtrace_syms[i]);
e->bt_strings[i] = bprintf("** In ?? (%s)", backtrace_syms[i]);
continue;
}
- /* Ok, Found the offset of the maps line containing the searched symbol.
+ /* Ok, Found the offset of the maps line containing the searched symbol.
We now need to substract this from the address we got from backtrace.
*/
We now need to substract this from the address we got from backtrace.
*/
@@
-193,7
+206,7
@@
void xbt_ex_setup_backtrace(xbt_ex_t * e)
addrs[i] = bprintf("0x%0*lx", addr_len - 2, addr - offset);
DEBUG2("offset=%#lx new addr=%s", offset, addrs[i]);
addrs[i] = bprintf("0x%0*lx", addr_len - 2, addr - offset);
DEBUG2("offset=%#lx new addr=%s", offset, addrs[i]);
- /* Got it. We have our new address. Let's get the library path and we
+ /* Got it. We have our new address. Let's get the library path and we
are set */
p = xbt_strdup(backtrace_syms[i]);
if (p[0] == '[') {
are set */
p = xbt_strdup(backtrace_syms[i]);
if (p[0] == '[') {