Age | Commit message (Collapse) | Author |
|
|
|
The current implementation only supported 6 of the possible kind values for a MethodHandle object.
However, as the link below shows there are in fact 9. All 9 can be seen in the MethodHandleType
class which is used by dexdump to translate the kind value of a MethodHandle object to a string
representation.
https://android.googlesource.com/platform/art/+/android-8.1.0_r41/runtime/dex_file.h
Moreover, this in fact lines up with the 9 different kinds for a MethodHandle object in standard
java bytecode (though the values are swapped around for some reason).
https://docs.oracle.com/javase/8/docs/api/java/lang/invoke/MethodHandleInfo.html
These changes add in the additional 3 kind values and make sure all nesscary hooks using the
kind values of MethodHandle reference them.
For testing purposes, I found the easiest way to get correctly formatted invoke-custom and
invoke-polymorphic instructions was to use the already generated dex files used to test
dexdump. They can be found at the link below (invoke-custom.dex and invoke-polymorphic.dex).
https://android.googlesource.com/platform/art/+/android-8.1.0_r41/test/dexdump/
|
|
Now, util only contains the utilities that are needed by smali/baksmali,
but not dexlib2. E.g. the common command line parsing utilities, some path
utilities, etc.
This also reverses the dependency between the util module and dexlib2.
|
|
|
|
|
|
parser
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
In some cases, even when running in single threaded mode (-j 1), smali
could produce slightly different results if files are not listed in
a consistent order.
This ensures that we assemble a given set of smali files in a consistent
order when running in single-threaded mode, regardless of the order
they are listed in.
|
|
This makes sure that all smali files are closed after writing to them by
surrounding the writer code with a try/finally block that closes the output
stream once the writing has completed or when an exception occurs.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This reverts commit 144951a9e9e6c87866245f2bdeebf0ebedaa0e38.
|
|
- Introduces two new instruction formats, 45cc and 4rcc. As the name suggests,
these instructions are similar to 35c and 3rc, expect that they encode an
additional constant pool reference in their 4th byte.
- Introduce two new instructions, invoke-polymorphic and
invoke-polymorphic/range - used to implement signature polymorphism.
- Allow instructions to directly reference the proto_id section of the
dex file. This involves the introduction of a new kind of reference
(MethodProtoReference) and has the side effect of cleaning up a fair
amount of special casing in ProtoPool.
- Disable support for ART version based switches (and remove LambdaTest
which depends on it). Experimental lambda support and support for ART
version based switches will be removed in a follow up change.
Bug: 30550796
Test: test-art
Test: ./gradlew build
|
|
|
|
|
|
|
|
|
|
|
|
This adds entry points that are more friendly to programmatic usage. E.g.
no calls to System.exit()
|
|
This fixes an issue that was initially introduced in the smalidea branch
|
|
|
|
The previous naming was interfering with 'gr install' installing the
artifacts locally.
|
|
|
|
|
|
|
|
|
|
|
|
This can be useful in analyzing why you are going over the 64k
method/field/type limit
|
|
|
|
|
|
|
|
|
|
* Add new -X/--experimental flag to [dis]assemble opcodes not in art yet
* Add new opcodes liberate-variable, box-lambda, unbox-lambda,
capture-variable, create-lambda, invoke-lambda
* Add support for encoding 25x instructions
* Adds LambdaTest to check new opcodes assemble/disassemble properly
TODO: invoke-lambda-range
Change-Id: I5c8bcbfa8b6cb9a13ef2017fce2d1b7fda6e11c3
|
|
|
|
|
|
This gets rids of the empty placeholder tokens, which cause errors
in IDEA's built-in lexer support code
|
|
[^] matches the entire character set, while . doesn't match new lines, etc.
|
|
|
|
|
|
|