From: Tsugutomo Enami Date: Thu, 31 May 2012 23:12:24 +0000 (+0400) Subject: Fix GC_FirstDLOpenedLinkMap() for NetBSD 6 release X-Git-Tag: gc7_2c~1^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e9688bbf5ebecc950eb3e274ff19b3c2cf6ac288;p=gc 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). --- diff --git a/dyn_load.c b/dyn_load.c index ce45ee27..a543d9eb 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 +# include # include # 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; }