priv_tytypes.h revision 9bea4c13fca0e3bb4b719dcb3ed63d47d479294e
1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*--------------------------------------------------------------------*/
3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu/*--- Representation of source level types.         priv_tytypes.h ---*/
4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*--------------------------------------------------------------------*/
5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*
7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   This file is part of Valgrind, a dynamic binary instrumentation
8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   framework.
9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   Copyright (C) 2008-2010 OpenWorks LLP
11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      info@open-works.co.uk
12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   This program is free software; you can redistribute it and/or
14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   modify it under the terms of the GNU General Public License as
15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   published by the Free Software Foundation; either version 2 of the
16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   License, or (at your option) any later version.
17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   This program is distributed in the hope that it will be useful, but
195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen   WITHOUT ANY WARRANTY; without even the implied warranty of
20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   General Public License for more details.
22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   You should have received a copy of the GNU General Public License
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   along with this program; if not, write to the Free Software
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   02111-1307, USA.
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   The GNU General Public License is contained in the file COPYING.
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   Neither the names of the U.S. Department of Energy nor the
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   University of California nor the names of its contributors may be
32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   used to endorse or promote products derived from this software
33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   without prior written permission.
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef __PRIV_TYTYPES_H
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define __PRIV_TYTYPES_H
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   enum {
415c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen      Te_EMPTY=10, /* empty (contains no info) */
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_INDIR,    /* indirection to some other TyEnt */
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_UNKNOWN,  /* denotes a unknown type/field/whatever */
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_Atom,     /* name & 64-bit const, iow, enumeration member */
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_Field,    /* struct/class field defn */
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_Bound,    /* array bounds indication, for one dimension */
47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_TyBase,   /* base type */
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_TyPorR,   /* pointer or reference type */
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_TyTyDef,  /* a renaming of some other type */
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_TyStOrUn, /* structure or union type */
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_TyEnum,   /* an enum type */
52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_TyArray,  /* an array type */
53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_TyFn,     /* function type */
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_TyQual,   /* qualified type */
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      Te_TyVoid    /* void type */
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   }
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   TyEntTag;
58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Fields ending in "R" are references to other TyEnts.  Fields ending
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   in "Rs" are XArray*s of references to other TyEnts. */
61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef
62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   struct {
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      UWord    cuOff;
64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      TyEntTag tag;
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      union {
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } EMPTY;
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UWord indR;
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } INDIR;
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } UNKNOWN;
73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UChar* name; /* in mallocville */
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Bool   valueKnown; /* atoms w/ unknown value are possible */
76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Long   value;
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } Atom;
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UChar* name;  /* in mallocville */
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UWord  typeR; /* should be Te_TyXXXX */
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            union {
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project               UChar* loc;   /* location expr, in mallocville */
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project               Word offset;  /* or offset from the beginning of containing
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                entity */
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            } pos;
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Word  nLoc;  /* number of bytes in .pos.loc if >= 0, or -1
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            if .pos.offset should be used instead */
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Bool   isStruct;
89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } Field;
90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Bool knownL;
92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Bool knownU;
93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Long boundL;
94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Long boundU;
95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } Bound;
96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UChar* name; /* in mallocville */
98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Int    szB;
99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UChar  enc; /* S:signed U:unsigned F:floating C:complex float */
100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } TyBase;
101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Int   szB;
103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UWord typeR;
104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Bool  isPtr;
105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } TyPorR;
106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UChar* name;  /* in mallocville */
108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UWord  typeR; /* MAY BE D3_INVALID_CUOFF, denoting unknown */
109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } TyTyDef;
110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UChar*  name; /* in mallocville */
112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UWord   szB;
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            XArray* /* of UWord */ fieldRs;
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Bool    complete;
115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Bool    isStruct;
116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } TyStOrUn;
117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UChar*  name; /* in mallocville */
119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Int     szB;
120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            XArray* /* of UWord */ atomRs;
121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } TyEnum;
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UWord   typeR;
124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            XArray* /* of UWord */ boundRs;
125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } TyArray;
126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } TyFn;
128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UChar qual; /* C:const V:volatile */
130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            UWord typeR;
131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } TyQual;
132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         struct {
133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            Bool isFake; /* True == introduced by the reader */
134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         } TyVoid;
135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      } Te;
136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   }
137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   TyEnt;
138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Does this TyEnt denote a type, as opposed to some other kind of
140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   thing? */
141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBool ML_(TyEnt__is_type)( TyEnt* );
142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Print a TyEnt, debug-style. */
144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ML_(pp_TyEnt)( TyEnt* );
145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Print a whole XArray of TyEnts, debug-style */
147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ML_(pp_TyEnts)( XArray* tyents, HChar* who );
148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Print a TyEnt, C style, chasing stuff as necessary. */
150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ML_(pp_TyEnt_C_ishly)( XArray* /* of TyEnt */ tyents,
151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            UWord cuOff );
152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Generates a total ordering on TyEnts based only on their .cuOff
154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   fields. */
155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectWord ML_(TyEnt__cmp_by_cuOff_only) ( TyEnt* te1, TyEnt* te2 );
156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Generates a total ordering on TyEnts based on everything except
158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   their .cuOff fields. */
159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectWord ML_(TyEnt__cmp_by_all_except_cuOff) ( TyEnt* te1, TyEnt* te2 );
160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Free up all directly or indirectly heap-allocated stuff attached to
162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   this TyEnt, and set its tag to Te_EMPTY.  The .cuOff field is
163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   unchanged. */
164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ML_(TyEnt__make_EMPTY) ( TyEnt* te );
165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* How big is this type?  If .b in the returned struct is False, the
167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   size is unknown. */
168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectMaybeULong ML_(sizeOfType)( XArray* /* of TyEnt */ tyents,
170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                            UWord cuOff );
171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Describe where in the type 'offset' falls.  Caller must
173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   deallocate the resulting XArray. */
174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectXArray* /*UChar*/ ML_(describe_type)( /*OUT*/PtrdiffT* residual_offset,
175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                      XArray* /* of TyEnt */ tyents,
176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                      UWord ty_cuOff,
177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                      PtrdiffT offset );
178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* A fast-lookup cache for ML_(TyEnts__index_by_cuOff).  Nothing
181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   particularly surprising here; it's 2 way set associative, with some
182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   number of ways, doesn't particularly have to be a power of 2.  In
183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   order to have a way to indicate an invalid entry, we set the second
184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   value of the pair to NULL, and keep checking for it, since
185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   unfortunately there's no obvious cuOff number that we could put in
186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   the first word of the pair that could indicate an invalid entry.
187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   4096 arrived at as the best value for an E6600 loading Qt-4.4.1
189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   Designer and all associated libraries, compiled by gcc-4.3.1,
190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   -g -O, 64-bit, which is at least a moderately good stress test,
191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   with the largest library being about 150MB.*/
192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define N_TYENT_INDEX_CACHE 4096
194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef
196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   struct {
197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project      struct { UWord cuOff0; TyEnt* ent0;
198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project               UWord cuOff1; TyEnt* ent1; }
199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project         ce[N_TYENT_INDEX_CACHE];
200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   }
201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   TyEntIndexCache;
202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ML_(TyEntIndexCache__invalidate) ( TyEntIndexCache* cache );
2045c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
2055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen/* 'ents' is an XArray of TyEnts, sorted by their .cuOff fields.  Find
206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   the entry which has .cuOff field as specified.  Returns NULL if not
207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   found.  Asserts if more than one entry has the specified .cuOff
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project   value. */
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectTyEnt* ML_(TyEnts__index_by_cuOff) ( XArray* /* of TyEnt */ ents,
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                     TyEntIndexCache* cache,
211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                     UWord cuOff_to_find );
212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ndef __PRIV_TYTYPES_H */
214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*--------------------------------------------------------------------*/
216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*--- end                                           priv_tytypes.h ---*/
217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*--------------------------------------------------------------------*/
218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project