Pavel Pisa commented: https://gitlab.rtems.org/rtems/tools/rtems-source-builder/-/merge_requests/241#note_149786 The libdl code would need update in the functions ``` static void write32le(void* loc, uint32_t val) { *((uint32_t*)loc) = val; } static void write64le(void* loc, uint64_t val) { *((uint64_t*)loc) = val; } ``` ``` static uint32_t read32le(void* loc) { return *((uint32_t*)loc); } static uint64_t read64le(void* loc) { return *((uint64_t*)loc); } ``` The Linux kernel uses relatively complex solution but it is portable and on HW which support unaligned access it compiles to simple one instruction code https://elixir.bootlin.com/linux/v7.0.5/source/include/linux/unaligned.h https://elixir.bootlin.com/linux/v7.0.5/source/include/vdso/unaligned.h#L20 `__put_unaligned_t` is relatively readable: ``` #define __put_unaligned_t(type, val, ptr) do { \ type __put_unaligned_val = (val); \ __builtin_memcpy((void *)(ptr), &__put_unaligned_val, \ sizeof(__put_unaligned_val)); \ } while (0) ``` `__get_unaligned_t` is much more complex to provide support for reading from pointer to constant scalar. -- View it on GitLab: https://gitlab.rtems.org/rtems/tools/rtems-source-builder/-/merge_requests/241#note_149786 You're receiving this email because of your account on gitlab.rtems.org.
_______________________________________________ bugs mailing list [email protected] http://lists.rtems.org/mailman/listinfo/bugs
