Messages in this thread | | | Subject | Re: [PATCH v2] Fixed: Misaligned memory access. Fixed pointer comparison. | From | Jessica Clarke <> | Date | Sun, 23 Jan 2022 15:44:51 +0000 |
| |
On 23 Jan 2022, at 03:45, Michael T. Kloos <michael@michaelkloos.com> wrote: > > Rewrote the riscv memmove() assembly implementation. The > previous implementation did not check memory alignment and it > compared 2 pointers with a signed comparison. The misaligned > memory access would cause the kernel to crash on systems that > did not emulate it in firmware and did not support it in hardware. > Firmware emulation is slow and may not exist. Additionally, > hardware support may not exist and would likely still run slower > than aligned accesses even if it did. The RISC-V spec does not > guarantee that support for misaligned memory accesses will exist. > It should not be depended on. > > This patch now checks for the maximum granularity of co-alignment > between the pointers and copies them with that, using single-byte > copy for any unaligned data at their terminations. It also now uses > unsigned comparison for the pointers. > > Added half-word and, if built for 64-bit, double-word copy. > > Migrated to the newer assembler annotations from the now deprecated > ones. > > Commit Message Edited on Jan 22 2022: Fixed some typos. > > [v2] > > Per kernel test robot, I have fixed the build under clang. This > was broken due to a difference between gcc and clang, clang requiring > explict zero offsets the jalr instruction. gcc allowed them to be > omitted if zero.
Unlike LLVM, GCC does not have an assembler, that’s binutils’s GNU as.
Jess
| |