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:
Hans Boehm 2003-03-04 22:18:08 +00:00 committed by Hans Boehm
parent 65ebbf8160
commit c62b906422
5 changed files with 30 additions and 8 deletions

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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; \

View File

@ -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();