xref: /kvm-unit-tests/lib/stack.h (revision ab0bbb9fd1eb426a8f43ac74eb762bc135568023)
1 /*
2  * Header for stack related functions
3  *
4  * This code is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU Library General Public License version 2.
6  */
7 #ifndef _STACK_H_
8 #define _STACK_H_
9 
10 #include <libcflat.h>
11 #include <asm/stack.h>
12 
13 #ifdef HAVE_ARCH_BACKTRACE_FRAME
14 extern int arch_backtrace_frame(const void *frame, const void **return_addrs,
15 				int max_depth, bool current_frame);
16 
backtrace_frame(const void * frame,const void ** return_addrs,int max_depth)17 static inline int backtrace_frame(const void *frame, const void **return_addrs,
18 				  int max_depth)
19 {
20 	return arch_backtrace_frame(frame, return_addrs, max_depth, false);
21 }
22 
backtrace(const void ** return_addrs,int max_depth)23 static inline int backtrace(const void **return_addrs, int max_depth)
24 {
25 	return arch_backtrace_frame(NULL, return_addrs, max_depth, true);
26 }
27 #else
28 extern int backtrace(const void **return_addrs, int max_depth);
29 
backtrace_frame(const void * frame,const void ** return_addrs,int max_depth)30 static inline int backtrace_frame(const void *frame, const void **return_addrs,
31 				  int max_depth)
32 {
33 	return 0;
34 }
35 #endif
36 
37 bool base_address(const void *rebased_addr, unsigned long *addr);
38 
39 #endif
40