tzh
2024-08-22 c7d0944258c7d0943aa7b2211498fd612971ce27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2017 Free Software Foundation, Inc.
 
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
"GNU Free Documentation License".
 
(a) The FSF's Front-Cover Text is:
 
A GNU Manual
 
(b) The FSF's Back-Cover Text is:
 
You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Compiler Collection (GCC) Internals: Shrink-wrapping separate components</title>
 
<meta name="description" content="GNU Compiler Collection (GCC) Internals: Shrink-wrapping separate components">
<meta name="keywords" content="GNU Compiler Collection (GCC) Internals: Shrink-wrapping separate components">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Stack-and-Calling.html#Stack-and-Calling" rel="up" title="Stack and Calling">
<link href="Stack-Smashing-Protection.html#Stack-Smashing-Protection" rel="next" title="Stack Smashing Protection">
<link href="Tail-Calls.html#Tail-Calls" rel="prev" title="Tail Calls">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
 
 
</head>
 
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Shrink_002dwrapping-separate-components"></a>
<div class="header">
<p>
Next: <a href="Stack-Smashing-Protection.html#Stack-Smashing-Protection" accesskey="n" rel="next">Stack Smashing Protection</a>, Previous: <a href="Tail-Calls.html#Tail-Calls" accesskey="p" rel="prev">Tail Calls</a>, Up: <a href="Stack-and-Calling.html#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Shrink_002dwrapping-separate-components-1"></a>
<h4 class="subsection">17.9.14 Shrink-wrapping separate components</h4>
<a name="index-shrink_002dwrapping-separate-components"></a>
 
<p>The prologue may perform a variety of target dependent tasks such as
saving callee-saved registers, saving the return address, aligning the
stack, creating a stack frame, initializing the PIC register, setting
up the static chain, etc.
</p>
<p>On some targets some of these tasks may be independent of others and
thus may be shrink-wrapped separately.  These independent tasks are
referred to as components and are handled generically by the target
independent parts of GCC.
</p>
<p>Using the following hooks those prologue or epilogue components can be
shrink-wrapped separately, so that the initialization (and possibly
teardown) those components do is not done as frequently on execution
paths where this would unnecessary.
</p>
<p>What exactly those components are is up to the target code; the generic
code treats them abstractly, as a bit in an <code>sbitmap</code>.  These
<code>sbitmap</code>s are allocated by the <code>shrink_wrap.get_separate_components</code>
and <code>shrink_wrap.components_for_bb</code> hooks, and deallocated by the
generic code.
</p>
<dl>
<dt><a name="index-TARGET_005fSHRINK_005fWRAP_005fGET_005fSEPARATE_005fCOMPONENTS"></a>Target Hook: <em>sbitmap</em> <strong>TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS</strong> <em>(void)</em></dt>
<dd><p>This hook should return an <code>sbitmap</code> with the bits set for those
components that can be separately shrink-wrapped in the current function.
Return <code>NULL</code> if the current function should not get any separate
shrink-wrapping.
Don&rsquo;t define this hook if it would always return <code>NULL</code>.
If it is defined, the other hooks in this group have to be defined as well.
</p></dd></dl>
 
<dl>
<dt><a name="index-TARGET_005fSHRINK_005fWRAP_005fCOMPONENTS_005fFOR_005fBB"></a>Target Hook: <em>sbitmap</em> <strong>TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB</strong> <em>(basic_block)</em></dt>
<dd><p>This hook should return an <code>sbitmap</code> with the bits set for those
components where either the prologue component has to be executed before
the <code>basic_block</code>, or the epilogue component after it, or both.
</p></dd></dl>
 
<dl>
<dt><a name="index-TARGET_005fSHRINK_005fWRAP_005fDISQUALIFY_005fCOMPONENTS"></a>Target Hook: <em>void</em> <strong>TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS</strong> <em>(sbitmap <var>components</var>, edge <var>e</var>, sbitmap <var>edge_components</var>, bool <var>is_prologue</var>)</em></dt>
<dd><p>This hook should clear the bits in the <var>components</var> bitmap for those
components in <var>edge_components</var> that the target cannot handle on edge
<var>e</var>, where <var>is_prologue</var> says if this is for a prologue or an
epilogue instead.
</p></dd></dl>
 
<dl>
<dt><a name="index-TARGET_005fSHRINK_005fWRAP_005fEMIT_005fPROLOGUE_005fCOMPONENTS"></a>Target Hook: <em>void</em> <strong>TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS</strong> <em>(sbitmap)</em></dt>
<dd><p>Emit prologue insns for the components indicated by the parameter.
</p></dd></dl>
 
<dl>
<dt><a name="index-TARGET_005fSHRINK_005fWRAP_005fEMIT_005fEPILOGUE_005fCOMPONENTS"></a>Target Hook: <em>void</em> <strong>TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS</strong> <em>(sbitmap)</em></dt>
<dd><p>Emit epilogue insns for the components indicated by the parameter.
</p></dd></dl>
 
<dl>
<dt><a name="index-TARGET_005fSHRINK_005fWRAP_005fSET_005fHANDLED_005fCOMPONENTS"></a>Target Hook: <em>void</em> <strong>TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS</strong> <em>(sbitmap)</em></dt>
<dd><p>Mark the components in the parameter as handled, so that the
<code>prologue</code> and <code>epilogue</code> named patterns know to ignore those
components.  The target code should not hang on to the <code>sbitmap</code>, it
will be deleted after this call.
</p></dd></dl>
 
<hr>
<div class="header">
<p>
Next: <a href="Stack-Smashing-Protection.html#Stack-Smashing-Protection" accesskey="n" rel="next">Stack Smashing Protection</a>, Previous: <a href="Tail-Calls.html#Tail-Calls" accesskey="p" rel="prev">Tail Calls</a>, Up: <a href="Stack-and-Calling.html#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
 
 
 
</body>
</html>