[ https://issues.apache.org/jira/browse/HARMONY-3067?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Alexei Fedotov updated HARMONY-3067: ------------------------------------ Attachment: WideGoto.class WideGoto.j verifier.patch Added a patch and a test > [drlvm][verifier] wide instructions > ----------------------------------- > > Key: HARMONY-3067 > URL: https://issues.apache.org/jira/browse/HARMONY-3067 > Project: Harmony > Issue Type: Bug > Components: DRLVM > Reporter: Alexei Fedotov > Attachments: verifier.patch, WideGoto.class, WideGoto.j > > > === Description === > The patch adds checks of two constraints, fixes > exception data flow issue and made arrangements > for further subroutine inlining implementation. > > While adding a number of new checks, the patch > reduces the total legth of the code by 75 lines > and reduces verifier memory usage by removing > structures which are not used. At least > removing dead data just improves readability. > === Testing === > Before the patch the test WideGoto.class hangs > on verification stage. > After the patch a verifier correctly reports: > Uncaught exception in main: > java.lang.VerifyError: (class: WideGoto, > method: main([Ljava/lang/String;)V) wide should > be followed by iload, fload, aload, lload, > dload, istore, fstore, astore, lstore, dstore, > ret or iinc > The patch passes acceptance tests. > Both patches and non-patched versions fail on > the same thread manager assertion when trying > to run eclipse. > === Changes === > Below goes a detailed list of changes: > * Added verification of wide instructions. > Added verification of the total bytecode > length. > * Added a new file for subroutine > implementation, added a reference to the file > to MSVC project. Added design of subroutine > inlining algorithm. > * Added type flags for graph nodes and an > appropriate constructor to create nodes of > different types. Added an assertion to get > instruction range only for > VF_TYPE_NODE_CODE_RANGE nodes. > * Simplified checks of a node type removing > access to a last code instruction of a > node. Removed artificial instructions for > handler nodes and start/end nodes. > * Removed service functions to work with > artificial instructions. Moved instruction > stack maps to the corresponding node maps. > Removed second parsing of method signature when > creating method IN and OUT maps. > * Two times decreased a size of bytecode > annotation structures and completely removed > offset structures for such structures. Added > annotations to vf_Context. > * Removed a dynamic vector of exception > handlers for each instruction. > * Removed debug flag macros which are no > longer used in the current version. > * Simplified edge pre-counting algorithm by > noticing that each basic block except the last > produces at least one OUT edge, so we just need > to make action about those blocks which branch > execution. Used local counters in loops instead > of one global counter to foster compiler > optimizations. > * Made vf_Graph class getters inline putting > their definitions in the header file. Added > GetEdgeCount getter. Removed unused SetNode > method (should be added CopyNode instead for > subroutine inlining). > * Added a new reporter macro to add class > and method names to any report. > * Adopted debug facilities to work with new > data structures. > * When parsing a class file or getting > exception information used local unsigned short > type instead of reused and casted int. > === Formatting === > I changed formatting of the code I touched. > * Fixed English and removed excessive "This > function ..." in documentation. Added > Doxygen style documentation using @param and > @return tags for new functions. > * Renamed "deep" -> "depth" and "begin" -> > "start" in variable and function names using > input from a focus group from my cubicle. > * Started using class library C style for > brackets and spaces in function names. > Consistently followed C style for local > variable names and functions (low caps with > underscore). Left Windows/JNI style (camel > style with the first letter in method name > uppercased) for C++ constructs. > * To my ear getting a number of nodes > doesn't imply that we are getting all nodes. So > I renamed GetNodeNumber to GetNodeCount. > * Reduced repeated long indirect pointer > chains context->a->b[i]->c caching in a local > variable. > * Reformat long lines to fit 72 symbols. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.