aboutsummaryrefslogtreecommitdiffstats
path: root/iseq.c
diff options
context:
space:
mode:
Diffstat (limited to 'iseq.c')
-rw-r--r--iseq.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/iseq.c b/iseq.c
index 297299e00a..7e1ac877c1 100644
--- a/iseq.c
+++ b/iseq.c
@@ -13,6 +13,10 @@
#include "ruby/util.h"
#include "eval_intern.h"
+#ifdef HAVE_DLADDR
+# include <dlfcn.h>
+#endif
+
/* #define RUBY_MARK_FREE_DEBUG 1 */
#include "gc.h"
#include "vm_core.h"
@@ -1375,7 +1379,16 @@ rb_insn_operand_intern(const rb_iseq_t *iseq,
break;
case TS_FUNCPTR:
- ret = rb_str_new2("<funcptr>");
+ {
+#ifdef HAVE_DLADDR
+ Dl_info info;
+ if (dladdr((void *)op, &info) && info.dli_sname) {
+ ret = rb_str_new_cstr(info.dli_sname);
+ break;
+ }
+#endif
+ ret = rb_str_new2("<funcptr>");
+ }
break;
default: