blob: 342e12531e437658bac7e523012cbc7e7a32478a [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* DEX constant-reduction declarations.
*/
#ifndef _DALVIK_REDUCECONSTANTS
#define _DALVIK_REDUCECONSTANTS
#define DVM_RC_DISABLED 0 /* no reduction, 1:1 map */
#define DVM_RC_REDUCING 1 /* normal constants, reduced lookup table */
#define DVM_RC_EXPANDING 2 /* reduced constants, expanded on resolve */
#define DVM_RC_NO_CACHE 3 /* disable the cache (reduce to zero) */
enum {
kMapClasses = 0,
kMapMethods = 1,
kMapFields = 2,
kMapStrings = 3,
kNumIndexMaps
};
struct DvmDex;
#define kNoIndexMapping ((u2) -1)
/*
* Map indices back to the original.
*/
typedef struct IndexMap {
int origCount; /* original size; describes range of entries in map */
int newCount; /* reduced size */
u2* mapToNew; /* sparse map, from "orig" to "new" */
u2* mapToOld; /* dense map, from "new" back to "orig" */
} IndexMap;
typedef struct IndexMapSet {
/* maps for the different sections */
IndexMap map[kNumIndexMaps];
/* data stream that gets appended to the optimized DEX file */
u4 chunkType;
int chunkDataLen;
u1* chunkData;
} IndexMapSet;
/*
* Constant pool compaction.
*
* The caller is responsible for freeing the returned structure by
* calling dvmFreeIndexMap().
*/
IndexMapSet* dvmRewriteConstants(struct DvmDex* pDvmDex);
/* free an index map set */
void dvmFreeIndexMapSet(IndexMapSet* indexMapSet);
#endif /*_DALVIK_REDUCECONSTANTS*/