You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Alexei Fedotov (JIRA)" <ji...@apache.org> on 2007/01/28 14:32:49 UTC

[jira] Updated: (HARMONY-3067) [drlvm][verifier] wide instructions

     [ 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.