README revision 1472:c18cbe5936b8
1Copyright (c) 2008 Oracle and/or its affiliates. All rights reserved. 2DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 4This code is free software; you can redistribute it and/or modify it 5under the terms of the GNU General Public License version 2 only, as 6published by the Free Software Foundation. 7 8This code is distributed in the hope that it will be useful, but WITHOUT 9ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 10FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 11version 2 for more details (a copy is included in the LICENSE file that 12accompanied this code). 13 14You should have received a copy of the GNU General Public License version 152 along with this work; if not, write to the Free Software Foundation, 16Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 17 18Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 19or visit www.oracle.com if you need additional information or have any 20questions. 21 22________________________________________________________________________ 23 24'hsdis': A HotSpot plugin for disassembling dynamically generated code. 25 26The files in this directory (Makefile, hsdis.[ch], hsdis-demo.c) 27are built independently of the HotSpot JVM. 28 29To use the plugin with a JVM, you need a new version that can load it. 30If the product mode of your JVM does not accept -XX:+PrintAssembly, 31you do not have a version that is new enough. 32 33* Building 34 35To build this project you a copy of GNU binutils to build against. It 36is known to work with binutils 2.17 and binutils 2.19.1. Download a 37copy of the software from http://directory.fsf.org/project/binutils or 38one of it's mirrors. Builds targetting windows should use at least 392.19 and currently requires the use of a cross compiler. 40 41The makefile looks for the sources in build/binutils or you can 42specify it's location to the makefile using BINTUILS=path. It will 43configure binutils and build it first and then build and link the 44disasembly adapter. Make all will build the default target for your 45platform. If you platform support both 32 and 64 simultaneously then 46"make both" will build them both at once. "make all64" will 47explicitly build the 64 bit version. By default this will build the 48disassembler library only. If you build demo it will build a demo 49program that attempts to exercise the library. 50 51Windows 52 53In theory this should be buildable on Windows but getting a working 54GNU build environment on Windows has proven difficult. MINGW should 55be able to do it but at the time of this writing I was unable to get 56this working. Instead you can use the mingw cross compiler on linux 57to produce the windows binaries. For 32-bit windows you can install 58mingw32 using your package manager and it will be added to your path 59automatically. For 64-bit you need to download the 64 bit mingw from 60http://sourceforge.net/projects/mingw-w64. Grab a copy of the 61complete toolchain and unpack it somewhere. Put the bin directory of 62the toolchain in your path. The mingw installs contain cross compile 63versions of gcc that are named with a prefix to indicate what they are 64targetting and you must tell the Makefile which one to use. This 65should either be i586-mingw32msvc or x86_64-pc-mingw32 depending on 66which on you are targetting and there should be a version of gcc in 67your path named i586-mingw32msvc-gcc or x86_64-pc-mingw32-gcc. Tell 68the makefile what prefix to use to find the mingw tools by using 69MINGW=. For example: 70 71make MINGW=i586-mingw32msvc BINTUILS=build/binutils-2.19.1 72 73will build the Win32 cross compiled version of hsdis based on 2.19.1. 74 75* Installing 76 77Products are named like build/$OS-$LIBARCH/hsdis-$LIBARCH.so. You can 78install them on your LD_LIBRARY_PATH, or inside of your JRE next to 79$LIBARCH/libjvm.so. 80 81Now test: 82 83 export LD_LIBRARY_PATH .../hsdis/build/$OS-$LIBARCH:$LD_LIBRARY_PATH 84 dargs='-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly' 85 dargs=$dargs' -XX:PrintAssemblyOptions=hsdis-print-bytes' 86 java $dargs -Xbatch CompileCommand=print,*String.hashCode HelloWorld 87 88If the product mode of the JVM does not accept -XX:+PrintAssembly, 89you do not have a version new enough to use the hsdis plugin. 90