summaryrefslogtreecommitdiff
path: root/dyn_load.c
diff options
context:
space:
mode:
authorhboehm <hboehm>2009-09-03 19:52:22 +0200
committerIvan Maidanski <ivmai@mail.ru>2011-07-26 19:06:46 +0200
commitb070a41b0788a0bda79a4b752a1dd177f08e4fc3 (patch)
treef417ce524d90402926b3e44c81456fc13a1400c8 /dyn_load.c
parentb3893ef628cf1f9f679426ec710d2a301dd66920 (diff)
2009-09-03 Hans Boehm <Hans.Boehm@hp.com> (really Loren J. Rittle)
* dyn_load.c (HAVE_DL_ITERATE_PHDR): Break definition from use. Define for FreeBSD 7.0+.
Diffstat (limited to 'dyn_load.c')
-rw-r--r--dyn_load.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/dyn_load.c b/dyn_load.c
index f84311d..b46ba04 100644
--- a/dyn_load.c
+++ b/dyn_load.c
@@ -374,6 +374,20 @@ GC_bool GC_register_main_static_data(void)
# if (defined(LINUX) || defined (__GLIBC__)) /* Are others OK here, too? */ \
&& (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
|| (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG)))
+/* We have the header files for a glibc that includes dl_iterate_phdr. */
+/* It may still not be available in the library on the target system. */
+/* Thus we also treat it as a weak symbol. */
+#define HAVE_DL_ITERATE_PHDR
+#pragma weak dl_iterate_phdr
+#endif
+
+# if (defined(FREEBSD) && __FreeBSD__ >= 7)
+/* On the FreeBSD system, any target system at major version 7 shall */
+/* have dl_iterate_phdr; therefore, we need not make it weak as above. */
+#define HAVE_DL_ITERATE_PHDR
+#endif
+
+#if defined(HAVE_DL_ITERATE_PHDR)
# ifdef PT_GNU_RELRO
@@ -399,11 +413,6 @@ static int n_load_segs;
# endif /* PT_GNU_RELRO */
-/* We have the header files for a glibc that includes dl_iterate_phdr. */
-/* It may still not be available in the library on the target system. */
-/* Thus we also treat it as a weak symbol. */
-#define HAVE_DL_ITERATE_PHDR
-
/* A user-supplied routine that is called to determine if a DSO must
be scanned by the gc. */
static int (GC_CALLBACK * GC_has_static_roots)(const char *, void *, size_t);
@@ -489,8 +498,6 @@ static int GC_register_dynlib_callback(info, size, ptr)
/* Return TRUE if we succeed, FALSE if dl_iterate_phdr wasn't there. */
-#pragma weak dl_iterate_phdr
-
GC_bool GC_register_dynamic_libraries_dl_iterate_phdr(void)
{
if (dl_iterate_phdr) {