mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-14 05:20:25 +08:00
dyn_load.c (GC_has_static_roots): Declare.
2006-03-07 Andrew Haley <aph@redhat.com> * dyn_load.c (GC_has_static_roots): Declare. (GC_register_dynlib_callback): Call GC_has_static_roots. From-SVN: r113223
This commit is contained in:
parent
d84b37b08a
commit
5204d06d82
@ -1,3 +1,8 @@
|
||||
2006-03-07 Andrew Haley <aph@redhat.com>
|
||||
|
||||
* dyn_load.c (GC_has_static_roots): Declare.
|
||||
(GC_register_dynlib_callback): Call GC_has_static_roots.
|
||||
|
||||
2006-04-11 Bryce McKinlay <mckinlay@redhat.com>
|
||||
|
||||
* darwin_stop_world.c (GC_push_all_stacks, GC_stop_world,
|
||||
|
@ -119,6 +119,17 @@
|
||||
# endif
|
||||
# endif
|
||||
|
||||
/* An user-supplied routine that is called to dtermine if a DSO must
|
||||
be scanned by the gc. */
|
||||
static int (*GC_has_static_roots)(const char *, void *, size_t);
|
||||
/* Register the routine. */
|
||||
void
|
||||
GC_register_has_static_roots_callback
|
||||
(int (*callback)(const char *, void *, size_t))
|
||||
{
|
||||
GC_has_static_roots = callback;
|
||||
}
|
||||
|
||||
#if defined(SUNOS5DL) && !defined(USE_PROC_FOR_LIBRARIES)
|
||||
|
||||
#ifdef LINT
|
||||
@ -371,7 +382,7 @@ GC_bool GC_register_main_static_data()
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
# define HAVE_REGISTER_MAIN_STATIC_DATA
|
||||
|
||||
#endif /* USE_PROC_FOR_LIBRARIES */
|
||||
@ -411,6 +422,11 @@ static int GC_register_dynlib_callback(info, size, ptr)
|
||||
{
|
||||
if( !(p->p_flags & PF_W) ) break;
|
||||
start = ((char *)(p->p_vaddr)) + info->dlpi_addr;
|
||||
|
||||
if (GC_has_static_roots
|
||||
&& !GC_has_static_roots(info->dlpi_name, start, p->p_memsz))
|
||||
break;
|
||||
|
||||
GC_add_roots_inner(start, start + p->p_memsz, TRUE);
|
||||
}
|
||||
break;
|
||||
|
@ -925,6 +925,15 @@ extern void GC_thr_init GC_PROTO((void));/* Needed for Solaris/X86 */
|
||||
|
||||
#endif /* THREADS && !SRC_M3 */
|
||||
|
||||
/* Register a callback to control the scanning of dynamic libraries.
|
||||
When the GC scans the static data of a dynamic library, it will
|
||||
first call a user-supplied routine with filename of the library and
|
||||
the address and length of the memory region. This routine should
|
||||
return nonzero if that region should be scanned. */
|
||||
GC_API void GC_register_has_static_roots_callback
|
||||
(int (*callback)(const char *, void *, size_t));
|
||||
|
||||
|
||||
#if defined(GC_WIN32_THREADS) && !defined(__CYGWIN32__) && !defined(__CYGWIN__)
|
||||
# include <windows.h>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user