aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/init.c
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2016-04-27 15:28:30 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2016-04-27 15:28:30 +0200
commit437244c7737eeb63973e1e285d5dc6844ab13f9f (patch)
treee076d046cdb802cf813a64b0273c96591c31bc79 /gcc/ada/init.c
parent57323d5bd3d3b553788a6f13217829069bf95bfe (diff)
downloadgcc-437244c7737eeb63973e1e285d5dc6844ab13f9f.zip
gcc-437244c7737eeb63973e1e285d5dc6844ab13f9f.tar.gz
gcc-437244c7737eeb63973e1e285d5dc6844ab13f9f.tar.bz2
[multiple changes]
2016-04-27 Arnaud Charlet <charlet@adacore.com> * aa_util.adb, aa_util.ads: Removed, no longer used. 2016-04-27 Hristian Kirtchev <kirtchev@adacore.com> * sem_prag.adb (Analyze_Pragma): An object renaming declaration resulting from the expansion of an object declaration is a suitable context for pragma Ghost. 2016-04-27 Doug Rupp <rupp@adacore.com> * init.c: Refine last checkin so the only requirement is the signaling compilation unit is compiled with the same mode as the compilation unit containing the initial landing pad. 2016-04-27 Ed Schonberg <schonberg@adacore.com> * sem_ch13.adb (Valid_Default_Iterator): Better filter of illegal specifications for Default_Iterator, including overloaded cases where no interpretations are legal, and return types that are not iterator types. 2016-04-27 Hristian Kirtchev <kirtchev@adacore.com> * exp_ch5.adb (Expand_N_Assignment_Statement): Do not install an accessibility check when the left hand side of the assignment denotes a container cursor. * exp_util.ads, exp_util.adb (Find_Primitive_Operations): Removed. * sem_ch4.adb (Find_Indexing_Operations): New routine. (Try_Container_Indexing): Code cleanup. From-SVN: r235505
Diffstat (limited to 'gcc/ada/init.c')
-rw-r--r--gcc/ada/init.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/ada/init.c b/gcc/ada/init.c
index 440a068..6d51896 100644
--- a/gcc/ada/init.c
+++ b/gcc/ada/init.c
@@ -504,9 +504,13 @@ __gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext)
/* ARM Bump has to be an even number because of odd/even architecture. */
mcontext->arm_pc+=2;
#ifdef __thumb2__
+#define CPSR_THUMB_BIT 5
/* For thumb, the return address much have the low order bit set, otherwise
- the unwwinder will reset to "arm" mode upon return. It's a feature. */
- mcontext->arm_pc+=1;
+ the unwinder will reset to "arm" mode upon return. As long as the
+ compilation unit containing the landing pad is compiled with the same
+ mode (arm vs thumb) as the signaling compilation unit, this works. */
+ if (mcontext->arm_cpsr & (1<<CPSR_THUMB_BIT))
+ mcontext->arm_pc+=1;
#endif
#endif
}