1f59b0ff59
Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
55 lines
1.6 KiB
Diff
55 lines
1.6 KiB
Diff
From a6e7d1171f47d58a3e9cef5e517c70abbefc141c Mon Sep 17 00:00:00 2001
|
|
From: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
|
|
Date: Mon, 21 Mar 2016 19:30:39 +0530
|
|
Subject: [PATCH] core/stack: Fix __builtin_frame_address issue
|
|
|
|
GCC 6 warns if we pass nonzero values to __builtin_frame_address().
|
|
Hence reorganize the code and pass zero to __builtin_frame_address().
|
|
|
|
core/stack.c: In function '__backtrace':
|
|
core/stack.c:34:17: error: calling '__builtin_frame_address' with a
|
|
nonzero argument is unsafe [-Werror=frame-address]
|
|
unsigned long *fp = __builtin_frame_address(1);
|
|
|
|
Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
|
|
---
|
|
core/stack.c | 7 +++++--
|
|
1 file changed, 5 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/core/stack.c b/core/stack.c
|
|
index 5fba6c7..5024135 100644
|
|
--- a/core/stack.c
|
|
+++ b/core/stack.c
|
|
@@ -31,15 +31,19 @@ extern uint32_t _stext, _etext;
|
|
void __nomcount __backtrace(struct bt_entry *entries, unsigned int *count)
|
|
{
|
|
unsigned int room = *count;
|
|
- unsigned long *fp = __builtin_frame_address(1);
|
|
+ unsigned long *fp = __builtin_frame_address(0);
|
|
unsigned long top_adj = top_of_ram;
|
|
|
|
/* Assume one stack for early backtraces */
|
|
if (top_of_ram == SKIBOOT_BASE + SKIBOOT_SIZE)
|
|
top_adj = top_of_ram + STACK_SIZE;
|
|
|
|
+ if (!fp || (unsigned long)fp > top_adj)
|
|
+ return;
|
|
+
|
|
*count = 0;
|
|
while(room) {
|
|
+ fp = (unsigned long *)fp[0];
|
|
if (!fp || (unsigned long)fp > top_adj)
|
|
break;
|
|
entries->sp = (unsigned long)fp;
|
|
@@ -47,7 +51,6 @@ void __nomcount __backtrace(struct bt_entry *entries, unsigned int *count)
|
|
entries++;
|
|
*count = (*count) + 1;
|
|
room--;
|
|
- fp = (unsigned long *)fp[0];
|
|
}
|
|
}
|
|
|
|
--
|
|
2.5.0
|
|
|