Re: [rvm-research] Using VM.SysWriteln()

Kathiravelu Pradeeban <[email protected]>
Newsgroups gmane.comp.java.jikes.rvm.devel
Message-ID <CAAarrS=KX4QWCzM=6VPcR=XWu7H+C8Zgb4M3zq9nLQPBWPeekA@mail.gmail.com>
Hi Pushparaj,
This is possibly because of you are calling an Uniterruptible method
from Interruptible (or vice versa). Pls check whether the respective
classes/methods are annotated accordingly with @Inline (check the
definitions of the methods involved. Higher precedence over the class
level annotations) and @Uninterruptible (check the definitions of the
classes involved).

Further information can be found from BootImageWriterOutput.txt in a
location such as
/jikesrvm/target/BaseBaseConcurrentCompressor_x86_64-linux/BootImageWriterOutput.txt

Other developers have already pointed out the exact case for your
current issue. However pls see [1] for some more information on this.

[1] http://dmakarov.github.io/work/guide/guide.html#sec-1-7

Thank you.
Regards,
Pradeeban.

On Thu, Apr 25, 2013 at 3:31 PM, Pushparaj Motamari
<[email protected]> wrote:
> Hi,
>
> I am using below class for instrumentation. The build getting failed saying,
> Uniterrupted Violation. Could you please tell
> how to avoid this?
>
> @Uninterruptible
> public class MyPrinter {
>
>      @Entrypoint
>     public static void printValue(Address o ){
>          VM.sysWriteln("MyPrinter prints the value of ESP as = "+o);
>
>     }
> }
>
> On Tue, Apr 23, 2013 at 3:14 AM, Michael Bond <[email protected]>
> wrote:
>>
>> Hi Pushparaj,
>>
>> I see two issues:
>>
>> First, it looks like recursive instrumentation is happening: printValue()
>> is calling methods that are getting instrumented with calls to printValue().
>> To restrict instrumentation to only non-VM methods at compile time:
>>
>> if
>> (method.getDeclaringClass().getDescriptor().isBootstrapClassDescriptor())
>>
>> or
>>
>> if (method.getDeclaringClass().getDescriptor().isRVMClassDescriptor())
>>
>> depending on whether or not you want to instrument the Java libraries.
>>
>> Second, printValue() needs to be @Uninterruptible since the place where
>> printValue() is getting inserted probably isn't a GC-safe point. You can add
>> the @Uninterruptible annotation to the class or method.
>>
>> That'll cause a compiler error because uninterruptible methods can only
>> call other @Uninterruptible methods, and Object.hashCode() is an
>> interruptible method. I suggest calling
>>
>> RuntimeEntrypoints.getObjectHashCode(o);
>>
>> or simply
>>
>> ObjectReference.fromObject(o).toAddress()
>>
>> depending on what exactly you want to print.
>>
>> Cheers,
>> Mike
>>
>>
>> On 04/22/2013 03:00 PM, Pushparaj Motamari wrote:
>>
>> Dear All,
>>
>> I have created a New Class for instrumenting
>>
>> public class MyPrinter {
>>
>>      @Entrypoint
>>     public static void printValue(Object o){
>>          VM.sysWriteln("MyPrinter prints the value as = ", o.hashCode());
>>     }
>> }
>>
>> and I call it using
>>            asm.emitPUSH_Reg(T0);//Checking the Object Value, by printing
>> it.
>>           genParameterRegisterLoad(asm, 1); // pass 1 parameter
>>          // asm.comment("Calling the printValueMethod");
>>
>> asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.printValueMethod.getOffset()));
>>
>> and I have added it in EntryPoints.java.
>>
>> The build getting successful, but when execute I get following exception
>>
>> Exception in the primordial thread "Jikes_RBoot_Thread" while booting:
>> JikesRVM: internal error: recursive use of hardware exception registe    rs
>> (exiting)
>>   2 -- Stack --
>>   3 (0x5807a698 13214)   at [0x5807a698, 0x5b1e3ebd]
>> Lorg/jikesrvm/scheduler/RVMThread; terminate()V at line 2661
>>   4 (0x5807a6bc 13264)   at [0x5807a6bc, 0x5b344a74]
>> Lorg/jikesrvm/scheduler/RVMThread;
>> handleUncaughtException(Ljava/lang/Throwable;)V at line     4663
>>   5 (0x5807a6e0 8747)   at [0x5807a6e0, 0x5b344d0f]
>> Lorg/jikesrvm/runtime/RuntimeEntrypoints;
>> handleUncaughtException(Ljava/lang/Throwable;)V at     line 1071
>>   6 (0x5807a730 8746)   at [0x5807a730, 0x5b345b39]
>> Lorg/jikesrvm/runtime/RuntimeEntrypoints;
>> deliverException(Ljava/lang/Throwable;Lorg/jikesrv
>> m/ArchitectureSpecific$Registers;)V at line 1066
>>   7 (0x5807a774 8734)   at [0x5807a774, 0x5b0162eb]
>> Lorg/jikesrvm/runtime/RuntimeEntrypoints; deliverHardwareException(II)V at
>> line 796
>>   8 (0x5807a790 1)   at [0x5807a790, 0x5b0162eb] <hardware trap>
>>   9 (0x5807a924 10587)   at [0x5807a924, 0x5b016847]
>> Lorg/jikesrvm/classloader/Atom; toUnicodeStringInternal()Ljava/lang/String;
>>  10 (0x5807a948 10582)   at [0x5807a948, 0x5b33e6b9]
>> Lorg/jikesrvm/classloader/Atom; hashCode()I at line 887
>>  11 (0x5807a96c 3686)   at [0x5807a96c, 0x5b016388]
>> Lorg/jikesrvm/objectmodel/MyPrinter; printValue(Ljava/lang/Object;)V at line
>> 11
>>  12 (0x5807a994 10587)   at [0x5807a994, 0x5b016847]
>> Lorg/jikesrvm/classloader/Atom; toUnicodeStringInternal()Ljava/lang/String;
>> at line 277
>>  13 (0x5807a9b8 10582)   at [0x5807a9b8, 0x5b33e6b9]
>> Lorg/jikesrvm/classloader/Atom; hashCode()I at line 887
>>  14 (0x5807a9dc 3686)   at [0x5807a9dc, 0x5b016388]
>> Lorg/jikesrvm/objectmodel/MyPrinter; printValue(Ljava/lang/Object;)V at line
>> 11
>>  15 (0x5807aa04 10587)   at [0x5807aa04, 0x5b016847]
>> Lorg/jikesrvm/classloader/Atom; toUnicodeStringInternal()Ljava/lang/String;
>> at line 277
>>  16 (0x5807aa28 10582)   at [0x5807aa28, 0x5b33e6b9]
>> Lorg/jikesrvm/classloader/Atom; hashCode()I at line 887
>>  17 (0x5807aa4c 3686)   at [0x5807aa4c, 0x5b016388]
>> Lorg/jikesrvm/objectmodel/MyPrinter; printValue(Ljava/lang/Object;)V at line
>> 11
>>  18 (0x5807aa74 10587)   at [0x5807aa74, 0x5b016847]
>> Lorg/jikesrvm/classloader/Atom; toUnicodeStringInternal()Ljava/lang/String;
>> at line 277
>>  19 (0x5807aa98 10582)   at [0x5807aa98, 0x5b33e6b9]
>> Lorg/jikesrvm/classloader/Atom; hashCode()I at line 887
>>  20 (0x5807aabc 3686)   at [0x5807aabc, 0x5b016388]
>> Lorg/jikesrvm/objectmodel/MyPrinter; printValue(Ljava/lang/Object;)V at line
>> 11
>>  21 (0x5807aae4 10587)   at [0x5807aae4, 0x5b016847]
>> Lorg/jikesrvm/classloader/Atom; toUnicodeStringInternal()Ljava/lang/String;
>> at line 277
>>  22 (0x5807ab08 10582)   at [0x5807ab08, 0x5b33e6b9]
>> Lorg/jikesrvm/classloader/Atom; hashCode()I at line 887
>>
>> Please explain the reason for the above behaviour.
>>
>> Thanks & Regards
>> Pushparaj
>>
>>
>> On Mon, Apr 22, 2013 at 4:46 AM,
>> <[email protected]> wrote:
>>>
>>> Send Jikesrvm-researchers mailing list submissions to
>>>         [email protected]
>>>
>>> To subscribe or unsubscribe via the World Wide Web, visit
>>>         https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
>>> or, via email, send a message with subject or body 'help' to
>>>         [email protected]
>>>
>>> You can reach the person managing the list at
>>>         [email protected]
>>>
>>> When replying, please edit your Subject line so it is more specific
>>> than "Re: Contents of Jikesrvm-researchers digest..."
>>>
>>>
>>> Today's Topics:
>>>
>>>    1. Re: Potential issues with longjmp in bootImageRunner (Carl Ritson)
>>>    2. Doubts Regarding Jikes Stack Layout for BaseLine  Compiler
>>>       (Pushparaj Motamari)
>>>    3. Re: Doubts Regarding Jikes Stack Layout for BaseLine Compiler
>>>       (Michael Bond)
>>>    4. Trying to learn garbage collection (Thai, Richard P)
>>>    5. Error building the MMTk test harness (Dallas Treder)
>>>
>>>
>>> ----------------------------------------------------------------------
>>>
>>> Message: 1
>>> Date: Mon, 15 Apr 2013 18:22:35 +0100
>>> From: Carl Ritson <[email protected]>
>>> Subject: Re: [rvm-research] Potential issues with longjmp in
>>>         bootImageRunner
>>> To: "General discussion of Jikes RVM design, implementation, issues,
>>>         and plans" <[email protected]>
>>> Message-ID:
>>>
>>> <CAKDym5PTd0tjO2RA3G22vFpoVNRsAhu77ZUiT-keEJeKwwPOpA@mail.gmail.com>
>>> Content-Type: text/plain; charset=ISO-8859-1
>>>
>>> >>> There are a number of approaches to dealing with this:
>>> >>>  1. assume allocation will always be top-down and ignore,
>>> >>>  2. explicitly allocate thread stacks (these can be passed to
>>> >>> pthread_create),
>>> >>>  3. replace use of setjmp/longjmp with savecontext/swapcontext
>>> >>> (although these are deprecated in POSIX),
>>> >>>  4. implement a local version of longjmp without a check,
>>> >>>  5. bypass the __longjmp_chk by using glibc's internal
>>> >>> __libc_longjmp().
>>> >>>
>>> >>> Disregarding (1), (5) is the smallest change set.
>>> >>
>>> >> I'd also disregard (1). (3) and (4) don't seem attractive to me; we
>>> >> ought to rely on non-deprecated methods from the system libraries as
>>> >> much as possible.
>>> >
>>> > My opinion is (3) the best option as (2) requires the bootImageRunner
>>> > to allocate memory at a specific place in memory and manage it
>>> > (because thread heap will need to be freed).  Instead of
>>> > reimplementing setjmp/longjmp completely, bootThread already has to be
>>> > implemented in machine specific assembly to pivot the stack when
>>> > entering the VM, the existing code should hence be extended to allow
>>> > for pivoting back onto the thread stack.  In effect bootThread should
>>> > return when sysThreadTerminate is called.
>>>
>>> It has been pointed out to me that where I said (3), I meant (4).  I
>>> agree that the use of deprecated APIs is not a good option.  An
>>> possible extension to (2) is to use the explicitly allocated stacks
>>> from inside the VM and entirely bypass the allocated of thread stacks
>>> in C/C++.  Although issues regarding the primordial thread would still
>>> need to be addressed.
>>>
>>>
>>>
>>> ------------------------------
>>>
>>> Message: 2
>>> Date: Fri, 19 Apr 2013 23:48:44 +0530
>>> From: Pushparaj Motamari <[email protected]>
>>> Subject: [rvm-research] Doubts Regarding Jikes Stack Layout for
>>>         BaseLine        Compiler
>>> To: [email protected]
>>> Message-ID:
>>>
>>> <CAKO14CXwKhX-ksvBwLB__ooq9Za4kjJziDuMC56=nvNDduWTHQ@mail.gmail.com>
>>> Content-Type: text/plain; charset="iso-8859-1"
>>>
>>> Dear all,
>>>
>>> I would like to know how to print the current value of a register . Like
>>> asm.comment("Text");
>>> when I try to print asm.comment(SP) ,it is just printing as ESP ..
>>> when I execute the command ..rvm -X:base:mc=true
>>>
>>> Thank You
>>>
>>> Pushparaj Motamari
>>> Instituto Superior Technico -Portugal
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>>
>>> ------------------------------
>>>
>>> Message: 3
>>> Date: Sun, 21 Apr 2013 13:00:41 -0400
>>> From: Michael Bond <[email protected]>
>>> Subject: Re: [rvm-research] Doubts Regarding Jikes Stack Layout for
>>>         BaseLine Compiler
>>> To: [email protected]
>>> Message-ID: <[email protected]>
>>> Content-Type: text/plain; charset="iso-8859-1"
>>>
>>> Hi Pushparaj,
>>>
>>> asm.comment(...) performs *compile-time* printing. It can't know the
>>> run-time value of SP.
>>>
>>> To print the run-time value of SP, you can do something like the
>>> following:
>>>
>>> (1) Create an "instrumentation" method in some class (like
>>> RuntimeEntrypoints) that will get called from the compiled code:
>>>
>>>    @Entrypoint
>>>    static void myInstrumentation(Address value) {
>>>      VM.sysWriteln("Run-time value = ", value);
>>>    }
>>>
>>> (2) Add a field to Entrypoints that's a handle to the above
>>> instrumentation method.
>>>
>>> (3) Wherever you're currently modifying the baseline compiler to try to
>>> print SP, do something like this:
>>>
>>>      asm.emitPUSH_Reg(SP);
>>>      genParameterRegisterLoad(asm, 1);
>>>
>>> asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.myInstrumentationMethod.getOffset()));
>>>
>>> That'll generate code that calls your instrumentation method at run
>>> time, with one parameter: the run-time value of SP.
>>>
>>> Cheers,
>>> Mike
>>>
>>> On 04/19/2013 02:18 PM, Pushparaj Motamari wrote:
>>> > Dear all,
>>> >
>>> > I would like to know how to print the current value of a register .
>>> > Like
>>> > asm.comment("Text");
>>> > when I try to print asm.comment(SP) ,it is just printing as ESP ..
>>> > when I execute the command ..rvm -X:base:mc=true
>>> >
>>> > Thank You
>>> >
>>> > Pushparaj Motamari
>>> > Instituto Superior Technico -Portugal
>>> >
>>> >
>>> >
>>> > ------------------------------------------------------------------------------
>>> > Precog is a next-generation analytics platform capable of advanced
>>> > analytics on semi-structured data. The platform includes APIs for
>>> > building
>>> > apps and a phenomenal toolset for data science. Developers can use
>>> > our toolset for easy data analysis & visualization. Get a free account!
>>> > http://www2.precog.com/precogplatform/slashdotnewsletter
>>> >
>>> >
>>> > _______________________________________________
>>> > Jikesrvm-researchers mailing list
>>> > [email protected]
>>> > https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
>>>
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>>
>>> ------------------------------
>>>
>>> Message: 4
>>> Date: Sun, 21 Apr 2013 23:05:20 +0000
>>> From: "Thai, Richard P" <[email protected]>
>>> Subject: [rvm-research] Trying to learn garbage collection
>>> To: "[email protected]"
>>>         <[email protected]>
>>> Cc: csse402 <[email protected]>
>>> Message-ID:
>>>
>>> <D87E325A4A461248B6BB5AF8CC7F6282B03D3201@exchmb-tel-1.rose-hulman.edu>
>>>
>>> Content-Type: text/plain; charset="us-ascii"
>>>
>>> I'm currently trying my hand at making a garbage collector in MMTk and
>>> I've followed the tutorial on adding a new GC
>>> (http://jikesrvm.org/Adding+a+New+GC). I've also peppered logs throughout
>>> the classes and methods of the new GC I've created, but I don't think I can
>>> really follow what's happening after running the tests.
>>>
>>> For one, I've set the properties file to utilize bitmap marking
>>> (config.mmtk.headerMarkBit=true) in the BaseBaseMarkSweepTuned.properties
>>> file and it doesn't seem to achieve anything.
>>>
>>> Another thing, the log files outputted are incredibly large. There's no
>>> discernible pattern among the methods that are called. I notice a lot of the
>>> alloc/postAlloc calls in the mutator, getPagesUsed, etc, but the file is too
>>> large for me to clearly understand it all.
>>>
>>> Would anyone have any advice as to a better way towards understanding how
>>> GC's operate in this system? At least well enough so that I can reasonably
>>> affect the files when creating my own. In addition, would anyone know how to
>>> enable bitmap marking with the built-in MarkSweep collector?
>>>
>>> Best Regards,
>>> Richard
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>>
>>> ------------------------------
>>>
>>> Message: 5
>>> Date: Sun, 21 Apr 2013 19:16:46 -0400
>>> From: Dallas Treder <[email protected]>
>>> Subject: [rvm-research] Error building the MMTk test harness
>>> To: jikesrvm-researchers <[email protected]>
>>> Message-ID:
>>>
>>> <CAFVMK+qnkbsKw_V7Aqqgi-vaqAVFzHktUxCgrEvhKVgU8Vb4JQ@mail.gmail.com>
>>> Content-Type: text/plain; charset="iso-8859-1"
>>>
>>> I am following the guides located in the
>>> http://jikesrvm.org/Care+and+Feeding section of the website, and have
>>> gotten the RVM configured and built, but when I got to the
>>> http://jikesrvm.org/The+MMTk+Test+Harness guide, and ran the ant
>>> mmtk-harness command, I got the following error:
>>>
>>> Buildfile: /home/csse/trash-man/jikesrvm/build.xml
>>>
>>> compile-vmmagic-stub:
>>>
>>> compile-options:
>>>     [mkdir] Created dir:
>>> /home/csse/trash-man/jikesrvm/target/options/classes
>>>     [javac] Compiling 10 source files to
>>> /home/csse/trash-man/jikesrvm/target/options/classes
>>>
>>> compile-mmtk:
>>>
>>> ensure-javacc:
>>>
>>> prepare-ant-tasks:
>>>     [mkdir] Created dir:
>>> /home/csse/trash-man/jikesrvm/target/tasks/classes
>>>     [javac] Compiling 16 source files to
>>> /home/csse/trash-man/jikesrvm/target/tasks/classes
>>>     [javac] Note:
>>>
>>> /home/csse/trash-man/jikesrvm/tools/ant-tasks/src/org/jikesrvm/tools/template/GenerateFromTemplate.java
>>> uses unchecked or unsafe operations.
>>>     [javac] Note: Recompile with -Xlint:unchecked for details.
>>> Trying to override old definition of task truncate
>>>
>>> ensure:
>>>      [echo] javacc does not exist or is of the wrong version.
>>> Rebuilding...
>>>
>>> prepare-ant-tasks:
>>>
>>> init-javacc-properties:
>>>
>>> fetch:
>>>     [mkdir] Created dir:
>>> /home/csse/trash-man/jikesrvm/components/javacc/4.0
>>>      [echo] Downloading (no cache available)
>>>       [get] Getting:
>>>
>>> http://java.net/projects/javacc/downloads/download/oldversions/javacc-4.0.zip
>>>       [get] To:
>>> /home/csse/trash-man/jikesrvm/components/javacc/4.0/javacc-4.0.zip
>>>       [get]
>>>
>>> http://java.net/projects/javacc/downloads/download/oldversions/javacc-4.0.zip
>>> moved
>>> to
>>>
>>> https://java.net/projects/javacc/downloads/download/oldversions/javacc-4.0.zip
>>>       [get]
>>>
>>> https://java.net/projects/javacc/downloads/download/oldversions/javacc-4.0.zip
>>> moved
>>> tohttp://java.net/downloads/javacc/oldversions/javacc-4.0.zip
>>>
>>> BUILD FAILED
>>> /home/csse/trash-man/jikesrvm/build.xml:442: The following error occurred
>>> while executing this line:
>>> /home/csse/trash-man/jikesrvm/build/components/javacc.xml:50: The
>>> following
>>> error occurred while executing this line:
>>> /home/csse/trash-man/jikesrvm/build/components/base.xml:70: The following
>>> error occurred while executing this line:
>>> /home/csse/trash-man/jikesrvm/build/components/base.xml:76: The following
>>> error occurred while executing this line:
>>> /home/csse/trash-man/jikesrvm/build/components/javacc.xml:40: The
>>> following
>>> error occurred while executing this line:
>>> /home/csse/trash-man/jikesrvm/build/components/base.xml:110: The
>>> following
>>> error occurred while executing this line:
>>> /home/csse/trash-man/jikesrvm/build/components/base.xml:118: Redirection
>>> detected from https to http. Protocol switch unsafe, not allowed.
>>>
>>> I am running this on a Ubuntu 12.10 x32 machine, running OpenJDK 1.6. If
>>> there is any more information I can provide, please let me know.
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>>
>>> ------------------------------
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Precog is a next-generation analytics platform capable of advanced
>>> analytics on semi-structured data. The platform includes APIs for
>>> building
>>> apps and a phenomenal toolset for data science. Developers can use
>>> our toolset for easy data analysis & visualization. Get a free account!
>>> http://www2.precog.com/precogplatform/slashdotnewsletter
>>>
>>> ------------------------------
>>>
>>> _______________________________________________
>>> Jikesrvm-researchers mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
>>>
>>>
>>> End of Jikesrvm-researchers Digest, Vol 83, Issue 13
>>> ****************************************************
>>
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Precog is a next-generation analytics platform capable of advanced
>> analytics on semi-structured data. The platform includes APIs for building
>> apps and a phenomenal toolset for data science. Developers can use
>> our toolset for easy data analysis & visualization. Get a free account!
>> http://www2.precog.com/precogplatform/slashdotnewsletter
>>
>>
>>
>> _______________________________________________
>> Jikesrvm-researchers mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Precog is a next-generation analytics platform capable of advanced
>> analytics on semi-structured data. The platform includes APIs for building
>> apps and a phenomenal toolset for data science. Developers can use
>> our toolset for easy data analysis & visualization. Get a free account!
>> http://www2.precog.com/precogplatform/slashdotnewsletter
>> _______________________________________________
>> Jikesrvm-researchers mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
>>
>
>
> ------------------------------------------------------------------------------
> Try New Relic Now & We'll Send You this Cool Shirt
> New Relic is the only SaaS-based application performance monitoring service
> that delivers powerful full stack analytics. Optimize and monitor your
> browser, app, & servers with just a few lines of code. Try New Relic
> and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr
> _______________________________________________
> Jikesrvm-researchers mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
>



-- 
Pradeeban Kathiravelu.
Postgraduate Student,
Erasmus Mundus European Master in Distributed Computing,
Instituto Superior Técnico, Lisbon, Portugal.

Blog: [Llovizna] http://kkpradeeban.blogspot.com/

------------------------------------------------------------------------------
Try New Relic Now & We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app, & servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.