diff mbox

ARC: Change ld.as instruction to regular ld.

Message ID 1471415037-14544-1-git-send-email-liavr@mellanox.com
State New
Headers show

Commit Message

Liav Rehana Aug. 17, 2016, 6:23 a.m. UTC
From: Liav Rehana <liavr@mellanox.com>

User mode callee regs are explicitly collected before signal delivery
or breakpoint trap. r25 is special for kernel as it serves as task
pointer, so user mode value is clobbered very early. It is saved in
pt_regs where generally only scratch (caller saved) res are saved.
The code to access the corresponding pt_regs location had a subtle bug
as it was using load/store with scaling of offset, whereas the offset
was already byte wise correct. So fix this by replacing LD.AS with a
standard LD

Signed-off-by: Liav Rehana <liavr@mellanox.com>
---
 arch/arc/include/asm/entry.h |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

Comments

Vineet Gupta Aug. 17, 2016, 5:16 p.m. UTC | #1
On 08/16/2016 11:24 PM, Liav Rehana wrote:
> From: Liav Rehana <liavr@mellanox.com>
>
> User mode callee regs are explicitly collected before signal delivery
> or breakpoint trap. r25 is special for kernel as it serves as task
> pointer, so user mode value is clobbered very early. It is saved in
> pt_regs where generally only scratch (caller saved) res are saved.
> The code to access the corresponding pt_regs location had a subtle bug
> as it was using load/store with scaling of offset, whereas the offset
> was already byte wise correct. So fix this by replacing LD.AS with a
> standard LD
>
> Signed-off-by: Liav Rehana <liavr@mellanox.com>

Thx for the fix Liv.
I added it to my for-curr.

-Vineet
Alexey Brodkin Aug. 25, 2016, 12:05 p.m. UTC | #2
Hi Liav,

On Wed, 2016-08-17 at 09:23 +0300, Liav Rehana wrote:
> From: Liav Rehana <liavr@mellanox.com>
> 
> User mode callee regs are explicitly collected before signal delivery
> or breakpoint trap. r25 is special for kernel as it serves as task
> pointer, so user mode value is clobbered very early. It is saved in
> pt_regs where generally only scratch (caller saved) res are saved.
> The code to access the corresponding pt_regs location had a subtle bug
> as it was using load/store with scaling of offset, whereas the offset
> was already byte wise correct. So fix this by replacing LD.AS with a
> standard LD
> 
> Signed-off-by: Liav Rehana <liavr@mellanox.com>

That nice patch really fixes quite annoying issue when r25 got
printed improperly in gdb!

So

Tested-by: Alexey Brodkin <abrodkin@synopsys.com>
Vineet Gupta Aug. 25, 2016, 5:40 p.m. UTC | #3
On 08/25/2016 05:05 AM, Alexey Brodkin wrote:
> Hi Liav,
>
> On Wed, 2016-08-17 at 09:23 +0300, Liav Rehana wrote:
>> From: Liav Rehana <liavr@mellanox.com>
>>
>> User mode callee regs are explicitly collected before signal delivery
>> or breakpoint trap. r25 is special for kernel as it serves as task
>> pointer, so user mode value is clobbered very early. It is saved in
>> pt_regs where generally only scratch (caller saved) res are saved.
>> The code to access the corresponding pt_regs location had a subtle bug
>> as it was using load/store with scaling of offset, whereas the offset
>> was already byte wise correct. So fix this by replacing LD.AS with a
>> standard LD
>>
>> Signed-off-by: Liav Rehana <liavr@mellanox.com>
> That nice patch really fixes quite annoying issue when r25 got
> printed improperly in gdb!
>
> So
>
> Tested-by: Alexey Brodkin <abrodkin@synopsys.com>


Indeed this becomes even more important given that r25 is Thread pointer regs in
ARC ABI !
This patch is already merged upstream by Linus.

Thx,
-Vineet
diff mbox

Patch

diff --git a/arch/arc/include/asm/entry.h b/arch/arc/include/asm/entry.h
index 337ab6d..9d8f85d 100644
--- a/arch/arc/include/asm/entry.h
+++ b/arch/arc/include/asm/entry.h
@@ -138,7 +138,7 @@ 
 
 #ifdef CONFIG_ARC_CURR_IN_REG
 	; Retrieve orig r25 and save it with rest of callee_regs
-	ld.as   r12, [r12, PT_user_r25]
+	ld	r12, [r12, PT_user_r25]
 	PUSH	r12
 #else
 	PUSH	r25
@@ -194,7 +194,7 @@ 
 
 	; SP is back to start of pt_regs
 #ifdef CONFIG_ARC_CURR_IN_REG
-	st.as   r12, [sp, PT_user_r25]
+	st	r12, [sp, PT_user_r25]
 #endif
 .endm