Update to w3m-0.2.1-inu-1.6.
This commit is contained in:
		
							
								
								
									
										62
									
								
								gc/doc/README.solaris2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								gc/doc/README.solaris2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| The collector supports both incremental collection and threads under | ||||
| Solaris 2.  The incremental collector normally retrieves page dirty information | ||||
| through the appropriate /proc calls.  But it can also be configured | ||||
| (by defining MPROTECT_VDB instead of PROC_VDB in gcconfig.h) to use mprotect | ||||
| and signals.  This may result in shorter pause times, but it is no longer | ||||
| safe to issue arbitrary system calls that write to the heap. | ||||
|  | ||||
| Under other UNIX versions, | ||||
| the collector normally obtains memory through sbrk.  There is some reason | ||||
| to expect that this is not safe if the client program also calls the system | ||||
| malloc, or especially realloc.  The sbrk man page strongly suggests this is | ||||
| not safe: "Many library routines use malloc() internally, so use brk() | ||||
| and sbrk() only when you know  that malloc() definitely will not be used by | ||||
| any library routine."  This doesn't make a lot of sense to me, since there | ||||
| seems to be no documentation as to which routines can transitively call malloc. | ||||
| Nonetheless, under Solaris2, the collector now (since 4.12) allocates | ||||
| memory using mmap by default.  (It defines USE_MMAP in gcconfig.h.) | ||||
| You may want to reverse this decisions if you use -DREDIRECT_MALLOC=... | ||||
|  | ||||
|  | ||||
| SOLARIS THREADS: | ||||
|  | ||||
| The collector must be compiled with -DGC_SOLARIS_THREADS (thr_ functions) | ||||
| or -DGC_SOLARIS_PTHREADS (pthread_ functions) to be thread safe. | ||||
| It is also essential that gc.h be included in files that call thr_create, | ||||
| thr_join, thr_suspend, thr_continue, or dlopen.  Gc.h macro defines | ||||
| these to also do GC bookkeeping, etc.  Gc.h must be included with | ||||
| one or both of these macros defined, otherwise | ||||
| these replacements are not visible. | ||||
| A collector built in this way way only be used by programs that are | ||||
| linked with the threads library. | ||||
|  | ||||
| In this mode, the collector contains various workarounds for older Solaris | ||||
| bugs.  Mostly, these should not be noticeable unless you look at system | ||||
| call traces.  However, it cannot protect a guard page at the end of | ||||
| a thread stack.  If you know that you will only be running Solaris2.5 | ||||
| or later, it should be possible to fix this by compiling the collector | ||||
| with -DSOLARIS23_MPROTECT_BUG_FIXED. | ||||
|  | ||||
| Since 5.0 alpha5, dlopen disables collection temporarily, | ||||
| unless USE_PROC_FOR_LIBRARIES is defined.  In some unlikely cases, this | ||||
| can result in unpleasant heap growth.  But it seems better than the | ||||
| race/deadlock issues we had before. | ||||
|  | ||||
| If solaris_threads are used on an X86 processor with malloc redirected to | ||||
| GC_malloc, it is necessary to call GC_thr_init explicitly before forking the | ||||
| first thread.  (This avoids a deadlock arising from calling GC_thr_init | ||||
| with the allocation lock held.) | ||||
|  | ||||
| It appears that there is a problem in using gc_cpp.h in conjunction with | ||||
| Solaris threads and Sun's C++ runtime.  Apparently the overloaded new operator | ||||
| is invoked by some iostream initialization code before threads are correctly | ||||
| initialized.  As a result, call to thr_self() in garbage collector | ||||
| initialization  segfaults.  Currently the only known workaround is to not | ||||
| invoke the garbage collector from a user defined global operator new, or to | ||||
| have it invoke the garbage-collector's allocators only after main has started. | ||||
| (Note that the latter requires a moderately expensive test in operator | ||||
| delete.) | ||||
|  | ||||
| Hans-J. Boehm | ||||
| (The above contains my personal opinions, which are probably not shared | ||||
| by anyone else.) | ||||
		Reference in New Issue
	
	Block a user