Make _Unwind_GetIP, _Unwind_GetIPInfo and _Unwind_SetIP available as functions
for arm*-*-freebsd*. This patch is already pushed upstream to all active gcc branches. GCC-5, GCC-6, GCC-7 and trunk. The gcc?-devel ports will catch up these bits with the next update. Once a new release for gcc6 or gcc5 is done, this patch will be obsolete. Approved by: gerald@ (maintainer)
This commit is contained in:
parent
38874c7e16
commit
b172a04396
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=441426
51
lang/gcc5/files/patch-libgcc-config-arm-unwind-arm
Normal file
51
lang/gcc5/files/patch-libgcc-config-arm-unwind-arm
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
--- UTC
|
||||||
|
--- libgcc/config/arm/unwind-arm.h.orig 2017-05-20 23:16:46.089160000 +0200
|
||||||
|
+++ libgcc/config/arm/unwind-arm.h 2017-05-20 23:17:17.447204000 +0200
|
||||||
|
@@ -72,12 +72,19 @@
|
||||||
|
{
|
||||||
|
return _URC_FAILURE;
|
||||||
|
}
|
||||||
|
+#ifndef __FreeBSD__
|
||||||
|
/* Return the address of the instruction, not the actual IP value. */
|
||||||
|
#define _Unwind_GetIP(context) \
|
||||||
|
(_Unwind_GetGR (context, 15) & ~(_Unwind_Word)1)
|
||||||
|
|
||||||
|
#define _Unwind_SetIP(context, val) \
|
||||||
|
_Unwind_SetGR (context, 15, val | (_Unwind_GetGR (context, 15) & 1))
|
||||||
|
+#else
|
||||||
|
+ #undef _Unwind_GetIPInfo
|
||||||
|
+ _Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *);
|
||||||
|
+ _Unwind_Ptr _Unwind_GetIPInfo (struct _Unwind_Context *, int *);
|
||||||
|
+ void _Unwind_SetIP (struct _Unwind_Context *, _Unwind_Ptr);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
--- libgcc/config/arm/unwind-arm.c.orig 2017-05-20 23:16:46.089435000 +0200
|
||||||
|
+++ libgcc/config/arm/unwind-arm.c 2017-05-20 23:17:17.447479000 +0200
|
||||||
|
@@ -509,3 +509,25 @@
|
||||||
|
{
|
||||||
|
return __gnu_unwind_pr_common (state, ucbp, context, 2);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+#ifdef __FreeBSD__
|
||||||
|
+/* FreeBSD expects these to be functions */
|
||||||
|
+inline _Unwind_Ptr
|
||||||
|
+_Unwind_GetIP (struct _Unwind_Context *context)
|
||||||
|
+{
|
||||||
|
+ return _Unwind_GetGR (context, 15) & ~(_Unwind_Word)1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+inline _Unwind_Ptr
|
||||||
|
+_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn)
|
||||||
|
+{
|
||||||
|
+ *ip_before_insn = 0;
|
||||||
|
+ return _Unwind_GetIP (context);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+inline void
|
||||||
|
+_Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val)
|
||||||
|
+{
|
||||||
|
+ _Unwind_SetGR (context, 15, val | (_Unwind_GetGR (context, 15) & 1));
|
||||||
|
+}
|
||||||
|
+#endif
|
51
lang/gcc6/files/patch-libgcc-config-arm-unwind-arm
Normal file
51
lang/gcc6/files/patch-libgcc-config-arm-unwind-arm
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
--- UTC
|
||||||
|
--- libgcc/config/arm/unwind-arm.h.orig 2017-05-20 23:16:46.089160000 +0200
|
||||||
|
+++ libgcc/config/arm/unwind-arm.h 2017-05-20 23:17:17.447204000 +0200
|
||||||
|
@@ -72,12 +72,19 @@
|
||||||
|
{
|
||||||
|
return _URC_FAILURE;
|
||||||
|
}
|
||||||
|
+#ifndef __FreeBSD__
|
||||||
|
/* Return the address of the instruction, not the actual IP value. */
|
||||||
|
#define _Unwind_GetIP(context) \
|
||||||
|
(_Unwind_GetGR (context, 15) & ~(_Unwind_Word)1)
|
||||||
|
|
||||||
|
#define _Unwind_SetIP(context, val) \
|
||||||
|
_Unwind_SetGR (context, 15, val | (_Unwind_GetGR (context, 15) & 1))
|
||||||
|
+#else
|
||||||
|
+ #undef _Unwind_GetIPInfo
|
||||||
|
+ _Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *);
|
||||||
|
+ _Unwind_Ptr _Unwind_GetIPInfo (struct _Unwind_Context *, int *);
|
||||||
|
+ void _Unwind_SetIP (struct _Unwind_Context *, _Unwind_Ptr);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
--- libgcc/config/arm/unwind-arm.c.orig 2017-05-20 23:16:46.089435000 +0200
|
||||||
|
+++ libgcc/config/arm/unwind-arm.c 2017-05-20 23:17:17.447479000 +0200
|
||||||
|
@@ -509,3 +509,25 @@
|
||||||
|
{
|
||||||
|
return __gnu_unwind_pr_common (state, ucbp, context, 2);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+#ifdef __FreeBSD__
|
||||||
|
+/* FreeBSD expects these to be functions */
|
||||||
|
+inline _Unwind_Ptr
|
||||||
|
+_Unwind_GetIP (struct _Unwind_Context *context)
|
||||||
|
+{
|
||||||
|
+ return _Unwind_GetGR (context, 15) & ~(_Unwind_Word)1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+inline _Unwind_Ptr
|
||||||
|
+_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn)
|
||||||
|
+{
|
||||||
|
+ *ip_before_insn = 0;
|
||||||
|
+ return _Unwind_GetIP (context);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+inline void
|
||||||
|
+_Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val)
|
||||||
|
+{
|
||||||
|
+ _Unwind_SetGR (context, 15, val | (_Unwind_GetGR (context, 15) & 1));
|
||||||
|
+}
|
||||||
|
+#endif
|
Loading…
Reference in New Issue
Block a user