gcconfig.h (GC_data_start): declare when needed.
2003-03-04 Hans Boehm <Hans.Boehm@hp.com> * include/private/gcconfig.h (GC_data_start): declare when needed. * include/private/gc_priv.h: Include gcconfig.h after ptr_t declaration. * dyn_load.c (GC_register_dynamic_libraries_dl_iterate_phdr, GC_register_dynlib_callback): Register main data for static executable if dl_iterate_phdr() didn't. * misc.c (GC_init_inner): Call GC_init_linux_data_start() even if we don't expect to register main static data. From-SVN: r63809
This commit is contained in:
parent
65ebbf8160
commit
c62b906422
@ -1,3 +1,13 @@
|
||||
2003-03-04 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* include/private/gcconfig.h (GC_data_start): declare when needed.
|
||||
* include/private/gc_priv.h: Include gcconfig.h after ptr_t
|
||||
declaration.
|
||||
* dyn_load.c (GC_register_dynamic_libraries_dl_iterate_phdr,
|
||||
GC_register_dynlib_callback): Register main data for static
|
||||
executable if dl_iterate_phdr() didn't.
|
||||
* misc.c (GC_init_inner): Call GC_init_linux_data_start() even
|
||||
if we don't expect to register main static data.
|
||||
|
||||
2003-03-03 Hans Boehm <Hans.Boehm@hp.com>
|
||||
* mark_rts.c (GC_cond_register_dynamic_libraries): add.
|
||||
(GC_push_roots): explicitly mark free list headers, register
|
||||
|
@ -487,6 +487,7 @@ static int GC_register_dynlib_callback(info, size, ptr)
|
||||
}
|
||||
}
|
||||
|
||||
* (int *)ptr = 1; /* Signal that we were called */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -496,10 +497,17 @@ static int GC_register_dynlib_callback(info, size, ptr)
|
||||
|
||||
GC_bool GC_register_dynamic_libraries_dl_iterate_phdr()
|
||||
{
|
||||
int tmp = 0;
|
||||
|
||||
if (dl_iterate_phdr) {
|
||||
dl_iterate_phdr(GC_register_dynlib_callback, &tmp);
|
||||
int did_something = 0;
|
||||
dl_iterate_phdr(GC_register_dynlib_callback, &did_something);
|
||||
if (!did_something) {
|
||||
/* dl_iterate_phdr may forget the static data segment in */
|
||||
/* statically linked executables. */
|
||||
GC_add_roots_inner(DATASTART, (char *)(DATAEND), TRUE);
|
||||
# if defined(DATASTART2)
|
||||
GC_add_roots_inner(DATASTART2, (char *)(DATAEND2), TRUE);
|
||||
# endif
|
||||
}
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
|
@ -44,10 +44,6 @@
|
||||
# include "../gc_mark.h"
|
||||
# endif
|
||||
|
||||
# ifndef GCCONFIG_H
|
||||
# include "gcconfig.h"
|
||||
# endif
|
||||
|
||||
typedef GC_word word;
|
||||
typedef GC_signed_word signed_word;
|
||||
|
||||
@ -60,6 +56,10 @@ typedef char * ptr_t; /* A generic pointer to which we can add */
|
||||
/* Preferably identical to caddr_t, if it */
|
||||
/* exists. */
|
||||
|
||||
# ifndef GCCONFIG_H
|
||||
# include "gcconfig.h"
|
||||
# endif
|
||||
|
||||
# ifndef HEADERS_H
|
||||
# include "gc_hdrs.h"
|
||||
# endif
|
||||
|
@ -1810,6 +1810,10 @@
|
||||
/* platforms as well, though it should be avoided in win32. */
|
||||
# endif /* LINUX */
|
||||
|
||||
# if defined(SEARCH_FOR_DATA_START) && defined(GC_PRIVATE_H)
|
||||
extern ptr_t GC_data_start;
|
||||
# endif
|
||||
|
||||
# ifndef CLEAR_DOUBLE
|
||||
# define CLEAR_DOUBLE(x) \
|
||||
((word*)x)[0] = 0; \
|
||||
|
@ -580,7 +580,7 @@ void GC_init_inner()
|
||||
GC_init_win32();
|
||||
# endif
|
||||
# if defined(SEARCH_FOR_DATA_START)
|
||||
if (GC_REGISTER_MAIN_STATIC_DATA()) GC_init_linux_data_start();
|
||||
GC_init_linux_data_start();
|
||||
# endif
|
||||
# if (defined(NETBSD) || defined(OPENBSD)) && defined(__ELF__)
|
||||
GC_init_netbsd_elf();
|
||||
|
Loading…
Reference in New Issue
Block a user