eclipse-iceoryx / eclipse-iceoryx/iceoryx2

Interoperability between 32-bit and 64-bit applications.

Open
#402 0 comments 3 reactions 0 assignees View on GitHub
needs funding
Dominant language
Rust
Stars
2.5k
Forks
185
Avg merge
1d 23h
Merged PRs (30d)
47

Description

## Brief feature description

Having interoperability between 32-bit and 64-bit applications would help porting legacy application to 64-bit by opening the path to port one application at a time and keep the system running.

Additionally, there are SoCs with 32-bit realtime cores and 64-bit performance cores. An interoperability between 32-bit and 64-bit application is a precondition for zero-copy between those cores.

The goal is to get iceoryx2 running on the [Kria KR260 Robotics Starter Kit](https://www.amd.com/en/products/system-on-modules/kria/k26/kr260-robotics-starter-kit.html)

## Detailed information

Due to differences in the alignment of 64-bit PODs on 32-bit architectures compared to 64-bit architectures, it must be ensured that all data structures have the same data layout. With C++ and GCC this can be done via the `-malign-double` flag, which ensures that the alignment of 64-bit PODs on 32-bit architectures matches the alignment of the 64-bit architectures.

If Rust does not support such a compiler flag, all 64-bit data structures must have an explicit alignment to 8 bytes.

Additionally, POSIX data structures like ´sem_t´ have a different size on 32-bit than on 64-bit. These structures cannot be used in shared memory and need an replacement. On Linux, a futex based solution can be used and on Windows a similar approach with `WaitOnAddress` is feasible. Operating systems which do not support such a mechanism, can either use a spin based solution or a completely different concept which does not rely on such a data structure being placed into the shared memory.

## References

- https://github.com/eclipse-iceoryx/iceoryx/blob/main/doc/website/advanced/iceoray-on-32-bit.md
- https://github.com/eclipse-iceoryx/iceoryx/issues/2301

Contributor guide

Open the contributing guide

Research direction

Read the linked 32-bit documentation and issue #2301 first, then trace the shared-memory data structures and synchronization primitives described in this issue. Done means 32-bit and 64-bit applications can interoperate with identical layouts and compatible synchronization, including on the Kria KR260 target.

Written by the indexing model from the issue text.

Assessment

Tech stack
linux, rust
Domain
distributed-systems, embedded-iot, operating-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.