Невозможно использовать HSDIS с OpenJDK 11 - PullRequest
0 голосов
/ 12 мая 2019

Итак, я пытаюсь собрать / использовать hsdis с openJDK-11.если я пытаюсь собрать его с помощью binutils, я получаю следующие ошибки:

hsdis.c:316:32: error: incompatible type for argument 1 of ‘disassembler'
app_data->dfn = disassembler(native_bfd);

hsdis.c:316:19: error: too few arguments to function ‘disassembler’
app_data->dfn = disassembler(native_bfd);

Я пытался собрать его с помощью binutils 2.29, 2.30, 2.31 и 2.32.У всех одна и та же ошибка.

Если я беру предварительно скомпилированный двоичный файл из JDK-8 и помещаю его в папку сборки JDK, netbeans отказывается признать, что он присутствует в папке.Я установил OpenJDK в NetBeans и сгенерировал сборку медленной отладки.Я попытался запустить его шаг за шагом, чтобы увидеть, где именно ищется hsdis, к моему удивлению, он действительно смотрит в папку, в которую я поместил файл, однако он все еще не говорит, что такой файл или каталог.Для меня эта папка

home/ubuntu/jdk11u-dev/build/linux-x86_64-normal-server-slowdebug/images/jdk/lib/server

Я использую VMWare и работаю с Ubuntu 18.04.Есть идеи, что я могу сделать?

1 Ответ

1 голос
/ 13 мая 2019

Я пытался собрать его с помощью binutils 2.29, 2.30, 2.31 и 2.32.У всех одна и та же ошибка.

Версия вашего исходного кода не работает с binutils 2.29+.У jdk / jdk есть патч, чтобы исправить это.См .: https://bugs.openjdk.java.net/browse/JDK-8191006 Что предлагает следующее исправление для hsdis.c:

diff --git a/src/share/tools/hsdis/hsdis.c b/src/share/tools/hsdis/hsdis.c
index 3d038f1..88122fb 100644
--- a/src/share/tools/hsdis/hsdis.c
+++ b/src/share/tools/hsdis/hsdis.c
@@ -30,6 +30,7 @@
 #include <config.h> /* required by bfd.h */
 #include <libiberty.h>
 #include <bfd.h>
+#include <bfdver.h>
 #include <dis-asm.h>
 #include <inttypes.h>
 #include <string.h>
@@ -312,7 +313,13 @@ static void setup_app_data(struct hsdis_app_data* app_data,

  /* Finish linking together the various callback blocks. */
  app_data->dinfo.application_data = (void*) app_data;
- app_data->dfn = disassembler(native_bfd);
+ app_data->dfn = disassembler(
+#if BFD_VERSION >= 229000000
+ bfd_get_arch(native_bfd),
+ bfd_big_endian(native_bfd),
+ bfd_get_mach(native_bfd),
+#endif
+ native_bfd);
  app_data->dinfo.print_address_func = hsdis_print_address_func;
  app_data->dinfo.read_memory_func = hsdis_read_memory_func; 
...