Сообщение GraalVM + native-image + posix + struct/union от 10.02.2021 9:39
Изменено 10.02.2021 9:44 Infernal
GraalVM + native-image + posix + struct/union
Всем привет. Не сильно надеюсь, что будет ответ, но вдруг
Играюсь с GraalVM и прямому доступу к линуксу.
С вызовом функций с простыми типами, как <a href="https://man7.org/linux/man-pages/man2/mmap.2.html" _target="_blank">mmap</a>, <a href="https://man7.org/linux/man-pages/man3/strerror.3.html" _target="_blank"> strerror</a>, ну и всяким прочим open/close/write/read проблем добраться и использовать нет.
Проблемы приши после попыток дотянуться до <a href="https://man7.org/linux/man-pages/man2/ioctl.2.html" target="_blank">ioctl</a>, а именно когда пришлось передавать стуктуры и указатели на структуру.
Скупая документация на GraalVM фактически <a href="https://github.com/oracle/graal/blob/master/substratevm/src/com.oracle.svm.tutorial/src/com/oracle/svm/tutorial/CInterfaceTutorial.java" target="_blank"> сводится к одному примеру</a>, который не особо помог с ответом.
А нужно протянуть в java что-то примерно такое:
В Graal это привращается во что-то такое (оно даже компиляется и запускается):
При передаче в таком виде, оно падает с ошибкой ioctl failed: -1
Соответственно вопросы:
1. Как правильно объявить структуры в GraalVM
2. Как правильно инициализировать и установить указатели.
Либо хотя бы как отдэбажить что native-image генерит(оно в момент трет исходики нативные) и что в ioctl пришло. Заранее благодарен за ответы.
Играюсь с GraalVM и прямому доступу к линуксу.
С вызовом функций с простыми типами, как <a href="https://man7.org/linux/man-pages/man2/mmap.2.html" _target="_blank">mmap</a>, <a href="https://man7.org/linux/man-pages/man3/strerror.3.html" _target="_blank"> strerror</a>, ну и всяким прочим open/close/write/read проблем добраться и использовать нет.
Проблемы приши после попыток дотянуться до <a href="https://man7.org/linux/man-pages/man2/ioctl.2.html" target="_blank">ioctl</a>, а именно когда пришлось передавать стуктуры и указатели на структуру.
Скупая документация на GraalVM фактически <a href="https://github.com/oracle/graal/blob/master/substratevm/src/com.oracle.svm.tutorial/src/com/oracle/svm/tutorial/CInterfaceTutorial.java" target="_blank"> сводится к одному примеру</a>, который не особо помог с ответом.
А нужно протянуть в 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 пришло. Заранее благодарен за ответы.
GraalVM + native-image + posix + struct/union
Всем привет. Не сильно надеюсь, что будет ответ, но вдруг
Играюсь с GraalVM и прямому доступу к линуксу.
С вызовом функций с простыми типами, как mmap, strerror, ну и всяким прочим open/close/write/read проблем добраться и использовать нет.
Проблемы приши после попыток дотянуться до ioctl, а именно когда пришлось передавать стуктуры и указатели на структуру.
Скупая документация на GraalVM фактически сводится к одному примеру , который не особо помог с ответом.
А нужно протянуть в java что-то примерно такое:
В Graal это привращается во что-то такое (оно даже компиляется и запускается):
При передаче в таком виде, оно падает с ошибкой ioctl failed: -1
Соответственно вопросы:
1. Как правильно объявить структуры в GraalVM
2. Как правильно инициализировать и установить указатели.
Либо хотя бы как отдэбажить что native-image генерит(оно в момент трет исходики нативные) и что в ioctl пришло. Заранее благодарен за ответы.
Играюсь с 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 пришло. Заранее благодарен за ответы.