xref: /kvm-unit-tests/lib/stack.h (revision ab0bbb9fd1eb426a8f43ac74eb762bc135568023)
14b6da826SThomas Huth /*
24b6da826SThomas Huth  * Header for stack related functions
34b6da826SThomas Huth  *
44b6da826SThomas Huth  * This code is free software; you can redistribute it and/or modify it
54b6da826SThomas Huth  * under the terms of the GNU Library General Public License version 2.
64b6da826SThomas Huth  */
752266791SPeter Feiner #ifndef _STACK_H_
852266791SPeter Feiner #define _STACK_H_
952266791SPeter Feiner 
1052266791SPeter Feiner #include <libcflat.h>
1152266791SPeter Feiner #include <asm/stack.h>
1252266791SPeter Feiner 
13cec0fd86SAndrew Jones #ifdef HAVE_ARCH_BACKTRACE_FRAME
14a8a78d75SAndrew Jones extern int arch_backtrace_frame(const void *frame, const void **return_addrs,
15a8a78d75SAndrew Jones 				int max_depth, bool current_frame);
16a8a78d75SAndrew Jones 
backtrace_frame(const void * frame,const void ** return_addrs,int max_depth)17a8a78d75SAndrew Jones static inline int backtrace_frame(const void *frame, const void **return_addrs,
18a8a78d75SAndrew Jones 				  int max_depth)
19a8a78d75SAndrew Jones {
20a8a78d75SAndrew Jones 	return arch_backtrace_frame(frame, return_addrs, max_depth, false);
21a8a78d75SAndrew Jones }
22a8a78d75SAndrew Jones 
backtrace(const void ** return_addrs,int max_depth)23a8a78d75SAndrew Jones static inline int backtrace(const void **return_addrs, int max_depth)
24a8a78d75SAndrew Jones {
25a8a78d75SAndrew Jones 	return arch_backtrace_frame(NULL, return_addrs, max_depth, true);
26a8a78d75SAndrew Jones }
27cec0fd86SAndrew Jones #else
28a8a78d75SAndrew Jones extern int backtrace(const void **return_addrs, int max_depth);
29a8a78d75SAndrew Jones 
backtrace_frame(const void * frame,const void ** return_addrs,int max_depth)30a8a78d75SAndrew Jones static inline int backtrace_frame(const void *frame, const void **return_addrs,
31a8a78d75SAndrew Jones 				  int max_depth)
3252266791SPeter Feiner {
3352266791SPeter Feiner 	return 0;
3452266791SPeter Feiner }
3552266791SPeter Feiner #endif
3652266791SPeter Feiner 
37*ab0bbb9fSAndrew Jones bool base_address(const void *rebased_addr, unsigned long *addr);
38a1f2b0e1SAndrew Jones 
3952266791SPeter Feiner #endif
40