moje dopytanie było do hsdis To coś do zrzutu do asemblera. Ale nie poszło
Sorki, będzie trochę długi opis :)
Mam ten sam problem ze zbudowaniem tego komendą make BINUTILS=binutils-2.26 ARCH=amd64
co tutaj na stackoverflow https://stackoverflow.com/questions/52737698/unable-to-compile-unrecognized-relocation-0x2a-in-section-text
Wypluwa mi dokładnie to samo
/usr/bin/ld: build/linux-amd64/bfd/libbfd.a(archures.o): unrecognized relocation (0x2a) in section `.text'
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
make: *** [build/linux-amd64/hsdis-amd64.so] Error 1
Patrzę niżej w opisie instalacji hsdis że było to kompilowane na Ubuntu 16.04, a ja mam 14.04LTS. To już nie pierwszy taki przypadek kiedy mam problem z instalacją niektórego softu właśnie przez starą dystrybuję, problemy niezgodności ale dobra.
Następnie sprawdzam według porady jaką mam wersję ld -- version
GNU ld (GNU Binutils for Ubuntu) 2.24
Copyright 2013 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
Próbowałem robić upgrade sudo apt-get install --reinstall binutils
ale dalej zostaje 2.24
Więc dałem sobie z tym spokój i zbudowałem to takim poleceniem make BINUTILS=binutils-2.26 ARCH=Linux
i poszło.
Następnie przeniosłem ten plik hsdis-linux.so
do /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/amd64/server
bo chyba to jest właściwa ścieżka, skoro mam do wyboru w /usr/lib/jvm
Więc mam plik hsdis-linux.so
w lokalizacji /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/amd64/server
Następnie robię hello world w java i kompiluję javac -g Main.java
public class Main
{
public static void main(String[] args) {
System.out.println(1);
}
}
I odpalam java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -Xcomp -XX:CompileCommand=compileonly,Main.main Main
. Dostaję wtedy taki komunikat
OpenJDK 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
CompilerOracle: compileonly Main.main
Could not load hsdis-amd64.so; library not loadable; PrintAssembly is disabled
1
Czyli szuka hsdis-amd64.so
, ale nie dałem rady właśnie tego skompilować przez te problemy o których pisałem wyżej.
Jeszcze robię java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -Xcomp -XX:CompileCommand=compileonly,Main Main
to wyrzuca to, potem chwilę coś tam robi i zwraca 1
OpenJDK 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
CompilerOracle: unrecognized line
"compileonly Main"
Unrecognized text Main after command
Could not load hsdis-amd64.so; library not loadable; PrintAssembly is disabled
1
Więc reasumując, albo jakoś trzeba zrobić upgrade ld z 2.24 do 2.26, ale nie wiem jak, albo jeszcze coś żeby to poszło z polecenia make BINUTILS=binutils-2.26 ARCH=amd64