opal-prd/skiboot-1.1.13-gcc6-builtin-frame-addr-fix.patch
Vasant Hegde 1f59b0ff59 Update to latest upstream 5.2.0
Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
2016-03-21 20:03:49 +05:30

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