aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn David Anglin <danglin@gcc.gnu.org>2023-04-05 14:44:54 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2023-04-05 14:44:54 +0000
commitddb0f66e6c1e846bdc217075c9a770bfd0b01970 (patch)
treeceb799eff1ddcc8225f9ca97d832f03d88461cbc
parentf0f372fab3e70622a4ea6fe4073991e1bb506e4e (diff)
downloadgcc-ddb0f66e6c1e846bdc217075c9a770bfd0b01970.zip
gcc-ddb0f66e6c1e846bdc217075c9a770bfd0b01970.tar.gz
gcc-ddb0f66e6c1e846bdc217075c9a770bfd0b01970.tar.bz2
Add assember CFI directives to millicode division and remainder routines.
The millicode division and remainder routines trap division by zero. The unwinder needs these directives to unwind divide by zero traps. 2023-04-05 John David Anglin <danglin@gcc.gnu.org> libgcc/ChangeLog: PR target/109374 * config/pa/milli64.S (RETURN_COLUMN): Define. ($$divI): Add CFI directives. ($$divU): Likewise. ($$remI): Likewise. ($$remU): Likewise.
-rw-r--r--libgcc/config/pa/milli64.S14
1 files changed, 14 insertions, 0 deletions
diff --git a/libgcc/config/pa/milli64.S b/libgcc/config/pa/milli64.S
index 2316f79..e1c84f4 100644
--- a/libgcc/config/pa/milli64.S
+++ b/libgcc/config/pa/milli64.S
@@ -105,8 +105,10 @@ sar: .reg %cr11 /* Shift Amount Register */
rp: .reg r2 /* return pointer */
#ifdef pa64
mrp: .reg r2 /* millicode return pointer */
+#define RETURN_COLUMN 2
#else
mrp: .reg r31 /* millicode return pointer */
+#define RETURN_COLUMN 31
#endif
ret0: .reg r28 /* return value */
ret1: .reg r29 /* return value (high part of double) */
@@ -313,6 +315,8 @@ RDEFINE(temp1,arg0)
.import $$divI_15,millicode
.export $$divI,millicode
.export $$divoI,millicode
+ .cfi_startproc
+ .cfi_return_column RETURN_COLUMN
.proc
.callinfo millicode
.entry
@@ -484,6 +488,7 @@ LSYM(negative1)
addo arg0,arg1,r0 /* trap iff dividend==0x80000000 && divisor==-1 */
.exit
.procend
+ .cfi_endproc
.end
#endif
@@ -543,6 +548,8 @@ RDEFINE(temp1,arg0)
.import $$divU_12,millicode
.import $$divU_14,millicode
.import $$divU_15,millicode
+ .cfi_startproc
+ .cfi_return_column RETURN_COLUMN
.proc
.callinfo millicode
.entry
@@ -706,6 +713,7 @@ LSYM(big_divisor)
addc r0,r0,retreg
.exit
.procend
+ .cfi_endproc
.end
#endif
@@ -750,6 +758,8 @@ RDEFINE(retreg,ret1)
SUBSPA_MILLI
ATTR_MILLI
+ .cfi_startproc
+ .cfi_return_column RETURN_COLUMN
.proc
.callinfo millicode
.entry
@@ -875,6 +885,7 @@ LSYM(finish)
nop
.exit
.procend
+ .cfi_endproc
#ifdef milliext
.origin 0x00000200
#endif
@@ -922,6 +933,8 @@ RDEFINE(rmndr,ret1) /* r29 */
SUBSPA_MILLI
ATTR_MILLI
.export $$remU,millicode
+ .cfi_startproc
+ .cfi_return_column RETURN_COLUMN
.proc
.callinfo millicode
.entry
@@ -1013,6 +1026,7 @@ LSYM(special_case)
nop
.exit
.procend
+ .cfi_endproc
.end
#endif