aboutsummaryrefslogtreecommitdiff
path: root/vm/compiler/codegen/x86/CodegenInterface.cpp
diff options
context:
space:
mode:
authorJesse Wilson <jwilson@squareup.com>2012-09-01 00:37:56 -0400
committerXavier Ducrohet <xav@android.com>2012-09-06 12:48:55 -0700
commit15e631eb8bdee248b350fd3eee0b7aa04378eb98 (patch)
tree684cfe867d6954f4d76e7999d4f0c390e2cf5f5c /vm/compiler/codegen/x86/CodegenInterface.cpp
parent52dc08d463f7c44a01acacfd30d23768c73fa78a (diff)
Fix an ugly bug where try/catch offsets weren't being mapped properly. do not merge.
In dex files, there are several places where one object refers to another object by its position in the file. The dex merger is generally very careful to adjust these mappings when combining dex files. Unfortunately one of these cases was broken. Each try_item refers to a corresponding encoded_catch_handler by its byte offset in a list. Most of the time this byte offset is the same in the input dex file and the output dex file. But encoded_catch_handlers are variable-length because they use a variable-length uleb128 encoding to address the type_idx being caught. When dex files are merged, some exception types may go from having a small index to having a large index, increasing the number of bytes required to encode that index. This breaks our ability to directly copy over offsets as we were doing previously. Bug: http://code.google.com/p/android/issues/detail?id=36490 (cherry picked from commit d43341a24abe339d474b0b0d92669917ae2eb9bf) Change-Id: I4e6ab791925a918513122b46e039c02dfef62ace
Diffstat (limited to 'vm/compiler/codegen/x86/CodegenInterface.cpp')
0 files changed, 0 insertions, 0 deletions