annotate gcc/jit/docs/topics/compatibility.rst @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 .. Copyright (C) 2015-2017 Free Software Foundation, Inc.
kono
parents:
diff changeset
2 Originally contributed by David Malcolm <dmalcolm@redhat.com>
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 This is free software: you can redistribute it and/or modify it
kono
parents:
diff changeset
5 under the terms of the GNU General Public License as published by
kono
parents:
diff changeset
6 the Free Software Foundation, either version 3 of the License, or
kono
parents:
diff changeset
7 (at your option) any later version.
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 This program is distributed in the hope that it will be useful, but
kono
parents:
diff changeset
10 WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
12 General Public License for more details.
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
15 along with this program. If not, see
kono
parents:
diff changeset
16 <http://www.gnu.org/licenses/>.
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 .. default-domain:: c
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 ABI and API compatibility
kono
parents:
diff changeset
21 =========================
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 The libgccjit developers strive for ABI and API backward-compatibility:
kono
parents:
diff changeset
24 programs built against libgccjit.so stand a good chance of running
kono
parents:
diff changeset
25 without recompilation against newer versions of libgccjit.so, and
kono
parents:
diff changeset
26 ought to recompile without modification against newer versions of
kono
parents:
diff changeset
27 libgccjit.h.
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 .. note:: The libgccjit++.h C++ API is more experimental, and less
kono
parents:
diff changeset
30 locked-down at this time.
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 API compatibility is achieved by extending the API rather than changing
kono
parents:
diff changeset
33 it. For ABI compatiblity, we avoid bumping the SONAME, and instead use
kono
parents:
diff changeset
34 symbol versioning to tag each symbol, so that a binary linked against
kono
parents:
diff changeset
35 libgccjit.so is tagged according to the symbols that it uses.
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 For example, :func:`gcc_jit_context_add_command_line_option` was added in
kono
parents:
diff changeset
38 ``LIBGCCJIT_ABI_1``. If a client program uses it, this can be detected
kono
parents:
diff changeset
39 from metadata by using ``objdump``:
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 .. code-block:: bash
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 $ objdump -p testsuite/jit/test-extra-options.c.exe | tail -n 8
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 Version References:
kono
parents:
diff changeset
46 required from libgccjit.so.0:
kono
parents:
diff changeset
47 0x00824161 0x00 04 LIBGCCJIT_ABI_1
kono
parents:
diff changeset
48 0x00824160 0x00 03 LIBGCCJIT_ABI_0
kono
parents:
diff changeset
49 required from libc.so.6:
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 You can see the symbol tags provided by libgccjit.so using ``objdump``:
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 .. code-block:: bash
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 $ objdump -p libgccjit.so | less
kono
parents:
diff changeset
56 [...snip...]
kono
parents:
diff changeset
57 Version definitions:
kono
parents:
diff changeset
58 1 0x01 0x0ff81f20 libgccjit.so.0
kono
parents:
diff changeset
59 2 0x00 0x00824160 LIBGCCJIT_ABI_0
kono
parents:
diff changeset
60 3 0x00 0x00824161 LIBGCCJIT_ABI_1
kono
parents:
diff changeset
61 LIBGCCJIT_ABI_0
kono
parents:
diff changeset
62 [...snip...]
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 ABI symbol tags
kono
parents:
diff changeset
65 ***************
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 The initial release of libgccjit (in gcc 5.1) did not use symbol versioning.
kono
parents:
diff changeset
68
kono
parents:
diff changeset
69 Newer releases use the following tags.
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 .. _LIBGCCJIT_ABI_0:
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73 ``LIBGCCJIT_ABI_0``
kono
parents:
diff changeset
74 -------------------
kono
parents:
diff changeset
75
kono
parents:
diff changeset
76 All entrypoints in the initial release of libgccjit are tagged with
kono
parents:
diff changeset
77 ``LIBGCCJIT_ABI_0``, to signify the transition to symbol versioning.
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 Binaries built against older copies of ``libgccjit.so`` should
kono
parents:
diff changeset
80 continue to work, with this being handled transparently by the linker
kono
parents:
diff changeset
81 (see `this post
kono
parents:
diff changeset
82 <https://gcc.gnu.org/ml/gcc-patches/2015-06/msg02126.html>`_)
kono
parents:
diff changeset
83
kono
parents:
diff changeset
84 .. _LIBGCCJIT_ABI_1:
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 ``LIBGCCJIT_ABI_1``
kono
parents:
diff changeset
87 -------------------
kono
parents:
diff changeset
88 ``LIBGCCJIT_ABI_1`` covers the addition of
kono
parents:
diff changeset
89 :func:`gcc_jit_context_add_command_line_option`
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 .. _LIBGCCJIT_ABI_2:
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 ``LIBGCCJIT_ABI_2``
kono
parents:
diff changeset
94 -------------------
kono
parents:
diff changeset
95 ``LIBGCCJIT_ABI_2`` covers the addition of
kono
parents:
diff changeset
96 :func:`gcc_jit_context_set_bool_allow_unreachable_blocks`
kono
parents:
diff changeset
97
kono
parents:
diff changeset
98 .. _LIBGCCJIT_ABI_3:
kono
parents:
diff changeset
99
kono
parents:
diff changeset
100 ``LIBGCCJIT_ABI_3``
kono
parents:
diff changeset
101 -------------------
kono
parents:
diff changeset
102 ``LIBGCCJIT_ABI_3`` covers the addition of switch statements via API
kono
parents:
diff changeset
103 entrypoints:
kono
parents:
diff changeset
104
kono
parents:
diff changeset
105 * :func:`gcc_jit_block_end_with_switch`
kono
parents:
diff changeset
106
kono
parents:
diff changeset
107 * :func:`gcc_jit_case_as_object`
kono
parents:
diff changeset
108
kono
parents:
diff changeset
109 * :func:`gcc_jit_context_new_case`
kono
parents:
diff changeset
110
kono
parents:
diff changeset
111 .. _LIBGCCJIT_ABI_4:
kono
parents:
diff changeset
112
kono
parents:
diff changeset
113 ``LIBGCCJIT_ABI_4``
kono
parents:
diff changeset
114 -------------------
kono
parents:
diff changeset
115 ``LIBGCCJIT_ABI_4`` covers the addition of timers via API
kono
parents:
diff changeset
116 entrypoints:
kono
parents:
diff changeset
117
kono
parents:
diff changeset
118 * :func:`gcc_jit_context_get_timer`
kono
parents:
diff changeset
119
kono
parents:
diff changeset
120 * :func:`gcc_jit_context_set_timer`
kono
parents:
diff changeset
121
kono
parents:
diff changeset
122 * :func:`gcc_jit_timer_new`
kono
parents:
diff changeset
123
kono
parents:
diff changeset
124 * :func:`gcc_jit_timer_release`
kono
parents:
diff changeset
125
kono
parents:
diff changeset
126 * :func:`gcc_jit_timer_push`
kono
parents:
diff changeset
127
kono
parents:
diff changeset
128 * :func:`gcc_jit_timer_pop`
kono
parents:
diff changeset
129
kono
parents:
diff changeset
130 * :func:`gcc_jit_timer_print`
kono
parents:
diff changeset
131
kono
parents:
diff changeset
132 .. _LIBGCCJIT_ABI_5:
kono
parents:
diff changeset
133
kono
parents:
diff changeset
134 ``LIBGCCJIT_ABI_5``
kono
parents:
diff changeset
135 -------------------
kono
parents:
diff changeset
136 ``LIBGCCJIT_ABI_5`` covers the addition of
kono
parents:
diff changeset
137 :func:`gcc_jit_context_set_bool_use_external_driver`
kono
parents:
diff changeset
138
kono
parents:
diff changeset
139 .. _LIBGCCJIT_ABI_6:
kono
parents:
diff changeset
140
kono
parents:
diff changeset
141 ``LIBGCCJIT_ABI_6``
kono
parents:
diff changeset
142 -------------------
kono
parents:
diff changeset
143 ``LIBGCCJIT_ABI_6`` covers the addition of
kono
parents:
diff changeset
144 :func:`gcc_jit_rvalue_set_bool_require_tail_call`
kono
parents:
diff changeset
145
kono
parents:
diff changeset
146 .. _LIBGCCJIT_ABI_7:
kono
parents:
diff changeset
147
kono
parents:
diff changeset
148 ``LIBGCCJIT_ABI_7``
kono
parents:
diff changeset
149 -------------------
kono
parents:
diff changeset
150 ``LIBGCCJIT_ABI_7`` covers the addition of
kono
parents:
diff changeset
151 :func:`gcc_jit_type_get_aligned`
kono
parents:
diff changeset
152
kono
parents:
diff changeset
153 .. _LIBGCCJIT_ABI_8:
kono
parents:
diff changeset
154
kono
parents:
diff changeset
155 ``LIBGCCJIT_ABI_8``
kono
parents:
diff changeset
156 -------------------
kono
parents:
diff changeset
157 ``LIBGCCJIT_ABI_8`` covers the addition of
kono
parents:
diff changeset
158 :func:`gcc_jit_type_get_vector`
kono
parents:
diff changeset
159
kono
parents:
diff changeset
160 .. _LIBGCCJIT_ABI_9:
kono
parents:
diff changeset
161
kono
parents:
diff changeset
162 ``LIBGCCJIT_ABI_9``
kono
parents:
diff changeset
163 -------------------
kono
parents:
diff changeset
164 ``LIBGCCJIT_ABI_9`` covers the addition of
kono
parents:
diff changeset
165 :func:`gcc_jit_function_get_address`
kono
parents:
diff changeset
166
kono
parents:
diff changeset
167 .. _LIBGCCJIT_ABI_10:
kono
parents:
diff changeset
168
kono
parents:
diff changeset
169 ``LIBGCCJIT_ABI_10``
kono
parents:
diff changeset
170 --------------------
kono
parents:
diff changeset
171
kono
parents:
diff changeset
172 ``LIBGCCJIT_ABI_10`` covers the addition of
kono
parents:
diff changeset
173 :func:`gcc_jit_context_new_rvalue_from_vector`