MCPcopy Create free account
hub / github.com/MariaDB/server / my_get_stack_pointer

Function my_get_stack_pointer

include/my_stack_alloc.h:34–78  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

32*/
33
34static inline void *my_get_stack_pointer(void *default_stack)
35{
36 void *stack_ptr= NULL;
37
38#if defined(__GNUC__) || defined(__clang__) /* GCC and Clang compilers */
39#if defined(__i386__) /* Intel x86 (32-bit) */
40 __asm__ volatile ("movl %%esp, %0" : "=r" (stack_ptr));
41#elif defined(__x86_64__) && defined (__ILP32__) /* Intel x86-64 (64-bit), X32 ABI */
42 __asm__ volatile ("movl %%esp, %0" : "=r" (stack_ptr));
43#elif defined(__x86_64__) /* Intel x86-64 (64-bit) */
44 __asm__ volatile ("movq %%rsp, %0" : "=r" (stack_ptr));
45#elif defined(__powerpc__) /* PowerPC (32-bit) */
46 __asm__ volatile ("mr %0, 1" : "=r" (stack_ptr)); /* GPR1 is the stack pointer */
47#elif defined(__ppc64__) /* PowerPC (64-bit) */
48 __asm__ volatile ("mr %0, 1" : "=r" (stack_ptr));
49#elif defined(__arm__) /* ARM 32-bit */
50 __asm__ volatile ("mov %0, sp" : "=r" (stack_ptr));
51#elif defined(__aarch64__) /* ARM 64-bit */
52 __asm__ volatile ("mov %0, sp" : "=r" (stack_ptr));
53#elif defined(__sparc__) /* SPARC 32-bit */
54 __asm__ volatile ("mov %%sp, %0" : "=r" (stack_ptr));
55#elif defined(__sparc64__) /* SPARC 64-bit */
56 __asm__ volatile ("mov %%sp, %0" : "=r" (stack_ptr));
57#elif defined(__s390x__)
58 stack_ptr= __builtin_frame_address(0);
59#else
60 /* Generic fallback for unsupported architectures in GCC/Clang */
61 stack_ptr= default_stack ? default_stack : (void*) &stack_ptr;
62#endif
63#elif defined(_MSC_VER) /* MSVC compiler (Intel only) */
64#if defined(_M_IX86) /* Intel x86 (32-bit) */
65 __asm { mov stack_ptr, esp }
66#elif defined(_M_X64) /* Intel x86-64 (64-bit) */
67 /* rsp can’t be accessed directly in MSVC x64 */
68 stack_ptr= _AddressOfReturnAddress();
69#else
70 /* Generic fallback for unsupported architectures in MSVC */
71 stack_ptr= default_stack ? default_stack : (void*) &stack_ptr;
72#endif
73#else
74 /* Generic fallback for unsupported compilers */
75 stack_ptr= default_stack ? default_stack : (void*) &stack_ptr;
76#endif
77 return stack_ptr;
78}
79
80
81/*

Callers 4

show_stack_usageFunction · 0.85
check_stack_overrunFunction · 0.85
my_get_stack_boundsFunction · 0.85
test_stackFunction · 0.85

Calls

no outgoing calls

Tested by 1

test_stackFunction · 0.68