]>
Commit | Line | Data |
---|---|---|
fbf5a39b AC |
1 | ------------------------------------------------------------------------------ |
2 | -- -- | |
3 | -- GNAT COMPILER COMPONENTS -- | |
4 | -- -- | |
5 | -- S Y M B O L S -- | |
6 | -- -- | |
7 | -- S p e c -- | |
8 | -- -- | |
1d005acc | 9 | -- Copyright (C) 2003-2019, Free Software Foundation, Inc. -- |
fbf5a39b AC |
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- -- | |
b5c84c3c | 13 | -- ware Foundation; either version 3, or (at your option) any later ver- -- |
fbf5a39b AC |
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. See the GNU General Public License -- | |
17 | -- for more details. You should have received a copy of the GNU General -- | |
b5c84c3c RD |
18 | -- Public License distributed with GNAT; see file COPYING3. If not, go to -- |
19 | -- http://www.gnu.org/licenses for a complete copy of the license. -- | |
fbf5a39b AC |
20 | -- -- |
21 | -- GNAT was originally developed by the GNAT team at New York University. -- | |
22 | -- Extensive contributions were provided by Ada Core Technologies Inc. -- | |
23 | -- -- | |
24 | ------------------------------------------------------------------------------ | |
25 | ||
26 | -- This package allows the creation of symbol files to be used for linking | |
27 | -- libraries. The format of symbol files depends on the platform, so there is | |
28 | -- several implementations of the body. | |
29 | ||
30 | with GNAT.Dynamic_Tables; | |
751089b2 VC |
31 | |
32 | with System.OS_Lib; use System.OS_Lib; | |
fbf5a39b AC |
33 | |
34 | package Symbols is | |
35 | ||
19f0526a | 36 | type Policy is |
9de61fcb | 37 | -- Symbol policy |
19f0526a AC |
38 | |
39 | (Autonomous, | |
40 | -- Create a symbol file without considering any reference | |
41 | ||
42 | Compliant, | |
43 | -- Either create a symbol file with the same major and minor IDs if | |
44 | -- all symbols are already found in the reference file or with an | |
45 | -- incremented minor ID, if not. | |
46 | ||
65b10832 | 47 | Controlled, |
19f0526a AC |
48 | -- Fail if symbols are not the same as those in the reference file |
49 | ||
751089b2 | 50 | Restricted, |
5453d5bd AC |
51 | -- Restrict the symbols to those in the symbol file. Fail if some |
52 | -- symbols in the symbol file are not exported from the object files. | |
53 | ||
751089b2 VC |
54 | Direct); |
55 | -- The reference symbol file is copied to the symbol file | |
56 | ||
fbf5a39b AC |
57 | type Symbol_Kind is (Data, Proc); |
58 | -- To distinguish between the different kinds of symbols | |
59 | ||
60 | type Symbol_Data is record | |
61 | Name : String_Access; | |
62 | Kind : Symbol_Kind := Data; | |
63 | Present : Boolean := True; | |
64 | end record; | |
65 | -- Data (name and kind) for each of the symbols | |
66 | ||
67 | package Symbol_Table is new GNAT.Dynamic_Tables | |
68 | (Table_Component_Type => Symbol_Data, | |
69 | Table_Index_Type => Natural, | |
70 | Table_Low_Bound => 0, | |
71 | Table_Initial => 100, | |
72 | Table_Increment => 100); | |
73 | -- The symbol tables | |
74 | ||
75 | Original_Symbols : Symbol_Table.Instance; | |
19f0526a | 76 | -- The symbols, if any, found in the reference symbol table |
fbf5a39b AC |
77 | |
78 | Complete_Symbols : Symbol_Table.Instance; | |
79 | -- The symbols, if any, found in the objects files | |
80 | ||
81 | procedure Initialize | |
19f0526a AC |
82 | (Symbol_File : String; |
83 | Reference : String; | |
84 | Symbol_Policy : Policy; | |
85 | Quiet : Boolean; | |
86 | Version : String; | |
87 | Success : out Boolean); | |
fbf5a39b AC |
88 | -- Initialize a symbol file. This procedure must be called before |
89 | -- Processing any object file. Depending on the platforms and the | |
90 | -- circumstances, additional messages may be issued if Quiet is False. | |
91 | ||
65b10832 VC |
92 | package Processing is |
93 | ||
7a5b62b0 AC |
94 | -- This package, containing a single visible procedure Process, exists |
95 | -- so that it can be a subunits, for some platforms, the body of package | |
96 | -- Symbols is common, while the subunit Processing is not. | |
65b10832 VC |
97 | |
98 | procedure Process | |
99 | (Object_File : String; | |
100 | Success : out Boolean); | |
101 | -- Get the symbols from an object file. Success is set to True if the | |
102 | -- object file exists and has the expected format. | |
103 | ||
104 | end Processing; | |
fbf5a39b AC |
105 | |
106 | procedure Finalize | |
107 | (Quiet : Boolean; | |
108 | Success : out Boolean); | |
109 | -- Finalize the symbol file. This procedure should be called after | |
110 | -- Initialize (once) and Process (one or more times). If Success is | |
111 | -- True, the symbol file is written and closed, ready to be used for | |
112 | -- linking the library. Depending on the platforms and the circumstances, | |
113 | -- additional messages may be issued if Quiet is False. | |
114 | ||
115 | end Symbols; |