This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: java disassembler/assembler



Well, printing everything twice is not a good interface.
Instead of:

; 2: invokespecial 1 (java/lang/Object/<init> ()V)

and then later:

invokespecial java/lang/Object/<init>()V

it was an example to show you both the output of the disassembler in warmode and the jasmin translation. It is possible to have just the warmode output, or just the jasmin translation (it is even possible to have nothing, for those who were wondering :).



The assembler could just ignore the "#NNN=" prefix.   It would
be nice to have an option where the the assembler would try to
use constant pool entry NNN if it is unused or matches the request,
or pick a different or new entry otherwise (and printing a warning).
But I don't that's a critical feature.

I'll see what I can do with this. Sounds like a good idea. The jasmin code is becoming quite messy however if we combine all the new features.



Note also you only want to print the constant pool and the constant
pool indexes, in a "verbose" mode - probably not by default.

sure, the default is to print the jasmin output




Here is what I added these days :

- the new jasmin language accepts the pc of opcodes before the instruction, for example
0: ldc "hello"
2: invokesomething



- use of absolute or relative offset instead of labels. Example : 0: ldc "hello" 2: goto 0L ; the L means "0 as a label", so goto offset 0 5: goto 0 ; traditional goto, so goto 0 means stay here 8: goto -8 ; traditional goto, go 8 bytes backward Label0: 11: goto Label0 ; traditional jasmin goto, with a label as a target 14: goto 1 ; go 1 byte forward 17: goto 5L ; go to offset 5

I think you've understood what I mean.


- I finally implemented StackMap attributes. It's quite awful but here is what I use :
You define stack map frames between .stack and .end stack, the attribute is implicitly the addition of all your stack map frames. You can define your stack map frames inside the code (the more convenient is to put them at the offset they represent). Example :


.method blablabla
...
   .stack
       offset 12
       locals Null
       locals Top
       locals Object foo/bar/Hello
       stack Null
   .end stack
     12: aload_0
     13: invokevirtual maddany/HelloWorldMIDlet/notifyDestroyed()V

   .stack
       offset 16
       locals Null
       locals Integer
       stack Uninitialized 12
       stack Long
   .end stack
     16: return

.end method

I think that's all. I'm preparing some documentation with all the syntax extensions to Jasmin.

Regards,
Daniel



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]