1. 程式人生 > >在64位Windows上編譯hsdis

在64位Windows上編譯hsdis

背景

最近想學習下Hotspot的JIT,查詢大量資料都說需要hsdis,但是又從哪都找不到windows64位的版本。
如果沒有這個東西,直接執行程式碼,加上如下引數後
-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly
會得到如下提示
Java HotSpot(TM) 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
Could not load hsdis-amd64.dll; library not loadable; PrintAssembly is disabled


。。。。。。
看來確實是需要hsdis-amd64.dll[下載]這個東西的。

動手

How to build hsdis-amd64.dll and hsdis-i386.dll on Windows

  1. Install Cygwin. At the Select Packages screen, add the following packages (by expanding the Devel category, then clicking once on the Skip label next to each package name):
    • make
    • mingw64-x86_64-gcc-core (only needed for hsdis-amd64.dll)
    • mingw64-i686-gcc-core (only needed for hsdis-i386.dll)
  2. Run the Cygwin Terminal. This can be done using the Desktop or Start Menu icon created by the installer, and will create your Cygwin home directory (C:\cygwin\home\username or C:\cygwin64\home\username
    , by default).
  3. Download the latest GNU binutils source package and extract its contents to your Cygwin home directory. At the time of writing, the latest package is binutils-2.24.tar.bz2. This should result in a directory named binutils-2.24 (or whatever the latest version is) in your Cygwin home directory.
  4. Download the OpenJDK source by going to the JDK 8 Updates repository, selecting the tag corresponding to your installed JRE version, and clicking bz2. Extract the hsdis directory (found in src\share\tools) to your Cygwin home directory.
  5. In the Cygwin Terminal, enter cd hsdis.
  6. To build hsdis-amd64.dll, enter make OS=Linux MINGW=x86_64-w64-mingw32 'AR=$(MINGW)-ar' BINUTILS=~/binutils-2.24. To build hsdis-i386.dll, enter make OS=Linux MINGW=i686-w64-mingw32 'AR=$(MINGW)-ar' BINUTILS=~/binutils-2.24. In either case, replace 2.24 with the binutils version you downloaded.

The DLL can now be installed by copying it from hsdis\build\Linux-amd64 or hsdis\build\Linux-i586 to your JRE’s bin\server or bin\client directory.

Note that binutils and OpenJDK use incompatible licenses. As I understand it, this means that it is legal to combine them for personal use, but not to distribute the result. Because of this, I cannot provide prebuilt DLLs.

Bonus tip: if you prefer Intel ASM syntax to AT&T, specify -XX:PrintAssemblyOptions=intel alongside any other PrintAssembly options you use.

大體上按照這個做完之後,最後執行make命令總是報錯。
踩了不少坑,最後還是build出來了。
現在在上面引用內容的基礎上進行完善,希望能幫助更多人

請參照下面的步驟

粗體的部分是在上文基礎上更新的內容

  1. 安裝Cygwin
    • Select Packages頁面需要注意,在預設的基礎上,需要額外安裝的package有:
      • Devel - make
      • Devel - gcc-core
      • Devel - mingw64-x86_64-gcc-core
      • Devel - texinfo
      • Utils - diffutils
  2. 安裝完之後啟動Cygwin,則會在Cygwin的安裝目錄下的home下自動生成你的使用者名稱命名的資料夾(下文記之為~
  3. 將下載的binutils解壓到~
    .../home/使用者名稱/binutils-2.27/
  4. 將下載的openJDK原始碼/src/share/tools/hsdis解壓到~
    .../home/使用者名稱/hsdis/
  5. 修改~/hsdis/Makefile檔案,搜尋LIBRARIES,將
    LIBRARIES = $(TARGET_DIR)/bfd/libbfd.a \
    $(TARGET_DIR)/opcodes/libopcodes.a \
    $(TARGET_DIR)/libiberty/libiberty.a

    修改為
    LIBRARIES = $(TARGET_DIR)/bfd/libbfd.a \
    $(TARGET_DIR)/zlib/libz.a \
    $(TARGET_DIR)/opcodes/libopcodes.a \
    $(TARGET_DIR)/libiberty/libiberty.a

    儲存
  6. 在Cygwin視窗輸入cd ~/hsdis,然後輸入命令make OS=Linux MINGW=x86_64-w64-mingw32 'AR=$(MINGW)-ar' BINUTILS=~/binutils-2.27(最後的binutils路徑需要與實際安裝路徑一致)
  7. 等待幾分鐘,如果最後沒有報錯,那麼就build成功了,我們需要的hsdis-amd64.dll現在就在~/hsdis/build/Linux-amd64裡面了,把它copy到$JAVA_HOME/jre/bin/server(或$JAVA_HOME/jre/bin/client)下就OK了。

相關推薦

64Windows編譯hsdis

背景 最近想學習下Hotspot的JIT,查詢大量資料都說需要hsdis,但是又從哪都找不到windows64位的版本。 如果沒有這個東西,直接執行程式碼,加上如下引數後 -XX:+UnlockDiagnosticVMOptions -XX:+PrintA

64機器VS2012編譯的32程式在XP系統執行提示Wow64EnableWow64FsRedirection無法定位於輸入點

Wow64EnableWow64FsRedirection()函式是64位計算機用於定義轉向的函式,在32位計算機中不存在轉向問題 因此,在32位計算機中的kernel32.dll庫中就不存在此函式,當程式執行在32位計算機中時,就會提示無法定位 解決方法: 採用函式指標的

如何在64windows作業系統使用PLSQL Developer

1.由於 PLSQL Developer 沒有64位版本,所以在64位系統上執行時會出現如下圖介面(沒有connect as選項):   2.到Oracle官網上下載一個32位的客戶端(instantclient),一定要下載 basic 版本的。最好去官網下載吧,網上的有

在CENT OS 7.0 64系統原始碼編譯安裝OPENCV3.0以及CUDA7.0,支援CUDA開發,並整合QT5.5.0的開發環境

=============================概述================================= 在CENT OS 7.0 64位系統上原始碼編譯安裝OPENCV,支援CUDA,並整合QT的開發環境,整體過程如下: 1,安裝作業系統,我使用U

mySQL ODBC 在windows 64的驅動問題

1,問題的起源 某次編輯一個asp檔案,其中訪問mysql資料庫的連線字串如下: "driver={mysql odbc 3.51 driver};server=localhost;uid=root;pwd=sa;database=server;Stmt=Set Names 'GBK'" 在執行時。

ubuntu16.04.01 64 mingw-w64 編譯 VLC-2.2.4版本 firefox外掛、IE activex外掛、windows安裝包。

0:編譯工具準備 1:編譯環境準備 安裝mingw-w64編譯器: sudo apt-get install gcc-mingw-w64-i686 g++-mingw-w64-i686

Windows 7 64系統搭建Hadoop偽分散式環境(很詳細)

在開始配置前,我們先了解Hadoop的三種執行模式。 Hadoop的三種執行模式 獨立(或本地)模式:無需執行任何守護程序,所有程式都在同一個JVM上執行。在獨立模式下測試和除錯MapReduce程式很方便,因此該模式在開發階段比較適合。 **偽分散式

64系統設定編譯平臺為x86的VS2008專案升級到VS2010後編譯失敗的原因和解決辦法

今天遇到這個情況很是費勁,結果發現目標機器上64位系統 然後 看看這個解釋吧,我就不轉載了,哈哈 無法就是anycpy和x86的關閉,煩死了 建議試用win server 2008 只是可能不能註冊,不過也不管了

關於在64系統,使用APlayer,運行報錯“找不到指定的模塊”

64位系統 詳細信息 visible 對話框 ole event onu get *** 使用APlayer開發了一個C#程序,原先開發電腦是32位的,安裝電腦也是32位,只需要將相應的文件打包,然後在system32文件夾中放入atl71.dll和D3DX9_43.dll

zlib包在64機被編譯成32目標代碼的問題

x86_64 -c efi yun mod 文件 配置 chmod pre 一、進入zlib目錄 [[email protected]/* */ \]$ cd /home/yun/zlib-1.2.8 [[email prot

在Win7 64電腦安裝Sql Server 2008 R2 Express

技術分享 下載網址 com 操作系統 參考 默認 title 安裝 英文 安裝環境說明: 操作系統:Win7 64位 英文版 安裝步驟: 1、準備安裝文件 下載網址:https://www.microsoft.com/zh-CN/download/detai

關於64 windows&linux雙系統引導問題

start trac track uid too 處理 blog windows for 換了臺本子win7 64位,抽空做個雙系統,裝了下linux。 遇到開機問題:進linux可以正常使用,進win7花屏死機,初步估計是grub(此時的boot sector位grub)

64Windows的Dos中取消了edit命令

dos命令 行編輯器 外部命令 正常 span 外部 mage 前段時間 時間 前段時間在玩dos命令行的時候,用copy con創建了txt文件後想對其進行編輯,然後我又不想用記事本,所以去網上找命令行中對文本文件進行編輯的命令(純屬想裝B),結果看到了edit命令。 一

如何在64windows7同時使用3264的Eclipse

blog post 以及 卸載 jdk 實現 eclipse 刪除 oracl  64位機器上可以同時運行32位和64位的Eclipse,但是電腦中必須有相應的jdk。Eclipse雖然不需要安裝,但是在啟動時會檢查系統中固定文件夾下是否有合適的jre。例如32位Ec

[golang] Glide 包管理工具,在windows10 64系統的bug修復方案

環境 all 管理工具 oos for 討論 pos inb direct bug重現 [ERROR] Unable to export dependencies to vendor directory: Error moving files: exit status 1

windows 編譯部署Rap2

get 前後端 CI 這也 新版 修改 blank com 填充 在windows 上編譯部署Rap2 引言 安裝需要的環境 安裝後端站點 創建數據庫 在全局安裝pm2 和 typescript 配置mysql,redi

64系統部署BDE的要點

首先,據我所知,Borland/CodeGear沒有釋出過支援64bit windows的BDE安裝包,如果你在網上看到了相關的BDE安裝包,很有可能是使用者自己重新打包釋出的。無論是在32bit windows還是64bit windows下,釋出BDE關鍵是以下幾點1:將BD

32的apk 在64平臺執行不停掛掉的問題

01-01 00:55:41.800 E/AndroidRuntime(12543): FATAL EXCEPTION: main 01-01 00:55:41.800 E/AndroidRuntime(12543): Process: cn.digirun.update, PID: 12543

libcurl在centos6.4 64作業系統不支援https的解決方案

問題:      在程式內使用libcurl庫訪問https的網址時,始終返回 CURLE_UNSUPPORTED_PROTOCOL      經查詢發現是libcurl庫檔案編譯時沒有選擇支援ssl,預設的li

windows編譯chrome瀏覽器Building Chromium for Windows

web端用webRTC實現的一對一視訊,互動直播和會議。https://github.com/starrtc/android-demo         Chromium requires Visual Studio 2017 (1