aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/tracebak.c
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2011-08-03 10:32:57 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2011-08-03 10:32:57 +0200
commit3f5a8feea3381fb0311e4d1a264c0661f37432dd (patch)
tree834b7da4b7d5b685e4e2c9e4b200ee9d3e306393 /gcc/ada/tracebak.c
parenta96ca6001f1e6236b550e26c7459bfaa9deb57b0 (diff)
downloadgcc-3f5a8feea3381fb0311e4d1a264c0661f37432dd.zip
gcc-3f5a8feea3381fb0311e4d1a264c0661f37432dd.tar.gz
gcc-3f5a8feea3381fb0311e4d1a264c0661f37432dd.tar.bz2
[multiple changes]
2011-08-03 Olivier Hainque <hainque@adacore.com> * tracebak.c (STOP_FRAME ppc AIX): Stop at null return address as well. 2011-08-03 Ed Schonberg <schonberg@adacore.com> * sem_ch8.adb (Analyze_Object_Renaming): if the renamed object is an explicit dereference of an unconstrained type, create a constrained subtype for it, as is done for function calls that return an unconstrained type. 2011-08-03 Thomas Quinot <quinot@adacore.com> * g-pehage.adb (Finalize): Avoid possible double-free. 2011-08-03 Steve Baird <baird@adacore.com> * exp_attr.adb (Expand_N_Attribute_Reference): Don't expand Elab_Spec/Body attrs in CodePeer_Mode. 2011-08-03 Javier Miranda <miranda@adacore.com> * exp_aggr.adb (Flatten): Convert to positional form aggregates whose low bound is not known at compile time but they have no others choice. Done because in this case the bounds can be obtained directly from the aggregate. 2011-08-03 Ed Falis <falis@adacore.com> * s-tasinf-vxworks.ads: Update comment to reflect 0 indexing of CPUs on VxWorks SMP. Remove unusable constant ANY_CPU. From-SVN: r177242
Diffstat (limited to 'gcc/ada/tracebak.c')
-rw-r--r--gcc/ada/tracebak.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/ada/tracebak.c b/gcc/ada/tracebak.c
index 23fc5c7..2e29285 100644
--- a/gcc/ada/tracebak.c
+++ b/gcc/ada/tracebak.c
@@ -219,7 +219,14 @@ struct layout
#define FRAME_OFFSET(FP) 0
#define PC_ADJUST -4
-#define STOP_FRAME(CURRENT, TOP_STACK) ((void *) (CURRENT) < (TOP_STACK))
+
+/* Eventhough the base PPC ABI states that a toplevel frame entry
+ should to feature a null backchain, AIX might expose a null return
+ address instead. */
+
+#define STOP_FRAME(CURRENT, TOP_STACK) \
+ (((void *) (CURRENT) < (TOP_STACK)) \
+ || (CURRENT)->return_address == NULL)
/* The PPC ABI has an interesting specificity: the return address saved by a
function is located in it's caller's frame, and the save operation only