xref: /aosp_15_r20/system/libhwbinder/Debug.cpp (revision 77b80299c8bdfeca3ae6d0ce27ae1ad3db289be3)
1*77b80299SAndroid Build Coastguard Worker /*
2*77b80299SAndroid Build Coastguard Worker  * Copyright (C) 2005 The Android Open Source Project
3*77b80299SAndroid Build Coastguard Worker  *
4*77b80299SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*77b80299SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*77b80299SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*77b80299SAndroid Build Coastguard Worker  *
8*77b80299SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*77b80299SAndroid Build Coastguard Worker  *
10*77b80299SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*77b80299SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*77b80299SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*77b80299SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*77b80299SAndroid Build Coastguard Worker  * limitations under the License.
15*77b80299SAndroid Build Coastguard Worker  */
16*77b80299SAndroid Build Coastguard Worker 
17*77b80299SAndroid Build Coastguard Worker #include <hwbinder/Debug.h>
18*77b80299SAndroid Build Coastguard Worker #include <hwbinder/ProcessState.h>
19*77b80299SAndroid Build Coastguard Worker 
20*77b80299SAndroid Build Coastguard Worker #include <utils/misc.h>
21*77b80299SAndroid Build Coastguard Worker 
22*77b80299SAndroid Build Coastguard Worker #include <stdio.h>
23*77b80299SAndroid Build Coastguard Worker #include <stdlib.h>
24*77b80299SAndroid Build Coastguard Worker #include <ctype.h>
25*77b80299SAndroid Build Coastguard Worker 
26*77b80299SAndroid Build Coastguard Worker namespace android {
27*77b80299SAndroid Build Coastguard Worker namespace hardware {
28*77b80299SAndroid Build Coastguard Worker 
29*77b80299SAndroid Build Coastguard Worker // ---------------------------------------------------------------------
30*77b80299SAndroid Build Coastguard Worker 
31*77b80299SAndroid Build Coastguard Worker static const char indentStr[] =
32*77b80299SAndroid Build Coastguard Worker "                                                                            "
33*77b80299SAndroid Build Coastguard Worker "                                                                            ";
34*77b80299SAndroid Build Coastguard Worker 
stringForIndent(int32_t indentLevel)35*77b80299SAndroid Build Coastguard Worker const char* stringForIndent(int32_t indentLevel)
36*77b80299SAndroid Build Coastguard Worker {
37*77b80299SAndroid Build Coastguard Worker     ssize_t off = sizeof(indentStr)-1-(indentLevel*2);
38*77b80299SAndroid Build Coastguard Worker     return indentStr + (off < 0 ? 0 : off);
39*77b80299SAndroid Build Coastguard Worker }
40*77b80299SAndroid Build Coastguard Worker 
41*77b80299SAndroid Build Coastguard Worker // ---------------------------------------------------------------------
42*77b80299SAndroid Build Coastguard Worker 
defaultPrintFunc(void *,const char * txt)43*77b80299SAndroid Build Coastguard Worker static void defaultPrintFunc(void* /*cookie*/, const char* txt)
44*77b80299SAndroid Build Coastguard Worker {
45*77b80299SAndroid Build Coastguard Worker     printf("%s", txt);
46*77b80299SAndroid Build Coastguard Worker }
47*77b80299SAndroid Build Coastguard Worker 
48*77b80299SAndroid Build Coastguard Worker // ---------------------------------------------------------------------
49*77b80299SAndroid Build Coastguard Worker 
isident(int c)50*77b80299SAndroid Build Coastguard Worker static inline int isident(int c)
51*77b80299SAndroid Build Coastguard Worker {
52*77b80299SAndroid Build Coastguard Worker     return isalnum(c) || c == '_';
53*77b80299SAndroid Build Coastguard Worker }
54*77b80299SAndroid Build Coastguard Worker 
isasciitype(char c)55*77b80299SAndroid Build Coastguard Worker static inline bool isasciitype(char c)
56*77b80299SAndroid Build Coastguard Worker {
57*77b80299SAndroid Build Coastguard Worker     if( c >= ' ' && c < 127 && c != '\'' && c != '\\' ) return true;
58*77b80299SAndroid Build Coastguard Worker     return false;
59*77b80299SAndroid Build Coastguard Worker }
60*77b80299SAndroid Build Coastguard Worker 
makehexdigit(uint32_t val)61*77b80299SAndroid Build Coastguard Worker static inline char makehexdigit(uint32_t val)
62*77b80299SAndroid Build Coastguard Worker {
63*77b80299SAndroid Build Coastguard Worker     return "0123456789abcdef"[val&0xF];
64*77b80299SAndroid Build Coastguard Worker }
65*77b80299SAndroid Build Coastguard Worker 
appendhexnum(uint32_t val,char * out)66*77b80299SAndroid Build Coastguard Worker static char* appendhexnum(uint32_t val, char* out)
67*77b80299SAndroid Build Coastguard Worker {
68*77b80299SAndroid Build Coastguard Worker     for( int32_t i=28; i>=0; i-=4 ) {
69*77b80299SAndroid Build Coastguard Worker         *out++ = makehexdigit( val>>i );
70*77b80299SAndroid Build Coastguard Worker     }
71*77b80299SAndroid Build Coastguard Worker     *out = 0;
72*77b80299SAndroid Build Coastguard Worker     return out;
73*77b80299SAndroid Build Coastguard Worker }
74*77b80299SAndroid Build Coastguard Worker 
appendcharornum(char c,char * out,bool skipzero=true)75*77b80299SAndroid Build Coastguard Worker static char* appendcharornum(char c, char* out, bool skipzero = true)
76*77b80299SAndroid Build Coastguard Worker {
77*77b80299SAndroid Build Coastguard Worker     if (skipzero && c == 0) return out;
78*77b80299SAndroid Build Coastguard Worker 
79*77b80299SAndroid Build Coastguard Worker     if (isasciitype(c)) {
80*77b80299SAndroid Build Coastguard Worker         *out++ = c;
81*77b80299SAndroid Build Coastguard Worker         return out;
82*77b80299SAndroid Build Coastguard Worker     }
83*77b80299SAndroid Build Coastguard Worker 
84*77b80299SAndroid Build Coastguard Worker     *out++ = '\\';
85*77b80299SAndroid Build Coastguard Worker     *out++ = 'x';
86*77b80299SAndroid Build Coastguard Worker     *out++ = makehexdigit(c>>4);
87*77b80299SAndroid Build Coastguard Worker     *out++ = makehexdigit(c);
88*77b80299SAndroid Build Coastguard Worker     return out;
89*77b80299SAndroid Build Coastguard Worker }
90*77b80299SAndroid Build Coastguard Worker 
typetostring(uint32_t type,char * out,bool fullContext=true,bool strict=false)91*77b80299SAndroid Build Coastguard Worker static char* typetostring(uint32_t type, char* out,
92*77b80299SAndroid Build Coastguard Worker                           bool fullContext = true,
93*77b80299SAndroid Build Coastguard Worker                           bool strict = false)
94*77b80299SAndroid Build Coastguard Worker {
95*77b80299SAndroid Build Coastguard Worker     char* pos = out;
96*77b80299SAndroid Build Coastguard Worker     char c[4];
97*77b80299SAndroid Build Coastguard Worker     c[0] = (char)((type>>24)&0xFF);
98*77b80299SAndroid Build Coastguard Worker     c[1] = (char)((type>>16)&0xFF);
99*77b80299SAndroid Build Coastguard Worker     c[2] = (char)((type>>8)&0xFF);
100*77b80299SAndroid Build Coastguard Worker     c[3] = (char)(type&0xFF);
101*77b80299SAndroid Build Coastguard Worker     bool valid;
102*77b80299SAndroid Build Coastguard Worker     if( !strict ) {
103*77b80299SAndroid Build Coastguard Worker         // now even less strict!
104*77b80299SAndroid Build Coastguard Worker         // valid = isasciitype(c[3]);
105*77b80299SAndroid Build Coastguard Worker         valid = true;
106*77b80299SAndroid Build Coastguard Worker         int32_t i = 0;
107*77b80299SAndroid Build Coastguard Worker         bool zero = true;
108*77b80299SAndroid Build Coastguard Worker         while (valid && i<3) {
109*77b80299SAndroid Build Coastguard Worker             if (c[i] == 0) {
110*77b80299SAndroid Build Coastguard Worker                 if (!zero) valid = false;
111*77b80299SAndroid Build Coastguard Worker             } else {
112*77b80299SAndroid Build Coastguard Worker                 zero = false;
113*77b80299SAndroid Build Coastguard Worker                 //if (!isasciitype(c[i])) valid = false;
114*77b80299SAndroid Build Coastguard Worker             }
115*77b80299SAndroid Build Coastguard Worker             i++;
116*77b80299SAndroid Build Coastguard Worker         }
117*77b80299SAndroid Build Coastguard Worker         // if all zeros, not a valid type code.
118*77b80299SAndroid Build Coastguard Worker         if (zero) valid = false;
119*77b80299SAndroid Build Coastguard Worker     } else {
120*77b80299SAndroid Build Coastguard Worker         valid = isident(c[3]) ? true : false;
121*77b80299SAndroid Build Coastguard Worker         int32_t i = 0;
122*77b80299SAndroid Build Coastguard Worker         bool zero = true;
123*77b80299SAndroid Build Coastguard Worker         while (valid && i<3) {
124*77b80299SAndroid Build Coastguard Worker             if (c[i] == 0) {
125*77b80299SAndroid Build Coastguard Worker                 if (!zero) valid = false;
126*77b80299SAndroid Build Coastguard Worker             } else {
127*77b80299SAndroid Build Coastguard Worker                 zero = false;
128*77b80299SAndroid Build Coastguard Worker                 if (!isident(c[i])) valid = false;
129*77b80299SAndroid Build Coastguard Worker             }
130*77b80299SAndroid Build Coastguard Worker             i++;
131*77b80299SAndroid Build Coastguard Worker         }
132*77b80299SAndroid Build Coastguard Worker     }
133*77b80299SAndroid Build Coastguard Worker     if( valid && (!fullContext || c[0] != '0' || c[1] != 'x') ) {
134*77b80299SAndroid Build Coastguard Worker         if( fullContext ) *pos++ = '\'';
135*77b80299SAndroid Build Coastguard Worker         pos = appendcharornum(c[0], pos);
136*77b80299SAndroid Build Coastguard Worker         pos = appendcharornum(c[1], pos);
137*77b80299SAndroid Build Coastguard Worker         pos = appendcharornum(c[2], pos);
138*77b80299SAndroid Build Coastguard Worker         pos = appendcharornum(c[3], pos);
139*77b80299SAndroid Build Coastguard Worker         if( fullContext ) *pos++ = '\'';
140*77b80299SAndroid Build Coastguard Worker         *pos = 0;
141*77b80299SAndroid Build Coastguard Worker         return pos;
142*77b80299SAndroid Build Coastguard Worker     }
143*77b80299SAndroid Build Coastguard Worker 
144*77b80299SAndroid Build Coastguard Worker     if( fullContext ) {
145*77b80299SAndroid Build Coastguard Worker         *pos++ = '0';
146*77b80299SAndroid Build Coastguard Worker         *pos++ = 'x';
147*77b80299SAndroid Build Coastguard Worker     }
148*77b80299SAndroid Build Coastguard Worker     return appendhexnum(type, pos);
149*77b80299SAndroid Build Coastguard Worker }
150*77b80299SAndroid Build Coastguard Worker 
printTypeCode(uint32_t typeCode,debugPrintFunc func,void * cookie)151*77b80299SAndroid Build Coastguard Worker void printTypeCode(uint32_t typeCode, debugPrintFunc func, void* cookie)
152*77b80299SAndroid Build Coastguard Worker {
153*77b80299SAndroid Build Coastguard Worker     char buffer[32];
154*77b80299SAndroid Build Coastguard Worker     char* end = typetostring(typeCode, buffer);
155*77b80299SAndroid Build Coastguard Worker     *end = 0;
156*77b80299SAndroid Build Coastguard Worker     func ? (*func)(cookie, buffer) : defaultPrintFunc(cookie, buffer);
157*77b80299SAndroid Build Coastguard Worker }
158*77b80299SAndroid Build Coastguard Worker 
printHexData(int32_t indent,const void * buf,size_t length,size_t bytesPerLine,int32_t singleLineBytesCutoff,size_t alignment,bool cStyle,debugPrintFunc func,void * cookie)159*77b80299SAndroid Build Coastguard Worker void printHexData(int32_t indent, const void *buf, size_t length,
160*77b80299SAndroid Build Coastguard Worker     size_t bytesPerLine, int32_t singleLineBytesCutoff,
161*77b80299SAndroid Build Coastguard Worker     size_t alignment, bool cStyle,
162*77b80299SAndroid Build Coastguard Worker     debugPrintFunc func, void* cookie)
163*77b80299SAndroid Build Coastguard Worker {
164*77b80299SAndroid Build Coastguard Worker     if (alignment == 0) {
165*77b80299SAndroid Build Coastguard Worker         if (bytesPerLine >= 16) alignment = 4;
166*77b80299SAndroid Build Coastguard Worker         else if (bytesPerLine >= 8) alignment = 2;
167*77b80299SAndroid Build Coastguard Worker         else alignment = 1;
168*77b80299SAndroid Build Coastguard Worker     }
169*77b80299SAndroid Build Coastguard Worker     if (func == nullptr) func = defaultPrintFunc;
170*77b80299SAndroid Build Coastguard Worker 
171*77b80299SAndroid Build Coastguard Worker     size_t offset;
172*77b80299SAndroid Build Coastguard Worker 
173*77b80299SAndroid Build Coastguard Worker     unsigned char *pos = (unsigned char *)buf;
174*77b80299SAndroid Build Coastguard Worker 
175*77b80299SAndroid Build Coastguard Worker     if (pos == nullptr) {
176*77b80299SAndroid Build Coastguard Worker         if (singleLineBytesCutoff < 0) func(cookie, "\n");
177*77b80299SAndroid Build Coastguard Worker         func(cookie, "(NULL)");
178*77b80299SAndroid Build Coastguard Worker         return;
179*77b80299SAndroid Build Coastguard Worker     }
180*77b80299SAndroid Build Coastguard Worker 
181*77b80299SAndroid Build Coastguard Worker     if (length == 0) {
182*77b80299SAndroid Build Coastguard Worker         if (singleLineBytesCutoff < 0) func(cookie, "\n");
183*77b80299SAndroid Build Coastguard Worker         func(cookie, "(empty)");
184*77b80299SAndroid Build Coastguard Worker         return;
185*77b80299SAndroid Build Coastguard Worker     }
186*77b80299SAndroid Build Coastguard Worker 
187*77b80299SAndroid Build Coastguard Worker     if ((int32_t)length < 0) {
188*77b80299SAndroid Build Coastguard Worker         if (singleLineBytesCutoff < 0) func(cookie, "\n");
189*77b80299SAndroid Build Coastguard Worker         char buf[64];
190*77b80299SAndroid Build Coastguard Worker         sprintf(buf, "(bad length: %zu)", length);
191*77b80299SAndroid Build Coastguard Worker         func(cookie, buf);
192*77b80299SAndroid Build Coastguard Worker         return;
193*77b80299SAndroid Build Coastguard Worker     }
194*77b80299SAndroid Build Coastguard Worker 
195*77b80299SAndroid Build Coastguard Worker     char buffer[256];
196*77b80299SAndroid Build Coastguard Worker     static const size_t maxBytesPerLine = (sizeof(buffer)-1-11-4)/(3+1);
197*77b80299SAndroid Build Coastguard Worker 
198*77b80299SAndroid Build Coastguard Worker     if (bytesPerLine > maxBytesPerLine) bytesPerLine = maxBytesPerLine;
199*77b80299SAndroid Build Coastguard Worker 
200*77b80299SAndroid Build Coastguard Worker     const bool oneLine = (int32_t)length <= singleLineBytesCutoff;
201*77b80299SAndroid Build Coastguard Worker     bool newLine = false;
202*77b80299SAndroid Build Coastguard Worker     if (cStyle) {
203*77b80299SAndroid Build Coastguard Worker         indent++;
204*77b80299SAndroid Build Coastguard Worker         func(cookie, "{\n");
205*77b80299SAndroid Build Coastguard Worker         newLine = true;
206*77b80299SAndroid Build Coastguard Worker     } else if (!oneLine) {
207*77b80299SAndroid Build Coastguard Worker         func(cookie, "\n");
208*77b80299SAndroid Build Coastguard Worker         newLine = true;
209*77b80299SAndroid Build Coastguard Worker     }
210*77b80299SAndroid Build Coastguard Worker 
211*77b80299SAndroid Build Coastguard Worker     for (offset = 0; ; offset += bytesPerLine, pos += bytesPerLine) {
212*77b80299SAndroid Build Coastguard Worker         long remain = length;
213*77b80299SAndroid Build Coastguard Worker 
214*77b80299SAndroid Build Coastguard Worker         char* c = buffer;
215*77b80299SAndroid Build Coastguard Worker         if (!oneLine && !cStyle) {
216*77b80299SAndroid Build Coastguard Worker             sprintf(c, "0x%08x: ", (int)offset);
217*77b80299SAndroid Build Coastguard Worker             c += 12;
218*77b80299SAndroid Build Coastguard Worker         }
219*77b80299SAndroid Build Coastguard Worker 
220*77b80299SAndroid Build Coastguard Worker         size_t index;
221*77b80299SAndroid Build Coastguard Worker         size_t word;
222*77b80299SAndroid Build Coastguard Worker 
223*77b80299SAndroid Build Coastguard Worker         for (word = 0; word < bytesPerLine; ) {
224*77b80299SAndroid Build Coastguard Worker 
225*77b80299SAndroid Build Coastguard Worker             size_t align_offset = alignment-(alignment?1:0);
226*77b80299SAndroid Build Coastguard Worker             if (remain > 0 && (size_t)remain <= align_offset) {
227*77b80299SAndroid Build Coastguard Worker                 align_offset = remain - 1;
228*77b80299SAndroid Build Coastguard Worker             }
229*77b80299SAndroid Build Coastguard Worker             const size_t startIndex = word+align_offset;
230*77b80299SAndroid Build Coastguard Worker 
231*77b80299SAndroid Build Coastguard Worker             for (index = 0; index < alignment || (alignment == 0 && index < bytesPerLine); index++) {
232*77b80299SAndroid Build Coastguard Worker 
233*77b80299SAndroid Build Coastguard Worker                 if (!cStyle) {
234*77b80299SAndroid Build Coastguard Worker                     if (index == 0 && word > 0 && alignment > 0) {
235*77b80299SAndroid Build Coastguard Worker                         *c++ = ' ';
236*77b80299SAndroid Build Coastguard Worker                     }
237*77b80299SAndroid Build Coastguard Worker 
238*77b80299SAndroid Build Coastguard Worker                     if (remain-- > 0) {
239*77b80299SAndroid Build Coastguard Worker                         const unsigned char val = *(pos+startIndex-index);
240*77b80299SAndroid Build Coastguard Worker                         *c++ = makehexdigit(val>>4);
241*77b80299SAndroid Build Coastguard Worker                         *c++ = makehexdigit(val);
242*77b80299SAndroid Build Coastguard Worker                     } else if (!oneLine) {
243*77b80299SAndroid Build Coastguard Worker                         *c++ = ' ';
244*77b80299SAndroid Build Coastguard Worker                         *c++ = ' ';
245*77b80299SAndroid Build Coastguard Worker                     }
246*77b80299SAndroid Build Coastguard Worker                 } else {
247*77b80299SAndroid Build Coastguard Worker                     if (remain > 0) {
248*77b80299SAndroid Build Coastguard Worker                         if (index == 0 && word > 0) {
249*77b80299SAndroid Build Coastguard Worker                             *c++ = ',';
250*77b80299SAndroid Build Coastguard Worker                             *c++ = ' ';
251*77b80299SAndroid Build Coastguard Worker                         }
252*77b80299SAndroid Build Coastguard Worker                         if (index == 0) {
253*77b80299SAndroid Build Coastguard Worker                             *c++ = '0';
254*77b80299SAndroid Build Coastguard Worker                             *c++ = 'x';
255*77b80299SAndroid Build Coastguard Worker                         }
256*77b80299SAndroid Build Coastguard Worker                         const unsigned char val = *(pos+startIndex-index);
257*77b80299SAndroid Build Coastguard Worker                         *c++ = makehexdigit(val>>4);
258*77b80299SAndroid Build Coastguard Worker                         *c++ = makehexdigit(val);
259*77b80299SAndroid Build Coastguard Worker                         remain--;
260*77b80299SAndroid Build Coastguard Worker                     }
261*77b80299SAndroid Build Coastguard Worker                 }
262*77b80299SAndroid Build Coastguard Worker             }
263*77b80299SAndroid Build Coastguard Worker 
264*77b80299SAndroid Build Coastguard Worker             word += index;
265*77b80299SAndroid Build Coastguard Worker         }
266*77b80299SAndroid Build Coastguard Worker 
267*77b80299SAndroid Build Coastguard Worker         if (!cStyle) {
268*77b80299SAndroid Build Coastguard Worker             remain = length;
269*77b80299SAndroid Build Coastguard Worker             *c++ = ' ';
270*77b80299SAndroid Build Coastguard Worker             *c++ = '\'';
271*77b80299SAndroid Build Coastguard Worker             for (index = 0; index < bytesPerLine; index++) {
272*77b80299SAndroid Build Coastguard Worker 
273*77b80299SAndroid Build Coastguard Worker                 if (remain-- > 0) {
274*77b80299SAndroid Build Coastguard Worker                     const unsigned char val = pos[index];
275*77b80299SAndroid Build Coastguard Worker                     *c++ = (val >= ' ' && val < 127) ? val : '.';
276*77b80299SAndroid Build Coastguard Worker                 } else if (!oneLine) {
277*77b80299SAndroid Build Coastguard Worker                     *c++ = ' ';
278*77b80299SAndroid Build Coastguard Worker                 }
279*77b80299SAndroid Build Coastguard Worker             }
280*77b80299SAndroid Build Coastguard Worker 
281*77b80299SAndroid Build Coastguard Worker             *c++ = '\'';
282*77b80299SAndroid Build Coastguard Worker             if (length > bytesPerLine) *c++ = '\n';
283*77b80299SAndroid Build Coastguard Worker         } else {
284*77b80299SAndroid Build Coastguard Worker             if (remain > 0) *c++ = ',';
285*77b80299SAndroid Build Coastguard Worker             *c++ = '\n';
286*77b80299SAndroid Build Coastguard Worker         }
287*77b80299SAndroid Build Coastguard Worker 
288*77b80299SAndroid Build Coastguard Worker         if (newLine && indent) func(cookie, stringForIndent(indent));
289*77b80299SAndroid Build Coastguard Worker         *c = 0;
290*77b80299SAndroid Build Coastguard Worker         func(cookie, buffer);
291*77b80299SAndroid Build Coastguard Worker         newLine = true;
292*77b80299SAndroid Build Coastguard Worker 
293*77b80299SAndroid Build Coastguard Worker         if (length <= bytesPerLine) break;
294*77b80299SAndroid Build Coastguard Worker         length -= bytesPerLine;
295*77b80299SAndroid Build Coastguard Worker     }
296*77b80299SAndroid Build Coastguard Worker 
297*77b80299SAndroid Build Coastguard Worker     if (cStyle) {
298*77b80299SAndroid Build Coastguard Worker         if (indent > 0) func(cookie, stringForIndent(indent-1));
299*77b80299SAndroid Build Coastguard Worker         func(cookie, "};");
300*77b80299SAndroid Build Coastguard Worker     }
301*77b80299SAndroid Build Coastguard Worker }
302*77b80299SAndroid Build Coastguard Worker 
getHWBinderKernelReferences(size_t count,uintptr_t * buf)303*77b80299SAndroid Build Coastguard Worker ssize_t getHWBinderKernelReferences(size_t count, uintptr_t* buf) {
304*77b80299SAndroid Build Coastguard Worker     sp<ProcessState> proc = ProcessState::selfOrNull();
305*77b80299SAndroid Build Coastguard Worker     if (proc.get() == nullptr) {
306*77b80299SAndroid Build Coastguard Worker         return 0;
307*77b80299SAndroid Build Coastguard Worker     }
308*77b80299SAndroid Build Coastguard Worker 
309*77b80299SAndroid Build Coastguard Worker     return proc->getKernelReferences(count, buf);
310*77b80299SAndroid Build Coastguard Worker }
311*77b80299SAndroid Build Coastguard Worker 
312*77b80299SAndroid Build Coastguard Worker } // namespace hardware
313*77b80299SAndroid Build Coastguard Worker } // namespace android
314*77b80299SAndroid Build Coastguard Worker 
315