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.