summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTsugutomo Enami <tsugutomo.enami@jp.sony.com>2012-06-01 01:12:24 +0200
committerIvan Maidanski <ivmai@mail.ru>2012-06-02 10:52:49 +0200
commite9688bbf5ebecc950eb3e274ff19b3c2cf6ac288 (patch)
treeae48220cd8881aace54fa3d63e761ee4dfba93e0
parent2e3970b8e5064881bc94fbebad57868347777782 (diff)
Fix GC_FirstDLOpenedLinkMap() for NetBSD 6 release
* dyn_load.c: Include sys/param.h and dlfcn.h on NetBSD. * dyn_load.c (GC_FirstDLOpenedLinkMap): Obtain link map using dlinfo() on NetBSD if RTLD_DI_LINKMAP feature present (defined).
-rw-r--r--dyn_load.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/dyn_load.c b/dyn_load.c
index ce45ee2..a543d9e 100644
--- a/dyn_load.c
+++ b/dyn_load.c
@@ -77,6 +77,8 @@ STATIC GC_has_static_roots_func GC_has_static_roots = 0;
#endif
#if defined(NETBSD)
+# include <sys/param.h>
+# include <dlfcn.h>
# include <machine/elf_machdep.h>
# define ELFSIZE ARCH_ELFSIZE
#endif
@@ -644,6 +646,11 @@ GC_FirstDLOpenedLinkMap(void)
return(0);
}
if( cachedResult == 0 ) {
+# if defined(NETBSD) && defined(RTLD_DI_LINKMAP)
+ struct link_map *lm = NULL;
+ if (!dlinfo(RTLD_SELF, RTLD_DI_LINKMAP, &lm))
+ cachedResult = lm;
+# else
int tag;
for( dp = _DYNAMIC; (tag = dp->d_tag) != 0; dp++ ) {
if( tag == DT_DEBUG ) {
@@ -653,6 +660,7 @@ GC_FirstDLOpenedLinkMap(void)
break;
}
}
+# endif /* !NETBSD || !RTLD_DI_LINKMAP */
}
return cachedResult;
}