Bug 109402 - v850: non-v850e version of __muldi3() in /libgcc/config/v850/lib1funcs.S operates sp in reversed direction
Summary: v850: non-v850e version of __muldi3() in /libgcc/config/v850/lib1funcs.S oper...
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 11.2.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-04-04 11:44 UTC by Tetsuma Hoshino
Modified: 2023-04-08 14:29 UTC (History)
2 users (show)

See Also:
Host:
Target: v850
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tetsuma Hoshino 2023-04-04 11:44:04 UTC
I have no idea to show a reproduce way in shortly.
Because a problem happens with inter-procedure such as interrupt service routines which use storage in stack.

Where I talk about is:
in a commit 8b1204d7, /libgcc/config/v850/lib1funcs.S L2214, L2259.

There are stack-pointer operations.
I think these operations: shrink before, glowth after --- may reversed way.
There is one more consideration; this version of __muldi3() does not use
local storage in stack. So the problem will be resolved simply to remove sp-operations.

In my environment, the next patch works well.

---

From 1258506e0192fb0b9e5ce9e99fe88752ba7a5644 Tue, 4 Apr 2023 20:31:48 +0900
From: Hoshino Tetsuma <t-hoshino@pony-e.jp>
Date: Tue, 4 Apr 2023 19:25:03 +0900
Subject: [PATCH] remove improper stack-pointer operation

diff --git a/libgcc/config/v850/lib1funcs.S b/libgcc/config/v850/lib1funcs.S
index 00dd61d..99e79bf 100644
--- a/libgcc/config/v850/lib1funcs.S
+++ b/libgcc/config/v850/lib1funcs.S
@@ -2211,7 +2211,6 @@
 ___muldi3:
 #ifdef __v850__
         jarl  __save_r26_r31, r10
-        addi  16,  sp, sp
         mov   r6,  r28
         shr   15,  r28
         movea lo(32767), r0, r14
@@ -2256,7 +2255,6 @@
         mulh  r12, r6
         mov   r28,  r17
         mulh  r10, r17
-        add   -16, sp
         mov   r28,  r12
         mulh  r8,  r12
         add   r17, r18
Comment 1 Andrew Pinski 2023-04-04 18:53:39 UTC
r0-44780-g8376061dbecc aka https://inbox.sourceware.org/gcc-patches/m3wuqam1t4.fsf@north-pole.nickc.cambridge.redhat.com/

It has been broken for almost 21 years even.
Comment 2 Mikael Pettersson 2023-04-06 15:38:40 UTC
Please send patches to gcc-patches for review.
Comment 3 GCC Commits 2023-04-08 14:26:15 UTC
The master branch has been updated by Jeff Law <law@gcc.gnu.org>:

https://gcc.gnu.org/g:79fb2de020c499bd01708e1418965a11166b7d5b

commit r13-7123-g79fb2de020c499bd01708e1418965a11166b7d5b
Author: Tetsuma Hoshino <t-hoshino@pony-e.jp>
Date:   Sat Apr 8 08:19:53 2023 -0600

    PR target/109402: v850 (not v850e) variant of __muldi3() moves sp in reversed direction [PR109402]
    
    muldi3 will deallocate stack space after the call to __save_r26_r31,
    then re-allocate the space a short while later.  If an interrupt
    occurs in that window, it can clobber items on the stack.
    
            PR target/109402
    
    libgcc/
            * config/v850/lib1funcs.S (___muldi3): Remove unnecessary
            stack manipulations.
Comment 4 Jeffrey A. Law 2023-04-08 14:29:35 UTC
Fixed on the trunk.  Not planning to backport given gcc-13 is due out soon and v850 isn't a primary target.