/src/haproxy/include/import/ebtree.h
Line | Count | Source |
1 | | /* |
2 | | * Elastic Binary Trees - generic macros and structures. |
3 | | * Version 6.0.6 |
4 | | * (C) 2002-2011 - Willy Tarreau <w@1wt.eu> |
5 | | * |
6 | | * This library is free software; you can redistribute it and/or |
7 | | * modify it under the terms of the GNU Lesser General Public |
8 | | * License as published by the Free Software Foundation, version 2.1 |
9 | | * exclusively. |
10 | | * |
11 | | * This library is distributed in the hope that it will be useful, |
12 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | | * Lesser General Public License for more details. |
15 | | * |
16 | | * You should have received a copy of the GNU Lesser General Public |
17 | | * License along with this library; if not, write to the Free Software |
18 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | | */ |
20 | | |
21 | | |
22 | | |
23 | | /* |
24 | | General idea: |
25 | | ------------- |
26 | | In a radix binary tree, we may have up to 2N-1 nodes for N keys if all of |
27 | | them are leaves. If we find a way to differentiate intermediate nodes (later |
28 | | called "nodes") and final nodes (later called "leaves"), and we associate |
29 | | them by two, it is possible to build sort of a self-contained radix tree with |
30 | | intermediate nodes always present. It will not be as cheap as the ultree for |
31 | | optimal cases as shown below, but the optimal case almost never happens : |
32 | | |
33 | | Eg, to store 8, 10, 12, 13, 14 : |
34 | | |
35 | | ultree this theoretical tree |
36 | | |
37 | | 8 8 |
38 | | / \ / \ |
39 | | 10 12 10 12 |
40 | | / \ / \ |
41 | | 13 14 12 14 |
42 | | / \ |
43 | | 12 13 |
44 | | |
45 | | Note that on real-world tests (with a scheduler), is was verified that the |
46 | | case with data on an intermediate node never happens. This is because the |
47 | | data spectrum is too large for such coincidences to happen. It would require |
48 | | for instance that a task has its expiration time at an exact second, with |
49 | | other tasks sharing that second. This is too rare to try to optimize for it. |
50 | | |
51 | | What is interesting is that the node will only be added above the leaf when |
52 | | necessary, which implies that it will always remain somewhere above it. So |
53 | | both the leaf and the node can share the exact value of the leaf, because |
54 | | when going down the node, the bit mask will be applied to comparisons. So we |
55 | | are tempted to have one single key shared between the node and the leaf. |
56 | | |
57 | | The bit only serves the nodes, and the dups only serve the leaves. So we can |
58 | | put a lot of information in common. This results in one single entity with |
59 | | two branch pointers and two parent pointers, one for the node part, and one |
60 | | for the leaf part : |
61 | | |
62 | | node's leaf's |
63 | | parent parent |
64 | | | | |
65 | | [node] [leaf] |
66 | | / \ |
67 | | left right |
68 | | branch branch |
69 | | |
70 | | The node may very well refer to its leaf counterpart in one of its branches, |
71 | | indicating that its own leaf is just below it : |
72 | | |
73 | | node's |
74 | | parent |
75 | | | |
76 | | [node] |
77 | | / \ |
78 | | left [leaf] |
79 | | branch |
80 | | |
81 | | Adding keys in such a tree simply consists in inserting nodes between |
82 | | other nodes and/or leaves : |
83 | | |
84 | | [root] |
85 | | | |
86 | | [node2] |
87 | | / \ |
88 | | [leaf1] [node3] |
89 | | / \ |
90 | | [leaf2] [leaf3] |
91 | | |
92 | | On this diagram, we notice that [node2] and [leaf2] have been pulled away |
93 | | from each other due to the insertion of [node3], just as if there would be |
94 | | an elastic between both parts. This elastic-like behaviour gave its name to |
95 | | the tree : "Elastic Binary Tree", or "EBtree". The entity which associates a |
96 | | node part and a leaf part will be called an "EB node". |
97 | | |
98 | | We also notice on the diagram that there is a root entity required to attach |
99 | | the tree. It only contains two branches and there is nothing above it. This |
100 | | is an "EB root". Some will note that [leaf1] has no [node1]. One property of |
101 | | the EBtree is that all nodes have their branches filled, and that if a node |
102 | | has only one branch, it does not need to exist. Here, [leaf1] was added |
103 | | below [root] and did not need any node. |
104 | | |
105 | | An EB node contains : |
106 | | - a pointer to the node's parent (node_p) |
107 | | - a pointer to the leaf's parent (leaf_p) |
108 | | - two branches pointing to lower nodes or leaves (branches) |
109 | | - a bit position (bit) |
110 | | - an optional key. |
111 | | |
112 | | The key here is optional because it's used only during insertion, in order |
113 | | to classify the nodes. Nothing else in the tree structure requires knowledge |
114 | | of the key. This makes it possible to write type-agnostic primitives for |
115 | | everything, and type-specific insertion primitives. This has led to consider |
116 | | two types of EB nodes. The type-agnostic ones will serve as a header for the |
117 | | other ones, and will simply be called "struct eb_node". The other ones will |
118 | | have their type indicated in the structure name. Eg: "struct eb32_node" for |
119 | | nodes carrying 32 bit keys. |
120 | | |
121 | | We will also node that the two branches in a node serve exactly the same |
122 | | purpose as an EB root. For this reason, a "struct eb_root" will be used as |
123 | | well inside the struct eb_node. In order to ease pointer manipulation and |
124 | | ROOT detection when walking upwards, all the pointers inside an eb_node will |
125 | | point to the eb_root part of the referenced EB nodes, relying on the same |
126 | | principle as the linked lists in Linux. |
127 | | |
128 | | Another important point to note, is that when walking inside a tree, it is |
129 | | very convenient to know where a node is attached in its parent, and what |
130 | | type of branch it has below it (leaf or node). In order to simplify the |
131 | | operations and to speed up the processing, it was decided in this specific |
132 | | implementation to use the lowest bit from the pointer to designate the side |
133 | | of the upper pointers (left/right) and the type of a branch (leaf/node). |
134 | | This practise is not mandatory by design, but an implementation-specific |
135 | | optimisation permitted on all platforms on which data must be aligned. All |
136 | | known 32 bit platforms align their integers and pointers to 32 bits, leaving |
137 | | the two lower bits unused. So, we say that the pointers are "tagged". And |
138 | | since they designate pointers to root parts, we simply call them |
139 | | "tagged root pointers", or "eb_troot" in the code. |
140 | | |
141 | | Duplicate keys are stored in a special manner. When inserting a key, if |
142 | | the same one is found, then an incremental binary tree is built at this |
143 | | place from these keys. This ensures that no special case has to be written |
144 | | to handle duplicates when walking through the tree or when deleting entries. |
145 | | It also guarantees that duplicates will be walked in the exact same order |
146 | | they were inserted. This is very important when trying to achieve fair |
147 | | processing distribution for instance. |
148 | | |
149 | | Algorithmic complexity can be derived from 3 variables : |
150 | | - the number of possible different keys in the tree : P |
151 | | - the number of entries in the tree : N |
152 | | - the number of duplicates for one key : D |
153 | | |
154 | | Note that this tree is deliberately NOT balanced. For this reason, the worst |
155 | | case may happen with a small tree (eg: 32 distinct keys of one bit). BUT, |
156 | | the operations required to manage such data are so much cheap that they make |
157 | | it worth using it even under such conditions. For instance, a balanced tree |
158 | | may require only 6 levels to store those 32 keys when this tree will |
159 | | require 32. But if per-level operations are 5 times cheaper, it wins. |
160 | | |
161 | | Minimal, Maximal and Average times are specified in number of operations. |
162 | | Minimal is given for best condition, Maximal for worst condition, and the |
163 | | average is reported for a tree containing random keys. An operation |
164 | | generally consists in jumping from one node to the other. |
165 | | |
166 | | Complexity : |
167 | | - lookup : min=1, max=log(P), avg=log(N) |
168 | | - insertion from root : min=1, max=log(P), avg=log(N) |
169 | | - insertion of dups : min=1, max=log(D), avg=log(D)/2 after lookup |
170 | | - deletion : min=1, max=1, avg=1 |
171 | | - prev/next : min=1, max=log(P), avg=2 : |
172 | | N/2 nodes need 1 hop => 1*N/2 |
173 | | N/4 nodes need 2 hops => 2*N/4 |
174 | | N/8 nodes need 3 hops => 3*N/8 |
175 | | ... |
176 | | N/x nodes need log(x) hops => log2(x)*N/x |
177 | | Total cost for all N nodes : sum[i=1..N](log2(i)*N/i) = N*sum[i=1..N](log2(i)/i) |
178 | | Average cost across N nodes = total / N = sum[i=1..N](log2(i)/i) = 2 |
179 | | |
180 | | This design is currently limited to only two branches per node. Most of the |
181 | | tree descent algorithm would be compatible with more branches (eg: 4, to cut |
182 | | the height in half), but this would probably require more complex operations |
183 | | and the deletion algorithm would be problematic. |
184 | | |
185 | | Useful properties : |
186 | | - a node is always added above the leaf it is tied to, and never can get |
187 | | below nor in another branch. This implies that leaves directly attached |
188 | | to the root do not use their node part, which is indicated by a NULL |
189 | | value in node_p. This also enhances the cache efficiency when walking |
190 | | down the tree, because when the leaf is reached, its node part will |
191 | | already have been visited (unless it's the first leaf in the tree). |
192 | | |
193 | | - pointers to lower nodes or leaves are stored in "branch" pointers. Only |
194 | | the root node may have a NULL in either branch, it is not possible for |
195 | | other branches. Since the nodes are attached to the left branch of the |
196 | | root, it is not possible to see a NULL left branch when walking up a |
197 | | tree. Thus, an empty tree is immediately identified by a NULL left |
198 | | branch at the root. Conversely, the one and only way to identify the |
199 | | root node is to check that it right branch is NULL. Note that the |
200 | | NULL pointer may have a few low-order bits set. |
201 | | |
202 | | - a node connected to its own leaf will have branch[0|1] pointing to |
203 | | itself, and leaf_p pointing to itself. |
204 | | |
205 | | - a node can never have node_p pointing to itself. |
206 | | |
207 | | - a node is linked in a tree if and only if it has a non-null leaf_p. |
208 | | |
209 | | - a node can never have both branches equal, except for the root which can |
210 | | have them both NULL. |
211 | | |
212 | | - deletion only applies to leaves. When a leaf is deleted, its parent must |
213 | | be released too (unless it's the root), and its sibling must attach to |
214 | | the grand-parent, replacing the parent. Also, when a leaf is deleted, |
215 | | the node tied to this leaf will be removed and must be released too. If |
216 | | this node is different from the leaf's parent, the freshly released |
217 | | leaf's parent will be used to replace the node which must go. A released |
218 | | node will never be used anymore, so there's no point in tracking it. |
219 | | |
220 | | - the bit index in a node indicates the bit position in the key which is |
221 | | represented by the branches. That means that a node with (bit == 0) is |
222 | | just above two leaves. Negative bit values are used to build a duplicate |
223 | | tree. The first node above two identical leaves gets (bit == -1). This |
224 | | value logarithmically decreases as the duplicate tree grows. During |
225 | | duplicate insertion, a node is inserted above the highest bit value (the |
226 | | lowest absolute value) in the tree during the right-sided walk. If bit |
227 | | -1 is not encountered (highest < -1), we insert above last leaf. |
228 | | Otherwise, we insert above the node with the highest value which was not |
229 | | equal to the one of its parent + 1. |
230 | | |
231 | | - the "eb_next" primitive walks from left to right, which means from lower |
232 | | to higher keys. It returns duplicates in the order they were inserted. |
233 | | The "eb_first" primitive returns the left-most entry. |
234 | | |
235 | | - the "eb_prev" primitive walks from right to left, which means from |
236 | | higher to lower keys. It returns duplicates in the opposite order they |
237 | | were inserted. The "eb_last" primitive returns the right-most entry. |
238 | | |
239 | | - a tree which has 1 in the lower bit of its root's right branch is a |
240 | | tree with unique nodes. This means that when a node is inserted with |
241 | | a key which already exists will not be inserted, and the previous |
242 | | entry will be returned. |
243 | | |
244 | | */ |
245 | | |
246 | | #ifndef _EBTREE_H |
247 | | #define _EBTREE_H |
248 | | |
249 | | #include <stddef.h> |
250 | | #include <stdlib.h> |
251 | | #include <import/ebtree-t.h> |
252 | | #include <haproxy/api.h> |
253 | | |
254 | | /* returns clz from 7 to 0 for 0x01 to 0xFF. Returns 7 for 0 as well. */ |
255 | | static inline unsigned int clz8(unsigned char c) |
256 | 0 | { |
257 | 0 | unsigned int r = 4; |
258 | 0 |
|
259 | 0 | if (c & 0xf0) { |
260 | 0 | r = 0; |
261 | 0 | c >>= 4; |
262 | 0 | } |
263 | 0 | return r + ((0x000055afU >> (c * 2)) & 0x3); |
264 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:clz8 Unexecuted instantiation: cfgparse.c:clz8 Unexecuted instantiation: chunk.c:clz8 Unexecuted instantiation: cli.c:clz8 Unexecuted instantiation: clock.c:clz8 Unexecuted instantiation: connection.c:clz8 Unexecuted instantiation: debug.c:clz8 Unexecuted instantiation: dynbuf.c:clz8 Unexecuted instantiation: ebtree.c:clz8 Unexecuted instantiation: errors.c:clz8 Unexecuted instantiation: fd.c:clz8 Unexecuted instantiation: filters.c:clz8 Unexecuted instantiation: flt_http_comp.c:clz8 Unexecuted instantiation: freq_ctr.c:clz8 Unexecuted instantiation: frontend.c:clz8 Unexecuted instantiation: haproxy.c:clz8 Unexecuted instantiation: http.c:clz8 Unexecuted instantiation: http_ana.c:clz8 Unexecuted instantiation: http_ext.c:clz8 Unexecuted instantiation: http_htx.c:clz8 Unexecuted instantiation: http_rules.c:clz8 Unexecuted instantiation: lb_chash.c:clz8 Unexecuted instantiation: lb_fas.c:clz8 Unexecuted instantiation: lb_fwlc.c:clz8 Unexecuted instantiation: lb_fwrr.c:clz8 Unexecuted instantiation: lb_map.c:clz8 Unexecuted instantiation: limits.c:clz8 Unexecuted instantiation: listener.c:clz8 Unexecuted instantiation: log.c:clz8 Unexecuted instantiation: mailers.c:clz8 Unexecuted instantiation: mworker.c:clz8 Unexecuted instantiation: peers.c:clz8 Unexecuted instantiation: pool.c:clz8 Unexecuted instantiation: proto_rhttp.c:clz8 Unexecuted instantiation: proto_sockpair.c:clz8 Unexecuted instantiation: protocol.c:clz8 Unexecuted instantiation: proxy.c:clz8 Unexecuted instantiation: queue.c:clz8 Unexecuted instantiation: regex.c:clz8 Unexecuted instantiation: resolvers.c:clz8 Unexecuted instantiation: ring.c:clz8 Unexecuted instantiation: sample.c:clz8 Unexecuted instantiation: server.c:clz8 Unexecuted instantiation: session.c:clz8 Unexecuted instantiation: signal.c:clz8 Unexecuted instantiation: sink.c:clz8 Unexecuted instantiation: sock.c:clz8 Unexecuted instantiation: sock_inet.c:clz8 Unexecuted instantiation: stats-html.c:clz8 Unexecuted instantiation: stats.c:clz8 Unexecuted instantiation: stconn.c:clz8 Unexecuted instantiation: stick_table.c:clz8 Unexecuted instantiation: stream.c:clz8 Unexecuted instantiation: systemd.c:clz8 Unexecuted instantiation: task.c:clz8 Unexecuted instantiation: tcp_rules.c:clz8 Unexecuted instantiation: tcpcheck.c:clz8 Unexecuted instantiation: thread.c:clz8 Unexecuted instantiation: tools.c:clz8 Unexecuted instantiation: trace.c:clz8 Unexecuted instantiation: vars.c:clz8 Unexecuted instantiation: acl.c:clz8 Unexecuted instantiation: action.c:clz8 Unexecuted instantiation: activity.c:clz8 Unexecuted instantiation: applet.c:clz8 Unexecuted instantiation: arg.c:clz8 Unexecuted instantiation: backend.c:clz8 Unexecuted instantiation: cache.c:clz8 Unexecuted instantiation: cfgcond.c:clz8 Unexecuted instantiation: cfgparse-global.c:clz8 Unexecuted instantiation: cfgparse-listen.c:clz8 Unexecuted instantiation: channel.c:clz8 Unexecuted instantiation: check.c:clz8 Unexecuted instantiation: compression.c:clz8 Unexecuted instantiation: counters.c:clz8 Unexecuted instantiation: dgram.c:clz8 Unexecuted instantiation: dict.c:clz8 Unexecuted instantiation: dns.c:clz8 Unexecuted instantiation: dns_ring.c:clz8 Unexecuted instantiation: eb32tree.c:clz8 Unexecuted instantiation: eb64tree.c:clz8 Unexecuted instantiation: ebimtree.c:clz8 Unexecuted instantiation: ebistree.c:clz8 Unexecuted instantiation: ebmbtree.c:clz8 Unexecuted instantiation: ebsttree.c:clz8 Unexecuted instantiation: event_hdl.c:clz8 Unexecuted instantiation: extcheck.c:clz8 Unexecuted instantiation: fcgi-app.c:clz8 Unexecuted instantiation: fix.c:clz8 Unexecuted instantiation: guid.c:clz8 Unexecuted instantiation: h1.c:clz8 Unexecuted instantiation: http_fetch.c:clz8 Unexecuted instantiation: mqtt.c:clz8 Unexecuted instantiation: mux_spop.c:clz8 Unexecuted instantiation: pattern.c:clz8 Unexecuted instantiation: payload.c:clz8 Unexecuted instantiation: proto_tcp.c:clz8 Unexecuted instantiation: shctx.c:clz8 Unexecuted instantiation: stats-file.c:clz8 Unexecuted instantiation: stats-json.c:clz8 Unexecuted instantiation: stats-proxy.c:clz8 Unexecuted instantiation: flt_spoe.c:clz8 Unexecuted instantiation: h1_htx.c:clz8 Unexecuted instantiation: lru.c:clz8 |
265 | | |
266 | | /* FLSNZ: find last set bit for non-zero value. "Last" here means the highest |
267 | | * one. It returns a value from 1 to 32 for 1<<0 to 1<<31. |
268 | | */ |
269 | | |
270 | | #if (defined(__i386__) || defined(__x86_64__)) && !defined(__atom__) |
271 | | /* DO NOT USE ON ATOM! The instruction is emulated and is several times slower |
272 | | * than doing the math by hand. |
273 | | */ |
274 | | static inline unsigned int flsnz32(unsigned int x) |
275 | 0 | { |
276 | 0 | unsigned int r; |
277 | 0 | __asm__("bsrl %1,%0\n" |
278 | 0 | : "=r" (r) : "rm" (x)); |
279 | 0 | return r + 1; |
280 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:flsnz32 Unexecuted instantiation: cfgparse.c:flsnz32 Unexecuted instantiation: chunk.c:flsnz32 Unexecuted instantiation: cli.c:flsnz32 Unexecuted instantiation: clock.c:flsnz32 Unexecuted instantiation: connection.c:flsnz32 Unexecuted instantiation: debug.c:flsnz32 Unexecuted instantiation: dynbuf.c:flsnz32 Unexecuted instantiation: ebtree.c:flsnz32 Unexecuted instantiation: errors.c:flsnz32 Unexecuted instantiation: fd.c:flsnz32 Unexecuted instantiation: filters.c:flsnz32 Unexecuted instantiation: flt_http_comp.c:flsnz32 Unexecuted instantiation: freq_ctr.c:flsnz32 Unexecuted instantiation: frontend.c:flsnz32 Unexecuted instantiation: haproxy.c:flsnz32 Unexecuted instantiation: http.c:flsnz32 Unexecuted instantiation: http_ana.c:flsnz32 Unexecuted instantiation: http_ext.c:flsnz32 Unexecuted instantiation: http_htx.c:flsnz32 Unexecuted instantiation: http_rules.c:flsnz32 Unexecuted instantiation: lb_chash.c:flsnz32 Unexecuted instantiation: lb_fas.c:flsnz32 Unexecuted instantiation: lb_fwlc.c:flsnz32 Unexecuted instantiation: lb_fwrr.c:flsnz32 Unexecuted instantiation: lb_map.c:flsnz32 Unexecuted instantiation: limits.c:flsnz32 Unexecuted instantiation: listener.c:flsnz32 Unexecuted instantiation: log.c:flsnz32 Unexecuted instantiation: mailers.c:flsnz32 Unexecuted instantiation: mworker.c:flsnz32 Unexecuted instantiation: peers.c:flsnz32 Unexecuted instantiation: pool.c:flsnz32 Unexecuted instantiation: proto_rhttp.c:flsnz32 Unexecuted instantiation: proto_sockpair.c:flsnz32 Unexecuted instantiation: protocol.c:flsnz32 Unexecuted instantiation: proxy.c:flsnz32 Unexecuted instantiation: queue.c:flsnz32 Unexecuted instantiation: regex.c:flsnz32 Unexecuted instantiation: resolvers.c:flsnz32 Unexecuted instantiation: ring.c:flsnz32 Unexecuted instantiation: sample.c:flsnz32 Unexecuted instantiation: server.c:flsnz32 Unexecuted instantiation: session.c:flsnz32 Unexecuted instantiation: signal.c:flsnz32 Unexecuted instantiation: sink.c:flsnz32 Unexecuted instantiation: sock.c:flsnz32 Unexecuted instantiation: sock_inet.c:flsnz32 Unexecuted instantiation: stats-html.c:flsnz32 Unexecuted instantiation: stats.c:flsnz32 Unexecuted instantiation: stconn.c:flsnz32 Unexecuted instantiation: stick_table.c:flsnz32 Unexecuted instantiation: stream.c:flsnz32 Unexecuted instantiation: systemd.c:flsnz32 Unexecuted instantiation: task.c:flsnz32 Unexecuted instantiation: tcp_rules.c:flsnz32 Unexecuted instantiation: tcpcheck.c:flsnz32 Unexecuted instantiation: thread.c:flsnz32 Unexecuted instantiation: tools.c:flsnz32 Unexecuted instantiation: trace.c:flsnz32 Unexecuted instantiation: vars.c:flsnz32 Unexecuted instantiation: acl.c:flsnz32 Unexecuted instantiation: action.c:flsnz32 Unexecuted instantiation: activity.c:flsnz32 Unexecuted instantiation: applet.c:flsnz32 Unexecuted instantiation: arg.c:flsnz32 Unexecuted instantiation: backend.c:flsnz32 Unexecuted instantiation: cache.c:flsnz32 Unexecuted instantiation: cfgcond.c:flsnz32 Unexecuted instantiation: cfgparse-global.c:flsnz32 Unexecuted instantiation: cfgparse-listen.c:flsnz32 Unexecuted instantiation: channel.c:flsnz32 Unexecuted instantiation: check.c:flsnz32 Unexecuted instantiation: compression.c:flsnz32 Unexecuted instantiation: counters.c:flsnz32 Unexecuted instantiation: dgram.c:flsnz32 Unexecuted instantiation: dict.c:flsnz32 Unexecuted instantiation: dns.c:flsnz32 Unexecuted instantiation: dns_ring.c:flsnz32 Unexecuted instantiation: eb32tree.c:flsnz32 Unexecuted instantiation: eb64tree.c:flsnz32 Unexecuted instantiation: ebimtree.c:flsnz32 Unexecuted instantiation: ebistree.c:flsnz32 Unexecuted instantiation: ebmbtree.c:flsnz32 Unexecuted instantiation: ebsttree.c:flsnz32 Unexecuted instantiation: event_hdl.c:flsnz32 Unexecuted instantiation: extcheck.c:flsnz32 Unexecuted instantiation: fcgi-app.c:flsnz32 Unexecuted instantiation: fix.c:flsnz32 Unexecuted instantiation: guid.c:flsnz32 Unexecuted instantiation: h1.c:flsnz32 Unexecuted instantiation: http_fetch.c:flsnz32 Unexecuted instantiation: mqtt.c:flsnz32 Unexecuted instantiation: mux_spop.c:flsnz32 Unexecuted instantiation: pattern.c:flsnz32 Unexecuted instantiation: payload.c:flsnz32 Unexecuted instantiation: proto_tcp.c:flsnz32 Unexecuted instantiation: shctx.c:flsnz32 Unexecuted instantiation: stats-file.c:flsnz32 Unexecuted instantiation: stats-json.c:flsnz32 Unexecuted instantiation: stats-proxy.c:flsnz32 Unexecuted instantiation: flt_spoe.c:flsnz32 Unexecuted instantiation: h1_htx.c:flsnz32 Unexecuted instantiation: lru.c:flsnz32 |
281 | 0 | #define flsnz32(x) flsnz32(x) |
282 | | |
283 | | # if defined(__x86_64__) |
284 | | static inline unsigned int flsnz64(unsigned long long x) |
285 | 0 | { |
286 | 0 | unsigned long long r; |
287 | 0 | __asm__("bsrq %1,%0\n" |
288 | 0 | : "=r" (r) : "rm" (x)); |
289 | 0 | return r + 1; |
290 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:flsnz64 Unexecuted instantiation: cfgparse.c:flsnz64 Unexecuted instantiation: chunk.c:flsnz64 Unexecuted instantiation: cli.c:flsnz64 Unexecuted instantiation: clock.c:flsnz64 Unexecuted instantiation: connection.c:flsnz64 Unexecuted instantiation: debug.c:flsnz64 Unexecuted instantiation: dynbuf.c:flsnz64 Unexecuted instantiation: ebtree.c:flsnz64 Unexecuted instantiation: errors.c:flsnz64 Unexecuted instantiation: fd.c:flsnz64 Unexecuted instantiation: filters.c:flsnz64 Unexecuted instantiation: flt_http_comp.c:flsnz64 Unexecuted instantiation: freq_ctr.c:flsnz64 Unexecuted instantiation: frontend.c:flsnz64 Unexecuted instantiation: haproxy.c:flsnz64 Unexecuted instantiation: http.c:flsnz64 Unexecuted instantiation: http_ana.c:flsnz64 Unexecuted instantiation: http_ext.c:flsnz64 Unexecuted instantiation: http_htx.c:flsnz64 Unexecuted instantiation: http_rules.c:flsnz64 Unexecuted instantiation: lb_chash.c:flsnz64 Unexecuted instantiation: lb_fas.c:flsnz64 Unexecuted instantiation: lb_fwlc.c:flsnz64 Unexecuted instantiation: lb_fwrr.c:flsnz64 Unexecuted instantiation: lb_map.c:flsnz64 Unexecuted instantiation: limits.c:flsnz64 Unexecuted instantiation: listener.c:flsnz64 Unexecuted instantiation: log.c:flsnz64 Unexecuted instantiation: mailers.c:flsnz64 Unexecuted instantiation: mworker.c:flsnz64 Unexecuted instantiation: peers.c:flsnz64 Unexecuted instantiation: pool.c:flsnz64 Unexecuted instantiation: proto_rhttp.c:flsnz64 Unexecuted instantiation: proto_sockpair.c:flsnz64 Unexecuted instantiation: protocol.c:flsnz64 Unexecuted instantiation: proxy.c:flsnz64 Unexecuted instantiation: queue.c:flsnz64 Unexecuted instantiation: regex.c:flsnz64 Unexecuted instantiation: resolvers.c:flsnz64 Unexecuted instantiation: ring.c:flsnz64 Unexecuted instantiation: sample.c:flsnz64 Unexecuted instantiation: server.c:flsnz64 Unexecuted instantiation: session.c:flsnz64 Unexecuted instantiation: signal.c:flsnz64 Unexecuted instantiation: sink.c:flsnz64 Unexecuted instantiation: sock.c:flsnz64 Unexecuted instantiation: sock_inet.c:flsnz64 Unexecuted instantiation: stats-html.c:flsnz64 Unexecuted instantiation: stats.c:flsnz64 Unexecuted instantiation: stconn.c:flsnz64 Unexecuted instantiation: stick_table.c:flsnz64 Unexecuted instantiation: stream.c:flsnz64 Unexecuted instantiation: systemd.c:flsnz64 Unexecuted instantiation: task.c:flsnz64 Unexecuted instantiation: tcp_rules.c:flsnz64 Unexecuted instantiation: tcpcheck.c:flsnz64 Unexecuted instantiation: thread.c:flsnz64 Unexecuted instantiation: tools.c:flsnz64 Unexecuted instantiation: trace.c:flsnz64 Unexecuted instantiation: vars.c:flsnz64 Unexecuted instantiation: acl.c:flsnz64 Unexecuted instantiation: action.c:flsnz64 Unexecuted instantiation: activity.c:flsnz64 Unexecuted instantiation: applet.c:flsnz64 Unexecuted instantiation: arg.c:flsnz64 Unexecuted instantiation: backend.c:flsnz64 Unexecuted instantiation: cache.c:flsnz64 Unexecuted instantiation: cfgcond.c:flsnz64 Unexecuted instantiation: cfgparse-global.c:flsnz64 Unexecuted instantiation: cfgparse-listen.c:flsnz64 Unexecuted instantiation: channel.c:flsnz64 Unexecuted instantiation: check.c:flsnz64 Unexecuted instantiation: compression.c:flsnz64 Unexecuted instantiation: counters.c:flsnz64 Unexecuted instantiation: dgram.c:flsnz64 Unexecuted instantiation: dict.c:flsnz64 Unexecuted instantiation: dns.c:flsnz64 Unexecuted instantiation: dns_ring.c:flsnz64 Unexecuted instantiation: eb32tree.c:flsnz64 Unexecuted instantiation: eb64tree.c:flsnz64 Unexecuted instantiation: ebimtree.c:flsnz64 Unexecuted instantiation: ebistree.c:flsnz64 Unexecuted instantiation: ebmbtree.c:flsnz64 Unexecuted instantiation: ebsttree.c:flsnz64 Unexecuted instantiation: event_hdl.c:flsnz64 Unexecuted instantiation: extcheck.c:flsnz64 Unexecuted instantiation: fcgi-app.c:flsnz64 Unexecuted instantiation: fix.c:flsnz64 Unexecuted instantiation: guid.c:flsnz64 Unexecuted instantiation: h1.c:flsnz64 Unexecuted instantiation: http_fetch.c:flsnz64 Unexecuted instantiation: mqtt.c:flsnz64 Unexecuted instantiation: mux_spop.c:flsnz64 Unexecuted instantiation: pattern.c:flsnz64 Unexecuted instantiation: payload.c:flsnz64 Unexecuted instantiation: proto_tcp.c:flsnz64 Unexecuted instantiation: shctx.c:flsnz64 Unexecuted instantiation: stats-file.c:flsnz64 Unexecuted instantiation: stats-json.c:flsnz64 Unexecuted instantiation: stats-proxy.c:flsnz64 Unexecuted instantiation: flt_spoe.c:flsnz64 Unexecuted instantiation: h1_htx.c:flsnz64 Unexecuted instantiation: lru.c:flsnz64 |
291 | 0 | # define flsnz64(x) flsnz64(x) |
292 | | # endif |
293 | | |
294 | | #elif !defined(__atom__) && defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2))) |
295 | | /* gcc >= 4.2 brings __builtin_clz() and __builtin_clzl(), usable for non-x86 */ |
296 | | |
297 | | static inline unsigned int flsnz32(unsigned int x) |
298 | | { |
299 | | return 32 - __builtin_clz(x); |
300 | | } |
301 | | # define flsnz32(x) flsnz32(x) |
302 | | |
303 | | # if defined(__SIZEOF_LONG__) && (__SIZEOF_LONG__ > 4) |
304 | | static inline unsigned int flsnz64(unsigned long x) |
305 | | { |
306 | | return (__SIZEOF_LONG__ * 8) - __builtin_clzl(x); |
307 | | } |
308 | | # define flsnz64(x) flsnz64(x) |
309 | | # endif |
310 | | |
311 | | #endif /* end of arch-specific implementations */ |
312 | | |
313 | | /*** Fallback versions below ***/ |
314 | | |
315 | | #ifndef flsnz8 |
316 | | # if defined(flsnz32) |
317 | 0 | # define flsnz8(x) flsnz32((unsigned char)x) |
318 | | # else |
319 | | static inline unsigned int flsnz8(unsigned int x) |
320 | | { |
321 | | unsigned int ret = 0; |
322 | | if (x >> 4) { x >>= 4; ret += 4; } |
323 | | return ret + ((0xFFFFAA50U >> (x << 1)) & 3) + 1; |
324 | | } |
325 | | # define flsnz8(x) flsnz8(x) |
326 | | # endif |
327 | | #endif |
328 | | |
329 | | #ifndef flsnz32 |
330 | | # define flsnz32(___a) ({ \ |
331 | | register unsigned int ___x, ___bits = 0; \ |
332 | | ___x = (___a); \ |
333 | | if (___x & 0xffff0000) { ___x &= 0xffff0000; ___bits += 16;} \ |
334 | | if (___x & 0xff00ff00) { ___x &= 0xff00ff00; ___bits += 8;} \ |
335 | | if (___x & 0xf0f0f0f0) { ___x &= 0xf0f0f0f0; ___bits += 4;} \ |
336 | | if (___x & 0xcccccccc) { ___x &= 0xcccccccc; ___bits += 2;} \ |
337 | | if (___x & 0xaaaaaaaa) { ___x &= 0xaaaaaaaa; ___bits += 1;} \ |
338 | | ___bits + 1; \ |
339 | | }) |
340 | | #endif |
341 | | |
342 | | #ifndef flsnz64 |
343 | | static inline unsigned int flsnz64(unsigned long long x) |
344 | | { |
345 | | unsigned int h; |
346 | | unsigned int bits = 32; |
347 | | |
348 | | h = x >> 32; |
349 | | if (!h) { |
350 | | h = x; |
351 | | bits = 0; |
352 | | } |
353 | | return flsnz32(h) + bits; |
354 | | } |
355 | | # define flsnz64(x) flsnz64(x) |
356 | | #endif |
357 | | |
358 | | #ifndef flsnz_long |
359 | 0 | # define flsnz_long(x) ((sizeof(long) > 4) ? flsnz64(x) : flsnz32(x)) |
360 | | #endif |
361 | | |
362 | | #ifndef flsnz |
363 | 0 | # define flsnz(x) ((sizeof(x) > 4) ? flsnz64(x) : (sizeof(x) > 1) ? flsnz32(x) : flsnz8(x)) |
364 | | #endif |
365 | | |
366 | 0 | #define fls64(x) flsnz64(x) |
367 | | #define fls_auto(x) ((x) ? flsnz(x) : 0) |
368 | | |
369 | | /* offsetof() is provided as a builtin starting with gcc-4.1 */ |
370 | | #ifndef offsetof |
371 | | # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) |
372 | | # define offsetof(type, field) __builtin_offsetof(type, field) |
373 | | # else |
374 | | # define offsetof(type, field) ((__size_t)(__uintptr_t)((const volatile void *)&((type *)0)->field)) |
375 | | # endif |
376 | | #endif |
377 | | |
378 | | /* Linux-like "container_of". It returns a pointer to the structure of type |
379 | | * <type> which has its member <name> stored at address <ptr>. |
380 | | */ |
381 | | #ifndef container_of |
382 | | #define container_of(ptr, type, name) ((type *)(((char *)(ptr)) - offsetof(type, name))) |
383 | | #endif |
384 | | |
385 | | /* returns a pointer to the structure of type <type> which has its member <name> |
386 | | * stored at address <ptr>, unless <ptr> is 0, in which case 0 is returned. |
387 | | */ |
388 | | #ifndef container_of_safe |
389 | | #define container_of_safe(ptr, type, name) \ |
390 | | ({ void *__p = (ptr); \ |
391 | | __p ? container_of(__p, type, name) : (type *)0; \ |
392 | | }) |
393 | | #endif |
394 | | |
395 | | /* Return the structure of type <type> whose member <member> points to <ptr> */ |
396 | | #define eb_entry(ptr, type, member) container_of(ptr, type, member) |
397 | | |
398 | | /***************************************\ |
399 | | * Private functions. Not for end-user * |
400 | | \***************************************/ |
401 | | |
402 | | /* Converts a root pointer to its equivalent eb_troot_t pointer, |
403 | | * ready to be stored in ->branch[], leaf_p or node_p. NULL is not |
404 | | * conserved. To be used with EB_LEAF, EB_NODE, EB_LEFT or EB_RGHT in <tag>. |
405 | | */ |
406 | | static inline eb_troot_t *eb_dotag(const struct eb_root *root, const int tag) |
407 | 0 | { |
408 | 0 | return (eb_troot_t *)((void *)root + tag); |
409 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_dotag Unexecuted instantiation: cfgparse.c:eb_dotag Unexecuted instantiation: chunk.c:eb_dotag Unexecuted instantiation: cli.c:eb_dotag Unexecuted instantiation: clock.c:eb_dotag Unexecuted instantiation: connection.c:eb_dotag Unexecuted instantiation: debug.c:eb_dotag Unexecuted instantiation: dynbuf.c:eb_dotag Unexecuted instantiation: ebtree.c:eb_dotag Unexecuted instantiation: errors.c:eb_dotag Unexecuted instantiation: fd.c:eb_dotag Unexecuted instantiation: filters.c:eb_dotag Unexecuted instantiation: flt_http_comp.c:eb_dotag Unexecuted instantiation: freq_ctr.c:eb_dotag Unexecuted instantiation: frontend.c:eb_dotag Unexecuted instantiation: haproxy.c:eb_dotag Unexecuted instantiation: http.c:eb_dotag Unexecuted instantiation: http_ana.c:eb_dotag Unexecuted instantiation: http_ext.c:eb_dotag Unexecuted instantiation: http_htx.c:eb_dotag Unexecuted instantiation: http_rules.c:eb_dotag Unexecuted instantiation: lb_chash.c:eb_dotag Unexecuted instantiation: lb_fas.c:eb_dotag Unexecuted instantiation: lb_fwlc.c:eb_dotag Unexecuted instantiation: lb_fwrr.c:eb_dotag Unexecuted instantiation: lb_map.c:eb_dotag Unexecuted instantiation: limits.c:eb_dotag Unexecuted instantiation: listener.c:eb_dotag Unexecuted instantiation: log.c:eb_dotag Unexecuted instantiation: mailers.c:eb_dotag Unexecuted instantiation: mworker.c:eb_dotag Unexecuted instantiation: peers.c:eb_dotag Unexecuted instantiation: pool.c:eb_dotag Unexecuted instantiation: proto_rhttp.c:eb_dotag Unexecuted instantiation: proto_sockpair.c:eb_dotag Unexecuted instantiation: protocol.c:eb_dotag Unexecuted instantiation: proxy.c:eb_dotag Unexecuted instantiation: queue.c:eb_dotag Unexecuted instantiation: regex.c:eb_dotag Unexecuted instantiation: resolvers.c:eb_dotag Unexecuted instantiation: ring.c:eb_dotag Unexecuted instantiation: sample.c:eb_dotag Unexecuted instantiation: server.c:eb_dotag Unexecuted instantiation: session.c:eb_dotag Unexecuted instantiation: signal.c:eb_dotag Unexecuted instantiation: sink.c:eb_dotag Unexecuted instantiation: sock.c:eb_dotag Unexecuted instantiation: sock_inet.c:eb_dotag Unexecuted instantiation: stats-html.c:eb_dotag Unexecuted instantiation: stats.c:eb_dotag Unexecuted instantiation: stconn.c:eb_dotag Unexecuted instantiation: stick_table.c:eb_dotag Unexecuted instantiation: stream.c:eb_dotag Unexecuted instantiation: systemd.c:eb_dotag Unexecuted instantiation: task.c:eb_dotag Unexecuted instantiation: tcp_rules.c:eb_dotag Unexecuted instantiation: tcpcheck.c:eb_dotag Unexecuted instantiation: thread.c:eb_dotag Unexecuted instantiation: tools.c:eb_dotag Unexecuted instantiation: trace.c:eb_dotag Unexecuted instantiation: vars.c:eb_dotag Unexecuted instantiation: acl.c:eb_dotag Unexecuted instantiation: action.c:eb_dotag Unexecuted instantiation: activity.c:eb_dotag Unexecuted instantiation: applet.c:eb_dotag Unexecuted instantiation: arg.c:eb_dotag Unexecuted instantiation: backend.c:eb_dotag Unexecuted instantiation: cache.c:eb_dotag Unexecuted instantiation: cfgcond.c:eb_dotag Unexecuted instantiation: cfgparse-global.c:eb_dotag Unexecuted instantiation: cfgparse-listen.c:eb_dotag Unexecuted instantiation: channel.c:eb_dotag Unexecuted instantiation: check.c:eb_dotag Unexecuted instantiation: compression.c:eb_dotag Unexecuted instantiation: counters.c:eb_dotag Unexecuted instantiation: dgram.c:eb_dotag Unexecuted instantiation: dict.c:eb_dotag Unexecuted instantiation: dns.c:eb_dotag Unexecuted instantiation: dns_ring.c:eb_dotag Unexecuted instantiation: eb32tree.c:eb_dotag Unexecuted instantiation: eb64tree.c:eb_dotag Unexecuted instantiation: ebimtree.c:eb_dotag Unexecuted instantiation: ebistree.c:eb_dotag Unexecuted instantiation: ebmbtree.c:eb_dotag Unexecuted instantiation: ebsttree.c:eb_dotag Unexecuted instantiation: event_hdl.c:eb_dotag Unexecuted instantiation: extcheck.c:eb_dotag Unexecuted instantiation: fcgi-app.c:eb_dotag Unexecuted instantiation: fix.c:eb_dotag Unexecuted instantiation: guid.c:eb_dotag Unexecuted instantiation: h1.c:eb_dotag Unexecuted instantiation: http_fetch.c:eb_dotag Unexecuted instantiation: mqtt.c:eb_dotag Unexecuted instantiation: mux_spop.c:eb_dotag Unexecuted instantiation: pattern.c:eb_dotag Unexecuted instantiation: payload.c:eb_dotag Unexecuted instantiation: proto_tcp.c:eb_dotag Unexecuted instantiation: shctx.c:eb_dotag Unexecuted instantiation: stats-file.c:eb_dotag Unexecuted instantiation: stats-json.c:eb_dotag Unexecuted instantiation: stats-proxy.c:eb_dotag Unexecuted instantiation: flt_spoe.c:eb_dotag Unexecuted instantiation: h1_htx.c:eb_dotag Unexecuted instantiation: lru.c:eb_dotag |
410 | | |
411 | | /* Converts an eb_troot_t pointer pointer to its equivalent eb_root pointer, |
412 | | * for use with pointers from ->branch[], leaf_p or node_p. NULL is conserved |
413 | | * as long as the tree is not corrupted. To be used with EB_LEAF, EB_NODE, |
414 | | * EB_LEFT or EB_RGHT in <tag>. |
415 | | */ |
416 | | static inline struct eb_root *eb_untag(const eb_troot_t *troot, const int tag) |
417 | 0 | { |
418 | 0 | return (struct eb_root *)((void *)troot - tag); |
419 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_untag Unexecuted instantiation: cfgparse.c:eb_untag Unexecuted instantiation: chunk.c:eb_untag Unexecuted instantiation: cli.c:eb_untag Unexecuted instantiation: clock.c:eb_untag Unexecuted instantiation: connection.c:eb_untag Unexecuted instantiation: debug.c:eb_untag Unexecuted instantiation: dynbuf.c:eb_untag Unexecuted instantiation: ebtree.c:eb_untag Unexecuted instantiation: errors.c:eb_untag Unexecuted instantiation: fd.c:eb_untag Unexecuted instantiation: filters.c:eb_untag Unexecuted instantiation: flt_http_comp.c:eb_untag Unexecuted instantiation: freq_ctr.c:eb_untag Unexecuted instantiation: frontend.c:eb_untag Unexecuted instantiation: haproxy.c:eb_untag Unexecuted instantiation: http.c:eb_untag Unexecuted instantiation: http_ana.c:eb_untag Unexecuted instantiation: http_ext.c:eb_untag Unexecuted instantiation: http_htx.c:eb_untag Unexecuted instantiation: http_rules.c:eb_untag Unexecuted instantiation: lb_chash.c:eb_untag Unexecuted instantiation: lb_fas.c:eb_untag Unexecuted instantiation: lb_fwlc.c:eb_untag Unexecuted instantiation: lb_fwrr.c:eb_untag Unexecuted instantiation: lb_map.c:eb_untag Unexecuted instantiation: limits.c:eb_untag Unexecuted instantiation: listener.c:eb_untag Unexecuted instantiation: log.c:eb_untag Unexecuted instantiation: mailers.c:eb_untag Unexecuted instantiation: mworker.c:eb_untag Unexecuted instantiation: peers.c:eb_untag Unexecuted instantiation: pool.c:eb_untag Unexecuted instantiation: proto_rhttp.c:eb_untag Unexecuted instantiation: proto_sockpair.c:eb_untag Unexecuted instantiation: protocol.c:eb_untag Unexecuted instantiation: proxy.c:eb_untag Unexecuted instantiation: queue.c:eb_untag Unexecuted instantiation: regex.c:eb_untag Unexecuted instantiation: resolvers.c:eb_untag Unexecuted instantiation: ring.c:eb_untag Unexecuted instantiation: sample.c:eb_untag Unexecuted instantiation: server.c:eb_untag Unexecuted instantiation: session.c:eb_untag Unexecuted instantiation: signal.c:eb_untag Unexecuted instantiation: sink.c:eb_untag Unexecuted instantiation: sock.c:eb_untag Unexecuted instantiation: sock_inet.c:eb_untag Unexecuted instantiation: stats-html.c:eb_untag Unexecuted instantiation: stats.c:eb_untag Unexecuted instantiation: stconn.c:eb_untag Unexecuted instantiation: stick_table.c:eb_untag Unexecuted instantiation: stream.c:eb_untag Unexecuted instantiation: systemd.c:eb_untag Unexecuted instantiation: task.c:eb_untag Unexecuted instantiation: tcp_rules.c:eb_untag Unexecuted instantiation: tcpcheck.c:eb_untag Unexecuted instantiation: thread.c:eb_untag Unexecuted instantiation: tools.c:eb_untag Unexecuted instantiation: trace.c:eb_untag Unexecuted instantiation: vars.c:eb_untag Unexecuted instantiation: acl.c:eb_untag Unexecuted instantiation: action.c:eb_untag Unexecuted instantiation: activity.c:eb_untag Unexecuted instantiation: applet.c:eb_untag Unexecuted instantiation: arg.c:eb_untag Unexecuted instantiation: backend.c:eb_untag Unexecuted instantiation: cache.c:eb_untag Unexecuted instantiation: cfgcond.c:eb_untag Unexecuted instantiation: cfgparse-global.c:eb_untag Unexecuted instantiation: cfgparse-listen.c:eb_untag Unexecuted instantiation: channel.c:eb_untag Unexecuted instantiation: check.c:eb_untag Unexecuted instantiation: compression.c:eb_untag Unexecuted instantiation: counters.c:eb_untag Unexecuted instantiation: dgram.c:eb_untag Unexecuted instantiation: dict.c:eb_untag Unexecuted instantiation: dns.c:eb_untag Unexecuted instantiation: dns_ring.c:eb_untag Unexecuted instantiation: eb32tree.c:eb_untag Unexecuted instantiation: eb64tree.c:eb_untag Unexecuted instantiation: ebimtree.c:eb_untag Unexecuted instantiation: ebistree.c:eb_untag Unexecuted instantiation: ebmbtree.c:eb_untag Unexecuted instantiation: ebsttree.c:eb_untag Unexecuted instantiation: event_hdl.c:eb_untag Unexecuted instantiation: extcheck.c:eb_untag Unexecuted instantiation: fcgi-app.c:eb_untag Unexecuted instantiation: fix.c:eb_untag Unexecuted instantiation: guid.c:eb_untag Unexecuted instantiation: h1.c:eb_untag Unexecuted instantiation: http_fetch.c:eb_untag Unexecuted instantiation: mqtt.c:eb_untag Unexecuted instantiation: mux_spop.c:eb_untag Unexecuted instantiation: pattern.c:eb_untag Unexecuted instantiation: payload.c:eb_untag Unexecuted instantiation: proto_tcp.c:eb_untag Unexecuted instantiation: shctx.c:eb_untag Unexecuted instantiation: stats-file.c:eb_untag Unexecuted instantiation: stats-json.c:eb_untag Unexecuted instantiation: stats-proxy.c:eb_untag Unexecuted instantiation: flt_spoe.c:eb_untag Unexecuted instantiation: h1_htx.c:eb_untag Unexecuted instantiation: lru.c:eb_untag |
420 | | |
421 | | /* returns the tag associated with an eb_troot_t pointer */ |
422 | | static inline int eb_gettag(eb_troot_t *troot) |
423 | 0 | { |
424 | 0 | return (unsigned long)troot & 1; |
425 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_gettag Unexecuted instantiation: cfgparse.c:eb_gettag Unexecuted instantiation: chunk.c:eb_gettag Unexecuted instantiation: cli.c:eb_gettag Unexecuted instantiation: clock.c:eb_gettag Unexecuted instantiation: connection.c:eb_gettag Unexecuted instantiation: debug.c:eb_gettag Unexecuted instantiation: dynbuf.c:eb_gettag Unexecuted instantiation: ebtree.c:eb_gettag Unexecuted instantiation: errors.c:eb_gettag Unexecuted instantiation: fd.c:eb_gettag Unexecuted instantiation: filters.c:eb_gettag Unexecuted instantiation: flt_http_comp.c:eb_gettag Unexecuted instantiation: freq_ctr.c:eb_gettag Unexecuted instantiation: frontend.c:eb_gettag Unexecuted instantiation: haproxy.c:eb_gettag Unexecuted instantiation: http.c:eb_gettag Unexecuted instantiation: http_ana.c:eb_gettag Unexecuted instantiation: http_ext.c:eb_gettag Unexecuted instantiation: http_htx.c:eb_gettag Unexecuted instantiation: http_rules.c:eb_gettag Unexecuted instantiation: lb_chash.c:eb_gettag Unexecuted instantiation: lb_fas.c:eb_gettag Unexecuted instantiation: lb_fwlc.c:eb_gettag Unexecuted instantiation: lb_fwrr.c:eb_gettag Unexecuted instantiation: lb_map.c:eb_gettag Unexecuted instantiation: limits.c:eb_gettag Unexecuted instantiation: listener.c:eb_gettag Unexecuted instantiation: log.c:eb_gettag Unexecuted instantiation: mailers.c:eb_gettag Unexecuted instantiation: mworker.c:eb_gettag Unexecuted instantiation: peers.c:eb_gettag Unexecuted instantiation: pool.c:eb_gettag Unexecuted instantiation: proto_rhttp.c:eb_gettag Unexecuted instantiation: proto_sockpair.c:eb_gettag Unexecuted instantiation: protocol.c:eb_gettag Unexecuted instantiation: proxy.c:eb_gettag Unexecuted instantiation: queue.c:eb_gettag Unexecuted instantiation: regex.c:eb_gettag Unexecuted instantiation: resolvers.c:eb_gettag Unexecuted instantiation: ring.c:eb_gettag Unexecuted instantiation: sample.c:eb_gettag Unexecuted instantiation: server.c:eb_gettag Unexecuted instantiation: session.c:eb_gettag Unexecuted instantiation: signal.c:eb_gettag Unexecuted instantiation: sink.c:eb_gettag Unexecuted instantiation: sock.c:eb_gettag Unexecuted instantiation: sock_inet.c:eb_gettag Unexecuted instantiation: stats-html.c:eb_gettag Unexecuted instantiation: stats.c:eb_gettag Unexecuted instantiation: stconn.c:eb_gettag Unexecuted instantiation: stick_table.c:eb_gettag Unexecuted instantiation: stream.c:eb_gettag Unexecuted instantiation: systemd.c:eb_gettag Unexecuted instantiation: task.c:eb_gettag Unexecuted instantiation: tcp_rules.c:eb_gettag Unexecuted instantiation: tcpcheck.c:eb_gettag Unexecuted instantiation: thread.c:eb_gettag Unexecuted instantiation: tools.c:eb_gettag Unexecuted instantiation: trace.c:eb_gettag Unexecuted instantiation: vars.c:eb_gettag Unexecuted instantiation: acl.c:eb_gettag Unexecuted instantiation: action.c:eb_gettag Unexecuted instantiation: activity.c:eb_gettag Unexecuted instantiation: applet.c:eb_gettag Unexecuted instantiation: arg.c:eb_gettag Unexecuted instantiation: backend.c:eb_gettag Unexecuted instantiation: cache.c:eb_gettag Unexecuted instantiation: cfgcond.c:eb_gettag Unexecuted instantiation: cfgparse-global.c:eb_gettag Unexecuted instantiation: cfgparse-listen.c:eb_gettag Unexecuted instantiation: channel.c:eb_gettag Unexecuted instantiation: check.c:eb_gettag Unexecuted instantiation: compression.c:eb_gettag Unexecuted instantiation: counters.c:eb_gettag Unexecuted instantiation: dgram.c:eb_gettag Unexecuted instantiation: dict.c:eb_gettag Unexecuted instantiation: dns.c:eb_gettag Unexecuted instantiation: dns_ring.c:eb_gettag Unexecuted instantiation: eb32tree.c:eb_gettag Unexecuted instantiation: eb64tree.c:eb_gettag Unexecuted instantiation: ebimtree.c:eb_gettag Unexecuted instantiation: ebistree.c:eb_gettag Unexecuted instantiation: ebmbtree.c:eb_gettag Unexecuted instantiation: ebsttree.c:eb_gettag Unexecuted instantiation: event_hdl.c:eb_gettag Unexecuted instantiation: extcheck.c:eb_gettag Unexecuted instantiation: fcgi-app.c:eb_gettag Unexecuted instantiation: fix.c:eb_gettag Unexecuted instantiation: guid.c:eb_gettag Unexecuted instantiation: h1.c:eb_gettag Unexecuted instantiation: http_fetch.c:eb_gettag Unexecuted instantiation: mqtt.c:eb_gettag Unexecuted instantiation: mux_spop.c:eb_gettag Unexecuted instantiation: pattern.c:eb_gettag Unexecuted instantiation: payload.c:eb_gettag Unexecuted instantiation: proto_tcp.c:eb_gettag Unexecuted instantiation: shctx.c:eb_gettag Unexecuted instantiation: stats-file.c:eb_gettag Unexecuted instantiation: stats-json.c:eb_gettag Unexecuted instantiation: stats-proxy.c:eb_gettag Unexecuted instantiation: flt_spoe.c:eb_gettag Unexecuted instantiation: h1_htx.c:eb_gettag Unexecuted instantiation: lru.c:eb_gettag |
426 | | |
427 | | /* Converts a root pointer to its equivalent eb_troot_t pointer and clears the |
428 | | * tag, no matter what its value was. |
429 | | */ |
430 | | static inline struct eb_root *eb_clrtag(const eb_troot_t *troot) |
431 | 0 | { |
432 | 0 | return (struct eb_root *)((unsigned long)troot & ~1UL); |
433 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_clrtag Unexecuted instantiation: cfgparse.c:eb_clrtag Unexecuted instantiation: chunk.c:eb_clrtag Unexecuted instantiation: cli.c:eb_clrtag Unexecuted instantiation: clock.c:eb_clrtag Unexecuted instantiation: connection.c:eb_clrtag Unexecuted instantiation: debug.c:eb_clrtag Unexecuted instantiation: dynbuf.c:eb_clrtag Unexecuted instantiation: ebtree.c:eb_clrtag Unexecuted instantiation: errors.c:eb_clrtag Unexecuted instantiation: fd.c:eb_clrtag Unexecuted instantiation: filters.c:eb_clrtag Unexecuted instantiation: flt_http_comp.c:eb_clrtag Unexecuted instantiation: freq_ctr.c:eb_clrtag Unexecuted instantiation: frontend.c:eb_clrtag Unexecuted instantiation: haproxy.c:eb_clrtag Unexecuted instantiation: http.c:eb_clrtag Unexecuted instantiation: http_ana.c:eb_clrtag Unexecuted instantiation: http_ext.c:eb_clrtag Unexecuted instantiation: http_htx.c:eb_clrtag Unexecuted instantiation: http_rules.c:eb_clrtag Unexecuted instantiation: lb_chash.c:eb_clrtag Unexecuted instantiation: lb_fas.c:eb_clrtag Unexecuted instantiation: lb_fwlc.c:eb_clrtag Unexecuted instantiation: lb_fwrr.c:eb_clrtag Unexecuted instantiation: lb_map.c:eb_clrtag Unexecuted instantiation: limits.c:eb_clrtag Unexecuted instantiation: listener.c:eb_clrtag Unexecuted instantiation: log.c:eb_clrtag Unexecuted instantiation: mailers.c:eb_clrtag Unexecuted instantiation: mworker.c:eb_clrtag Unexecuted instantiation: peers.c:eb_clrtag Unexecuted instantiation: pool.c:eb_clrtag Unexecuted instantiation: proto_rhttp.c:eb_clrtag Unexecuted instantiation: proto_sockpair.c:eb_clrtag Unexecuted instantiation: protocol.c:eb_clrtag Unexecuted instantiation: proxy.c:eb_clrtag Unexecuted instantiation: queue.c:eb_clrtag Unexecuted instantiation: regex.c:eb_clrtag Unexecuted instantiation: resolvers.c:eb_clrtag Unexecuted instantiation: ring.c:eb_clrtag Unexecuted instantiation: sample.c:eb_clrtag Unexecuted instantiation: server.c:eb_clrtag Unexecuted instantiation: session.c:eb_clrtag Unexecuted instantiation: signal.c:eb_clrtag Unexecuted instantiation: sink.c:eb_clrtag Unexecuted instantiation: sock.c:eb_clrtag Unexecuted instantiation: sock_inet.c:eb_clrtag Unexecuted instantiation: stats-html.c:eb_clrtag Unexecuted instantiation: stats.c:eb_clrtag Unexecuted instantiation: stconn.c:eb_clrtag Unexecuted instantiation: stick_table.c:eb_clrtag Unexecuted instantiation: stream.c:eb_clrtag Unexecuted instantiation: systemd.c:eb_clrtag Unexecuted instantiation: task.c:eb_clrtag Unexecuted instantiation: tcp_rules.c:eb_clrtag Unexecuted instantiation: tcpcheck.c:eb_clrtag Unexecuted instantiation: thread.c:eb_clrtag Unexecuted instantiation: tools.c:eb_clrtag Unexecuted instantiation: trace.c:eb_clrtag Unexecuted instantiation: vars.c:eb_clrtag Unexecuted instantiation: acl.c:eb_clrtag Unexecuted instantiation: action.c:eb_clrtag Unexecuted instantiation: activity.c:eb_clrtag Unexecuted instantiation: applet.c:eb_clrtag Unexecuted instantiation: arg.c:eb_clrtag Unexecuted instantiation: backend.c:eb_clrtag Unexecuted instantiation: cache.c:eb_clrtag Unexecuted instantiation: cfgcond.c:eb_clrtag Unexecuted instantiation: cfgparse-global.c:eb_clrtag Unexecuted instantiation: cfgparse-listen.c:eb_clrtag Unexecuted instantiation: channel.c:eb_clrtag Unexecuted instantiation: check.c:eb_clrtag Unexecuted instantiation: compression.c:eb_clrtag Unexecuted instantiation: counters.c:eb_clrtag Unexecuted instantiation: dgram.c:eb_clrtag Unexecuted instantiation: dict.c:eb_clrtag Unexecuted instantiation: dns.c:eb_clrtag Unexecuted instantiation: dns_ring.c:eb_clrtag Unexecuted instantiation: eb32tree.c:eb_clrtag Unexecuted instantiation: eb64tree.c:eb_clrtag Unexecuted instantiation: ebimtree.c:eb_clrtag Unexecuted instantiation: ebistree.c:eb_clrtag Unexecuted instantiation: ebmbtree.c:eb_clrtag Unexecuted instantiation: ebsttree.c:eb_clrtag Unexecuted instantiation: event_hdl.c:eb_clrtag Unexecuted instantiation: extcheck.c:eb_clrtag Unexecuted instantiation: fcgi-app.c:eb_clrtag Unexecuted instantiation: fix.c:eb_clrtag Unexecuted instantiation: guid.c:eb_clrtag Unexecuted instantiation: h1.c:eb_clrtag Unexecuted instantiation: http_fetch.c:eb_clrtag Unexecuted instantiation: mqtt.c:eb_clrtag Unexecuted instantiation: mux_spop.c:eb_clrtag Unexecuted instantiation: pattern.c:eb_clrtag Unexecuted instantiation: payload.c:eb_clrtag Unexecuted instantiation: proto_tcp.c:eb_clrtag Unexecuted instantiation: shctx.c:eb_clrtag Unexecuted instantiation: stats-file.c:eb_clrtag Unexecuted instantiation: stats-json.c:eb_clrtag Unexecuted instantiation: stats-proxy.c:eb_clrtag Unexecuted instantiation: flt_spoe.c:eb_clrtag Unexecuted instantiation: h1_htx.c:eb_clrtag Unexecuted instantiation: lru.c:eb_clrtag |
434 | | |
435 | | /* Returns a pointer to the eb_node holding <root> */ |
436 | | static inline struct eb_node *eb_root_to_node(struct eb_root *root) |
437 | 0 | { |
438 | 0 | return container_of(root, struct eb_node, branches); |
439 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_root_to_node Unexecuted instantiation: cfgparse.c:eb_root_to_node Unexecuted instantiation: chunk.c:eb_root_to_node Unexecuted instantiation: cli.c:eb_root_to_node Unexecuted instantiation: clock.c:eb_root_to_node Unexecuted instantiation: connection.c:eb_root_to_node Unexecuted instantiation: debug.c:eb_root_to_node Unexecuted instantiation: dynbuf.c:eb_root_to_node Unexecuted instantiation: ebtree.c:eb_root_to_node Unexecuted instantiation: errors.c:eb_root_to_node Unexecuted instantiation: fd.c:eb_root_to_node Unexecuted instantiation: filters.c:eb_root_to_node Unexecuted instantiation: flt_http_comp.c:eb_root_to_node Unexecuted instantiation: freq_ctr.c:eb_root_to_node Unexecuted instantiation: frontend.c:eb_root_to_node Unexecuted instantiation: haproxy.c:eb_root_to_node Unexecuted instantiation: http.c:eb_root_to_node Unexecuted instantiation: http_ana.c:eb_root_to_node Unexecuted instantiation: http_ext.c:eb_root_to_node Unexecuted instantiation: http_htx.c:eb_root_to_node Unexecuted instantiation: http_rules.c:eb_root_to_node Unexecuted instantiation: lb_chash.c:eb_root_to_node Unexecuted instantiation: lb_fas.c:eb_root_to_node Unexecuted instantiation: lb_fwlc.c:eb_root_to_node Unexecuted instantiation: lb_fwrr.c:eb_root_to_node Unexecuted instantiation: lb_map.c:eb_root_to_node Unexecuted instantiation: limits.c:eb_root_to_node Unexecuted instantiation: listener.c:eb_root_to_node Unexecuted instantiation: log.c:eb_root_to_node Unexecuted instantiation: mailers.c:eb_root_to_node Unexecuted instantiation: mworker.c:eb_root_to_node Unexecuted instantiation: peers.c:eb_root_to_node Unexecuted instantiation: pool.c:eb_root_to_node Unexecuted instantiation: proto_rhttp.c:eb_root_to_node Unexecuted instantiation: proto_sockpair.c:eb_root_to_node Unexecuted instantiation: protocol.c:eb_root_to_node Unexecuted instantiation: proxy.c:eb_root_to_node Unexecuted instantiation: queue.c:eb_root_to_node Unexecuted instantiation: regex.c:eb_root_to_node Unexecuted instantiation: resolvers.c:eb_root_to_node Unexecuted instantiation: ring.c:eb_root_to_node Unexecuted instantiation: sample.c:eb_root_to_node Unexecuted instantiation: server.c:eb_root_to_node Unexecuted instantiation: session.c:eb_root_to_node Unexecuted instantiation: signal.c:eb_root_to_node Unexecuted instantiation: sink.c:eb_root_to_node Unexecuted instantiation: sock.c:eb_root_to_node Unexecuted instantiation: sock_inet.c:eb_root_to_node Unexecuted instantiation: stats-html.c:eb_root_to_node Unexecuted instantiation: stats.c:eb_root_to_node Unexecuted instantiation: stconn.c:eb_root_to_node Unexecuted instantiation: stick_table.c:eb_root_to_node Unexecuted instantiation: stream.c:eb_root_to_node Unexecuted instantiation: systemd.c:eb_root_to_node Unexecuted instantiation: task.c:eb_root_to_node Unexecuted instantiation: tcp_rules.c:eb_root_to_node Unexecuted instantiation: tcpcheck.c:eb_root_to_node Unexecuted instantiation: thread.c:eb_root_to_node Unexecuted instantiation: tools.c:eb_root_to_node Unexecuted instantiation: trace.c:eb_root_to_node Unexecuted instantiation: vars.c:eb_root_to_node Unexecuted instantiation: acl.c:eb_root_to_node Unexecuted instantiation: action.c:eb_root_to_node Unexecuted instantiation: activity.c:eb_root_to_node Unexecuted instantiation: applet.c:eb_root_to_node Unexecuted instantiation: arg.c:eb_root_to_node Unexecuted instantiation: backend.c:eb_root_to_node Unexecuted instantiation: cache.c:eb_root_to_node Unexecuted instantiation: cfgcond.c:eb_root_to_node Unexecuted instantiation: cfgparse-global.c:eb_root_to_node Unexecuted instantiation: cfgparse-listen.c:eb_root_to_node Unexecuted instantiation: channel.c:eb_root_to_node Unexecuted instantiation: check.c:eb_root_to_node Unexecuted instantiation: compression.c:eb_root_to_node Unexecuted instantiation: counters.c:eb_root_to_node Unexecuted instantiation: dgram.c:eb_root_to_node Unexecuted instantiation: dict.c:eb_root_to_node Unexecuted instantiation: dns.c:eb_root_to_node Unexecuted instantiation: dns_ring.c:eb_root_to_node Unexecuted instantiation: eb32tree.c:eb_root_to_node Unexecuted instantiation: eb64tree.c:eb_root_to_node Unexecuted instantiation: ebimtree.c:eb_root_to_node Unexecuted instantiation: ebistree.c:eb_root_to_node Unexecuted instantiation: ebmbtree.c:eb_root_to_node Unexecuted instantiation: ebsttree.c:eb_root_to_node Unexecuted instantiation: event_hdl.c:eb_root_to_node Unexecuted instantiation: extcheck.c:eb_root_to_node Unexecuted instantiation: fcgi-app.c:eb_root_to_node Unexecuted instantiation: fix.c:eb_root_to_node Unexecuted instantiation: guid.c:eb_root_to_node Unexecuted instantiation: h1.c:eb_root_to_node Unexecuted instantiation: http_fetch.c:eb_root_to_node Unexecuted instantiation: mqtt.c:eb_root_to_node Unexecuted instantiation: mux_spop.c:eb_root_to_node Unexecuted instantiation: pattern.c:eb_root_to_node Unexecuted instantiation: payload.c:eb_root_to_node Unexecuted instantiation: proto_tcp.c:eb_root_to_node Unexecuted instantiation: shctx.c:eb_root_to_node Unexecuted instantiation: stats-file.c:eb_root_to_node Unexecuted instantiation: stats-json.c:eb_root_to_node Unexecuted instantiation: stats-proxy.c:eb_root_to_node Unexecuted instantiation: flt_spoe.c:eb_root_to_node Unexecuted instantiation: h1_htx.c:eb_root_to_node Unexecuted instantiation: lru.c:eb_root_to_node |
440 | | |
441 | | /* Walks down starting at root pointer <start>, and always walking on side |
442 | | * <side>. It either returns the node hosting the first leaf on that side, |
443 | | * or NULL if no leaf is found. <start> may either be NULL or a branch pointer. |
444 | | * The pointer to the leaf (or NULL) is returned. |
445 | | */ |
446 | | static inline struct eb_node *eb_walk_down(eb_troot_t *start, unsigned int side) |
447 | 0 | { |
448 | | /* A NULL pointer on an empty tree root will be returned as-is */ |
449 | 0 | while (eb_gettag(start) == EB_NODE) |
450 | 0 | start = (eb_untag(start, EB_NODE))->b[side]; |
451 | | /* NULL is left untouched (root==eb_node, EB_LEAF==0) */ |
452 | 0 | return eb_root_to_node(eb_untag(start, EB_LEAF)); |
453 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_walk_down Unexecuted instantiation: cfgparse.c:eb_walk_down Unexecuted instantiation: chunk.c:eb_walk_down Unexecuted instantiation: cli.c:eb_walk_down Unexecuted instantiation: clock.c:eb_walk_down Unexecuted instantiation: connection.c:eb_walk_down Unexecuted instantiation: debug.c:eb_walk_down Unexecuted instantiation: dynbuf.c:eb_walk_down Unexecuted instantiation: ebtree.c:eb_walk_down Unexecuted instantiation: errors.c:eb_walk_down Unexecuted instantiation: fd.c:eb_walk_down Unexecuted instantiation: filters.c:eb_walk_down Unexecuted instantiation: flt_http_comp.c:eb_walk_down Unexecuted instantiation: freq_ctr.c:eb_walk_down Unexecuted instantiation: frontend.c:eb_walk_down Unexecuted instantiation: haproxy.c:eb_walk_down Unexecuted instantiation: http.c:eb_walk_down Unexecuted instantiation: http_ana.c:eb_walk_down Unexecuted instantiation: http_ext.c:eb_walk_down Unexecuted instantiation: http_htx.c:eb_walk_down Unexecuted instantiation: http_rules.c:eb_walk_down Unexecuted instantiation: lb_chash.c:eb_walk_down Unexecuted instantiation: lb_fas.c:eb_walk_down Unexecuted instantiation: lb_fwlc.c:eb_walk_down Unexecuted instantiation: lb_fwrr.c:eb_walk_down Unexecuted instantiation: lb_map.c:eb_walk_down Unexecuted instantiation: limits.c:eb_walk_down Unexecuted instantiation: listener.c:eb_walk_down Unexecuted instantiation: log.c:eb_walk_down Unexecuted instantiation: mailers.c:eb_walk_down Unexecuted instantiation: mworker.c:eb_walk_down Unexecuted instantiation: peers.c:eb_walk_down Unexecuted instantiation: pool.c:eb_walk_down Unexecuted instantiation: proto_rhttp.c:eb_walk_down Unexecuted instantiation: proto_sockpair.c:eb_walk_down Unexecuted instantiation: protocol.c:eb_walk_down Unexecuted instantiation: proxy.c:eb_walk_down Unexecuted instantiation: queue.c:eb_walk_down Unexecuted instantiation: regex.c:eb_walk_down Unexecuted instantiation: resolvers.c:eb_walk_down Unexecuted instantiation: ring.c:eb_walk_down Unexecuted instantiation: sample.c:eb_walk_down Unexecuted instantiation: server.c:eb_walk_down Unexecuted instantiation: session.c:eb_walk_down Unexecuted instantiation: signal.c:eb_walk_down Unexecuted instantiation: sink.c:eb_walk_down Unexecuted instantiation: sock.c:eb_walk_down Unexecuted instantiation: sock_inet.c:eb_walk_down Unexecuted instantiation: stats-html.c:eb_walk_down Unexecuted instantiation: stats.c:eb_walk_down Unexecuted instantiation: stconn.c:eb_walk_down Unexecuted instantiation: stick_table.c:eb_walk_down Unexecuted instantiation: stream.c:eb_walk_down Unexecuted instantiation: systemd.c:eb_walk_down Unexecuted instantiation: task.c:eb_walk_down Unexecuted instantiation: tcp_rules.c:eb_walk_down Unexecuted instantiation: tcpcheck.c:eb_walk_down Unexecuted instantiation: thread.c:eb_walk_down Unexecuted instantiation: tools.c:eb_walk_down Unexecuted instantiation: trace.c:eb_walk_down Unexecuted instantiation: vars.c:eb_walk_down Unexecuted instantiation: acl.c:eb_walk_down Unexecuted instantiation: action.c:eb_walk_down Unexecuted instantiation: activity.c:eb_walk_down Unexecuted instantiation: applet.c:eb_walk_down Unexecuted instantiation: arg.c:eb_walk_down Unexecuted instantiation: backend.c:eb_walk_down Unexecuted instantiation: cache.c:eb_walk_down Unexecuted instantiation: cfgcond.c:eb_walk_down Unexecuted instantiation: cfgparse-global.c:eb_walk_down Unexecuted instantiation: cfgparse-listen.c:eb_walk_down Unexecuted instantiation: channel.c:eb_walk_down Unexecuted instantiation: check.c:eb_walk_down Unexecuted instantiation: compression.c:eb_walk_down Unexecuted instantiation: counters.c:eb_walk_down Unexecuted instantiation: dgram.c:eb_walk_down Unexecuted instantiation: dict.c:eb_walk_down Unexecuted instantiation: dns.c:eb_walk_down Unexecuted instantiation: dns_ring.c:eb_walk_down Unexecuted instantiation: eb32tree.c:eb_walk_down Unexecuted instantiation: eb64tree.c:eb_walk_down Unexecuted instantiation: ebimtree.c:eb_walk_down Unexecuted instantiation: ebistree.c:eb_walk_down Unexecuted instantiation: ebmbtree.c:eb_walk_down Unexecuted instantiation: ebsttree.c:eb_walk_down Unexecuted instantiation: event_hdl.c:eb_walk_down Unexecuted instantiation: extcheck.c:eb_walk_down Unexecuted instantiation: fcgi-app.c:eb_walk_down Unexecuted instantiation: fix.c:eb_walk_down Unexecuted instantiation: guid.c:eb_walk_down Unexecuted instantiation: h1.c:eb_walk_down Unexecuted instantiation: http_fetch.c:eb_walk_down Unexecuted instantiation: mqtt.c:eb_walk_down Unexecuted instantiation: mux_spop.c:eb_walk_down Unexecuted instantiation: pattern.c:eb_walk_down Unexecuted instantiation: payload.c:eb_walk_down Unexecuted instantiation: proto_tcp.c:eb_walk_down Unexecuted instantiation: shctx.c:eb_walk_down Unexecuted instantiation: stats-file.c:eb_walk_down Unexecuted instantiation: stats-json.c:eb_walk_down Unexecuted instantiation: stats-proxy.c:eb_walk_down Unexecuted instantiation: flt_spoe.c:eb_walk_down Unexecuted instantiation: h1_htx.c:eb_walk_down Unexecuted instantiation: lru.c:eb_walk_down |
454 | | |
455 | | /* This function is used to build a tree of duplicates by adding a new node to |
456 | | * a subtree of at least 2 entries. It will probably never be needed inlined, |
457 | | * and it is not for end-user. |
458 | | */ |
459 | | static forceinline struct eb_node * |
460 | | __eb_insert_dup(struct eb_node *sub, struct eb_node *new) |
461 | 0 | { |
462 | 0 | struct eb_node *head = sub; |
463 | | |
464 | 0 | eb_troot_t *new_left = eb_dotag(&new->branches, EB_LEFT); |
465 | 0 | eb_troot_t *new_rght = eb_dotag(&new->branches, EB_RGHT); |
466 | 0 | eb_troot_t *new_leaf = eb_dotag(&new->branches, EB_LEAF); |
467 | | |
468 | | /* first, identify the deepest hole on the right branch */ |
469 | 0 | while (eb_gettag(head->branches.b[EB_RGHT]) != EB_LEAF) { |
470 | 0 | struct eb_node *last = head; |
471 | 0 | head = container_of(eb_untag(head->branches.b[EB_RGHT], EB_NODE), |
472 | 0 | struct eb_node, branches); |
473 | 0 | if (head->bit > last->bit + 1) |
474 | 0 | sub = head; /* there's a hole here */ |
475 | 0 | } |
476 | | |
477 | | /* Here we have a leaf attached to (head)->b[EB_RGHT] */ |
478 | 0 | if (head->bit < -1) { |
479 | | /* A hole exists just before the leaf, we insert there */ |
480 | 0 | new->bit = -1; |
481 | 0 | sub = container_of(eb_untag(head->branches.b[EB_RGHT], EB_LEAF), |
482 | 0 | struct eb_node, branches); |
483 | 0 | head->branches.b[EB_RGHT] = eb_dotag(&new->branches, EB_NODE); |
484 | |
|
485 | 0 | new->node_p = sub->leaf_p; |
486 | 0 | new->leaf_p = new_rght; |
487 | 0 | sub->leaf_p = new_left; |
488 | 0 | new->branches.b[EB_LEFT] = eb_dotag(&sub->branches, EB_LEAF); |
489 | 0 | new->branches.b[EB_RGHT] = new_leaf; |
490 | 0 | return new; |
491 | 0 | } else { |
492 | 0 | int side; |
493 | | /* No hole was found before a leaf. We have to insert above |
494 | | * <sub>. Note that we cannot be certain that <sub> is attached |
495 | | * to the right of its parent, as this is only true if <sub> |
496 | | * is inside the dup tree, not at the head. |
497 | | */ |
498 | 0 | new->bit = sub->bit - 1; /* install at the lowest level */ |
499 | 0 | side = eb_gettag(sub->node_p); |
500 | 0 | head = container_of(eb_untag(sub->node_p, side), struct eb_node, branches); |
501 | 0 | head->branches.b[side] = eb_dotag(&new->branches, EB_NODE); |
502 | | |
503 | 0 | new->node_p = sub->node_p; |
504 | 0 | new->leaf_p = new_rght; |
505 | 0 | sub->node_p = new_left; |
506 | 0 | new->branches.b[EB_LEFT] = eb_dotag(&sub->branches, EB_NODE); |
507 | 0 | new->branches.b[EB_RGHT] = new_leaf; |
508 | 0 | return new; |
509 | 0 | } |
510 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:__eb_insert_dup Unexecuted instantiation: cfgparse.c:__eb_insert_dup Unexecuted instantiation: chunk.c:__eb_insert_dup Unexecuted instantiation: cli.c:__eb_insert_dup Unexecuted instantiation: clock.c:__eb_insert_dup Unexecuted instantiation: connection.c:__eb_insert_dup Unexecuted instantiation: debug.c:__eb_insert_dup Unexecuted instantiation: dynbuf.c:__eb_insert_dup Unexecuted instantiation: ebtree.c:__eb_insert_dup Unexecuted instantiation: errors.c:__eb_insert_dup Unexecuted instantiation: fd.c:__eb_insert_dup Unexecuted instantiation: filters.c:__eb_insert_dup Unexecuted instantiation: flt_http_comp.c:__eb_insert_dup Unexecuted instantiation: freq_ctr.c:__eb_insert_dup Unexecuted instantiation: frontend.c:__eb_insert_dup Unexecuted instantiation: haproxy.c:__eb_insert_dup Unexecuted instantiation: http.c:__eb_insert_dup Unexecuted instantiation: http_ana.c:__eb_insert_dup Unexecuted instantiation: http_ext.c:__eb_insert_dup Unexecuted instantiation: http_htx.c:__eb_insert_dup Unexecuted instantiation: http_rules.c:__eb_insert_dup Unexecuted instantiation: lb_chash.c:__eb_insert_dup Unexecuted instantiation: lb_fas.c:__eb_insert_dup Unexecuted instantiation: lb_fwlc.c:__eb_insert_dup Unexecuted instantiation: lb_fwrr.c:__eb_insert_dup Unexecuted instantiation: lb_map.c:__eb_insert_dup Unexecuted instantiation: limits.c:__eb_insert_dup Unexecuted instantiation: listener.c:__eb_insert_dup Unexecuted instantiation: log.c:__eb_insert_dup Unexecuted instantiation: mailers.c:__eb_insert_dup Unexecuted instantiation: mworker.c:__eb_insert_dup Unexecuted instantiation: peers.c:__eb_insert_dup Unexecuted instantiation: pool.c:__eb_insert_dup Unexecuted instantiation: proto_rhttp.c:__eb_insert_dup Unexecuted instantiation: proto_sockpair.c:__eb_insert_dup Unexecuted instantiation: protocol.c:__eb_insert_dup Unexecuted instantiation: proxy.c:__eb_insert_dup Unexecuted instantiation: queue.c:__eb_insert_dup Unexecuted instantiation: regex.c:__eb_insert_dup Unexecuted instantiation: resolvers.c:__eb_insert_dup Unexecuted instantiation: ring.c:__eb_insert_dup Unexecuted instantiation: sample.c:__eb_insert_dup Unexecuted instantiation: server.c:__eb_insert_dup Unexecuted instantiation: session.c:__eb_insert_dup Unexecuted instantiation: signal.c:__eb_insert_dup Unexecuted instantiation: sink.c:__eb_insert_dup Unexecuted instantiation: sock.c:__eb_insert_dup Unexecuted instantiation: sock_inet.c:__eb_insert_dup Unexecuted instantiation: stats-html.c:__eb_insert_dup Unexecuted instantiation: stats.c:__eb_insert_dup Unexecuted instantiation: stconn.c:__eb_insert_dup Unexecuted instantiation: stick_table.c:__eb_insert_dup Unexecuted instantiation: stream.c:__eb_insert_dup Unexecuted instantiation: systemd.c:__eb_insert_dup Unexecuted instantiation: task.c:__eb_insert_dup Unexecuted instantiation: tcp_rules.c:__eb_insert_dup Unexecuted instantiation: tcpcheck.c:__eb_insert_dup Unexecuted instantiation: thread.c:__eb_insert_dup Unexecuted instantiation: tools.c:__eb_insert_dup Unexecuted instantiation: trace.c:__eb_insert_dup Unexecuted instantiation: vars.c:__eb_insert_dup Unexecuted instantiation: acl.c:__eb_insert_dup Unexecuted instantiation: action.c:__eb_insert_dup Unexecuted instantiation: activity.c:__eb_insert_dup Unexecuted instantiation: applet.c:__eb_insert_dup Unexecuted instantiation: arg.c:__eb_insert_dup Unexecuted instantiation: backend.c:__eb_insert_dup Unexecuted instantiation: cache.c:__eb_insert_dup Unexecuted instantiation: cfgcond.c:__eb_insert_dup Unexecuted instantiation: cfgparse-global.c:__eb_insert_dup Unexecuted instantiation: cfgparse-listen.c:__eb_insert_dup Unexecuted instantiation: channel.c:__eb_insert_dup Unexecuted instantiation: check.c:__eb_insert_dup Unexecuted instantiation: compression.c:__eb_insert_dup Unexecuted instantiation: counters.c:__eb_insert_dup Unexecuted instantiation: dgram.c:__eb_insert_dup Unexecuted instantiation: dict.c:__eb_insert_dup Unexecuted instantiation: dns.c:__eb_insert_dup Unexecuted instantiation: dns_ring.c:__eb_insert_dup Unexecuted instantiation: eb32tree.c:__eb_insert_dup Unexecuted instantiation: eb64tree.c:__eb_insert_dup Unexecuted instantiation: ebimtree.c:__eb_insert_dup Unexecuted instantiation: ebistree.c:__eb_insert_dup Unexecuted instantiation: ebmbtree.c:__eb_insert_dup Unexecuted instantiation: ebsttree.c:__eb_insert_dup Unexecuted instantiation: event_hdl.c:__eb_insert_dup Unexecuted instantiation: extcheck.c:__eb_insert_dup Unexecuted instantiation: fcgi-app.c:__eb_insert_dup Unexecuted instantiation: fix.c:__eb_insert_dup Unexecuted instantiation: guid.c:__eb_insert_dup Unexecuted instantiation: h1.c:__eb_insert_dup Unexecuted instantiation: http_fetch.c:__eb_insert_dup Unexecuted instantiation: mqtt.c:__eb_insert_dup Unexecuted instantiation: mux_spop.c:__eb_insert_dup Unexecuted instantiation: pattern.c:__eb_insert_dup Unexecuted instantiation: payload.c:__eb_insert_dup Unexecuted instantiation: proto_tcp.c:__eb_insert_dup Unexecuted instantiation: shctx.c:__eb_insert_dup Unexecuted instantiation: stats-file.c:__eb_insert_dup Unexecuted instantiation: stats-json.c:__eb_insert_dup Unexecuted instantiation: stats-proxy.c:__eb_insert_dup Unexecuted instantiation: flt_spoe.c:__eb_insert_dup Unexecuted instantiation: h1_htx.c:__eb_insert_dup Unexecuted instantiation: lru.c:__eb_insert_dup |
511 | | |
512 | | /* __builtin_prefetch() appears in gcc-3.1 documentation */ |
513 | | #if !defined(eb_prefetch) |
514 | | # if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))) |
515 | 0 | # define eb_prefetch(a,b) __builtin_prefetch(a,b) |
516 | | # else |
517 | | # define eb_prefetch(a,b) do { } while (0) |
518 | | # endif |
519 | | #endif |
520 | | |
521 | | |
522 | | /**************************************\ |
523 | | * Public functions, for the end-user * |
524 | | \**************************************/ |
525 | | |
526 | | /* Return non-zero if the tree is empty, otherwise zero */ |
527 | | static inline int eb_is_empty(const struct eb_root *root) |
528 | 0 | { |
529 | 0 | return !root->b[EB_LEFT]; |
530 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_is_empty Unexecuted instantiation: cfgparse.c:eb_is_empty Unexecuted instantiation: chunk.c:eb_is_empty Unexecuted instantiation: cli.c:eb_is_empty Unexecuted instantiation: clock.c:eb_is_empty Unexecuted instantiation: connection.c:eb_is_empty Unexecuted instantiation: debug.c:eb_is_empty Unexecuted instantiation: dynbuf.c:eb_is_empty Unexecuted instantiation: ebtree.c:eb_is_empty Unexecuted instantiation: errors.c:eb_is_empty Unexecuted instantiation: fd.c:eb_is_empty Unexecuted instantiation: filters.c:eb_is_empty Unexecuted instantiation: flt_http_comp.c:eb_is_empty Unexecuted instantiation: freq_ctr.c:eb_is_empty Unexecuted instantiation: frontend.c:eb_is_empty Unexecuted instantiation: haproxy.c:eb_is_empty Unexecuted instantiation: http.c:eb_is_empty Unexecuted instantiation: http_ana.c:eb_is_empty Unexecuted instantiation: http_ext.c:eb_is_empty Unexecuted instantiation: http_htx.c:eb_is_empty Unexecuted instantiation: http_rules.c:eb_is_empty Unexecuted instantiation: lb_chash.c:eb_is_empty Unexecuted instantiation: lb_fas.c:eb_is_empty Unexecuted instantiation: lb_fwlc.c:eb_is_empty Unexecuted instantiation: lb_fwrr.c:eb_is_empty Unexecuted instantiation: lb_map.c:eb_is_empty Unexecuted instantiation: limits.c:eb_is_empty Unexecuted instantiation: listener.c:eb_is_empty Unexecuted instantiation: log.c:eb_is_empty Unexecuted instantiation: mailers.c:eb_is_empty Unexecuted instantiation: mworker.c:eb_is_empty Unexecuted instantiation: peers.c:eb_is_empty Unexecuted instantiation: pool.c:eb_is_empty Unexecuted instantiation: proto_rhttp.c:eb_is_empty Unexecuted instantiation: proto_sockpair.c:eb_is_empty Unexecuted instantiation: protocol.c:eb_is_empty Unexecuted instantiation: proxy.c:eb_is_empty Unexecuted instantiation: queue.c:eb_is_empty Unexecuted instantiation: regex.c:eb_is_empty Unexecuted instantiation: resolvers.c:eb_is_empty Unexecuted instantiation: ring.c:eb_is_empty Unexecuted instantiation: sample.c:eb_is_empty Unexecuted instantiation: server.c:eb_is_empty Unexecuted instantiation: session.c:eb_is_empty Unexecuted instantiation: signal.c:eb_is_empty Unexecuted instantiation: sink.c:eb_is_empty Unexecuted instantiation: sock.c:eb_is_empty Unexecuted instantiation: sock_inet.c:eb_is_empty Unexecuted instantiation: stats-html.c:eb_is_empty Unexecuted instantiation: stats.c:eb_is_empty Unexecuted instantiation: stconn.c:eb_is_empty Unexecuted instantiation: stick_table.c:eb_is_empty Unexecuted instantiation: stream.c:eb_is_empty Unexecuted instantiation: systemd.c:eb_is_empty Unexecuted instantiation: task.c:eb_is_empty Unexecuted instantiation: tcp_rules.c:eb_is_empty Unexecuted instantiation: tcpcheck.c:eb_is_empty Unexecuted instantiation: thread.c:eb_is_empty Unexecuted instantiation: tools.c:eb_is_empty Unexecuted instantiation: trace.c:eb_is_empty Unexecuted instantiation: vars.c:eb_is_empty Unexecuted instantiation: acl.c:eb_is_empty Unexecuted instantiation: action.c:eb_is_empty Unexecuted instantiation: activity.c:eb_is_empty Unexecuted instantiation: applet.c:eb_is_empty Unexecuted instantiation: arg.c:eb_is_empty Unexecuted instantiation: backend.c:eb_is_empty Unexecuted instantiation: cache.c:eb_is_empty Unexecuted instantiation: cfgcond.c:eb_is_empty Unexecuted instantiation: cfgparse-global.c:eb_is_empty Unexecuted instantiation: cfgparse-listen.c:eb_is_empty Unexecuted instantiation: channel.c:eb_is_empty Unexecuted instantiation: check.c:eb_is_empty Unexecuted instantiation: compression.c:eb_is_empty Unexecuted instantiation: counters.c:eb_is_empty Unexecuted instantiation: dgram.c:eb_is_empty Unexecuted instantiation: dict.c:eb_is_empty Unexecuted instantiation: dns.c:eb_is_empty Unexecuted instantiation: dns_ring.c:eb_is_empty Unexecuted instantiation: eb32tree.c:eb_is_empty Unexecuted instantiation: eb64tree.c:eb_is_empty Unexecuted instantiation: ebimtree.c:eb_is_empty Unexecuted instantiation: ebistree.c:eb_is_empty Unexecuted instantiation: ebmbtree.c:eb_is_empty Unexecuted instantiation: ebsttree.c:eb_is_empty Unexecuted instantiation: event_hdl.c:eb_is_empty Unexecuted instantiation: extcheck.c:eb_is_empty Unexecuted instantiation: fcgi-app.c:eb_is_empty Unexecuted instantiation: fix.c:eb_is_empty Unexecuted instantiation: guid.c:eb_is_empty Unexecuted instantiation: h1.c:eb_is_empty Unexecuted instantiation: http_fetch.c:eb_is_empty Unexecuted instantiation: mqtt.c:eb_is_empty Unexecuted instantiation: mux_spop.c:eb_is_empty Unexecuted instantiation: pattern.c:eb_is_empty Unexecuted instantiation: payload.c:eb_is_empty Unexecuted instantiation: proto_tcp.c:eb_is_empty Unexecuted instantiation: shctx.c:eb_is_empty Unexecuted instantiation: stats-file.c:eb_is_empty Unexecuted instantiation: stats-json.c:eb_is_empty Unexecuted instantiation: stats-proxy.c:eb_is_empty Unexecuted instantiation: flt_spoe.c:eb_is_empty Unexecuted instantiation: h1_htx.c:eb_is_empty Unexecuted instantiation: lru.c:eb_is_empty |
531 | | |
532 | | /* Return non-zero if the node is a duplicate, otherwise zero */ |
533 | | static inline int eb_is_dup(const struct eb_node *node) |
534 | 0 | { |
535 | 0 | return node->bit < 0; |
536 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_is_dup Unexecuted instantiation: cfgparse.c:eb_is_dup Unexecuted instantiation: chunk.c:eb_is_dup Unexecuted instantiation: cli.c:eb_is_dup Unexecuted instantiation: clock.c:eb_is_dup Unexecuted instantiation: connection.c:eb_is_dup Unexecuted instantiation: debug.c:eb_is_dup Unexecuted instantiation: dynbuf.c:eb_is_dup Unexecuted instantiation: ebtree.c:eb_is_dup Unexecuted instantiation: errors.c:eb_is_dup Unexecuted instantiation: fd.c:eb_is_dup Unexecuted instantiation: filters.c:eb_is_dup Unexecuted instantiation: flt_http_comp.c:eb_is_dup Unexecuted instantiation: freq_ctr.c:eb_is_dup Unexecuted instantiation: frontend.c:eb_is_dup Unexecuted instantiation: haproxy.c:eb_is_dup Unexecuted instantiation: http.c:eb_is_dup Unexecuted instantiation: http_ana.c:eb_is_dup Unexecuted instantiation: http_ext.c:eb_is_dup Unexecuted instantiation: http_htx.c:eb_is_dup Unexecuted instantiation: http_rules.c:eb_is_dup Unexecuted instantiation: lb_chash.c:eb_is_dup Unexecuted instantiation: lb_fas.c:eb_is_dup Unexecuted instantiation: lb_fwlc.c:eb_is_dup Unexecuted instantiation: lb_fwrr.c:eb_is_dup Unexecuted instantiation: lb_map.c:eb_is_dup Unexecuted instantiation: limits.c:eb_is_dup Unexecuted instantiation: listener.c:eb_is_dup Unexecuted instantiation: log.c:eb_is_dup Unexecuted instantiation: mailers.c:eb_is_dup Unexecuted instantiation: mworker.c:eb_is_dup Unexecuted instantiation: peers.c:eb_is_dup Unexecuted instantiation: pool.c:eb_is_dup Unexecuted instantiation: proto_rhttp.c:eb_is_dup Unexecuted instantiation: proto_sockpair.c:eb_is_dup Unexecuted instantiation: protocol.c:eb_is_dup Unexecuted instantiation: proxy.c:eb_is_dup Unexecuted instantiation: queue.c:eb_is_dup Unexecuted instantiation: regex.c:eb_is_dup Unexecuted instantiation: resolvers.c:eb_is_dup Unexecuted instantiation: ring.c:eb_is_dup Unexecuted instantiation: sample.c:eb_is_dup Unexecuted instantiation: server.c:eb_is_dup Unexecuted instantiation: session.c:eb_is_dup Unexecuted instantiation: signal.c:eb_is_dup Unexecuted instantiation: sink.c:eb_is_dup Unexecuted instantiation: sock.c:eb_is_dup Unexecuted instantiation: sock_inet.c:eb_is_dup Unexecuted instantiation: stats-html.c:eb_is_dup Unexecuted instantiation: stats.c:eb_is_dup Unexecuted instantiation: stconn.c:eb_is_dup Unexecuted instantiation: stick_table.c:eb_is_dup Unexecuted instantiation: stream.c:eb_is_dup Unexecuted instantiation: systemd.c:eb_is_dup Unexecuted instantiation: task.c:eb_is_dup Unexecuted instantiation: tcp_rules.c:eb_is_dup Unexecuted instantiation: tcpcheck.c:eb_is_dup Unexecuted instantiation: thread.c:eb_is_dup Unexecuted instantiation: tools.c:eb_is_dup Unexecuted instantiation: trace.c:eb_is_dup Unexecuted instantiation: vars.c:eb_is_dup Unexecuted instantiation: acl.c:eb_is_dup Unexecuted instantiation: action.c:eb_is_dup Unexecuted instantiation: activity.c:eb_is_dup Unexecuted instantiation: applet.c:eb_is_dup Unexecuted instantiation: arg.c:eb_is_dup Unexecuted instantiation: backend.c:eb_is_dup Unexecuted instantiation: cache.c:eb_is_dup Unexecuted instantiation: cfgcond.c:eb_is_dup Unexecuted instantiation: cfgparse-global.c:eb_is_dup Unexecuted instantiation: cfgparse-listen.c:eb_is_dup Unexecuted instantiation: channel.c:eb_is_dup Unexecuted instantiation: check.c:eb_is_dup Unexecuted instantiation: compression.c:eb_is_dup Unexecuted instantiation: counters.c:eb_is_dup Unexecuted instantiation: dgram.c:eb_is_dup Unexecuted instantiation: dict.c:eb_is_dup Unexecuted instantiation: dns.c:eb_is_dup Unexecuted instantiation: dns_ring.c:eb_is_dup Unexecuted instantiation: eb32tree.c:eb_is_dup Unexecuted instantiation: eb64tree.c:eb_is_dup Unexecuted instantiation: ebimtree.c:eb_is_dup Unexecuted instantiation: ebistree.c:eb_is_dup Unexecuted instantiation: ebmbtree.c:eb_is_dup Unexecuted instantiation: ebsttree.c:eb_is_dup Unexecuted instantiation: event_hdl.c:eb_is_dup Unexecuted instantiation: extcheck.c:eb_is_dup Unexecuted instantiation: fcgi-app.c:eb_is_dup Unexecuted instantiation: fix.c:eb_is_dup Unexecuted instantiation: guid.c:eb_is_dup Unexecuted instantiation: h1.c:eb_is_dup Unexecuted instantiation: http_fetch.c:eb_is_dup Unexecuted instantiation: mqtt.c:eb_is_dup Unexecuted instantiation: mux_spop.c:eb_is_dup Unexecuted instantiation: pattern.c:eb_is_dup Unexecuted instantiation: payload.c:eb_is_dup Unexecuted instantiation: proto_tcp.c:eb_is_dup Unexecuted instantiation: shctx.c:eb_is_dup Unexecuted instantiation: stats-file.c:eb_is_dup Unexecuted instantiation: stats-json.c:eb_is_dup Unexecuted instantiation: stats-proxy.c:eb_is_dup Unexecuted instantiation: flt_spoe.c:eb_is_dup Unexecuted instantiation: h1_htx.c:eb_is_dup Unexecuted instantiation: lru.c:eb_is_dup |
537 | | |
538 | | /* Return the first leaf in the tree starting at <root>, or NULL if none */ |
539 | | static inline struct eb_node *eb_first(struct eb_root *root) |
540 | 0 | { |
541 | 0 | return eb_walk_down(root->b[0], EB_LEFT); |
542 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_first Unexecuted instantiation: cfgparse.c:eb_first Unexecuted instantiation: chunk.c:eb_first Unexecuted instantiation: cli.c:eb_first Unexecuted instantiation: clock.c:eb_first Unexecuted instantiation: connection.c:eb_first Unexecuted instantiation: debug.c:eb_first Unexecuted instantiation: dynbuf.c:eb_first Unexecuted instantiation: ebtree.c:eb_first Unexecuted instantiation: errors.c:eb_first Unexecuted instantiation: fd.c:eb_first Unexecuted instantiation: filters.c:eb_first Unexecuted instantiation: flt_http_comp.c:eb_first Unexecuted instantiation: freq_ctr.c:eb_first Unexecuted instantiation: frontend.c:eb_first Unexecuted instantiation: haproxy.c:eb_first Unexecuted instantiation: http.c:eb_first Unexecuted instantiation: http_ana.c:eb_first Unexecuted instantiation: http_ext.c:eb_first Unexecuted instantiation: http_htx.c:eb_first Unexecuted instantiation: http_rules.c:eb_first Unexecuted instantiation: lb_chash.c:eb_first Unexecuted instantiation: lb_fas.c:eb_first Unexecuted instantiation: lb_fwlc.c:eb_first Unexecuted instantiation: lb_fwrr.c:eb_first Unexecuted instantiation: lb_map.c:eb_first Unexecuted instantiation: limits.c:eb_first Unexecuted instantiation: listener.c:eb_first Unexecuted instantiation: log.c:eb_first Unexecuted instantiation: mailers.c:eb_first Unexecuted instantiation: mworker.c:eb_first Unexecuted instantiation: peers.c:eb_first Unexecuted instantiation: pool.c:eb_first Unexecuted instantiation: proto_rhttp.c:eb_first Unexecuted instantiation: proto_sockpair.c:eb_first Unexecuted instantiation: protocol.c:eb_first Unexecuted instantiation: proxy.c:eb_first Unexecuted instantiation: queue.c:eb_first Unexecuted instantiation: regex.c:eb_first Unexecuted instantiation: resolvers.c:eb_first Unexecuted instantiation: ring.c:eb_first Unexecuted instantiation: sample.c:eb_first Unexecuted instantiation: server.c:eb_first Unexecuted instantiation: session.c:eb_first Unexecuted instantiation: signal.c:eb_first Unexecuted instantiation: sink.c:eb_first Unexecuted instantiation: sock.c:eb_first Unexecuted instantiation: sock_inet.c:eb_first Unexecuted instantiation: stats-html.c:eb_first Unexecuted instantiation: stats.c:eb_first Unexecuted instantiation: stconn.c:eb_first Unexecuted instantiation: stick_table.c:eb_first Unexecuted instantiation: stream.c:eb_first Unexecuted instantiation: systemd.c:eb_first Unexecuted instantiation: task.c:eb_first Unexecuted instantiation: tcp_rules.c:eb_first Unexecuted instantiation: tcpcheck.c:eb_first Unexecuted instantiation: thread.c:eb_first Unexecuted instantiation: tools.c:eb_first Unexecuted instantiation: trace.c:eb_first Unexecuted instantiation: vars.c:eb_first Unexecuted instantiation: acl.c:eb_first Unexecuted instantiation: action.c:eb_first Unexecuted instantiation: activity.c:eb_first Unexecuted instantiation: applet.c:eb_first Unexecuted instantiation: arg.c:eb_first Unexecuted instantiation: backend.c:eb_first Unexecuted instantiation: cache.c:eb_first Unexecuted instantiation: cfgcond.c:eb_first Unexecuted instantiation: cfgparse-global.c:eb_first Unexecuted instantiation: cfgparse-listen.c:eb_first Unexecuted instantiation: channel.c:eb_first Unexecuted instantiation: check.c:eb_first Unexecuted instantiation: compression.c:eb_first Unexecuted instantiation: counters.c:eb_first Unexecuted instantiation: dgram.c:eb_first Unexecuted instantiation: dict.c:eb_first Unexecuted instantiation: dns.c:eb_first Unexecuted instantiation: dns_ring.c:eb_first Unexecuted instantiation: eb32tree.c:eb_first Unexecuted instantiation: eb64tree.c:eb_first Unexecuted instantiation: ebimtree.c:eb_first Unexecuted instantiation: ebistree.c:eb_first Unexecuted instantiation: ebmbtree.c:eb_first Unexecuted instantiation: ebsttree.c:eb_first Unexecuted instantiation: event_hdl.c:eb_first Unexecuted instantiation: extcheck.c:eb_first Unexecuted instantiation: fcgi-app.c:eb_first Unexecuted instantiation: fix.c:eb_first Unexecuted instantiation: guid.c:eb_first Unexecuted instantiation: h1.c:eb_first Unexecuted instantiation: http_fetch.c:eb_first Unexecuted instantiation: mqtt.c:eb_first Unexecuted instantiation: mux_spop.c:eb_first Unexecuted instantiation: pattern.c:eb_first Unexecuted instantiation: payload.c:eb_first Unexecuted instantiation: proto_tcp.c:eb_first Unexecuted instantiation: shctx.c:eb_first Unexecuted instantiation: stats-file.c:eb_first Unexecuted instantiation: stats-json.c:eb_first Unexecuted instantiation: stats-proxy.c:eb_first Unexecuted instantiation: flt_spoe.c:eb_first Unexecuted instantiation: h1_htx.c:eb_first Unexecuted instantiation: lru.c:eb_first |
543 | | |
544 | | /* Return the last leaf in the tree starting at <root>, or NULL if none */ |
545 | | static inline struct eb_node *eb_last(struct eb_root *root) |
546 | 0 | { |
547 | 0 | return eb_walk_down(root->b[0], EB_RGHT); |
548 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_last Unexecuted instantiation: cfgparse.c:eb_last Unexecuted instantiation: chunk.c:eb_last Unexecuted instantiation: cli.c:eb_last Unexecuted instantiation: clock.c:eb_last Unexecuted instantiation: connection.c:eb_last Unexecuted instantiation: debug.c:eb_last Unexecuted instantiation: dynbuf.c:eb_last Unexecuted instantiation: ebtree.c:eb_last Unexecuted instantiation: errors.c:eb_last Unexecuted instantiation: fd.c:eb_last Unexecuted instantiation: filters.c:eb_last Unexecuted instantiation: flt_http_comp.c:eb_last Unexecuted instantiation: freq_ctr.c:eb_last Unexecuted instantiation: frontend.c:eb_last Unexecuted instantiation: haproxy.c:eb_last Unexecuted instantiation: http.c:eb_last Unexecuted instantiation: http_ana.c:eb_last Unexecuted instantiation: http_ext.c:eb_last Unexecuted instantiation: http_htx.c:eb_last Unexecuted instantiation: http_rules.c:eb_last Unexecuted instantiation: lb_chash.c:eb_last Unexecuted instantiation: lb_fas.c:eb_last Unexecuted instantiation: lb_fwlc.c:eb_last Unexecuted instantiation: lb_fwrr.c:eb_last Unexecuted instantiation: lb_map.c:eb_last Unexecuted instantiation: limits.c:eb_last Unexecuted instantiation: listener.c:eb_last Unexecuted instantiation: log.c:eb_last Unexecuted instantiation: mailers.c:eb_last Unexecuted instantiation: mworker.c:eb_last Unexecuted instantiation: peers.c:eb_last Unexecuted instantiation: pool.c:eb_last Unexecuted instantiation: proto_rhttp.c:eb_last Unexecuted instantiation: proto_sockpair.c:eb_last Unexecuted instantiation: protocol.c:eb_last Unexecuted instantiation: proxy.c:eb_last Unexecuted instantiation: queue.c:eb_last Unexecuted instantiation: regex.c:eb_last Unexecuted instantiation: resolvers.c:eb_last Unexecuted instantiation: ring.c:eb_last Unexecuted instantiation: sample.c:eb_last Unexecuted instantiation: server.c:eb_last Unexecuted instantiation: session.c:eb_last Unexecuted instantiation: signal.c:eb_last Unexecuted instantiation: sink.c:eb_last Unexecuted instantiation: sock.c:eb_last Unexecuted instantiation: sock_inet.c:eb_last Unexecuted instantiation: stats-html.c:eb_last Unexecuted instantiation: stats.c:eb_last Unexecuted instantiation: stconn.c:eb_last Unexecuted instantiation: stick_table.c:eb_last Unexecuted instantiation: stream.c:eb_last Unexecuted instantiation: systemd.c:eb_last Unexecuted instantiation: task.c:eb_last Unexecuted instantiation: tcp_rules.c:eb_last Unexecuted instantiation: tcpcheck.c:eb_last Unexecuted instantiation: thread.c:eb_last Unexecuted instantiation: tools.c:eb_last Unexecuted instantiation: trace.c:eb_last Unexecuted instantiation: vars.c:eb_last Unexecuted instantiation: acl.c:eb_last Unexecuted instantiation: action.c:eb_last Unexecuted instantiation: activity.c:eb_last Unexecuted instantiation: applet.c:eb_last Unexecuted instantiation: arg.c:eb_last Unexecuted instantiation: backend.c:eb_last Unexecuted instantiation: cache.c:eb_last Unexecuted instantiation: cfgcond.c:eb_last Unexecuted instantiation: cfgparse-global.c:eb_last Unexecuted instantiation: cfgparse-listen.c:eb_last Unexecuted instantiation: channel.c:eb_last Unexecuted instantiation: check.c:eb_last Unexecuted instantiation: compression.c:eb_last Unexecuted instantiation: counters.c:eb_last Unexecuted instantiation: dgram.c:eb_last Unexecuted instantiation: dict.c:eb_last Unexecuted instantiation: dns.c:eb_last Unexecuted instantiation: dns_ring.c:eb_last Unexecuted instantiation: eb32tree.c:eb_last Unexecuted instantiation: eb64tree.c:eb_last Unexecuted instantiation: ebimtree.c:eb_last Unexecuted instantiation: ebistree.c:eb_last Unexecuted instantiation: ebmbtree.c:eb_last Unexecuted instantiation: ebsttree.c:eb_last Unexecuted instantiation: event_hdl.c:eb_last Unexecuted instantiation: extcheck.c:eb_last Unexecuted instantiation: fcgi-app.c:eb_last Unexecuted instantiation: fix.c:eb_last Unexecuted instantiation: guid.c:eb_last Unexecuted instantiation: h1.c:eb_last Unexecuted instantiation: http_fetch.c:eb_last Unexecuted instantiation: mqtt.c:eb_last Unexecuted instantiation: mux_spop.c:eb_last Unexecuted instantiation: pattern.c:eb_last Unexecuted instantiation: payload.c:eb_last Unexecuted instantiation: proto_tcp.c:eb_last Unexecuted instantiation: shctx.c:eb_last Unexecuted instantiation: stats-file.c:eb_last Unexecuted instantiation: stats-json.c:eb_last Unexecuted instantiation: stats-proxy.c:eb_last Unexecuted instantiation: flt_spoe.c:eb_last Unexecuted instantiation: h1_htx.c:eb_last Unexecuted instantiation: lru.c:eb_last |
549 | | |
550 | | /* Return previous leaf node before an existing leaf node, or NULL if none. */ |
551 | | static inline struct eb_node *eb_prev(struct eb_node *node) |
552 | 0 | { |
553 | 0 | eb_troot_t *t = node->leaf_p; |
554 | |
|
555 | 0 | while (eb_gettag(t) == EB_LEFT) { |
556 | | /* Walking up from left branch. We must ensure that we never |
557 | | * walk beyond root. |
558 | | */ |
559 | 0 | if (unlikely(eb_clrtag((eb_untag(t, EB_LEFT))->b[EB_RGHT]) == NULL)) |
560 | 0 | return NULL; |
561 | 0 | t = (eb_root_to_node(eb_untag(t, EB_LEFT)))->node_p; |
562 | 0 | } |
563 | | /* Note that <t> cannot be NULL at this stage */ |
564 | 0 | t = (eb_untag(t, EB_RGHT))->b[EB_LEFT]; |
565 | 0 | return eb_walk_down(t, EB_RGHT); |
566 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_prev Unexecuted instantiation: cfgparse.c:eb_prev Unexecuted instantiation: chunk.c:eb_prev Unexecuted instantiation: cli.c:eb_prev Unexecuted instantiation: clock.c:eb_prev Unexecuted instantiation: connection.c:eb_prev Unexecuted instantiation: debug.c:eb_prev Unexecuted instantiation: dynbuf.c:eb_prev Unexecuted instantiation: ebtree.c:eb_prev Unexecuted instantiation: errors.c:eb_prev Unexecuted instantiation: fd.c:eb_prev Unexecuted instantiation: filters.c:eb_prev Unexecuted instantiation: flt_http_comp.c:eb_prev Unexecuted instantiation: freq_ctr.c:eb_prev Unexecuted instantiation: frontend.c:eb_prev Unexecuted instantiation: haproxy.c:eb_prev Unexecuted instantiation: http.c:eb_prev Unexecuted instantiation: http_ana.c:eb_prev Unexecuted instantiation: http_ext.c:eb_prev Unexecuted instantiation: http_htx.c:eb_prev Unexecuted instantiation: http_rules.c:eb_prev Unexecuted instantiation: lb_chash.c:eb_prev Unexecuted instantiation: lb_fas.c:eb_prev Unexecuted instantiation: lb_fwlc.c:eb_prev Unexecuted instantiation: lb_fwrr.c:eb_prev Unexecuted instantiation: lb_map.c:eb_prev Unexecuted instantiation: limits.c:eb_prev Unexecuted instantiation: listener.c:eb_prev Unexecuted instantiation: log.c:eb_prev Unexecuted instantiation: mailers.c:eb_prev Unexecuted instantiation: mworker.c:eb_prev Unexecuted instantiation: peers.c:eb_prev Unexecuted instantiation: pool.c:eb_prev Unexecuted instantiation: proto_rhttp.c:eb_prev Unexecuted instantiation: proto_sockpair.c:eb_prev Unexecuted instantiation: protocol.c:eb_prev Unexecuted instantiation: proxy.c:eb_prev Unexecuted instantiation: queue.c:eb_prev Unexecuted instantiation: regex.c:eb_prev Unexecuted instantiation: resolvers.c:eb_prev Unexecuted instantiation: ring.c:eb_prev Unexecuted instantiation: sample.c:eb_prev Unexecuted instantiation: server.c:eb_prev Unexecuted instantiation: session.c:eb_prev Unexecuted instantiation: signal.c:eb_prev Unexecuted instantiation: sink.c:eb_prev Unexecuted instantiation: sock.c:eb_prev Unexecuted instantiation: sock_inet.c:eb_prev Unexecuted instantiation: stats-html.c:eb_prev Unexecuted instantiation: stats.c:eb_prev Unexecuted instantiation: stconn.c:eb_prev Unexecuted instantiation: stick_table.c:eb_prev Unexecuted instantiation: stream.c:eb_prev Unexecuted instantiation: systemd.c:eb_prev Unexecuted instantiation: task.c:eb_prev Unexecuted instantiation: tcp_rules.c:eb_prev Unexecuted instantiation: tcpcheck.c:eb_prev Unexecuted instantiation: thread.c:eb_prev Unexecuted instantiation: tools.c:eb_prev Unexecuted instantiation: trace.c:eb_prev Unexecuted instantiation: vars.c:eb_prev Unexecuted instantiation: acl.c:eb_prev Unexecuted instantiation: action.c:eb_prev Unexecuted instantiation: activity.c:eb_prev Unexecuted instantiation: applet.c:eb_prev Unexecuted instantiation: arg.c:eb_prev Unexecuted instantiation: backend.c:eb_prev Unexecuted instantiation: cache.c:eb_prev Unexecuted instantiation: cfgcond.c:eb_prev Unexecuted instantiation: cfgparse-global.c:eb_prev Unexecuted instantiation: cfgparse-listen.c:eb_prev Unexecuted instantiation: channel.c:eb_prev Unexecuted instantiation: check.c:eb_prev Unexecuted instantiation: compression.c:eb_prev Unexecuted instantiation: counters.c:eb_prev Unexecuted instantiation: dgram.c:eb_prev Unexecuted instantiation: dict.c:eb_prev Unexecuted instantiation: dns.c:eb_prev Unexecuted instantiation: dns_ring.c:eb_prev Unexecuted instantiation: eb32tree.c:eb_prev Unexecuted instantiation: eb64tree.c:eb_prev Unexecuted instantiation: ebimtree.c:eb_prev Unexecuted instantiation: ebistree.c:eb_prev Unexecuted instantiation: ebmbtree.c:eb_prev Unexecuted instantiation: ebsttree.c:eb_prev Unexecuted instantiation: event_hdl.c:eb_prev Unexecuted instantiation: extcheck.c:eb_prev Unexecuted instantiation: fcgi-app.c:eb_prev Unexecuted instantiation: fix.c:eb_prev Unexecuted instantiation: guid.c:eb_prev Unexecuted instantiation: h1.c:eb_prev Unexecuted instantiation: http_fetch.c:eb_prev Unexecuted instantiation: mqtt.c:eb_prev Unexecuted instantiation: mux_spop.c:eb_prev Unexecuted instantiation: pattern.c:eb_prev Unexecuted instantiation: payload.c:eb_prev Unexecuted instantiation: proto_tcp.c:eb_prev Unexecuted instantiation: shctx.c:eb_prev Unexecuted instantiation: stats-file.c:eb_prev Unexecuted instantiation: stats-json.c:eb_prev Unexecuted instantiation: stats-proxy.c:eb_prev Unexecuted instantiation: flt_spoe.c:eb_prev Unexecuted instantiation: h1_htx.c:eb_prev Unexecuted instantiation: lru.c:eb_prev |
567 | | |
568 | | /* Return next leaf node after an existing leaf node, or NULL if none. */ |
569 | | static inline struct eb_node *eb_next(struct eb_node *node) |
570 | 0 | { |
571 | 0 | eb_troot_t *t = node->leaf_p; |
572 | |
|
573 | 0 | while (eb_gettag(t) != EB_LEFT) |
574 | | /* Walking up from right branch, so we cannot be below root */ |
575 | 0 | t = (eb_root_to_node(eb_untag(t, EB_RGHT)))->node_p; |
576 | | |
577 | | /* Note that <t> cannot be NULL at this stage */ |
578 | 0 | t = (eb_untag(t, EB_LEFT))->b[EB_RGHT]; |
579 | 0 | if (eb_clrtag(t) == NULL) |
580 | 0 | return NULL; |
581 | 0 | return eb_walk_down(t, EB_LEFT); |
582 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_next Unexecuted instantiation: cfgparse.c:eb_next Unexecuted instantiation: chunk.c:eb_next Unexecuted instantiation: cli.c:eb_next Unexecuted instantiation: clock.c:eb_next Unexecuted instantiation: connection.c:eb_next Unexecuted instantiation: debug.c:eb_next Unexecuted instantiation: dynbuf.c:eb_next Unexecuted instantiation: ebtree.c:eb_next Unexecuted instantiation: errors.c:eb_next Unexecuted instantiation: fd.c:eb_next Unexecuted instantiation: filters.c:eb_next Unexecuted instantiation: flt_http_comp.c:eb_next Unexecuted instantiation: freq_ctr.c:eb_next Unexecuted instantiation: frontend.c:eb_next Unexecuted instantiation: haproxy.c:eb_next Unexecuted instantiation: http.c:eb_next Unexecuted instantiation: http_ana.c:eb_next Unexecuted instantiation: http_ext.c:eb_next Unexecuted instantiation: http_htx.c:eb_next Unexecuted instantiation: http_rules.c:eb_next Unexecuted instantiation: lb_chash.c:eb_next Unexecuted instantiation: lb_fas.c:eb_next Unexecuted instantiation: lb_fwlc.c:eb_next Unexecuted instantiation: lb_fwrr.c:eb_next Unexecuted instantiation: lb_map.c:eb_next Unexecuted instantiation: limits.c:eb_next Unexecuted instantiation: listener.c:eb_next Unexecuted instantiation: log.c:eb_next Unexecuted instantiation: mailers.c:eb_next Unexecuted instantiation: mworker.c:eb_next Unexecuted instantiation: peers.c:eb_next Unexecuted instantiation: pool.c:eb_next Unexecuted instantiation: proto_rhttp.c:eb_next Unexecuted instantiation: proto_sockpair.c:eb_next Unexecuted instantiation: protocol.c:eb_next Unexecuted instantiation: proxy.c:eb_next Unexecuted instantiation: queue.c:eb_next Unexecuted instantiation: regex.c:eb_next Unexecuted instantiation: resolvers.c:eb_next Unexecuted instantiation: ring.c:eb_next Unexecuted instantiation: sample.c:eb_next Unexecuted instantiation: server.c:eb_next Unexecuted instantiation: session.c:eb_next Unexecuted instantiation: signal.c:eb_next Unexecuted instantiation: sink.c:eb_next Unexecuted instantiation: sock.c:eb_next Unexecuted instantiation: sock_inet.c:eb_next Unexecuted instantiation: stats-html.c:eb_next Unexecuted instantiation: stats.c:eb_next Unexecuted instantiation: stconn.c:eb_next Unexecuted instantiation: stick_table.c:eb_next Unexecuted instantiation: stream.c:eb_next Unexecuted instantiation: systemd.c:eb_next Unexecuted instantiation: task.c:eb_next Unexecuted instantiation: tcp_rules.c:eb_next Unexecuted instantiation: tcpcheck.c:eb_next Unexecuted instantiation: thread.c:eb_next Unexecuted instantiation: tools.c:eb_next Unexecuted instantiation: trace.c:eb_next Unexecuted instantiation: vars.c:eb_next Unexecuted instantiation: acl.c:eb_next Unexecuted instantiation: action.c:eb_next Unexecuted instantiation: activity.c:eb_next Unexecuted instantiation: applet.c:eb_next Unexecuted instantiation: arg.c:eb_next Unexecuted instantiation: backend.c:eb_next Unexecuted instantiation: cache.c:eb_next Unexecuted instantiation: cfgcond.c:eb_next Unexecuted instantiation: cfgparse-global.c:eb_next Unexecuted instantiation: cfgparse-listen.c:eb_next Unexecuted instantiation: channel.c:eb_next Unexecuted instantiation: check.c:eb_next Unexecuted instantiation: compression.c:eb_next Unexecuted instantiation: counters.c:eb_next Unexecuted instantiation: dgram.c:eb_next Unexecuted instantiation: dict.c:eb_next Unexecuted instantiation: dns.c:eb_next Unexecuted instantiation: dns_ring.c:eb_next Unexecuted instantiation: eb32tree.c:eb_next Unexecuted instantiation: eb64tree.c:eb_next Unexecuted instantiation: ebimtree.c:eb_next Unexecuted instantiation: ebistree.c:eb_next Unexecuted instantiation: ebmbtree.c:eb_next Unexecuted instantiation: ebsttree.c:eb_next Unexecuted instantiation: event_hdl.c:eb_next Unexecuted instantiation: extcheck.c:eb_next Unexecuted instantiation: fcgi-app.c:eb_next Unexecuted instantiation: fix.c:eb_next Unexecuted instantiation: guid.c:eb_next Unexecuted instantiation: h1.c:eb_next Unexecuted instantiation: http_fetch.c:eb_next Unexecuted instantiation: mqtt.c:eb_next Unexecuted instantiation: mux_spop.c:eb_next Unexecuted instantiation: pattern.c:eb_next Unexecuted instantiation: payload.c:eb_next Unexecuted instantiation: proto_tcp.c:eb_next Unexecuted instantiation: shctx.c:eb_next Unexecuted instantiation: stats-file.c:eb_next Unexecuted instantiation: stats-json.c:eb_next Unexecuted instantiation: stats-proxy.c:eb_next Unexecuted instantiation: flt_spoe.c:eb_next Unexecuted instantiation: h1_htx.c:eb_next Unexecuted instantiation: lru.c:eb_next |
583 | | |
584 | | /* Return previous leaf node within a duplicate sub-tree, or NULL if none. */ |
585 | | static inline struct eb_node *eb_prev_dup(struct eb_node *node) |
586 | 0 | { |
587 | 0 | eb_troot_t *t = node->leaf_p; |
588 | |
|
589 | 0 | while (eb_gettag(t) == EB_LEFT) { |
590 | | /* Walking up from left branch. We must ensure that we never |
591 | | * walk beyond root. |
592 | | */ |
593 | 0 | if (unlikely(eb_clrtag((eb_untag(t, EB_LEFT))->b[EB_RGHT]) == NULL)) |
594 | 0 | return NULL; |
595 | | /* if the current node leaves a dup tree, quit */ |
596 | 0 | if ((eb_root_to_node(eb_untag(t, EB_LEFT)))->bit >= 0) |
597 | 0 | return NULL; |
598 | 0 | t = (eb_root_to_node(eb_untag(t, EB_LEFT)))->node_p; |
599 | 0 | } |
600 | | /* Note that <t> cannot be NULL at this stage */ |
601 | 0 | if ((eb_root_to_node(eb_untag(t, EB_RGHT)))->bit >= 0) |
602 | 0 | return NULL; |
603 | 0 | t = (eb_untag(t, EB_RGHT))->b[EB_LEFT]; |
604 | 0 | return eb_walk_down(t, EB_RGHT); |
605 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_prev_dup Unexecuted instantiation: cfgparse.c:eb_prev_dup Unexecuted instantiation: chunk.c:eb_prev_dup Unexecuted instantiation: cli.c:eb_prev_dup Unexecuted instantiation: clock.c:eb_prev_dup Unexecuted instantiation: connection.c:eb_prev_dup Unexecuted instantiation: debug.c:eb_prev_dup Unexecuted instantiation: dynbuf.c:eb_prev_dup Unexecuted instantiation: ebtree.c:eb_prev_dup Unexecuted instantiation: errors.c:eb_prev_dup Unexecuted instantiation: fd.c:eb_prev_dup Unexecuted instantiation: filters.c:eb_prev_dup Unexecuted instantiation: flt_http_comp.c:eb_prev_dup Unexecuted instantiation: freq_ctr.c:eb_prev_dup Unexecuted instantiation: frontend.c:eb_prev_dup Unexecuted instantiation: haproxy.c:eb_prev_dup Unexecuted instantiation: http.c:eb_prev_dup Unexecuted instantiation: http_ana.c:eb_prev_dup Unexecuted instantiation: http_ext.c:eb_prev_dup Unexecuted instantiation: http_htx.c:eb_prev_dup Unexecuted instantiation: http_rules.c:eb_prev_dup Unexecuted instantiation: lb_chash.c:eb_prev_dup Unexecuted instantiation: lb_fas.c:eb_prev_dup Unexecuted instantiation: lb_fwlc.c:eb_prev_dup Unexecuted instantiation: lb_fwrr.c:eb_prev_dup Unexecuted instantiation: lb_map.c:eb_prev_dup Unexecuted instantiation: limits.c:eb_prev_dup Unexecuted instantiation: listener.c:eb_prev_dup Unexecuted instantiation: log.c:eb_prev_dup Unexecuted instantiation: mailers.c:eb_prev_dup Unexecuted instantiation: mworker.c:eb_prev_dup Unexecuted instantiation: peers.c:eb_prev_dup Unexecuted instantiation: pool.c:eb_prev_dup Unexecuted instantiation: proto_rhttp.c:eb_prev_dup Unexecuted instantiation: proto_sockpair.c:eb_prev_dup Unexecuted instantiation: protocol.c:eb_prev_dup Unexecuted instantiation: proxy.c:eb_prev_dup Unexecuted instantiation: queue.c:eb_prev_dup Unexecuted instantiation: regex.c:eb_prev_dup Unexecuted instantiation: resolvers.c:eb_prev_dup Unexecuted instantiation: ring.c:eb_prev_dup Unexecuted instantiation: sample.c:eb_prev_dup Unexecuted instantiation: server.c:eb_prev_dup Unexecuted instantiation: session.c:eb_prev_dup Unexecuted instantiation: signal.c:eb_prev_dup Unexecuted instantiation: sink.c:eb_prev_dup Unexecuted instantiation: sock.c:eb_prev_dup Unexecuted instantiation: sock_inet.c:eb_prev_dup Unexecuted instantiation: stats-html.c:eb_prev_dup Unexecuted instantiation: stats.c:eb_prev_dup Unexecuted instantiation: stconn.c:eb_prev_dup Unexecuted instantiation: stick_table.c:eb_prev_dup Unexecuted instantiation: stream.c:eb_prev_dup Unexecuted instantiation: systemd.c:eb_prev_dup Unexecuted instantiation: task.c:eb_prev_dup Unexecuted instantiation: tcp_rules.c:eb_prev_dup Unexecuted instantiation: tcpcheck.c:eb_prev_dup Unexecuted instantiation: thread.c:eb_prev_dup Unexecuted instantiation: tools.c:eb_prev_dup Unexecuted instantiation: trace.c:eb_prev_dup Unexecuted instantiation: vars.c:eb_prev_dup Unexecuted instantiation: acl.c:eb_prev_dup Unexecuted instantiation: action.c:eb_prev_dup Unexecuted instantiation: activity.c:eb_prev_dup Unexecuted instantiation: applet.c:eb_prev_dup Unexecuted instantiation: arg.c:eb_prev_dup Unexecuted instantiation: backend.c:eb_prev_dup Unexecuted instantiation: cache.c:eb_prev_dup Unexecuted instantiation: cfgcond.c:eb_prev_dup Unexecuted instantiation: cfgparse-global.c:eb_prev_dup Unexecuted instantiation: cfgparse-listen.c:eb_prev_dup Unexecuted instantiation: channel.c:eb_prev_dup Unexecuted instantiation: check.c:eb_prev_dup Unexecuted instantiation: compression.c:eb_prev_dup Unexecuted instantiation: counters.c:eb_prev_dup Unexecuted instantiation: dgram.c:eb_prev_dup Unexecuted instantiation: dict.c:eb_prev_dup Unexecuted instantiation: dns.c:eb_prev_dup Unexecuted instantiation: dns_ring.c:eb_prev_dup Unexecuted instantiation: eb32tree.c:eb_prev_dup Unexecuted instantiation: eb64tree.c:eb_prev_dup Unexecuted instantiation: ebimtree.c:eb_prev_dup Unexecuted instantiation: ebistree.c:eb_prev_dup Unexecuted instantiation: ebmbtree.c:eb_prev_dup Unexecuted instantiation: ebsttree.c:eb_prev_dup Unexecuted instantiation: event_hdl.c:eb_prev_dup Unexecuted instantiation: extcheck.c:eb_prev_dup Unexecuted instantiation: fcgi-app.c:eb_prev_dup Unexecuted instantiation: fix.c:eb_prev_dup Unexecuted instantiation: guid.c:eb_prev_dup Unexecuted instantiation: h1.c:eb_prev_dup Unexecuted instantiation: http_fetch.c:eb_prev_dup Unexecuted instantiation: mqtt.c:eb_prev_dup Unexecuted instantiation: mux_spop.c:eb_prev_dup Unexecuted instantiation: pattern.c:eb_prev_dup Unexecuted instantiation: payload.c:eb_prev_dup Unexecuted instantiation: proto_tcp.c:eb_prev_dup Unexecuted instantiation: shctx.c:eb_prev_dup Unexecuted instantiation: stats-file.c:eb_prev_dup Unexecuted instantiation: stats-json.c:eb_prev_dup Unexecuted instantiation: stats-proxy.c:eb_prev_dup Unexecuted instantiation: flt_spoe.c:eb_prev_dup Unexecuted instantiation: h1_htx.c:eb_prev_dup Unexecuted instantiation: lru.c:eb_prev_dup |
606 | | |
607 | | /* Return next leaf node within a duplicate sub-tree, or NULL if none. */ |
608 | | static inline struct eb_node *eb_next_dup(struct eb_node *node) |
609 | 0 | { |
610 | 0 | eb_troot_t *t = node->leaf_p; |
611 | |
|
612 | 0 | while (eb_gettag(t) != EB_LEFT) { |
613 | | /* Walking up from right branch, so we cannot be below root */ |
614 | | /* if the current node leaves a dup tree, quit */ |
615 | 0 | if ((eb_root_to_node(eb_untag(t, EB_RGHT)))->bit >= 0) |
616 | 0 | return NULL; |
617 | 0 | t = (eb_root_to_node(eb_untag(t, EB_RGHT)))->node_p; |
618 | 0 | } |
619 | | |
620 | | /* Note that <t> cannot be NULL at this stage. If our leaf is directly |
621 | | * under the root, we must not try to cast the leaf_p into a eb_node* |
622 | | * since it is a pointer to an eb_root. |
623 | | */ |
624 | 0 | if (eb_clrtag((eb_untag(t, EB_LEFT))->b[EB_RGHT]) == NULL) |
625 | 0 | return NULL; |
626 | | |
627 | 0 | if ((eb_root_to_node(eb_untag(t, EB_LEFT)))->bit >= 0) |
628 | 0 | return NULL; |
629 | 0 | t = (eb_untag(t, EB_LEFT))->b[EB_RGHT]; |
630 | 0 | return eb_walk_down(t, EB_LEFT); |
631 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_next_dup Unexecuted instantiation: cfgparse.c:eb_next_dup Unexecuted instantiation: chunk.c:eb_next_dup Unexecuted instantiation: cli.c:eb_next_dup Unexecuted instantiation: clock.c:eb_next_dup Unexecuted instantiation: connection.c:eb_next_dup Unexecuted instantiation: debug.c:eb_next_dup Unexecuted instantiation: dynbuf.c:eb_next_dup Unexecuted instantiation: ebtree.c:eb_next_dup Unexecuted instantiation: errors.c:eb_next_dup Unexecuted instantiation: fd.c:eb_next_dup Unexecuted instantiation: filters.c:eb_next_dup Unexecuted instantiation: flt_http_comp.c:eb_next_dup Unexecuted instantiation: freq_ctr.c:eb_next_dup Unexecuted instantiation: frontend.c:eb_next_dup Unexecuted instantiation: haproxy.c:eb_next_dup Unexecuted instantiation: http.c:eb_next_dup Unexecuted instantiation: http_ana.c:eb_next_dup Unexecuted instantiation: http_ext.c:eb_next_dup Unexecuted instantiation: http_htx.c:eb_next_dup Unexecuted instantiation: http_rules.c:eb_next_dup Unexecuted instantiation: lb_chash.c:eb_next_dup Unexecuted instantiation: lb_fas.c:eb_next_dup Unexecuted instantiation: lb_fwlc.c:eb_next_dup Unexecuted instantiation: lb_fwrr.c:eb_next_dup Unexecuted instantiation: lb_map.c:eb_next_dup Unexecuted instantiation: limits.c:eb_next_dup Unexecuted instantiation: listener.c:eb_next_dup Unexecuted instantiation: log.c:eb_next_dup Unexecuted instantiation: mailers.c:eb_next_dup Unexecuted instantiation: mworker.c:eb_next_dup Unexecuted instantiation: peers.c:eb_next_dup Unexecuted instantiation: pool.c:eb_next_dup Unexecuted instantiation: proto_rhttp.c:eb_next_dup Unexecuted instantiation: proto_sockpair.c:eb_next_dup Unexecuted instantiation: protocol.c:eb_next_dup Unexecuted instantiation: proxy.c:eb_next_dup Unexecuted instantiation: queue.c:eb_next_dup Unexecuted instantiation: regex.c:eb_next_dup Unexecuted instantiation: resolvers.c:eb_next_dup Unexecuted instantiation: ring.c:eb_next_dup Unexecuted instantiation: sample.c:eb_next_dup Unexecuted instantiation: server.c:eb_next_dup Unexecuted instantiation: session.c:eb_next_dup Unexecuted instantiation: signal.c:eb_next_dup Unexecuted instantiation: sink.c:eb_next_dup Unexecuted instantiation: sock.c:eb_next_dup Unexecuted instantiation: sock_inet.c:eb_next_dup Unexecuted instantiation: stats-html.c:eb_next_dup Unexecuted instantiation: stats.c:eb_next_dup Unexecuted instantiation: stconn.c:eb_next_dup Unexecuted instantiation: stick_table.c:eb_next_dup Unexecuted instantiation: stream.c:eb_next_dup Unexecuted instantiation: systemd.c:eb_next_dup Unexecuted instantiation: task.c:eb_next_dup Unexecuted instantiation: tcp_rules.c:eb_next_dup Unexecuted instantiation: tcpcheck.c:eb_next_dup Unexecuted instantiation: thread.c:eb_next_dup Unexecuted instantiation: tools.c:eb_next_dup Unexecuted instantiation: trace.c:eb_next_dup Unexecuted instantiation: vars.c:eb_next_dup Unexecuted instantiation: acl.c:eb_next_dup Unexecuted instantiation: action.c:eb_next_dup Unexecuted instantiation: activity.c:eb_next_dup Unexecuted instantiation: applet.c:eb_next_dup Unexecuted instantiation: arg.c:eb_next_dup Unexecuted instantiation: backend.c:eb_next_dup Unexecuted instantiation: cache.c:eb_next_dup Unexecuted instantiation: cfgcond.c:eb_next_dup Unexecuted instantiation: cfgparse-global.c:eb_next_dup Unexecuted instantiation: cfgparse-listen.c:eb_next_dup Unexecuted instantiation: channel.c:eb_next_dup Unexecuted instantiation: check.c:eb_next_dup Unexecuted instantiation: compression.c:eb_next_dup Unexecuted instantiation: counters.c:eb_next_dup Unexecuted instantiation: dgram.c:eb_next_dup Unexecuted instantiation: dict.c:eb_next_dup Unexecuted instantiation: dns.c:eb_next_dup Unexecuted instantiation: dns_ring.c:eb_next_dup Unexecuted instantiation: eb32tree.c:eb_next_dup Unexecuted instantiation: eb64tree.c:eb_next_dup Unexecuted instantiation: ebimtree.c:eb_next_dup Unexecuted instantiation: ebistree.c:eb_next_dup Unexecuted instantiation: ebmbtree.c:eb_next_dup Unexecuted instantiation: ebsttree.c:eb_next_dup Unexecuted instantiation: event_hdl.c:eb_next_dup Unexecuted instantiation: extcheck.c:eb_next_dup Unexecuted instantiation: fcgi-app.c:eb_next_dup Unexecuted instantiation: fix.c:eb_next_dup Unexecuted instantiation: guid.c:eb_next_dup Unexecuted instantiation: h1.c:eb_next_dup Unexecuted instantiation: http_fetch.c:eb_next_dup Unexecuted instantiation: mqtt.c:eb_next_dup Unexecuted instantiation: mux_spop.c:eb_next_dup Unexecuted instantiation: pattern.c:eb_next_dup Unexecuted instantiation: payload.c:eb_next_dup Unexecuted instantiation: proto_tcp.c:eb_next_dup Unexecuted instantiation: shctx.c:eb_next_dup Unexecuted instantiation: stats-file.c:eb_next_dup Unexecuted instantiation: stats-json.c:eb_next_dup Unexecuted instantiation: stats-proxy.c:eb_next_dup Unexecuted instantiation: flt_spoe.c:eb_next_dup Unexecuted instantiation: h1_htx.c:eb_next_dup Unexecuted instantiation: lru.c:eb_next_dup |
632 | | |
633 | | /* Return previous leaf node before an existing leaf node, skipping duplicates, |
634 | | * or NULL if none. */ |
635 | | static inline struct eb_node *eb_prev_unique(struct eb_node *node) |
636 | 0 | { |
637 | 0 | eb_troot_t *t = node->leaf_p; |
638 | 0 |
|
639 | 0 | while (1) { |
640 | 0 | if (eb_gettag(t) != EB_LEFT) { |
641 | 0 | node = eb_root_to_node(eb_untag(t, EB_RGHT)); |
642 | 0 | /* if we're right and not in duplicates, stop here */ |
643 | 0 | if (node->bit >= 0) |
644 | 0 | break; |
645 | 0 | t = node->node_p; |
646 | 0 | } |
647 | 0 | else { |
648 | 0 | /* Walking up from left branch. We must ensure that we never |
649 | 0 | * walk beyond root. |
650 | 0 | */ |
651 | 0 | if (unlikely(eb_clrtag((eb_untag(t, EB_LEFT))->b[EB_RGHT]) == NULL)) |
652 | 0 | return NULL; |
653 | 0 | t = (eb_root_to_node(eb_untag(t, EB_LEFT)))->node_p; |
654 | 0 | } |
655 | 0 | } |
656 | 0 | /* Note that <t> cannot be NULL at this stage */ |
657 | 0 | t = (eb_untag(t, EB_RGHT))->b[EB_LEFT]; |
658 | 0 | return eb_walk_down(t, EB_RGHT); |
659 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_prev_unique Unexecuted instantiation: cfgparse.c:eb_prev_unique Unexecuted instantiation: chunk.c:eb_prev_unique Unexecuted instantiation: cli.c:eb_prev_unique Unexecuted instantiation: clock.c:eb_prev_unique Unexecuted instantiation: connection.c:eb_prev_unique Unexecuted instantiation: debug.c:eb_prev_unique Unexecuted instantiation: dynbuf.c:eb_prev_unique Unexecuted instantiation: ebtree.c:eb_prev_unique Unexecuted instantiation: errors.c:eb_prev_unique Unexecuted instantiation: fd.c:eb_prev_unique Unexecuted instantiation: filters.c:eb_prev_unique Unexecuted instantiation: flt_http_comp.c:eb_prev_unique Unexecuted instantiation: freq_ctr.c:eb_prev_unique Unexecuted instantiation: frontend.c:eb_prev_unique Unexecuted instantiation: haproxy.c:eb_prev_unique Unexecuted instantiation: http.c:eb_prev_unique Unexecuted instantiation: http_ana.c:eb_prev_unique Unexecuted instantiation: http_ext.c:eb_prev_unique Unexecuted instantiation: http_htx.c:eb_prev_unique Unexecuted instantiation: http_rules.c:eb_prev_unique Unexecuted instantiation: lb_chash.c:eb_prev_unique Unexecuted instantiation: lb_fas.c:eb_prev_unique Unexecuted instantiation: lb_fwlc.c:eb_prev_unique Unexecuted instantiation: lb_fwrr.c:eb_prev_unique Unexecuted instantiation: lb_map.c:eb_prev_unique Unexecuted instantiation: limits.c:eb_prev_unique Unexecuted instantiation: listener.c:eb_prev_unique Unexecuted instantiation: log.c:eb_prev_unique Unexecuted instantiation: mailers.c:eb_prev_unique Unexecuted instantiation: mworker.c:eb_prev_unique Unexecuted instantiation: peers.c:eb_prev_unique Unexecuted instantiation: pool.c:eb_prev_unique Unexecuted instantiation: proto_rhttp.c:eb_prev_unique Unexecuted instantiation: proto_sockpair.c:eb_prev_unique Unexecuted instantiation: protocol.c:eb_prev_unique Unexecuted instantiation: proxy.c:eb_prev_unique Unexecuted instantiation: queue.c:eb_prev_unique Unexecuted instantiation: regex.c:eb_prev_unique Unexecuted instantiation: resolvers.c:eb_prev_unique Unexecuted instantiation: ring.c:eb_prev_unique Unexecuted instantiation: sample.c:eb_prev_unique Unexecuted instantiation: server.c:eb_prev_unique Unexecuted instantiation: session.c:eb_prev_unique Unexecuted instantiation: signal.c:eb_prev_unique Unexecuted instantiation: sink.c:eb_prev_unique Unexecuted instantiation: sock.c:eb_prev_unique Unexecuted instantiation: sock_inet.c:eb_prev_unique Unexecuted instantiation: stats-html.c:eb_prev_unique Unexecuted instantiation: stats.c:eb_prev_unique Unexecuted instantiation: stconn.c:eb_prev_unique Unexecuted instantiation: stick_table.c:eb_prev_unique Unexecuted instantiation: stream.c:eb_prev_unique Unexecuted instantiation: systemd.c:eb_prev_unique Unexecuted instantiation: task.c:eb_prev_unique Unexecuted instantiation: tcp_rules.c:eb_prev_unique Unexecuted instantiation: tcpcheck.c:eb_prev_unique Unexecuted instantiation: thread.c:eb_prev_unique Unexecuted instantiation: tools.c:eb_prev_unique Unexecuted instantiation: trace.c:eb_prev_unique Unexecuted instantiation: vars.c:eb_prev_unique Unexecuted instantiation: acl.c:eb_prev_unique Unexecuted instantiation: action.c:eb_prev_unique Unexecuted instantiation: activity.c:eb_prev_unique Unexecuted instantiation: applet.c:eb_prev_unique Unexecuted instantiation: arg.c:eb_prev_unique Unexecuted instantiation: backend.c:eb_prev_unique Unexecuted instantiation: cache.c:eb_prev_unique Unexecuted instantiation: cfgcond.c:eb_prev_unique Unexecuted instantiation: cfgparse-global.c:eb_prev_unique Unexecuted instantiation: cfgparse-listen.c:eb_prev_unique Unexecuted instantiation: channel.c:eb_prev_unique Unexecuted instantiation: check.c:eb_prev_unique Unexecuted instantiation: compression.c:eb_prev_unique Unexecuted instantiation: counters.c:eb_prev_unique Unexecuted instantiation: dgram.c:eb_prev_unique Unexecuted instantiation: dict.c:eb_prev_unique Unexecuted instantiation: dns.c:eb_prev_unique Unexecuted instantiation: dns_ring.c:eb_prev_unique Unexecuted instantiation: eb32tree.c:eb_prev_unique Unexecuted instantiation: eb64tree.c:eb_prev_unique Unexecuted instantiation: ebimtree.c:eb_prev_unique Unexecuted instantiation: ebistree.c:eb_prev_unique Unexecuted instantiation: ebmbtree.c:eb_prev_unique Unexecuted instantiation: ebsttree.c:eb_prev_unique Unexecuted instantiation: event_hdl.c:eb_prev_unique Unexecuted instantiation: extcheck.c:eb_prev_unique Unexecuted instantiation: fcgi-app.c:eb_prev_unique Unexecuted instantiation: fix.c:eb_prev_unique Unexecuted instantiation: guid.c:eb_prev_unique Unexecuted instantiation: h1.c:eb_prev_unique Unexecuted instantiation: http_fetch.c:eb_prev_unique Unexecuted instantiation: mqtt.c:eb_prev_unique Unexecuted instantiation: mux_spop.c:eb_prev_unique Unexecuted instantiation: pattern.c:eb_prev_unique Unexecuted instantiation: payload.c:eb_prev_unique Unexecuted instantiation: proto_tcp.c:eb_prev_unique Unexecuted instantiation: shctx.c:eb_prev_unique Unexecuted instantiation: stats-file.c:eb_prev_unique Unexecuted instantiation: stats-json.c:eb_prev_unique Unexecuted instantiation: stats-proxy.c:eb_prev_unique Unexecuted instantiation: flt_spoe.c:eb_prev_unique Unexecuted instantiation: h1_htx.c:eb_prev_unique Unexecuted instantiation: lru.c:eb_prev_unique |
660 | | |
661 | | /* Return next leaf node after an existing leaf node, skipping duplicates, or |
662 | | * NULL if none. |
663 | | */ |
664 | | static inline struct eb_node *eb_next_unique(struct eb_node *node) |
665 | 0 | { |
666 | 0 | eb_troot_t *t = node->leaf_p; |
667 | 0 |
|
668 | 0 | while (1) { |
669 | 0 | if (eb_gettag(t) == EB_LEFT) { |
670 | 0 | if (unlikely(eb_clrtag((eb_untag(t, EB_LEFT))->b[EB_RGHT]) == NULL)) |
671 | 0 | return NULL; /* we reached root */ |
672 | 0 | node = eb_root_to_node(eb_untag(t, EB_LEFT)); |
673 | 0 | /* if we're left and not in duplicates, stop here */ |
674 | 0 | if (node->bit >= 0) |
675 | 0 | break; |
676 | 0 | t = node->node_p; |
677 | 0 | } |
678 | 0 | else { |
679 | 0 | /* Walking up from right branch, so we cannot be below root */ |
680 | 0 | t = (eb_root_to_node(eb_untag(t, EB_RGHT)))->node_p; |
681 | 0 | } |
682 | 0 | } |
683 | 0 |
|
684 | 0 | /* Note that <t> cannot be NULL at this stage */ |
685 | 0 | t = (eb_untag(t, EB_LEFT))->b[EB_RGHT]; |
686 | 0 | if (eb_clrtag(t) == NULL) |
687 | 0 | return NULL; |
688 | 0 | return eb_walk_down(t, EB_LEFT); |
689 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:eb_next_unique Unexecuted instantiation: cfgparse.c:eb_next_unique Unexecuted instantiation: chunk.c:eb_next_unique Unexecuted instantiation: cli.c:eb_next_unique Unexecuted instantiation: clock.c:eb_next_unique Unexecuted instantiation: connection.c:eb_next_unique Unexecuted instantiation: debug.c:eb_next_unique Unexecuted instantiation: dynbuf.c:eb_next_unique Unexecuted instantiation: ebtree.c:eb_next_unique Unexecuted instantiation: errors.c:eb_next_unique Unexecuted instantiation: fd.c:eb_next_unique Unexecuted instantiation: filters.c:eb_next_unique Unexecuted instantiation: flt_http_comp.c:eb_next_unique Unexecuted instantiation: freq_ctr.c:eb_next_unique Unexecuted instantiation: frontend.c:eb_next_unique Unexecuted instantiation: haproxy.c:eb_next_unique Unexecuted instantiation: http.c:eb_next_unique Unexecuted instantiation: http_ana.c:eb_next_unique Unexecuted instantiation: http_ext.c:eb_next_unique Unexecuted instantiation: http_htx.c:eb_next_unique Unexecuted instantiation: http_rules.c:eb_next_unique Unexecuted instantiation: lb_chash.c:eb_next_unique Unexecuted instantiation: lb_fas.c:eb_next_unique Unexecuted instantiation: lb_fwlc.c:eb_next_unique Unexecuted instantiation: lb_fwrr.c:eb_next_unique Unexecuted instantiation: lb_map.c:eb_next_unique Unexecuted instantiation: limits.c:eb_next_unique Unexecuted instantiation: listener.c:eb_next_unique Unexecuted instantiation: log.c:eb_next_unique Unexecuted instantiation: mailers.c:eb_next_unique Unexecuted instantiation: mworker.c:eb_next_unique Unexecuted instantiation: peers.c:eb_next_unique Unexecuted instantiation: pool.c:eb_next_unique Unexecuted instantiation: proto_rhttp.c:eb_next_unique Unexecuted instantiation: proto_sockpair.c:eb_next_unique Unexecuted instantiation: protocol.c:eb_next_unique Unexecuted instantiation: proxy.c:eb_next_unique Unexecuted instantiation: queue.c:eb_next_unique Unexecuted instantiation: regex.c:eb_next_unique Unexecuted instantiation: resolvers.c:eb_next_unique Unexecuted instantiation: ring.c:eb_next_unique Unexecuted instantiation: sample.c:eb_next_unique Unexecuted instantiation: server.c:eb_next_unique Unexecuted instantiation: session.c:eb_next_unique Unexecuted instantiation: signal.c:eb_next_unique Unexecuted instantiation: sink.c:eb_next_unique Unexecuted instantiation: sock.c:eb_next_unique Unexecuted instantiation: sock_inet.c:eb_next_unique Unexecuted instantiation: stats-html.c:eb_next_unique Unexecuted instantiation: stats.c:eb_next_unique Unexecuted instantiation: stconn.c:eb_next_unique Unexecuted instantiation: stick_table.c:eb_next_unique Unexecuted instantiation: stream.c:eb_next_unique Unexecuted instantiation: systemd.c:eb_next_unique Unexecuted instantiation: task.c:eb_next_unique Unexecuted instantiation: tcp_rules.c:eb_next_unique Unexecuted instantiation: tcpcheck.c:eb_next_unique Unexecuted instantiation: thread.c:eb_next_unique Unexecuted instantiation: tools.c:eb_next_unique Unexecuted instantiation: trace.c:eb_next_unique Unexecuted instantiation: vars.c:eb_next_unique Unexecuted instantiation: acl.c:eb_next_unique Unexecuted instantiation: action.c:eb_next_unique Unexecuted instantiation: activity.c:eb_next_unique Unexecuted instantiation: applet.c:eb_next_unique Unexecuted instantiation: arg.c:eb_next_unique Unexecuted instantiation: backend.c:eb_next_unique Unexecuted instantiation: cache.c:eb_next_unique Unexecuted instantiation: cfgcond.c:eb_next_unique Unexecuted instantiation: cfgparse-global.c:eb_next_unique Unexecuted instantiation: cfgparse-listen.c:eb_next_unique Unexecuted instantiation: channel.c:eb_next_unique Unexecuted instantiation: check.c:eb_next_unique Unexecuted instantiation: compression.c:eb_next_unique Unexecuted instantiation: counters.c:eb_next_unique Unexecuted instantiation: dgram.c:eb_next_unique Unexecuted instantiation: dict.c:eb_next_unique Unexecuted instantiation: dns.c:eb_next_unique Unexecuted instantiation: dns_ring.c:eb_next_unique Unexecuted instantiation: eb32tree.c:eb_next_unique Unexecuted instantiation: eb64tree.c:eb_next_unique Unexecuted instantiation: ebimtree.c:eb_next_unique Unexecuted instantiation: ebistree.c:eb_next_unique Unexecuted instantiation: ebmbtree.c:eb_next_unique Unexecuted instantiation: ebsttree.c:eb_next_unique Unexecuted instantiation: event_hdl.c:eb_next_unique Unexecuted instantiation: extcheck.c:eb_next_unique Unexecuted instantiation: fcgi-app.c:eb_next_unique Unexecuted instantiation: fix.c:eb_next_unique Unexecuted instantiation: guid.c:eb_next_unique Unexecuted instantiation: h1.c:eb_next_unique Unexecuted instantiation: http_fetch.c:eb_next_unique Unexecuted instantiation: mqtt.c:eb_next_unique Unexecuted instantiation: mux_spop.c:eb_next_unique Unexecuted instantiation: pattern.c:eb_next_unique Unexecuted instantiation: payload.c:eb_next_unique Unexecuted instantiation: proto_tcp.c:eb_next_unique Unexecuted instantiation: shctx.c:eb_next_unique Unexecuted instantiation: stats-file.c:eb_next_unique Unexecuted instantiation: stats-json.c:eb_next_unique Unexecuted instantiation: stats-proxy.c:eb_next_unique Unexecuted instantiation: flt_spoe.c:eb_next_unique Unexecuted instantiation: h1_htx.c:eb_next_unique Unexecuted instantiation: lru.c:eb_next_unique |
690 | | |
691 | | |
692 | | /* Removes a leaf node from the tree if it was still in it. Marks the node |
693 | | * as unlinked. |
694 | | */ |
695 | | static forceinline void __eb_delete(struct eb_node *node) |
696 | 0 | { |
697 | 0 | __label__ delete_unlink; |
698 | 0 | unsigned int pside, gpside, sibtype; |
699 | 0 | struct eb_node *parent; |
700 | 0 | struct eb_root *gparent; |
701 | |
|
702 | 0 | if (!node->leaf_p) |
703 | 0 | return; |
704 | | |
705 | | /* we need the parent, our side, and the grand parent */ |
706 | 0 | pside = eb_gettag(node->leaf_p); |
707 | 0 | parent = eb_root_to_node(eb_untag(node->leaf_p, pside)); |
708 | | |
709 | | /* We likely have to release the parent link, unless it's the root, |
710 | | * in which case we only set our branch to NULL. Note that we can |
711 | | * only be attached to the root by its left branch. |
712 | | */ |
713 | |
|
714 | 0 | if (eb_clrtag(parent->branches.b[EB_RGHT]) == NULL) { |
715 | | /* we're just below the root, it's trivial. */ |
716 | 0 | parent->branches.b[EB_LEFT] = NULL; |
717 | 0 | goto delete_unlink; |
718 | 0 | } |
719 | | |
720 | | /* To release our parent, we have to identify our sibling, and reparent |
721 | | * it directly to/from the grand parent. Note that the sibling can |
722 | | * either be a link or a leaf. |
723 | | */ |
724 | | |
725 | 0 | gpside = eb_gettag(parent->node_p); |
726 | 0 | gparent = eb_untag(parent->node_p, gpside); |
727 | |
|
728 | 0 | gparent->b[gpside] = parent->branches.b[!pside]; |
729 | 0 | sibtype = eb_gettag(gparent->b[gpside]); |
730 | |
|
731 | 0 | if (sibtype == EB_LEAF) { |
732 | 0 | eb_root_to_node(eb_untag(gparent->b[gpside], EB_LEAF))->leaf_p = |
733 | 0 | eb_dotag(gparent, gpside); |
734 | 0 | } else { |
735 | 0 | eb_root_to_node(eb_untag(gparent->b[gpside], EB_NODE))->node_p = |
736 | 0 | eb_dotag(gparent, gpside); |
737 | 0 | } |
738 | | /* Mark the parent unused. Note that we do not check if the parent is |
739 | | * our own node, but that's not a problem because if it is, it will be |
740 | | * marked unused at the same time, which we'll use below to know we can |
741 | | * safely remove it. |
742 | | */ |
743 | 0 | parent->node_p = NULL; |
744 | | |
745 | | /* The parent node has been detached, and is currently unused. It may |
746 | | * belong to another node, so we cannot remove it that way. Also, our |
747 | | * own node part might still be used. so we can use this spare node |
748 | | * to replace ours if needed. |
749 | | */ |
750 | | |
751 | | /* If our link part is unused, we can safely exit now */ |
752 | 0 | if (!node->node_p) |
753 | 0 | goto delete_unlink; |
754 | | |
755 | | /* From now on, <node> and <parent> are necessarily different, and the |
756 | | * <node>'s node part is in use. By definition, <parent> is at least |
757 | | * below <node>, so keeping its key for the bit string is OK. |
758 | | */ |
759 | | |
760 | 0 | parent->node_p = node->node_p; |
761 | 0 | parent->branches = node->branches; |
762 | 0 | parent->bit = node->bit; |
763 | | |
764 | | /* We must now update the new node's parent... */ |
765 | 0 | gpside = eb_gettag(parent->node_p); |
766 | 0 | gparent = eb_untag(parent->node_p, gpside); |
767 | 0 | gparent->b[gpside] = eb_dotag(&parent->branches, EB_NODE); |
768 | | |
769 | | /* ... and its branches */ |
770 | 0 | for (pside = 0; pside <= 1; pside++) { |
771 | 0 | if (eb_gettag(parent->branches.b[pside]) == EB_NODE) { |
772 | 0 | eb_root_to_node(eb_untag(parent->branches.b[pside], EB_NODE))->node_p = |
773 | 0 | eb_dotag(&parent->branches, pside); |
774 | 0 | } else { |
775 | 0 | eb_root_to_node(eb_untag(parent->branches.b[pside], EB_LEAF))->leaf_p = |
776 | 0 | eb_dotag(&parent->branches, pside); |
777 | 0 | } |
778 | 0 | } |
779 | 0 | delete_unlink: |
780 | | /* Now the node has been completely unlinked */ |
781 | 0 | node->leaf_p = NULL; |
782 | 0 | return; /* tree is not empty yet */ |
783 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:__eb_delete Unexecuted instantiation: cfgparse.c:__eb_delete Unexecuted instantiation: chunk.c:__eb_delete Unexecuted instantiation: cli.c:__eb_delete Unexecuted instantiation: clock.c:__eb_delete Unexecuted instantiation: connection.c:__eb_delete Unexecuted instantiation: debug.c:__eb_delete Unexecuted instantiation: dynbuf.c:__eb_delete Unexecuted instantiation: ebtree.c:__eb_delete Unexecuted instantiation: errors.c:__eb_delete Unexecuted instantiation: fd.c:__eb_delete Unexecuted instantiation: filters.c:__eb_delete Unexecuted instantiation: flt_http_comp.c:__eb_delete Unexecuted instantiation: freq_ctr.c:__eb_delete Unexecuted instantiation: frontend.c:__eb_delete Unexecuted instantiation: haproxy.c:__eb_delete Unexecuted instantiation: http.c:__eb_delete Unexecuted instantiation: http_ana.c:__eb_delete Unexecuted instantiation: http_ext.c:__eb_delete Unexecuted instantiation: http_htx.c:__eb_delete Unexecuted instantiation: http_rules.c:__eb_delete Unexecuted instantiation: lb_chash.c:__eb_delete Unexecuted instantiation: lb_fas.c:__eb_delete Unexecuted instantiation: lb_fwlc.c:__eb_delete Unexecuted instantiation: lb_fwrr.c:__eb_delete Unexecuted instantiation: lb_map.c:__eb_delete Unexecuted instantiation: limits.c:__eb_delete Unexecuted instantiation: listener.c:__eb_delete Unexecuted instantiation: log.c:__eb_delete Unexecuted instantiation: mailers.c:__eb_delete Unexecuted instantiation: mworker.c:__eb_delete Unexecuted instantiation: peers.c:__eb_delete Unexecuted instantiation: pool.c:__eb_delete Unexecuted instantiation: proto_rhttp.c:__eb_delete Unexecuted instantiation: proto_sockpair.c:__eb_delete Unexecuted instantiation: protocol.c:__eb_delete Unexecuted instantiation: proxy.c:__eb_delete Unexecuted instantiation: queue.c:__eb_delete Unexecuted instantiation: regex.c:__eb_delete Unexecuted instantiation: resolvers.c:__eb_delete Unexecuted instantiation: ring.c:__eb_delete Unexecuted instantiation: sample.c:__eb_delete Unexecuted instantiation: server.c:__eb_delete Unexecuted instantiation: session.c:__eb_delete Unexecuted instantiation: signal.c:__eb_delete Unexecuted instantiation: sink.c:__eb_delete Unexecuted instantiation: sock.c:__eb_delete Unexecuted instantiation: sock_inet.c:__eb_delete Unexecuted instantiation: stats-html.c:__eb_delete Unexecuted instantiation: stats.c:__eb_delete Unexecuted instantiation: stconn.c:__eb_delete Unexecuted instantiation: stick_table.c:__eb_delete Unexecuted instantiation: stream.c:__eb_delete Unexecuted instantiation: systemd.c:__eb_delete Unexecuted instantiation: task.c:__eb_delete Unexecuted instantiation: tcp_rules.c:__eb_delete Unexecuted instantiation: tcpcheck.c:__eb_delete Unexecuted instantiation: thread.c:__eb_delete Unexecuted instantiation: tools.c:__eb_delete Unexecuted instantiation: trace.c:__eb_delete Unexecuted instantiation: vars.c:__eb_delete Unexecuted instantiation: acl.c:__eb_delete Unexecuted instantiation: action.c:__eb_delete Unexecuted instantiation: activity.c:__eb_delete Unexecuted instantiation: applet.c:__eb_delete Unexecuted instantiation: arg.c:__eb_delete Unexecuted instantiation: backend.c:__eb_delete Unexecuted instantiation: cache.c:__eb_delete Unexecuted instantiation: cfgcond.c:__eb_delete Unexecuted instantiation: cfgparse-global.c:__eb_delete Unexecuted instantiation: cfgparse-listen.c:__eb_delete Unexecuted instantiation: channel.c:__eb_delete Unexecuted instantiation: check.c:__eb_delete Unexecuted instantiation: compression.c:__eb_delete Unexecuted instantiation: counters.c:__eb_delete Unexecuted instantiation: dgram.c:__eb_delete Unexecuted instantiation: dict.c:__eb_delete Unexecuted instantiation: dns.c:__eb_delete Unexecuted instantiation: dns_ring.c:__eb_delete Unexecuted instantiation: eb32tree.c:__eb_delete Unexecuted instantiation: eb64tree.c:__eb_delete Unexecuted instantiation: ebimtree.c:__eb_delete Unexecuted instantiation: ebistree.c:__eb_delete Unexecuted instantiation: ebmbtree.c:__eb_delete Unexecuted instantiation: ebsttree.c:__eb_delete Unexecuted instantiation: event_hdl.c:__eb_delete Unexecuted instantiation: extcheck.c:__eb_delete Unexecuted instantiation: fcgi-app.c:__eb_delete Unexecuted instantiation: fix.c:__eb_delete Unexecuted instantiation: guid.c:__eb_delete Unexecuted instantiation: h1.c:__eb_delete Unexecuted instantiation: http_fetch.c:__eb_delete Unexecuted instantiation: mqtt.c:__eb_delete Unexecuted instantiation: mux_spop.c:__eb_delete Unexecuted instantiation: pattern.c:__eb_delete Unexecuted instantiation: payload.c:__eb_delete Unexecuted instantiation: proto_tcp.c:__eb_delete Unexecuted instantiation: shctx.c:__eb_delete Unexecuted instantiation: stats-file.c:__eb_delete Unexecuted instantiation: stats-json.c:__eb_delete Unexecuted instantiation: stats-proxy.c:__eb_delete Unexecuted instantiation: flt_spoe.c:__eb_delete Unexecuted instantiation: h1_htx.c:__eb_delete Unexecuted instantiation: lru.c:__eb_delete |
784 | | |
785 | | /* Compare blocks <a> and <b> byte-to-byte, from bit <ignore> to bit <len-1>. |
786 | | * Return the number of equal bits between strings, assuming that the first |
787 | | * <ignore> bits are already identical. It is possible to return slightly more |
788 | | * than <len> bits if <len> does not stop on a byte boundary and we find exact |
789 | | * bytes. Note that parts or all of <ignore> bits may be rechecked. It is only |
790 | | * passed here as a hint to speed up the check. |
791 | | */ |
792 | | static forceinline size_t equal_bits(const unsigned char *a, |
793 | | const unsigned char *b, |
794 | | size_t ignore, size_t len) |
795 | 0 | { |
796 | 0 | for (ignore >>= 3, a += ignore, b += ignore, ignore <<= 3; |
797 | 0 | ignore < len; ) { |
798 | 0 | unsigned char c; |
799 | |
|
800 | 0 | a++; b++; |
801 | 0 | ignore += 8; |
802 | 0 | c = b[-1] ^ a[-1]; |
803 | |
|
804 | 0 | if (c) { |
805 | | /* OK now we know that old and new differ at byte <ptr> and that <c> holds |
806 | | * the bit differences. We have to find what bit is differing and report |
807 | | * it as the number of identical bits. Note that low bit numbers are |
808 | | * assigned to high positions in the byte, as we compare them as strings. |
809 | | */ |
810 | 0 | ignore -= flsnz_long(c); |
811 | 0 | break; |
812 | 0 | } |
813 | 0 | } |
814 | 0 | return ignore; |
815 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:equal_bits Unexecuted instantiation: cfgparse.c:equal_bits Unexecuted instantiation: chunk.c:equal_bits Unexecuted instantiation: cli.c:equal_bits Unexecuted instantiation: clock.c:equal_bits Unexecuted instantiation: connection.c:equal_bits Unexecuted instantiation: debug.c:equal_bits Unexecuted instantiation: dynbuf.c:equal_bits Unexecuted instantiation: ebtree.c:equal_bits Unexecuted instantiation: errors.c:equal_bits Unexecuted instantiation: fd.c:equal_bits Unexecuted instantiation: filters.c:equal_bits Unexecuted instantiation: flt_http_comp.c:equal_bits Unexecuted instantiation: freq_ctr.c:equal_bits Unexecuted instantiation: frontend.c:equal_bits Unexecuted instantiation: haproxy.c:equal_bits Unexecuted instantiation: http.c:equal_bits Unexecuted instantiation: http_ana.c:equal_bits Unexecuted instantiation: http_ext.c:equal_bits Unexecuted instantiation: http_htx.c:equal_bits Unexecuted instantiation: http_rules.c:equal_bits Unexecuted instantiation: lb_chash.c:equal_bits Unexecuted instantiation: lb_fas.c:equal_bits Unexecuted instantiation: lb_fwlc.c:equal_bits Unexecuted instantiation: lb_fwrr.c:equal_bits Unexecuted instantiation: lb_map.c:equal_bits Unexecuted instantiation: limits.c:equal_bits Unexecuted instantiation: listener.c:equal_bits Unexecuted instantiation: log.c:equal_bits Unexecuted instantiation: mailers.c:equal_bits Unexecuted instantiation: mworker.c:equal_bits Unexecuted instantiation: peers.c:equal_bits Unexecuted instantiation: pool.c:equal_bits Unexecuted instantiation: proto_rhttp.c:equal_bits Unexecuted instantiation: proto_sockpair.c:equal_bits Unexecuted instantiation: protocol.c:equal_bits Unexecuted instantiation: proxy.c:equal_bits Unexecuted instantiation: queue.c:equal_bits Unexecuted instantiation: regex.c:equal_bits Unexecuted instantiation: resolvers.c:equal_bits Unexecuted instantiation: ring.c:equal_bits Unexecuted instantiation: sample.c:equal_bits Unexecuted instantiation: server.c:equal_bits Unexecuted instantiation: session.c:equal_bits Unexecuted instantiation: signal.c:equal_bits Unexecuted instantiation: sink.c:equal_bits Unexecuted instantiation: sock.c:equal_bits Unexecuted instantiation: sock_inet.c:equal_bits Unexecuted instantiation: stats-html.c:equal_bits Unexecuted instantiation: stats.c:equal_bits Unexecuted instantiation: stconn.c:equal_bits Unexecuted instantiation: stick_table.c:equal_bits Unexecuted instantiation: stream.c:equal_bits Unexecuted instantiation: systemd.c:equal_bits Unexecuted instantiation: task.c:equal_bits Unexecuted instantiation: tcp_rules.c:equal_bits Unexecuted instantiation: tcpcheck.c:equal_bits Unexecuted instantiation: thread.c:equal_bits Unexecuted instantiation: tools.c:equal_bits Unexecuted instantiation: trace.c:equal_bits Unexecuted instantiation: vars.c:equal_bits Unexecuted instantiation: acl.c:equal_bits Unexecuted instantiation: action.c:equal_bits Unexecuted instantiation: activity.c:equal_bits Unexecuted instantiation: applet.c:equal_bits Unexecuted instantiation: arg.c:equal_bits Unexecuted instantiation: backend.c:equal_bits Unexecuted instantiation: cache.c:equal_bits Unexecuted instantiation: cfgcond.c:equal_bits Unexecuted instantiation: cfgparse-global.c:equal_bits Unexecuted instantiation: cfgparse-listen.c:equal_bits Unexecuted instantiation: channel.c:equal_bits Unexecuted instantiation: check.c:equal_bits Unexecuted instantiation: compression.c:equal_bits Unexecuted instantiation: counters.c:equal_bits Unexecuted instantiation: dgram.c:equal_bits Unexecuted instantiation: dict.c:equal_bits Unexecuted instantiation: dns.c:equal_bits Unexecuted instantiation: dns_ring.c:equal_bits Unexecuted instantiation: eb32tree.c:equal_bits Unexecuted instantiation: eb64tree.c:equal_bits Unexecuted instantiation: ebimtree.c:equal_bits Unexecuted instantiation: ebistree.c:equal_bits Unexecuted instantiation: ebmbtree.c:equal_bits Unexecuted instantiation: ebsttree.c:equal_bits Unexecuted instantiation: event_hdl.c:equal_bits Unexecuted instantiation: extcheck.c:equal_bits Unexecuted instantiation: fcgi-app.c:equal_bits Unexecuted instantiation: fix.c:equal_bits Unexecuted instantiation: guid.c:equal_bits Unexecuted instantiation: h1.c:equal_bits Unexecuted instantiation: http_fetch.c:equal_bits Unexecuted instantiation: mqtt.c:equal_bits Unexecuted instantiation: mux_spop.c:equal_bits Unexecuted instantiation: pattern.c:equal_bits Unexecuted instantiation: payload.c:equal_bits Unexecuted instantiation: proto_tcp.c:equal_bits Unexecuted instantiation: shctx.c:equal_bits Unexecuted instantiation: stats-file.c:equal_bits Unexecuted instantiation: stats-json.c:equal_bits Unexecuted instantiation: stats-proxy.c:equal_bits Unexecuted instantiation: flt_spoe.c:equal_bits Unexecuted instantiation: h1_htx.c:equal_bits Unexecuted instantiation: lru.c:equal_bits |
816 | | |
817 | | /* check that the two blocks <a> and <b> are equal on <len> bits. If it is known |
818 | | * they already are on some bytes, this number of equal bytes to be skipped may |
819 | | * be passed in <skip>. It returns 0 if they match, otherwise non-zero. |
820 | | */ |
821 | | static forceinline int check_bits(const unsigned char *a, |
822 | | const unsigned char *b, |
823 | | int skip, |
824 | | int len) |
825 | 0 | { |
826 | 0 | int bit, ret; |
827 | | |
828 | | /* This uncommon construction gives the best performance on x86 because |
829 | | * it makes heavy use multiple-index addressing and parallel instructions, |
830 | | * and it prevents gcc from reordering the loop since it is already |
831 | | * properly oriented. Tested to be fine with 2.95 to 4.2. |
832 | | */ |
833 | 0 | bit = ~len + (skip << 3) + 9; // = (skip << 3) + (8 - len) |
834 | 0 | ret = a[skip] ^ b[skip]; |
835 | 0 | if (unlikely(bit >= 0)) |
836 | 0 | return ret >> bit; |
837 | 0 | while (1) { |
838 | 0 | skip++; |
839 | 0 | if (ret) |
840 | 0 | return ret; |
841 | 0 | ret = a[skip] ^ b[skip]; |
842 | 0 | bit += 8; |
843 | 0 | if (bit >= 0) |
844 | 0 | return ret >> bit; |
845 | 0 | } |
846 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:check_bits Unexecuted instantiation: cfgparse.c:check_bits Unexecuted instantiation: chunk.c:check_bits Unexecuted instantiation: cli.c:check_bits Unexecuted instantiation: clock.c:check_bits Unexecuted instantiation: connection.c:check_bits Unexecuted instantiation: debug.c:check_bits Unexecuted instantiation: dynbuf.c:check_bits Unexecuted instantiation: ebtree.c:check_bits Unexecuted instantiation: errors.c:check_bits Unexecuted instantiation: fd.c:check_bits Unexecuted instantiation: filters.c:check_bits Unexecuted instantiation: flt_http_comp.c:check_bits Unexecuted instantiation: freq_ctr.c:check_bits Unexecuted instantiation: frontend.c:check_bits Unexecuted instantiation: haproxy.c:check_bits Unexecuted instantiation: http.c:check_bits Unexecuted instantiation: http_ana.c:check_bits Unexecuted instantiation: http_ext.c:check_bits Unexecuted instantiation: http_htx.c:check_bits Unexecuted instantiation: http_rules.c:check_bits Unexecuted instantiation: lb_chash.c:check_bits Unexecuted instantiation: lb_fas.c:check_bits Unexecuted instantiation: lb_fwlc.c:check_bits Unexecuted instantiation: lb_fwrr.c:check_bits Unexecuted instantiation: lb_map.c:check_bits Unexecuted instantiation: limits.c:check_bits Unexecuted instantiation: listener.c:check_bits Unexecuted instantiation: log.c:check_bits Unexecuted instantiation: mailers.c:check_bits Unexecuted instantiation: mworker.c:check_bits Unexecuted instantiation: peers.c:check_bits Unexecuted instantiation: pool.c:check_bits Unexecuted instantiation: proto_rhttp.c:check_bits Unexecuted instantiation: proto_sockpair.c:check_bits Unexecuted instantiation: protocol.c:check_bits Unexecuted instantiation: proxy.c:check_bits Unexecuted instantiation: queue.c:check_bits Unexecuted instantiation: regex.c:check_bits Unexecuted instantiation: resolvers.c:check_bits Unexecuted instantiation: ring.c:check_bits Unexecuted instantiation: sample.c:check_bits Unexecuted instantiation: server.c:check_bits Unexecuted instantiation: session.c:check_bits Unexecuted instantiation: signal.c:check_bits Unexecuted instantiation: sink.c:check_bits Unexecuted instantiation: sock.c:check_bits Unexecuted instantiation: sock_inet.c:check_bits Unexecuted instantiation: stats-html.c:check_bits Unexecuted instantiation: stats.c:check_bits Unexecuted instantiation: stconn.c:check_bits Unexecuted instantiation: stick_table.c:check_bits Unexecuted instantiation: stream.c:check_bits Unexecuted instantiation: systemd.c:check_bits Unexecuted instantiation: task.c:check_bits Unexecuted instantiation: tcp_rules.c:check_bits Unexecuted instantiation: tcpcheck.c:check_bits Unexecuted instantiation: thread.c:check_bits Unexecuted instantiation: tools.c:check_bits Unexecuted instantiation: trace.c:check_bits Unexecuted instantiation: vars.c:check_bits Unexecuted instantiation: acl.c:check_bits Unexecuted instantiation: action.c:check_bits Unexecuted instantiation: activity.c:check_bits Unexecuted instantiation: applet.c:check_bits Unexecuted instantiation: arg.c:check_bits Unexecuted instantiation: backend.c:check_bits Unexecuted instantiation: cache.c:check_bits Unexecuted instantiation: cfgcond.c:check_bits Unexecuted instantiation: cfgparse-global.c:check_bits Unexecuted instantiation: cfgparse-listen.c:check_bits Unexecuted instantiation: channel.c:check_bits Unexecuted instantiation: check.c:check_bits Unexecuted instantiation: compression.c:check_bits Unexecuted instantiation: counters.c:check_bits Unexecuted instantiation: dgram.c:check_bits Unexecuted instantiation: dict.c:check_bits Unexecuted instantiation: dns.c:check_bits Unexecuted instantiation: dns_ring.c:check_bits Unexecuted instantiation: eb32tree.c:check_bits Unexecuted instantiation: eb64tree.c:check_bits Unexecuted instantiation: ebimtree.c:check_bits Unexecuted instantiation: ebistree.c:check_bits Unexecuted instantiation: ebmbtree.c:check_bits Unexecuted instantiation: ebsttree.c:check_bits Unexecuted instantiation: event_hdl.c:check_bits Unexecuted instantiation: extcheck.c:check_bits Unexecuted instantiation: fcgi-app.c:check_bits Unexecuted instantiation: fix.c:check_bits Unexecuted instantiation: guid.c:check_bits Unexecuted instantiation: h1.c:check_bits Unexecuted instantiation: http_fetch.c:check_bits Unexecuted instantiation: mqtt.c:check_bits Unexecuted instantiation: mux_spop.c:check_bits Unexecuted instantiation: pattern.c:check_bits Unexecuted instantiation: payload.c:check_bits Unexecuted instantiation: proto_tcp.c:check_bits Unexecuted instantiation: shctx.c:check_bits Unexecuted instantiation: stats-file.c:check_bits Unexecuted instantiation: stats-json.c:check_bits Unexecuted instantiation: stats-proxy.c:check_bits Unexecuted instantiation: flt_spoe.c:check_bits Unexecuted instantiation: h1_htx.c:check_bits Unexecuted instantiation: lru.c:check_bits |
847 | | |
848 | | |
849 | | /* Compare strings <a> and <b> byte-to-byte, from bit <ignore> to the last 0. |
850 | | * Return the number of equal bits between strings, assuming that the first |
851 | | * <ignore> bits are already identical. Note that parts or all of <ignore> bits |
852 | | * may be rechecked. It is only passed here as a hint to speed up the check. |
853 | | * The caller is responsible for not passing an <ignore> value larger than any |
854 | | * of the two strings. However, referencing any bit from the trailing zero is |
855 | | * permitted. Equal strings are reported as a negative number of bits, which |
856 | | * indicates the end was reached. |
857 | | */ |
858 | | static forceinline size_t string_equal_bits(const unsigned char *a, |
859 | | const unsigned char *b, |
860 | | size_t ignore) |
861 | 0 | { |
862 | 0 | unsigned char c, d; |
863 | 0 | size_t beg; |
864 | |
|
865 | 0 | beg = ignore >> 3; |
866 | | |
867 | | /* skip known and identical bits. We stop at the first different byte |
868 | | * or at the first zero we encounter on either side. |
869 | | */ |
870 | 0 | while (1) { |
871 | 0 | c = a[beg]; |
872 | 0 | d = b[beg]; |
873 | 0 | beg++; |
874 | |
|
875 | 0 | c ^= d; |
876 | 0 | if (c) |
877 | 0 | break; |
878 | 0 | if (!d) |
879 | 0 | return (size_t)-1; |
880 | 0 | } |
881 | | /* OK now we know that a and b differ at byte <beg>, or that both are zero. |
882 | | * We have to find what bit is differing and report it as the number of |
883 | | * identical bits. Note that low bit numbers are assigned to high positions |
884 | | * in the byte, as we compare them as strings. |
885 | | */ |
886 | 0 | return (beg << 3) - flsnz(c); |
887 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:string_equal_bits Unexecuted instantiation: cfgparse.c:string_equal_bits Unexecuted instantiation: chunk.c:string_equal_bits Unexecuted instantiation: cli.c:string_equal_bits Unexecuted instantiation: clock.c:string_equal_bits Unexecuted instantiation: connection.c:string_equal_bits Unexecuted instantiation: debug.c:string_equal_bits Unexecuted instantiation: dynbuf.c:string_equal_bits Unexecuted instantiation: ebtree.c:string_equal_bits Unexecuted instantiation: errors.c:string_equal_bits Unexecuted instantiation: fd.c:string_equal_bits Unexecuted instantiation: filters.c:string_equal_bits Unexecuted instantiation: flt_http_comp.c:string_equal_bits Unexecuted instantiation: freq_ctr.c:string_equal_bits Unexecuted instantiation: frontend.c:string_equal_bits Unexecuted instantiation: haproxy.c:string_equal_bits Unexecuted instantiation: http.c:string_equal_bits Unexecuted instantiation: http_ana.c:string_equal_bits Unexecuted instantiation: http_ext.c:string_equal_bits Unexecuted instantiation: http_htx.c:string_equal_bits Unexecuted instantiation: http_rules.c:string_equal_bits Unexecuted instantiation: lb_chash.c:string_equal_bits Unexecuted instantiation: lb_fas.c:string_equal_bits Unexecuted instantiation: lb_fwlc.c:string_equal_bits Unexecuted instantiation: lb_fwrr.c:string_equal_bits Unexecuted instantiation: lb_map.c:string_equal_bits Unexecuted instantiation: limits.c:string_equal_bits Unexecuted instantiation: listener.c:string_equal_bits Unexecuted instantiation: log.c:string_equal_bits Unexecuted instantiation: mailers.c:string_equal_bits Unexecuted instantiation: mworker.c:string_equal_bits Unexecuted instantiation: peers.c:string_equal_bits Unexecuted instantiation: pool.c:string_equal_bits Unexecuted instantiation: proto_rhttp.c:string_equal_bits Unexecuted instantiation: proto_sockpair.c:string_equal_bits Unexecuted instantiation: protocol.c:string_equal_bits Unexecuted instantiation: proxy.c:string_equal_bits Unexecuted instantiation: queue.c:string_equal_bits Unexecuted instantiation: regex.c:string_equal_bits Unexecuted instantiation: resolvers.c:string_equal_bits Unexecuted instantiation: ring.c:string_equal_bits Unexecuted instantiation: sample.c:string_equal_bits Unexecuted instantiation: server.c:string_equal_bits Unexecuted instantiation: session.c:string_equal_bits Unexecuted instantiation: signal.c:string_equal_bits Unexecuted instantiation: sink.c:string_equal_bits Unexecuted instantiation: sock.c:string_equal_bits Unexecuted instantiation: sock_inet.c:string_equal_bits Unexecuted instantiation: stats-html.c:string_equal_bits Unexecuted instantiation: stats.c:string_equal_bits Unexecuted instantiation: stconn.c:string_equal_bits Unexecuted instantiation: stick_table.c:string_equal_bits Unexecuted instantiation: stream.c:string_equal_bits Unexecuted instantiation: systemd.c:string_equal_bits Unexecuted instantiation: task.c:string_equal_bits Unexecuted instantiation: tcp_rules.c:string_equal_bits Unexecuted instantiation: tcpcheck.c:string_equal_bits Unexecuted instantiation: thread.c:string_equal_bits Unexecuted instantiation: tools.c:string_equal_bits Unexecuted instantiation: trace.c:string_equal_bits Unexecuted instantiation: vars.c:string_equal_bits Unexecuted instantiation: acl.c:string_equal_bits Unexecuted instantiation: action.c:string_equal_bits Unexecuted instantiation: activity.c:string_equal_bits Unexecuted instantiation: applet.c:string_equal_bits Unexecuted instantiation: arg.c:string_equal_bits Unexecuted instantiation: backend.c:string_equal_bits Unexecuted instantiation: cache.c:string_equal_bits Unexecuted instantiation: cfgcond.c:string_equal_bits Unexecuted instantiation: cfgparse-global.c:string_equal_bits Unexecuted instantiation: cfgparse-listen.c:string_equal_bits Unexecuted instantiation: channel.c:string_equal_bits Unexecuted instantiation: check.c:string_equal_bits Unexecuted instantiation: compression.c:string_equal_bits Unexecuted instantiation: counters.c:string_equal_bits Unexecuted instantiation: dgram.c:string_equal_bits Unexecuted instantiation: dict.c:string_equal_bits Unexecuted instantiation: dns.c:string_equal_bits Unexecuted instantiation: dns_ring.c:string_equal_bits Unexecuted instantiation: eb32tree.c:string_equal_bits Unexecuted instantiation: eb64tree.c:string_equal_bits Unexecuted instantiation: ebimtree.c:string_equal_bits Unexecuted instantiation: ebistree.c:string_equal_bits Unexecuted instantiation: ebmbtree.c:string_equal_bits Unexecuted instantiation: ebsttree.c:string_equal_bits Unexecuted instantiation: event_hdl.c:string_equal_bits Unexecuted instantiation: extcheck.c:string_equal_bits Unexecuted instantiation: fcgi-app.c:string_equal_bits Unexecuted instantiation: fix.c:string_equal_bits Unexecuted instantiation: guid.c:string_equal_bits Unexecuted instantiation: h1.c:string_equal_bits Unexecuted instantiation: http_fetch.c:string_equal_bits Unexecuted instantiation: mqtt.c:string_equal_bits Unexecuted instantiation: mux_spop.c:string_equal_bits Unexecuted instantiation: pattern.c:string_equal_bits Unexecuted instantiation: payload.c:string_equal_bits Unexecuted instantiation: proto_tcp.c:string_equal_bits Unexecuted instantiation: shctx.c:string_equal_bits Unexecuted instantiation: stats-file.c:string_equal_bits Unexecuted instantiation: stats-json.c:string_equal_bits Unexecuted instantiation: stats-proxy.c:string_equal_bits Unexecuted instantiation: flt_spoe.c:string_equal_bits Unexecuted instantiation: h1_htx.c:string_equal_bits Unexecuted instantiation: lru.c:string_equal_bits |
888 | | |
889 | | static forceinline int cmp_bits(const unsigned char *a, const unsigned char *b, unsigned int pos) |
890 | 0 | { |
891 | 0 | unsigned int ofs; |
892 | 0 | unsigned char bit_a, bit_b; |
893 | |
|
894 | 0 | ofs = pos >> 3; |
895 | 0 | pos = ~pos & 7; |
896 | |
|
897 | 0 | bit_a = (a[ofs] >> pos) & 1; |
898 | 0 | bit_b = (b[ofs] >> pos) & 1; |
899 | |
|
900 | 0 | return bit_a - bit_b; /* -1: a<b; 0: a=b; 1: a>b */ |
901 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:cmp_bits Unexecuted instantiation: cfgparse.c:cmp_bits Unexecuted instantiation: chunk.c:cmp_bits Unexecuted instantiation: cli.c:cmp_bits Unexecuted instantiation: clock.c:cmp_bits Unexecuted instantiation: connection.c:cmp_bits Unexecuted instantiation: debug.c:cmp_bits Unexecuted instantiation: dynbuf.c:cmp_bits Unexecuted instantiation: ebtree.c:cmp_bits Unexecuted instantiation: errors.c:cmp_bits Unexecuted instantiation: fd.c:cmp_bits Unexecuted instantiation: filters.c:cmp_bits Unexecuted instantiation: flt_http_comp.c:cmp_bits Unexecuted instantiation: freq_ctr.c:cmp_bits Unexecuted instantiation: frontend.c:cmp_bits Unexecuted instantiation: haproxy.c:cmp_bits Unexecuted instantiation: http.c:cmp_bits Unexecuted instantiation: http_ana.c:cmp_bits Unexecuted instantiation: http_ext.c:cmp_bits Unexecuted instantiation: http_htx.c:cmp_bits Unexecuted instantiation: http_rules.c:cmp_bits Unexecuted instantiation: lb_chash.c:cmp_bits Unexecuted instantiation: lb_fas.c:cmp_bits Unexecuted instantiation: lb_fwlc.c:cmp_bits Unexecuted instantiation: lb_fwrr.c:cmp_bits Unexecuted instantiation: lb_map.c:cmp_bits Unexecuted instantiation: limits.c:cmp_bits Unexecuted instantiation: listener.c:cmp_bits Unexecuted instantiation: log.c:cmp_bits Unexecuted instantiation: mailers.c:cmp_bits Unexecuted instantiation: mworker.c:cmp_bits Unexecuted instantiation: peers.c:cmp_bits Unexecuted instantiation: pool.c:cmp_bits Unexecuted instantiation: proto_rhttp.c:cmp_bits Unexecuted instantiation: proto_sockpair.c:cmp_bits Unexecuted instantiation: protocol.c:cmp_bits Unexecuted instantiation: proxy.c:cmp_bits Unexecuted instantiation: queue.c:cmp_bits Unexecuted instantiation: regex.c:cmp_bits Unexecuted instantiation: resolvers.c:cmp_bits Unexecuted instantiation: ring.c:cmp_bits Unexecuted instantiation: sample.c:cmp_bits Unexecuted instantiation: server.c:cmp_bits Unexecuted instantiation: session.c:cmp_bits Unexecuted instantiation: signal.c:cmp_bits Unexecuted instantiation: sink.c:cmp_bits Unexecuted instantiation: sock.c:cmp_bits Unexecuted instantiation: sock_inet.c:cmp_bits Unexecuted instantiation: stats-html.c:cmp_bits Unexecuted instantiation: stats.c:cmp_bits Unexecuted instantiation: stconn.c:cmp_bits Unexecuted instantiation: stick_table.c:cmp_bits Unexecuted instantiation: stream.c:cmp_bits Unexecuted instantiation: systemd.c:cmp_bits Unexecuted instantiation: task.c:cmp_bits Unexecuted instantiation: tcp_rules.c:cmp_bits Unexecuted instantiation: tcpcheck.c:cmp_bits Unexecuted instantiation: thread.c:cmp_bits Unexecuted instantiation: tools.c:cmp_bits Unexecuted instantiation: trace.c:cmp_bits Unexecuted instantiation: vars.c:cmp_bits Unexecuted instantiation: acl.c:cmp_bits Unexecuted instantiation: action.c:cmp_bits Unexecuted instantiation: activity.c:cmp_bits Unexecuted instantiation: applet.c:cmp_bits Unexecuted instantiation: arg.c:cmp_bits Unexecuted instantiation: backend.c:cmp_bits Unexecuted instantiation: cache.c:cmp_bits Unexecuted instantiation: cfgcond.c:cmp_bits Unexecuted instantiation: cfgparse-global.c:cmp_bits Unexecuted instantiation: cfgparse-listen.c:cmp_bits Unexecuted instantiation: channel.c:cmp_bits Unexecuted instantiation: check.c:cmp_bits Unexecuted instantiation: compression.c:cmp_bits Unexecuted instantiation: counters.c:cmp_bits Unexecuted instantiation: dgram.c:cmp_bits Unexecuted instantiation: dict.c:cmp_bits Unexecuted instantiation: dns.c:cmp_bits Unexecuted instantiation: dns_ring.c:cmp_bits Unexecuted instantiation: eb32tree.c:cmp_bits Unexecuted instantiation: eb64tree.c:cmp_bits Unexecuted instantiation: ebimtree.c:cmp_bits Unexecuted instantiation: ebistree.c:cmp_bits Unexecuted instantiation: ebmbtree.c:cmp_bits Unexecuted instantiation: ebsttree.c:cmp_bits Unexecuted instantiation: event_hdl.c:cmp_bits Unexecuted instantiation: extcheck.c:cmp_bits Unexecuted instantiation: fcgi-app.c:cmp_bits Unexecuted instantiation: fix.c:cmp_bits Unexecuted instantiation: guid.c:cmp_bits Unexecuted instantiation: h1.c:cmp_bits Unexecuted instantiation: http_fetch.c:cmp_bits Unexecuted instantiation: mqtt.c:cmp_bits Unexecuted instantiation: mux_spop.c:cmp_bits Unexecuted instantiation: pattern.c:cmp_bits Unexecuted instantiation: payload.c:cmp_bits Unexecuted instantiation: proto_tcp.c:cmp_bits Unexecuted instantiation: shctx.c:cmp_bits Unexecuted instantiation: stats-file.c:cmp_bits Unexecuted instantiation: stats-json.c:cmp_bits Unexecuted instantiation: stats-proxy.c:cmp_bits Unexecuted instantiation: flt_spoe.c:cmp_bits Unexecuted instantiation: h1_htx.c:cmp_bits Unexecuted instantiation: lru.c:cmp_bits |
902 | | |
903 | | static forceinline int get_bit(const unsigned char *a, unsigned int pos) |
904 | 0 | { |
905 | 0 | unsigned int ofs; |
906 | 0 |
|
907 | 0 | ofs = pos >> 3; |
908 | 0 | pos = ~pos & 7; |
909 | 0 | return (a[ofs] >> pos) & 1; |
910 | 0 | } Unexecuted instantiation: fuzz_hpack_decode.c:get_bit Unexecuted instantiation: cfgparse.c:get_bit Unexecuted instantiation: chunk.c:get_bit Unexecuted instantiation: cli.c:get_bit Unexecuted instantiation: clock.c:get_bit Unexecuted instantiation: connection.c:get_bit Unexecuted instantiation: debug.c:get_bit Unexecuted instantiation: dynbuf.c:get_bit Unexecuted instantiation: ebtree.c:get_bit Unexecuted instantiation: errors.c:get_bit Unexecuted instantiation: fd.c:get_bit Unexecuted instantiation: filters.c:get_bit Unexecuted instantiation: flt_http_comp.c:get_bit Unexecuted instantiation: freq_ctr.c:get_bit Unexecuted instantiation: frontend.c:get_bit Unexecuted instantiation: haproxy.c:get_bit Unexecuted instantiation: http.c:get_bit Unexecuted instantiation: http_ana.c:get_bit Unexecuted instantiation: http_ext.c:get_bit Unexecuted instantiation: http_htx.c:get_bit Unexecuted instantiation: http_rules.c:get_bit Unexecuted instantiation: lb_chash.c:get_bit Unexecuted instantiation: lb_fas.c:get_bit Unexecuted instantiation: lb_fwlc.c:get_bit Unexecuted instantiation: lb_fwrr.c:get_bit Unexecuted instantiation: lb_map.c:get_bit Unexecuted instantiation: limits.c:get_bit Unexecuted instantiation: listener.c:get_bit Unexecuted instantiation: log.c:get_bit Unexecuted instantiation: mailers.c:get_bit Unexecuted instantiation: mworker.c:get_bit Unexecuted instantiation: peers.c:get_bit Unexecuted instantiation: pool.c:get_bit Unexecuted instantiation: proto_rhttp.c:get_bit Unexecuted instantiation: proto_sockpair.c:get_bit Unexecuted instantiation: protocol.c:get_bit Unexecuted instantiation: proxy.c:get_bit Unexecuted instantiation: queue.c:get_bit Unexecuted instantiation: regex.c:get_bit Unexecuted instantiation: resolvers.c:get_bit Unexecuted instantiation: ring.c:get_bit Unexecuted instantiation: sample.c:get_bit Unexecuted instantiation: server.c:get_bit Unexecuted instantiation: session.c:get_bit Unexecuted instantiation: signal.c:get_bit Unexecuted instantiation: sink.c:get_bit Unexecuted instantiation: sock.c:get_bit Unexecuted instantiation: sock_inet.c:get_bit Unexecuted instantiation: stats-html.c:get_bit Unexecuted instantiation: stats.c:get_bit Unexecuted instantiation: stconn.c:get_bit Unexecuted instantiation: stick_table.c:get_bit Unexecuted instantiation: stream.c:get_bit Unexecuted instantiation: systemd.c:get_bit Unexecuted instantiation: task.c:get_bit Unexecuted instantiation: tcp_rules.c:get_bit Unexecuted instantiation: tcpcheck.c:get_bit Unexecuted instantiation: thread.c:get_bit Unexecuted instantiation: tools.c:get_bit Unexecuted instantiation: trace.c:get_bit Unexecuted instantiation: vars.c:get_bit Unexecuted instantiation: acl.c:get_bit Unexecuted instantiation: action.c:get_bit Unexecuted instantiation: activity.c:get_bit Unexecuted instantiation: applet.c:get_bit Unexecuted instantiation: arg.c:get_bit Unexecuted instantiation: backend.c:get_bit Unexecuted instantiation: cache.c:get_bit Unexecuted instantiation: cfgcond.c:get_bit Unexecuted instantiation: cfgparse-global.c:get_bit Unexecuted instantiation: cfgparse-listen.c:get_bit Unexecuted instantiation: channel.c:get_bit Unexecuted instantiation: check.c:get_bit Unexecuted instantiation: compression.c:get_bit Unexecuted instantiation: counters.c:get_bit Unexecuted instantiation: dgram.c:get_bit Unexecuted instantiation: dict.c:get_bit Unexecuted instantiation: dns.c:get_bit Unexecuted instantiation: dns_ring.c:get_bit Unexecuted instantiation: eb32tree.c:get_bit Unexecuted instantiation: eb64tree.c:get_bit Unexecuted instantiation: ebimtree.c:get_bit Unexecuted instantiation: ebistree.c:get_bit Unexecuted instantiation: ebmbtree.c:get_bit Unexecuted instantiation: ebsttree.c:get_bit Unexecuted instantiation: event_hdl.c:get_bit Unexecuted instantiation: extcheck.c:get_bit Unexecuted instantiation: fcgi-app.c:get_bit Unexecuted instantiation: fix.c:get_bit Unexecuted instantiation: guid.c:get_bit Unexecuted instantiation: h1.c:get_bit Unexecuted instantiation: http_fetch.c:get_bit Unexecuted instantiation: mqtt.c:get_bit Unexecuted instantiation: mux_spop.c:get_bit Unexecuted instantiation: pattern.c:get_bit Unexecuted instantiation: payload.c:get_bit Unexecuted instantiation: proto_tcp.c:get_bit Unexecuted instantiation: shctx.c:get_bit Unexecuted instantiation: stats-file.c:get_bit Unexecuted instantiation: stats-json.c:get_bit Unexecuted instantiation: stats-proxy.c:get_bit Unexecuted instantiation: flt_spoe.c:get_bit Unexecuted instantiation: h1_htx.c:get_bit Unexecuted instantiation: lru.c:get_bit |
911 | | |
912 | | /* These functions are declared in ebtree.c */ |
913 | | void eb_delete(struct eb_node *node); |
914 | | struct eb_node *eb_insert_dup(struct eb_node *sub, struct eb_node *new); |
915 | | int eb_memcmp(const void *m1, const void *m2, size_t len); |
916 | | |
917 | | #endif /* _EB_TREE_H */ |
918 | | |
919 | | /* |
920 | | * Local variables: |
921 | | * c-indent-level: 8 |
922 | | * c-basic-offset: 8 |
923 | | * End: |
924 | | */ |