From: Eric Botcazou Date: Wed, 15 Feb 2006 09:36:13 +0000 (+0100) Subject: s-stchop.adb (Stack_Check): Raise Storage_Error if the argument has wrapped around. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=463af61db6f1632c127219e81b801a5c199cd5f9;p=gcc.git s-stchop.adb (Stack_Check): Raise Storage_Error if the argument has wrapped around. 2006-02-13 Eric Botcazou * s-stchop.adb (Stack_Check): Raise Storage_Error if the argument has wrapped around. From-SVN: r111050 --- diff --git a/gcc/ada/s-stchop.adb b/gcc/ada/s-stchop.adb index 2f9c809d817..f1478f357c8 100644 --- a/gcc/ada/s-stchop.adb +++ b/gcc/ada/s-stchop.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2005 Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2006 Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -179,6 +179,20 @@ package body System.Stack_Checking.Operations is Frame_Address : constant System.Address := Marker'Address; begin + -- The parameter may have wrapped around in System.Address arithmetics. + -- In that case, we have no other choices than raising the exception. + + if (Stack_Grows_Down and then + Stack_Address > Frame_Address) + or else + (not Stack_Grows_Down and then + Stack_Address < Frame_Address) + then + Ada.Exceptions.Raise_Exception + (E => Storage_Error'Identity, + Message => "stack overflow detected"); + end if; + -- This function first does a "cheap" check which is correct -- if it succeeds. In case of failure, the full check is done. -- Ideally the cheap check should be done in an optimized manner,