You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
2.4 KiB
120 lines
2.4 KiB
4 months ago
|
.class LTestSync;
|
||
|
.super Ljava/lang/Object;
|
||
|
.source "Main.java"
|
||
|
|
||
|
|
||
|
# direct methods
|
||
|
.method constructor <init>()V
|
||
|
.registers 1
|
||
|
|
||
|
.prologue
|
||
|
.line 6
|
||
|
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||
|
|
||
|
return-void
|
||
|
.end method
|
||
|
|
||
|
.method public static run()V
|
||
|
# v0-v2 were generated by javac+dx for the original src code, keeping them.
|
||
|
# v10..v19 are for tracking, aliasing and manipulating the first lock.
|
||
|
# v20..v29 are for tracking, aliasing and manipulating the second lock.
|
||
|
.registers 30
|
||
|
|
||
|
.prologue
|
||
|
.line 8
|
||
|
const-string v1, "First"
|
||
|
|
||
|
.line 9
|
||
|
const-string v2, "Second"
|
||
|
|
||
|
move-object v10, v1
|
||
|
const v1, 0x1
|
||
|
|
||
|
.line 10
|
||
|
monitor-enter v10
|
||
|
|
||
|
# Introduce a range of dead copies.
|
||
|
move-object v11, v10
|
||
|
move-object v12, v10
|
||
|
move-object v13, v10
|
||
|
move-object v14, v10
|
||
|
move-object v15, v10
|
||
|
move-object/16 v16, v10
|
||
|
move-object/16 v17, v10
|
||
|
move-object/16 v18, v10
|
||
|
|
||
|
# Introduce a copy that we'll use for unlock.
|
||
|
move-object/16 v19, v10
|
||
|
|
||
|
# Clobber the original alias.
|
||
|
const v10, 0x3
|
||
|
|
||
|
move-object/16 v20, v2
|
||
|
const v2, 0x2
|
||
|
|
||
|
.line 11
|
||
|
:try_start_b
|
||
|
monitor-enter v20
|
||
|
:try_end_c
|
||
|
|
||
|
# Introduce a range of dead copies.
|
||
|
move-object/16 v21, v20
|
||
|
move-object/16 v22, v20
|
||
|
move-object/16 v23, v20
|
||
|
move-object/16 v24, v20
|
||
|
move-object/16 v25, v20
|
||
|
move-object/16 v26, v20
|
||
|
move-object/16 v27, v20
|
||
|
|
||
|
# Introduce another copy that we will hold live.
|
||
|
move-object/16 v28, v20
|
||
|
|
||
|
# Clobber the original alias.
|
||
|
const v20, 0x5
|
||
|
|
||
|
# Introduce another copy that we'll use for unlock.
|
||
|
move-object/16 v29, v28
|
||
|
|
||
|
.catchall {:try_start_b .. :try_end_c} :catchall_15
|
||
|
|
||
|
.line 12
|
||
|
:try_start_c
|
||
|
invoke-static/range { v28 }, LMain;->run(Ljava/lang/Object;)V
|
||
|
|
||
|
.line 13
|
||
|
monitor-exit v29
|
||
|
:try_end_10
|
||
|
.catchall {:try_start_c .. :try_end_10} :catchall_12
|
||
|
|
||
|
.line 14
|
||
|
:try_start_10
|
||
|
monitor-exit v19
|
||
|
:try_end_11
|
||
|
.catchall {:try_start_10 .. :try_end_11} :catchall_15
|
||
|
|
||
|
.line 15
|
||
|
return-void
|
||
|
|
||
|
.line 13
|
||
|
:catchall_12
|
||
|
move-exception v0
|
||
|
|
||
|
:try_start_13
|
||
|
monitor-exit v29
|
||
|
:try_end_14
|
||
|
.catchall {:try_start_13 .. :try_end_14} :catchall_12
|
||
|
|
||
|
:try_start_14
|
||
|
throw v0
|
||
|
|
||
|
.line 14
|
||
|
:catchall_15
|
||
|
move-exception v0
|
||
|
|
||
|
monitor-exit v19
|
||
|
:try_end_17
|
||
|
.catchall {:try_start_14 .. :try_end_17} :catchall_15
|
||
|
|
||
|
throw v0
|
||
|
.end method
|