|
| 1 | +------------------------------------------------------------------------------ |
| 2 | +-- -- |
| 3 | +-- GNAT COMPILER COMPONENTS -- |
| 4 | +-- -- |
| 5 | +-- S Y S T E M . R E T U R N _ S T A C K -- |
| 6 | +-- -- |
| 7 | +-- S p e c -- |
| 8 | +-- -- |
| 9 | +-- Copyright (C) 2022-2023, Free Software Foundation, Inc. -- |
| 10 | +-- -- |
| 11 | +-- GNAT is free software; you can redistribute it and/or modify it under -- |
| 12 | +-- terms of the GNU General Public License as published by the Free Soft- -- |
| 13 | +-- ware Foundation; either version 3, or (at your option) any later ver- -- |
| 14 | +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- |
| 15 | +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- |
| 16 | +-- or FITNESS FOR A PARTICULAR PURPOSE. -- |
| 17 | +-- -- |
| 18 | +-- As a special exception under Section 7 of GPL version 3, you are granted -- |
| 19 | +-- additional permissions described in the GCC Runtime Library Exception, -- |
| 20 | +-- version 3.1, as published by the Free Software Foundation. -- |
| 21 | +-- -- |
| 22 | +-- You should have received a copy of the GNU General Public License and -- |
| 23 | +-- a copy of the GCC Runtime Library Exception along with this program; -- |
| 24 | +-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- |
| 25 | +-- <http://www.gnu.org/licenses/>. -- |
| 26 | +-- -- |
| 27 | +-- GNAT was originally developed by the GNAT team at New York University. -- |
| 28 | +-- Extensive contributions were provided by Ada Core Technologies Inc. -- |
| 29 | +-- -- |
| 30 | +------------------------------------------------------------------------------ |
| 31 | + |
| 32 | +-- This small package provides direct access to the return stack of the code |
| 33 | +-- generator for functions returning a by-reference type. This return stack |
| 34 | +-- is the portion of the primary stack that has been allocated by callers of |
| 35 | +-- the functions and onto which the functions put the result before returning. |
| 36 | + |
| 37 | +with System.Storage_Elements; |
| 38 | + |
| 39 | +package System.Return_Stack is |
| 40 | + pragma Preelaborate; |
| 41 | + |
| 42 | + package SSE renames System.Storage_Elements; |
| 43 | + |
| 44 | + procedure RS_Allocate |
| 45 | + (Addr : out Address; |
| 46 | + Storage_Size : SSE.Storage_Count); |
| 47 | + pragma Import (Intrinsic, RS_Allocate, "__builtin_return_slot"); |
| 48 | + -- Allocate enough space on the return stack of the invoking task to |
| 49 | + -- accommodate a return of size Storage_Size. Return the address of the |
| 50 | + -- first byte of the allocation in Addr. |
| 51 | + |
| 52 | +private |
| 53 | + RS_Pool : Integer; |
| 54 | + -- Unused entity that is just present to ease the sharing of the pool |
| 55 | + -- mechanism for specific allocation/deallocation in the compiler. |
| 56 | + |
| 57 | +end System.Return_Stack; |
0 commit comments