------------------------------------------------------------------------------ -- -- -- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- -- -- -- S Y S T E M . S T A C K _ C H E C K I N G . O P E R A T I O N S -- -- -- -- B o d y -- -- -- -- Copyright (C) 1999-2009, 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- -- -- ware Foundation; either version 3, or (at your option) any later ver- -- -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- -- or FITNESS FOR A PARTICULAR PURPOSE. -- -- -- -- As a special exception under Section 7 of GPL version 3, you are granted -- -- additional permissions described in the GCC Runtime Library Exception, -- -- version 3.1, as published by the Free Software Foundation. -- -- -- -- You should have received a copy of the GNU General Public License and -- -- a copy of the GCC Runtime Library Exception along with this program; -- -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- -- . -- -- -- -- GNARL was developed by the GNARL team at Florida State University. -- -- Extensive contributions were provided by Ada Core Technologies, Inc. -- -- -- ------------------------------------------------------------------------------ -- This is the RTEMS version of this package. -- This file should be kept synchronized with the general implementation -- provided by s-stchop.adb. pragma Restrictions (No_Elaboration_Code); -- We want to guarantee the absence of elaboration code because the -- binder does not handle references to this package. with Ada.Exceptions; with Interfaces.C; use Interfaces.C; package body System.Stack_Checking.Operations is ---------------------------- -- Invalidate_Stack_Cache -- ---------------------------- procedure Invalidate_Stack_Cache (Any_Stack : Stack_Access) is pragma Warnings (Off, Any_Stack); begin Cache := Null_Stack; end Invalidate_Stack_Cache; ----------------------------- -- Notify_Stack_Attributes -- ----------------------------- procedure Notify_Stack_Attributes (Initial_SP : System.Address; Size : System.Storage_Elements.Storage_Offset) is -- RTEMS keeps all the information we need. pragma Unreferenced (Size); pragma Unreferenced (Initial_SP); begin null; end Notify_Stack_Attributes; ----------------- -- Stack_Check -- ----------------- function Stack_Check (Stack_Address : System.Address) return Stack_Access is pragma Unreferenced (Stack_Address); -- RTEMS has a routine to check if the stack is blown. -- It returns a C99 bool. function rtems_stack_checker_is_blown return Interfaces.C.unsigned_char; pragma Import (C, rtems_stack_checker_is_blown, "rtems_stack_checker_is_blown"); begin -- RTEMS has a routine to check this. So use it. if rtems_stack_checker_is_blown /= 0 then Ada.Exceptions.Raise_Exception (E => Storage_Error'Identity, Message => "stack overflow detected"); end if; return null; end Stack_Check; ------------------------ -- Update_Stack_Cache -- ------------------------ procedure Update_Stack_Cache (Stack : Stack_Access) is begin if not Multi_Processor then Cache := Stack; end if; end Update_Stack_Cache; end System.Stack_Checking.Operations;