* [PATCH v2 0/7] LLVMLinux: Patches to enable the kernel to be compiled with clang/LLVM
@ 2014-09-06 0:06 ` behanw at converseincode.com
0 siblings, 0 replies; 16+ messages in thread
From: behanw @ 2014-09-06 0:06 UTC (permalink / raw)
To: a.ryabinin, anurag19aggarwal, charlebm, cl, dave.long,
k.khlebnikov, linux, linyongting, Nikolay.Borisov, tglx, tj,
u.kleine-koenig
Cc: behanw, Dave.Martin, linux-arm-kernel, linux-kernel, rabin,
rostedt, rric, will.deacon
From: Behan Webster <behanw@converseincode.com>
The LLVMLinux project aims to fully build the Linux kernel using both gcc and
clang (the C front end for the LLVM compiler infrastructure project).
Clang only supports global named registers for non-allocatable registers like
the stack pointer. By centralizing the definition of current_stack_pointer, the
use of named registers for ARM remains largely unchanged while working for both
gcc and clang.
Behan Webster (6):
arm: LLVMLinux: Add global named register current_stack_pointer for
ARM
arm: LLVMLinux: Use current_stack_pointer to calculate pt_regs address
arm: LLVMLinux: Use current_stack_pointer for return_address
arm: LLVMLinux: Use current_stack_pointer in save_stack_trace_tsk
arm: LLVMLinux: Calculate current_thread_info from
current_stack_pointer
arm: LLVMLinux: Use current_stack_pointer in unwind_backtrace
Mark Charlebois (1):
arm: LLVMLinux: Use global stack register variable for percpu
arch/arm/include/asm/percpu.h | 4 ++--
arch/arm/include/asm/ptrace.h | 5 ++---
arch/arm/include/asm/thread_info.h | 9 +++++++--
arch/arm/kernel/return_address.c | 3 +--
arch/arm/kernel/stacktrace.c | 4 +---
arch/arm/kernel/unwind.c | 3 +--
6 files changed, 14 insertions(+), 14 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 0/7] LLVMLinux: Patches to enable the kernel to be compiled with clang/LLVM
@ 2014-09-06 0:06 ` behanw at converseincode.com
0 siblings, 0 replies; 16+ messages in thread
From: behanw at converseincode.com @ 2014-09-06 0:06 UTC (permalink / raw)
To: linux-arm-kernel
From: Behan Webster <behanw@converseincode.com>
The LLVMLinux project aims to fully build the Linux kernel using both gcc and
clang (the C front end for the LLVM compiler infrastructure project).
Clang only supports global named registers for non-allocatable registers like
the stack pointer. By centralizing the definition of current_stack_pointer, the
use of named registers for ARM remains largely unchanged while working for both
gcc and clang.
Behan Webster (6):
arm: LLVMLinux: Add global named register current_stack_pointer for
ARM
arm: LLVMLinux: Use current_stack_pointer to calculate pt_regs address
arm: LLVMLinux: Use current_stack_pointer for return_address
arm: LLVMLinux: Use current_stack_pointer in save_stack_trace_tsk
arm: LLVMLinux: Calculate current_thread_info from
current_stack_pointer
arm: LLVMLinux: Use current_stack_pointer in unwind_backtrace
Mark Charlebois (1):
arm: LLVMLinux: Use global stack register variable for percpu
arch/arm/include/asm/percpu.h | 4 ++--
arch/arm/include/asm/ptrace.h | 5 ++---
arch/arm/include/asm/thread_info.h | 9 +++++++--
arch/arm/kernel/return_address.c | 3 +--
arch/arm/kernel/stacktrace.c | 4 +---
arch/arm/kernel/unwind.c | 3 +--
6 files changed, 14 insertions(+), 14 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 1/7] arm: LLVMLinux: Add global named register current_stack_pointer for ARM
2014-09-06 0:06 ` behanw at converseincode.com
@ 2014-09-06 0:06 ` behanw at converseincode.com
-1 siblings, 0 replies; 16+ messages in thread
From: behanw @ 2014-09-06 0:06 UTC (permalink / raw)
To: a.ryabinin, anurag19aggarwal, charlebm, cl, dave.long,
k.khlebnikov, linux, linyongting, Nikolay.Borisov, tglx, tj,
u.kleine-koenig
Cc: behanw, Dave.Martin, linux-arm-kernel, linux-kernel, rabin,
rostedt, rric, will.deacon
From: Behan Webster <behanw@converseincode.com>
Define a global named register for current_stack_pointer. The use of this new
variable guarantees that both gcc and clang can access this register in C code.
Signed-off-by: Behan Webster <behanw@converseincode.com>
Reviewed-by: Jan-Simon Möller <dl9pf@gmx.de>
Reviewed-by: Mark Charlebois <charlebm@gmail.com>
---
arch/arm/include/asm/thread_info.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
index fc44d37..bb43515 100644
--- a/arch/arm/include/asm/thread_info.h
+++ b/arch/arm/include/asm/thread_info.h
@@ -101,6 +101,11 @@ struct thread_info {
#define init_stack (init_thread_union.stack)
/*
+ * how to get the current stack pointer in C
+ */
+register unsigned long current_stack_pointer asm ("sp");
+
+/*
* how to get the thread information struct from C
*/
static inline struct thread_info *current_thread_info(void) __attribute_const__;
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 1/7] arm: LLVMLinux: Add global named register current_stack_pointer for ARM
@ 2014-09-06 0:06 ` behanw at converseincode.com
0 siblings, 0 replies; 16+ messages in thread
From: behanw at converseincode.com @ 2014-09-06 0:06 UTC (permalink / raw)
To: linux-arm-kernel
From: Behan Webster <behanw@converseincode.com>
Define a global named register for current_stack_pointer. The use of this new
variable guarantees that both gcc and clang can access this register in C code.
Signed-off-by: Behan Webster <behanw@converseincode.com>
Reviewed-by: Jan-Simon M?ller <dl9pf@gmx.de>
Reviewed-by: Mark Charlebois <charlebm@gmail.com>
---
arch/arm/include/asm/thread_info.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
index fc44d37..bb43515 100644
--- a/arch/arm/include/asm/thread_info.h
+++ b/arch/arm/include/asm/thread_info.h
@@ -101,6 +101,11 @@ struct thread_info {
#define init_stack (init_thread_union.stack)
/*
+ * how to get the current stack pointer in C
+ */
+register unsigned long current_stack_pointer asm ("sp");
+
+/*
* how to get the thread information struct from C
*/
static inline struct thread_info *current_thread_info(void) __attribute_const__;
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 2/7] arm: LLVMLinux: Use current_stack_pointer to calculate pt_regs address
2014-09-06 0:06 ` behanw at converseincode.com
@ 2014-09-06 0:06 ` behanw at converseincode.com
-1 siblings, 0 replies; 16+ messages in thread
From: behanw @ 2014-09-06 0:06 UTC (permalink / raw)
To: a.ryabinin, anurag19aggarwal, charlebm, cl, dave.long,
k.khlebnikov, linux, linyongting, Nikolay.Borisov, tglx, tj,
u.kleine-koenig
Cc: behanw, Dave.Martin, linux-arm-kernel, linux-kernel, rabin,
rostedt, rric, will.deacon
From: Behan Webster <behanw@converseincode.com>
Use the global current_stack_pointer to calculate the end of the stack for
current_pt_regs()
Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Jan-Simon Möller <dl9pf@gmx.de>
---
arch/arm/include/asm/ptrace.h | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/arch/arm/include/asm/ptrace.h b/arch/arm/include/asm/ptrace.h
index 601264d..51622ba 100644
--- a/arch/arm/include/asm/ptrace.h
+++ b/arch/arm/include/asm/ptrace.h
@@ -154,9 +154,8 @@ static inline unsigned long user_stack_pointer(struct pt_regs *regs)
return regs->ARM_sp;
}
-#define current_pt_regs(void) ({ \
- register unsigned long sp asm ("sp"); \
- (struct pt_regs *)((sp | (THREAD_SIZE - 1)) - 7) - 1; \
+#define current_pt_regs(void) ({ (struct pt_regs *) \
+ ((current_stack_pointer | (THREAD_SIZE - 1)) - 7) - 1; \
})
#endif /* __ASSEMBLY__ */
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 2/7] arm: LLVMLinux: Use current_stack_pointer to calculate pt_regs address
@ 2014-09-06 0:06 ` behanw at converseincode.com
0 siblings, 0 replies; 16+ messages in thread
From: behanw at converseincode.com @ 2014-09-06 0:06 UTC (permalink / raw)
To: linux-arm-kernel
From: Behan Webster <behanw@converseincode.com>
Use the global current_stack_pointer to calculate the end of the stack for
current_pt_regs()
Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Jan-Simon M?ller <dl9pf@gmx.de>
---
arch/arm/include/asm/ptrace.h | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/arch/arm/include/asm/ptrace.h b/arch/arm/include/asm/ptrace.h
index 601264d..51622ba 100644
--- a/arch/arm/include/asm/ptrace.h
+++ b/arch/arm/include/asm/ptrace.h
@@ -154,9 +154,8 @@ static inline unsigned long user_stack_pointer(struct pt_regs *regs)
return regs->ARM_sp;
}
-#define current_pt_regs(void) ({ \
- register unsigned long sp asm ("sp"); \
- (struct pt_regs *)((sp | (THREAD_SIZE - 1)) - 7) - 1; \
+#define current_pt_regs(void) ({ (struct pt_regs *) \
+ ((current_stack_pointer | (THREAD_SIZE - 1)) - 7) - 1; \
})
#endif /* __ASSEMBLY__ */
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 3/7] arm: LLVMLinux: Use current_stack_pointer for return_address
2014-09-06 0:06 ` behanw at converseincode.com
@ 2014-09-06 0:06 ` behanw at converseincode.com
-1 siblings, 0 replies; 16+ messages in thread
From: behanw @ 2014-09-06 0:06 UTC (permalink / raw)
To: a.ryabinin, anurag19aggarwal, charlebm, cl, dave.long,
k.khlebnikov, linux, linyongting, Nikolay.Borisov, tglx, tj,
u.kleine-koenig
Cc: behanw, Dave.Martin, linux-arm-kernel, linux-kernel, rabin,
rostedt, rric, will.deacon
From: Behan Webster <behanw@converseincode.com>
Use the global current_stack_pointer to get the value of the stack pointer.
This change supports being able to compile the kernel with both gcc and Clang.
Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Jan-Simon Möller <dl9pf@gmx.de>
---
arch/arm/kernel/return_address.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm/kernel/return_address.c b/arch/arm/kernel/return_address.c
index fafedd8..5bceaef 100644
--- a/arch/arm/kernel/return_address.c
+++ b/arch/arm/kernel/return_address.c
@@ -39,13 +39,12 @@ void *return_address(unsigned int level)
{
struct return_address_data data;
struct stackframe frame;
- register unsigned long current_sp asm ("sp");
data.level = level + 2;
data.addr = NULL;
frame.fp = (unsigned long)__builtin_frame_address(0);
- frame.sp = current_sp;
+ frame.sp = current_stack_pointer;
frame.lr = (unsigned long)__builtin_return_address(0);
frame.pc = (unsigned long)return_address;
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 3/7] arm: LLVMLinux: Use current_stack_pointer for return_address
@ 2014-09-06 0:06 ` behanw at converseincode.com
0 siblings, 0 replies; 16+ messages in thread
From: behanw at converseincode.com @ 2014-09-06 0:06 UTC (permalink / raw)
To: linux-arm-kernel
From: Behan Webster <behanw@converseincode.com>
Use the global current_stack_pointer to get the value of the stack pointer.
This change supports being able to compile the kernel with both gcc and Clang.
Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Jan-Simon M?ller <dl9pf@gmx.de>
---
arch/arm/kernel/return_address.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm/kernel/return_address.c b/arch/arm/kernel/return_address.c
index fafedd8..5bceaef 100644
--- a/arch/arm/kernel/return_address.c
+++ b/arch/arm/kernel/return_address.c
@@ -39,13 +39,12 @@ void *return_address(unsigned int level)
{
struct return_address_data data;
struct stackframe frame;
- register unsigned long current_sp asm ("sp");
data.level = level + 2;
data.addr = NULL;
frame.fp = (unsigned long)__builtin_frame_address(0);
- frame.sp = current_sp;
+ frame.sp = current_stack_pointer;
frame.lr = (unsigned long)__builtin_return_address(0);
frame.pc = (unsigned long)return_address;
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 4/7] arm: LLVMLinux: Use current_stack_pointer in save_stack_trace_tsk
2014-09-06 0:06 ` behanw at converseincode.com
@ 2014-09-06 0:06 ` behanw at converseincode.com
-1 siblings, 0 replies; 16+ messages in thread
From: behanw @ 2014-09-06 0:06 UTC (permalink / raw)
To: a.ryabinin, anurag19aggarwal, charlebm, cl, dave.long,
k.khlebnikov, linux, linyongting, Nikolay.Borisov, tglx, tj,
u.kleine-koenig
Cc: behanw, Dave.Martin, linux-arm-kernel, linux-kernel, rabin,
rostedt, rric, will.deacon
From: Behan Webster <behanw@converseincode.com>
Use the global current_stack_pointer to get the value of the stack pointer.
This change supports being able to compile the kernel with both gcc and clang.
Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Jan-Simon Möller <dl9pf@gmx.de>
---
arch/arm/kernel/stacktrace.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c
index f065eb0..92b7237 100644
--- a/arch/arm/kernel/stacktrace.c
+++ b/arch/arm/kernel/stacktrace.c
@@ -134,12 +134,10 @@ static noinline void __save_stack_trace(struct task_struct *tsk,
frame.pc = thread_saved_pc(tsk);
#endif
} else {
- register unsigned long current_sp asm ("sp");
-
/* We don't want this function nor the caller */
data.skip += 2;
frame.fp = (unsigned long)__builtin_frame_address(0);
- frame.sp = current_sp;
+ frame.sp = current_stack_pointer;
frame.lr = (unsigned long)__builtin_return_address(0);
frame.pc = (unsigned long)__save_stack_trace;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 4/7] arm: LLVMLinux: Use current_stack_pointer in save_stack_trace_tsk
@ 2014-09-06 0:06 ` behanw at converseincode.com
0 siblings, 0 replies; 16+ messages in thread
From: behanw at converseincode.com @ 2014-09-06 0:06 UTC (permalink / raw)
To: linux-arm-kernel
From: Behan Webster <behanw@converseincode.com>
Use the global current_stack_pointer to get the value of the stack pointer.
This change supports being able to compile the kernel with both gcc and clang.
Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Jan-Simon M?ller <dl9pf@gmx.de>
---
arch/arm/kernel/stacktrace.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c
index f065eb0..92b7237 100644
--- a/arch/arm/kernel/stacktrace.c
+++ b/arch/arm/kernel/stacktrace.c
@@ -134,12 +134,10 @@ static noinline void __save_stack_trace(struct task_struct *tsk,
frame.pc = thread_saved_pc(tsk);
#endif
} else {
- register unsigned long current_sp asm ("sp");
-
/* We don't want this function nor the caller */
data.skip += 2;
frame.fp = (unsigned long)__builtin_frame_address(0);
- frame.sp = current_sp;
+ frame.sp = current_stack_pointer;
frame.lr = (unsigned long)__builtin_return_address(0);
frame.pc = (unsigned long)__save_stack_trace;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 5/7] arm: LLVMLinux: Calculate current_thread_info from current_stack_pointer
2014-09-06 0:06 ` behanw at converseincode.com
@ 2014-09-06 0:06 ` behanw at converseincode.com
-1 siblings, 0 replies; 16+ messages in thread
From: behanw @ 2014-09-06 0:06 UTC (permalink / raw)
To: a.ryabinin, anurag19aggarwal, charlebm, cl, dave.long,
k.khlebnikov, linux, linyongting, Nikolay.Borisov, tglx, tj,
u.kleine-koenig
Cc: behanw, Dave.Martin, linux-arm-kernel, linux-kernel, rabin,
rostedt, rric, will.deacon
From: Behan Webster <behanw@converseincode.com>
Use the global current_stack_pointer to get the value of the stack pointer.
This change supports being able to compile the kernel with both gcc and clang.
Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Jan-Simon Möller <dl9pf@gmx.de>
---
arch/arm/include/asm/thread_info.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
index bb43515..b9dc3dc 100644
--- a/arch/arm/include/asm/thread_info.h
+++ b/arch/arm/include/asm/thread_info.h
@@ -112,8 +112,8 @@ static inline struct thread_info *current_thread_info(void) __attribute_const__;
static inline struct thread_info *current_thread_info(void)
{
- register unsigned long sp asm ("sp");
- return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
+ return (struct thread_info *)
+ (current_stack_pointer & ~(THREAD_SIZE - 1));
}
#define thread_saved_pc(tsk) \
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 5/7] arm: LLVMLinux: Calculate current_thread_info from current_stack_pointer
@ 2014-09-06 0:06 ` behanw at converseincode.com
0 siblings, 0 replies; 16+ messages in thread
From: behanw at converseincode.com @ 2014-09-06 0:06 UTC (permalink / raw)
To: linux-arm-kernel
From: Behan Webster <behanw@converseincode.com>
Use the global current_stack_pointer to get the value of the stack pointer.
This change supports being able to compile the kernel with both gcc and clang.
Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Jan-Simon M?ller <dl9pf@gmx.de>
---
arch/arm/include/asm/thread_info.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
index bb43515..b9dc3dc 100644
--- a/arch/arm/include/asm/thread_info.h
+++ b/arch/arm/include/asm/thread_info.h
@@ -112,8 +112,8 @@ static inline struct thread_info *current_thread_info(void) __attribute_const__;
static inline struct thread_info *current_thread_info(void)
{
- register unsigned long sp asm ("sp");
- return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
+ return (struct thread_info *)
+ (current_stack_pointer & ~(THREAD_SIZE - 1));
}
#define thread_saved_pc(tsk) \
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 6/7] arm: LLVMLinux: Use current_stack_pointer in unwind_backtrace
2014-09-06 0:06 ` behanw at converseincode.com
@ 2014-09-06 0:06 ` behanw at converseincode.com
-1 siblings, 0 replies; 16+ messages in thread
From: behanw @ 2014-09-06 0:06 UTC (permalink / raw)
To: a.ryabinin, anurag19aggarwal, charlebm, cl, dave.long,
k.khlebnikov, linux, linyongting, Nikolay.Borisov, tglx, tj,
u.kleine-koenig
Cc: behanw, Dave.Martin, linux-arm-kernel, linux-kernel, rabin,
rostedt, rric, will.deacon
From: Behan Webster <behanw@converseincode.com>
Use the global current_stack_pointer to get the value of the stack pointer.
This change supports being able to compile the kernel with both gcc and clang.
Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Jan-Simon Möller <dl9pf@gmx.de>
---
arch/arm/kernel/unwind.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm/kernel/unwind.c b/arch/arm/kernel/unwind.c
index a61a1df..caea23b 100644
--- a/arch/arm/kernel/unwind.c
+++ b/arch/arm/kernel/unwind.c
@@ -471,7 +471,6 @@ int unwind_frame(struct stackframe *frame)
void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk)
{
struct stackframe frame;
- register unsigned long current_sp asm ("sp");
pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk);
@@ -485,7 +484,7 @@ void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk)
frame.pc = regs->ARM_lr;
} else if (tsk == current) {
frame.fp = (unsigned long)__builtin_frame_address(0);
- frame.sp = current_sp;
+ frame.sp = current_stack_pointer;
frame.lr = (unsigned long)__builtin_return_address(0);
frame.pc = (unsigned long)unwind_backtrace;
} else {
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 6/7] arm: LLVMLinux: Use current_stack_pointer in unwind_backtrace
@ 2014-09-06 0:06 ` behanw at converseincode.com
0 siblings, 0 replies; 16+ messages in thread
From: behanw at converseincode.com @ 2014-09-06 0:06 UTC (permalink / raw)
To: linux-arm-kernel
From: Behan Webster <behanw@converseincode.com>
Use the global current_stack_pointer to get the value of the stack pointer.
This change supports being able to compile the kernel with both gcc and clang.
Signed-off-by: Behan Webster <behanw@converseincode.com>
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Jan-Simon M?ller <dl9pf@gmx.de>
---
arch/arm/kernel/unwind.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm/kernel/unwind.c b/arch/arm/kernel/unwind.c
index a61a1df..caea23b 100644
--- a/arch/arm/kernel/unwind.c
+++ b/arch/arm/kernel/unwind.c
@@ -471,7 +471,6 @@ int unwind_frame(struct stackframe *frame)
void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk)
{
struct stackframe frame;
- register unsigned long current_sp asm ("sp");
pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk);
@@ -485,7 +484,7 @@ void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk)
frame.pc = regs->ARM_lr;
} else if (tsk == current) {
frame.fp = (unsigned long)__builtin_frame_address(0);
- frame.sp = current_sp;
+ frame.sp = current_stack_pointer;
frame.lr = (unsigned long)__builtin_return_address(0);
frame.pc = (unsigned long)unwind_backtrace;
} else {
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 7/7] arm: LLVMLinux: Use global stack register variable for percpu
2014-09-06 0:06 ` behanw at converseincode.com
@ 2014-09-06 0:06 ` behanw at converseincode.com
-1 siblings, 0 replies; 16+ messages in thread
From: behanw @ 2014-09-06 0:06 UTC (permalink / raw)
To: a.ryabinin, anurag19aggarwal, charlebm, cl, dave.long,
k.khlebnikov, linux, linyongting, Nikolay.Borisov, tglx, tj,
u.kleine-koenig
Cc: behanw, Dave.Martin, linux-arm-kernel, linux-kernel, rabin,
rostedt, rric, will.deacon
From: Mark Charlebois <charlebm@gmail.com>
Using global current_stack_pointer works on both clang and gcc.
current_stack_pointer is an unsigned long and needs to be cast
as a pointer to dereference.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
---
arch/arm/include/asm/percpu.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/include/asm/percpu.h b/arch/arm/include/asm/percpu.h
index 209e650..a89b407 100644
--- a/arch/arm/include/asm/percpu.h
+++ b/arch/arm/include/asm/percpu.h
@@ -30,14 +30,14 @@ static inline void set_my_cpu_offset(unsigned long off)
static inline unsigned long __my_cpu_offset(void)
{
unsigned long off;
- register unsigned long *sp asm ("sp");
/*
* Read TPIDRPRW.
* We want to allow caching the value, so avoid using volatile and
* instead use a fake stack read to hazard against barrier().
*/
- asm("mrc p15, 0, %0, c13, c0, 4" : "=r" (off) : "Q" (*sp));
+ asm("mrc p15, 0, %0, c13, c0, 4" : "=r" (off)
+ : "Q" (*(const unsigned long *)current_stack_pointer));
return off;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 7/7] arm: LLVMLinux: Use global stack register variable for percpu
@ 2014-09-06 0:06 ` behanw at converseincode.com
0 siblings, 0 replies; 16+ messages in thread
From: behanw at converseincode.com @ 2014-09-06 0:06 UTC (permalink / raw)
To: linux-arm-kernel
From: Mark Charlebois <charlebm@gmail.com>
Using global current_stack_pointer works on both clang and gcc.
current_stack_pointer is an unsigned long and needs to be cast
as a pointer to dereference.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
---
arch/arm/include/asm/percpu.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/include/asm/percpu.h b/arch/arm/include/asm/percpu.h
index 209e650..a89b407 100644
--- a/arch/arm/include/asm/percpu.h
+++ b/arch/arm/include/asm/percpu.h
@@ -30,14 +30,14 @@ static inline void set_my_cpu_offset(unsigned long off)
static inline unsigned long __my_cpu_offset(void)
{
unsigned long off;
- register unsigned long *sp asm ("sp");
/*
* Read TPIDRPRW.
* We want to allow caching the value, so avoid using volatile and
* instead use a fake stack read to hazard against barrier().
*/
- asm("mrc p15, 0, %0, c13, c0, 4" : "=r" (off) : "Q" (*sp));
+ asm("mrc p15, 0, %0, c13, c0, 4" : "=r" (off)
+ : "Q" (*(const unsigned long *)current_stack_pointer));
return off;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
end of thread, other threads:[~2014-09-06 0:10 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-06 0:06 [PATCH v2 0/7] LLVMLinux: Patches to enable the kernel to be compiled with clang/LLVM behanw
2014-09-06 0:06 ` behanw at converseincode.com
2014-09-06 0:06 ` [PATCH v2 1/7] arm: LLVMLinux: Add global named register current_stack_pointer for ARM behanw
2014-09-06 0:06 ` behanw at converseincode.com
2014-09-06 0:06 ` [PATCH v2 2/7] arm: LLVMLinux: Use current_stack_pointer to calculate pt_regs address behanw
2014-09-06 0:06 ` behanw at converseincode.com
2014-09-06 0:06 ` [PATCH v2 3/7] arm: LLVMLinux: Use current_stack_pointer for return_address behanw
2014-09-06 0:06 ` behanw at converseincode.com
2014-09-06 0:06 ` [PATCH v2 4/7] arm: LLVMLinux: Use current_stack_pointer in save_stack_trace_tsk behanw
2014-09-06 0:06 ` behanw at converseincode.com
2014-09-06 0:06 ` [PATCH v2 5/7] arm: LLVMLinux: Calculate current_thread_info from current_stack_pointer behanw
2014-09-06 0:06 ` behanw at converseincode.com
2014-09-06 0:06 ` [PATCH v2 6/7] arm: LLVMLinux: Use current_stack_pointer in unwind_backtrace behanw
2014-09-06 0:06 ` behanw at converseincode.com
2014-09-06 0:06 ` [PATCH v2 7/7] arm: LLVMLinux: Use global stack register variable for percpu behanw
2014-09-06 0:06 ` behanw at converseincode.com
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.