GraalVM + native-image + posix + struct/union
От: Infernal Россия  
Дата: 10.02.21 09:39
Оценка:
Всем привет. Не сильно надеюсь, что будет ответ, но вдруг

Играюсь с GraalVM и прямому доступу к линуксу.
С вызовом функций с простыми типами, как mmap, strerror, ну и всяким прочим open/close/write/read проблем добраться и использовать нет.

Проблемы приши после попыток дотянуться до ioctl, а именно когда пришлось передавать стуктуры и указатели на структуру.

Скупая документация на GraalVM фактически сводится к одному примеру , который не особо помог с ответом.

А нужно протянуть в java что-то примерно такое:
typedef union my_union
{
  uint8_t  bb;
  uint16_t ww;
  uint8_t  arr[32]; // <-- Проблема раз, как заалоцировать
} my_union;

typedef struct my_struct
{
  char cc;
  int size;
  union my_union *data ; // <-- Проблема как создать и присобачить указатель на union тут
} my_struct;


В Graal это привращается во что-то такое (оно даже компиляется и запускается):
@CStruct("my_union")
    public interface my_union extends PointerBase {
        @CField("bb")
        byte getBb();

        @CField("bb")
        void setBb(byte b);

        @CField("ww")
        short getWw();

        @CField("ww")
        void setWw(short word);

        @CFieldAddress("arr")
        Pointer getBlock(); // Какой тут тип должен быть?
    }

@CStruct("my_struct")
    public interface my_struct extends Pointer {
        @CField("сс")
        byte getСс();

        @CField("сс")
        void setСс(byte rw);
   

        @CField("size")
        int getSize();

        @CField("size")
        void setSize(int size);


        @CFieldAddress("data")
        CIntPointer getData(); // Какой тут тип должен быть? И как установить указатель на my_union
    }

При передаче в таком виде, оно падает с ошибкой ioctl failed: -1

Соответственно вопросы:
1. Как правильно объявить структуры в GraalVM
2. Как правильно инициализировать и установить указатели.

Либо хотя бы как отдэбажить что native-image генерит(оно в момент трет исходики нативные) и что в ioctl пришло. Заранее благодарен за ответы.
Отредактировано 10.02.2021 9:44 Infernal . Предыдущая версия . Еще …
Отредактировано 10.02.2021 9:42 Infernal . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.