* set_stack_base: set up reference point for stack depth checking * * Returns the old reference point, if any. */
| 4396 | * Returns the old reference point, if any. |
| 4397 | */ |
| 4398 | pg_stack_base_t |
| 4399 | set_stack_base(void) |
| 4400 | { |
| 4401 | #ifndef HAVE__BUILTIN_FRAME_ADDRESS |
| 4402 | char stack_base; |
| 4403 | #endif |
| 4404 | pg_stack_base_t old; |
| 4405 | |
| 4406 | #if defined(__ia64__) || defined(__ia64) |
| 4407 | old.stack_base_ptr = stack_base_ptr; |
| 4408 | old.register_stack_base_ptr = register_stack_base_ptr; |
| 4409 | #else |
| 4410 | old = stack_base_ptr; |
| 4411 | #endif |
| 4412 | |
| 4413 | /* |
| 4414 | * Set up reference point for stack depth checking. On recent gcc we use |
| 4415 | * __builtin_frame_address() to avoid a warning about storing a local |
| 4416 | * variable's address in a long-lived variable. |
| 4417 | */ |
| 4418 | #ifdef HAVE__BUILTIN_FRAME_ADDRESS |
| 4419 | stack_base_ptr = __builtin_frame_address(0); |
| 4420 | #else |
| 4421 | stack_base_ptr = &stack_base; |
| 4422 | #endif |
| 4423 | #if defined(__ia64__) || defined(__ia64) |
| 4424 | register_stack_base_ptr = ia64_get_bsp(); |
| 4425 | #endif |
| 4426 | |
| 4427 | return old; |
| 4428 | } |
| 4429 | |
| 4430 | /* |
| 4431 | * restore_stack_base: restore reference point for stack depth checking |
no test coverage detected