19ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein/*
29ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * Copyright (C) 2011 The Android Open Source Project
39ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein *
49ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * Licensed under the Apache License, Version 2.0 (the "License");
59ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * you may not use this file except in compliance with the License.
69ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * You may obtain a copy of the License at
79ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein *
89ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein *      http://www.apache.org/licenses/LICENSE-2.0
99ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein *
109ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * Unless required by applicable law or agreed to in writing, software
119ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * distributed under the License is distributed on an "AS IS" BASIS,
129ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * See the License for the specific language governing permissions and
149ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * limitations under the License.
159ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein */
169ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein
179ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein/*
189ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * Handling of method debug info in a .dex file.
199ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein */
209ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein
21375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#ifndef LIBDEX_DEXDEBUGINFO_H_
22375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#define LIBDEX_DEXDEBUGINFO_H_
23a70a3d8faa8f7332549fa0c9ae2008d428e28606Dan Bornstein
249ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein#include "DexFile.h"
259ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein
269ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein/*
279ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * Callback for "new position table entry".
289ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * Returning non-0 causes the decoder to stop early.
299ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein */
309ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornsteintypedef int (*DexDebugNewPositionCb)(void *cnxt, u4 address, u4 lineNum);
319ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein
329ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein/*
339ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * Callback for "new locals table entry". "signature" is an empty string
349ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * if no signature is available for an entry.
359ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein */
369ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornsteintypedef void (*DexDebugNewLocalCb)(void *cnxt, u2 reg, u4 startAddress,
379ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein        u4 endAddress, const char *name, const char *descriptor,
389ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein        const char *signature);
399ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein
409ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein/*
419ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * Decode debug info for method.
429ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein *
439ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * posCb is called in ascending address order.
449ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein * localCb is called in order of ascending end address.
459ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein */
469ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornsteinvoid dexDecodeDebugInfo(
479ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein            const DexFile* pDexFile,
489ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein            const DexCode* pDexCode,
499ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein            const char* classDescriptor,
509ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein            u4 protoIdx,
519ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein            u4 accessFlags,
529ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein            DexDebugNewPositionCb posCb, DexDebugNewLocalCb localCb,
539ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein            void* cnxt);
549ea32b0a0fa0eb4c4bfcd73f0c7fe15ddb0f9ce2Dan Bornstein
55375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#endif  // LIBDEX_DEXDEBUGINFO_H_
56