5 #include "diskBack.unix.c"
6 #include "float-math.c"
8 #include "mmap-protect.c"
11 #include "setenv.putenv.c"
14 int fegetround (void) {
19 case FP_RN
: mode
= 0; break;
20 case FP_RM
: mode
= 1; break;
21 case FP_RP
: mode
= 2; break;
22 case FP_RZ
: mode
= 3; break;
24 die ("fegetround: invalid mode %d\n", mode
);
29 int fesetround (int mode
) {
31 case 0: mode
= FP_RN
; break;
32 case 1: mode
= FP_RM
; break;
33 case 2: mode
= FP_RP
; break;
34 case 3: mode
= FP_RZ
; break;
36 die ("fesetround: invalid mode %d\n", mode
);
41 #endif /* __sparc__ */
43 /* ------------------------------------------------- */
45 /* ------------------------------------------------- */
47 void GC_displayMem (void) {
48 static char buffer
[256];
49 snprintf (buffer
, cardof(buffer
), "pmap %d\n", (int)(getpid ()));
53 static void catcher (__attribute__ ((unused
)) int signo
,
54 __attribute__ ((unused
)) siginfo_t
* info
,
56 ucontext_t
* ucp
= (ucontext_t
*)context
;
57 GC_handleSigProf ((code_pointer
) ucp
->uc_mcontext
.gregs
[REG_PC
]);
60 void GC_setSigProfHandler (struct sigaction
*sa
) {
61 sa
->sa_flags
= SA_ONSTACK
| SA_RESTART
| SA_SIGINFO
;
62 sa
->sa_sigaction
= (void (*)(int, siginfo_t
*, void*))catcher
;
65 /* On Solaris 5.7, MAP_ANON causes EINVAL and mmap requires a file descriptor.
67 void *GC_mmapAnon (void *start
, size_t length
) {
71 fd
= open ("/dev/zero", O_RDONLY
);
72 return mmap (start
, length
, PROT_READ
| PROT_WRITE
, MAP_PRIVATE
, fd
, 0);
75 void GC_release (void *base
, size_t length
) {
76 munmap_safe (base
, length
);