charm AT lists.siebelschool.illinois.edu
Subject: Charm++ parallel programming system
List archive
- From: Artem Shvorin <shvorin AT gmail.com>
- To: Phil Miller <mille121 AT illinois.edu>, "charm AT cs.uiuc.edu" <charm AT cs.uiuc.edu>
- Subject: Re: [charm] [ppl] [PATCH] CmiBacktracePrint() uses demangling
- Date: Mon, 16 Mar 2015 13:43:07 +0300
- List-archive: <http://lists.cs.uiuc.edu/pipermail/charm/>
- List-id: CHARM parallel programming system <charm.cs.uiuc.edu>
Phil,
I've just discovered my previous letter had been sent from another e-mail (not registered in this mail list). So I'm resending my patch. Now it's against the recent version of 'charm' branch, and also contains fixed author's e-mail.
2015-03-15 2:07 GMT+03:00 Phil Miller <mille121 AT illinois.edu>:
PhilThanks,Hi Artem,Thank you for the contribution, and for taking an interest in Charm++.
Would you mind resending your patch as an attachment, such as generated by git format-patch? It looks like the mailing list mangled it in the body of your message a little bit
From 6106920d730a40787021a88df44dfdd1641d19e4 Mon Sep 17 00:00:00 2001 From: Artem Shvorin <shvorin AT gmail.com> Date: Mon, 16 Mar 2015 13:22:56 +0300 Subject: [PATCH] CmiBacktracePrint() uses demangling --- src/conv-core/convcore.c | 38 ++++++++++++++++++++++++++++++-------- src/conv-core/debug-conv++.C | 9 ++++++++- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/conv-core/convcore.c b/src/conv-core/convcore.c index a0b594e..348bf32 100644 --- a/src/conv-core/convcore.c +++ b/src/conv-core/convcore.c @@ -230,6 +230,9 @@ void LrtsFree(void*); CpvStaticDeclare(int, cmiMyPeIdle); int CmiIsMyNodeIdle(); +/* plain C wrapper for abi::__cxa_demangle */ +char *cxa_demangle(const char *mangled_name, char *output_buffer, size_t *length, int *status); + /***************************************************************************** * * Command-Line Argument (CLA) parsing routines. @@ -565,6 +568,8 @@ static const char* _implGetBacktraceSys(const char *name) { /** Print out the names of these function pointers. */ void CmiBacktracePrint(void **retPtrs,int nLevels) { if (nLevels>0) { + char *dmgl_buffer = NULL; + size_t dmgl_len = 0; int i; char **names=CmiBacktraceLookup(retPtrs,nLevels); if (names==NULL) return; @@ -572,18 +577,35 @@ void CmiBacktracePrint(void **retPtrs,int nLevels) { for (i=0;i<nLevels;i++) { if (names[i] == NULL) continue; { - const char *trimmed=_implTrimParenthesis(names[i], 0); - const char *print=trimmed; - const char *sys=_implGetBacktraceSys(print); - if (sys) { - CmiPrintf(" [%d] Charm++ Runtime: %s (%s)\n",i,sys,print); + const char *trimmed=_implTrimParenthesis(names[i], 0); + const char *print=trimmed; + const char *sys=_implGetBacktraceSys(print); + char *funcname = /* const violation */(char*)print, *plusSign = funcname; + while (*plusSign != 0) { + if (*plusSign == '+') { + *plusSign = '\0'; + ++plusSign; + break; + } + ++plusSign; + } + int status; + char *dmgl_result = cxa_demangle(funcname, dmgl_buffer, &dmgl_len, &status); + if(dmgl_result) + dmgl_buffer = dmgl_result; + if(0 != status) + dmgl_result = funcname; /* fall back without demangling */ + if (sys) { + CmiPrintf(" [%d] Charm++ Runtime: %s (%s%s%s)\n",i,sys,dmgl_result,*plusSign?"+":"",plusSign); break; /*Stop when we hit Charm++ runtime.*/ - } else { - CmiPrintf(" [%d:%d] %s\n",CmiMyPe(),i,print); + } else { + CmiPrintf(" [%d:%d] %s%s%s\n",CmiMyPe(),i,dmgl_result,*plusSign?"+":"",plusSign); + } } - } } free(names); + if(dmgl_buffer) + free(dmgl_buffer); } } diff --git a/src/conv-core/debug-conv++.C b/src/conv-core/debug-conv++.C index be67935..e658595 100644 --- a/src/conv-core/debug-conv++.C +++ b/src/conv-core/debug-conv++.C @@ -1,3 +1,4 @@ +#include <cxxabi.h> #include "converse.h" #include "debug-conv++.h" @@ -30,4 +31,10 @@ void CpdListAccessor::beginItem(PUP::er &p,int itemNo) CpdListBeginItem_impl(p,itemNo); } - +extern "C" { + /* plain C wrapper for abi::__cxa_demangle */ + char *cxa_demangle(const char *mangled_name, char *output_buffer, size_t *length, int *status) + { + return abi::__cxa_demangle(mangled_name, output_buffer, length, status); + } +} -- 2.1.4
- [charm] [PATCH] CmiBacktracePrint() uses demangling, Artem Shvorin, 03/13/2015
- Re: [charm] [ppl] [PATCH] CmiBacktracePrint() uses demangling, Phil Miller, 03/14/2015
- Re: [charm] [ppl] [PATCH] CmiBacktracePrint() uses demangling, Artem Shvorin, 03/15/2015
- Re: [charm] [ppl] [PATCH] CmiBacktracePrint() uses demangling, Artem Shvorin, 03/16/2015
- Re: [charm] [ppl] [PATCH] CmiBacktracePrint() uses demangling, Phil Miller, 03/14/2015
Archive powered by MHonArc 2.6.16.