Miscellaneous runtime library routines#
Cache control functions#
-
void __clear_cache(char *beg, char *end)#
This function clears the instruction cache between
beg
andend
.
Split stack functions and variables#
-
void *__splitstack_find(void *segment_arg, void *sp, size_t len, void **next_segment, void **next_sp, void **initial_sp)#
When using
-fsplit-stack
, this call may be used to iterate over the stack segments. It may be called like this:void *next_segment = NULL; void *next_sp = NULL; void *initial_sp = NULL; void *stack; size_t stack_size; while ((stack = __splitstack_find (next_segment, next_sp, &stack_size, &next_segment, &next_sp, &initial_sp)) != NULL) { /* Stack segment starts at stack and is stack_size bytes long. */ }
There is no way to iterate over the stack segments of a different thread. However, what is permitted is for one thread to call this with the
segment_arg
andsp
arguments NULL, to passnext_segment
,next_sp
, andinitial_sp
to a different thread, and then to suspend one way or another. A different thread may run the subsequent__splitstack_find
iterations. Of course, this will only work if the first thread is suspended while the second thread is calling__splitstack_find
. If not, the second thread could be looking at the stack while it is changing, and anything could happen.
-
struct stack_segment *__morestack_segments#
-
stack_segment *__morestack_current_segment#
-
struct initial_sp __morestack_initial_sp#
Internal variables used by the -fsplit-stack
implementation.