|
From: Adrian-Ken R. <ke...@co...> - 2015-03-09 14:01:26
|
Hello, While implementing lazy FPU loading/storing for the x86 base-hw port I came across an issue with regards to data structure alignment. The implementation is similar to the one of base-hw cortex A9 and uses the Cpu_lazy_state class to store the FPU state, see [1]. To use the fx[save|rstor] instructions, the storage area must be 16-byte aligned which I set as alignment of the Cpu_lazy_state class [2]. Checking the alignment of the data structure during runtime showed however, that the constraint is not correctly adhered to. I suspect that the Kernel::Cpu_job class, which contains the lazy state [3], is allocated without consideration for the required alignment. I have worked around the issue by manually ensuring the correct alignment [4] but I consider it a hack would like to get rid of it. Since I am not quite sure how Cpu_job is allocated and what its life cycle looks like, I would be glad if someone could give me some pointers to verify my suspicion and give a suggestion on how one would go about ensuring the proper alignment of all instances of Cpu_lazy_state. Regards, Adrian [1] - https://github.com/codelabs-ch/genode/blob/9a2a85c807a695a91088b6ab6e0d0de422c85dc1/repos/base-hw/src/core/include/spec/x86/cpu.h#L43 [2] - https://github.com/codelabs-ch/genode/blob/9a2a85c807a695a91088b6ab6e0d0de422c85dc1/repos/base-hw/src/core/include/spec/x86/cpu.h#L75 [3] - https://github.com/codelabs-ch/genode/blob/hw_x86-fpu/repos/base-hw/src/core/include/kernel/cpu.h#L132 [4] - https://github.com/codelabs-ch/genode/commit/996ffa6407effaa45488ddf3e41986c4fd2947ed |