Indentations break the feed.
[SquirrelJME.git] / assets / developer-notes / stephanie-gawroriski / 2019 / 06 / 15.mkd
blobb66cadbcfdf5d835a20002c3f084540e7ce36fb2
1 # 2019/06/15
3 ## 09:10
5 So it seems I can do `jvmLoadString()` as many times as I want but when I
6 try to use the string it does not work and tries to execute an invalid
7 class object or similar?
9 ## 10:25
11 I have a null pointer being read, as seen here:
13  * `(int)000fffff[11] (0010003b) -> 1241518086 (4a001006)`
14  * `(int)00100664[11] (001006a0) -> 0 (00000000)`
16 I know the first one is the method address because it cannot be a pool
17 address. But the second zero value is used instead. So maybe the instance
18 invoke is swapping things incorrectly or maybe there is memory corruption?
20 ## 10:29
22 But looking at another `jvmLoadString()`, I see above it is this:
24  * `(int)00102b38[11] (00102b74) -> 1051808 (00100ca0)`
25  * `(int)00102ae8[11] (00102b24) -> 1326464050 (4f103c32)`
27 So like this make smore sense. I wonder what the class value is. So all
28 the reads are:
30  * Class: `00104c48 -> 1051720 (00100c48)`
31  * VTable?: `00100c68 -> 1059560 (00102ae8)`
33 ## 10:39
35 I changed the debug text to make it easier to read.
37 ## 11:09
39 I noticed this oddity, intern() is being called with two arguments? and
40 they appear to be the same value? This would completely trash the locals
41 which need to be set to zero since otherwise it would very much mess up.
43         .DBUG0 csvs.NativeCPU::runWithoutCatch (:520) -- Read pool: 3
44         .2
45         .***** @4f103d0a MEM_LOAD_INTEGER_RE/INVOKEVIRT | L201 /J22  
46         .    java/lang/String::intern:()Ljava/lang/String;
47         .  A:[        17,         16,         17] | V:[       +32,   
48         .+1051720,        +32]
49         .DBUG0 csvs.NativeCPU::runWithoutCatch (:622) -- N 00100c48+3
50         .2 (00100c68) -> 1059560 (00102ae8)
51         .***** @4f103d0e LOAD_POOL          /INVOKEVIRT | L201 /J22  
52         .    java/lang/String::intern:()Ljava/lang/String;
53         .  A:[        32,         19] | V:[        +0,         +0]
54         .DBUG0 csvs.NativeCPU::runWithoutCatch (:520) -- Read pool: 2
55         .8
56         .***** @4f103d11 MEM_LOAD_INTEGER_RE/INVOKEVIRT | L201 /J22  
57         .    java/lang/String::intern:()Ljava/lang/String;
58         .  A:[        19,         16,         19] | V:[       +28,   
59         .+1051720,        +28]
60         .DBUG0 csvs.NativeCPU::runWithoutCatch (:622) -- N 00100c48+2
61         .8 (00100c64) -> 1059640 (00102b38)
62         .***** @4f103d15 LOAD_POOL          /INVOKEVIRT | L201 /J22  
63         .    java/lang/String::intern:()Ljava/lang/String;
64         .  A:[        91,         18] | V:[----------,         +0]
65         .DBUG0 csvs.NativeCPU::runWithoutCatch (:520) -- Read pool: 9
66         .***** @4f103d18 LOAD_FROM_INTARRAY /INVOKEVIRT | L201 /J22  
67         .    java/lang/String::intern:()Ljava/lang/String;
68         .  A:[  nextpool,         19,         18] | V:[        +0,   
69         .+1059640,         +9]
70         .DBUG0 csvs.NativeCPU::runWithoutCatch (:505) -- (int)00102b3
71         .8[9] (00102b6c) -> 1051808 (00100ca0)
72         .***** @4f103d1c LOAD_FROM_INTARRAY /INVOKEVIRT | L201 /J22  
73         .    java/lang/String::intern:()Ljava/lang/String;
74         .  A:[        18,         17,         18] | V:[        +9,   
75         .+1059560,         +9]
76         .DBUG0 csvs.NativeCPU::runWithoutCatch (:505) -- (int)00102ae
77         .8[9] (00102b1c) -> 1326461834 (4f10338a)
78         .***** @4f103d20 INVOKE             /INVOKEVIRT | L201 /J22  
79         .    java/lang/String::intern:()Ljava/lang/String;
80         .  A:[        18,    a0/this,         10] | V:[+1326461834,  
81         . +1068104,   +1068104]
82         .>>>> 4f10338a >>>>>>>>>>>>>>>>>>>>>>
83         . > ARG [1068104, 1068104]
84         . > WAS java/lang/String.intern:()Ljava/lang/String; @4F103D2
85         .0h (:201 J182@22)
86         .***** @4f10338a DEBUG_ENTRY        /       NOP | L0   /J0   
87         .    java/lang/String::equals:(Ljava/lang/Object;)Z
88         .  A:[         1,         76,         77] | V:[  +1068104, --
89         .--------, ----------]
90         .***** @4f10339e IF_ICMP_NOT_EQUALS / IF_ACMPNE | L128 /J2   
91         .    java/lang/String::equals:(Ljava/lang/Object;)Z
92         .  :[   a0/this,          9,         33] | V:[  +1068104,   
93         .+1068104,         +0]
95 ## 11:11
97 It is very possible this is the reason that some invocations mess up
98 according to the case. So I will have to investigate the instance
99 invoke.
101 ## 11:37
103 Actually nevermind that is equals being called.
105 ## 15:06
107 I have to do two things: For RatufaCoat on 64-bit I need to do it so that it
108 uses virtual pointers, because I am finding out that on every OS I cannot
109 exactly always allocate a 32-bit pure pointer. So I am going to have to do
110 some mapping to get things working properly!
112 ## 15:07
114 Also I am going to add a self-test to the bootstrap which makes sure things
115 are okay, and possibly detecting if things are wrong. At least this way I can
116 have a mini-test that is off and ensures things are okay.
118 ## 16:31
120 The allocates take up too many screen instructions with the memory wiping so
121 I am just going to do a memset.
123 ## 23:00
125 I want a tool where I can convert a text file to a PNG so I can draw on it
126 and have notes. However there is no pre-existing utility that works well
127 for my use case. It either has limitations or does not support what I want
128 to do. Thus I need to write this utility myself.