1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * s390x stack implementation 4 * 5 * Copyright (c) 2017 Red Hat Inc 6 * Copyright 2021 IBM Corp 7 * 8 * Authors: 9 * Thomas Huth <thuth@redhat.com> 10 * David Hildenbrand <david@redhat.com> 11 * Janosch Frank <frankja@de.ibm.com> 12 */ 13 #include <libcflat.h> 14 #include <stack.h> 15 #include <asm/arch_def.h> 16 17 int backtrace_frame(const void *frame, const void **return_addrs, int max_depth) 18 { 19 int depth = 0; 20 struct stack_frame *stack = (struct stack_frame *)frame; 21 22 for (depth = 0; stack && depth < max_depth; depth++) { 23 return_addrs[depth] = (void *)stack->grs[8]; 24 stack = stack->back_chain; 25 } 26 27 return depth; 28 } 29 30 int backtrace(const void **return_addrs, int max_depth) 31 { 32 return backtrace_frame(__builtin_frame_address(0), 33 return_addrs, max_depth); 34 } 35