120 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Smali
		
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Smali
		
	
	
	
| .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
 |