Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

offset_of! is not working for {nested fields, type paths} #40

Open
efenniht opened this issue Aug 29, 2019 · 1 comment
Open

offset_of! is not working for {nested fields, type paths} #40

efenniht opened this issue Aug 29, 2019 · 1 comment

Comments

@efenniht
Copy link
Collaborator

src/arch/aarch64.rs 에 있는 VCPU_REGS 의 값을 제대로 계산할 수 없습니다. 원하는 것은

offset_of!(VCpu, inner.data.regs)

인데, nested fields에 대한 offset을 구하는 기능이 없어서 다음과 같이 바꾸었습니다.

offset_of!(VCpu, inner) + offset_of!(SpinLock<VCpuInner>, data) + offset_of!(VCpuInner, regs)

그런데 이렇게 해도 offset_of!(SpinLock<VCpuInner>, data) 는 실패합니다. (매크로의 첫 번째 인자가 $type:tt 로 되어 있어서 복잡한 type path를 못 받습니다.) 해서 마지막으로 다음과 같이 했더니,

offset_of!(VCpu, inner) + 8 + offset_of!(VCpuInner, regs)

로 바꾸면 24가 나오는데 이 값은 실제 값인 32와 다릅니다. ㅜㅜ

그래서 일단 이슈로 남기되 근시일 내에 수정되기를 바라는 것은 어려워 보입니다.

@efenniht
Copy link
Collaborator Author

rust-lang/rust#63810rust-lang/rust#64588 가 모두 구현되었으므로, nightly에서 해당하는 기능을 모두 구현할 수 있습니다. Gilnaa/memoffset 가 업데이트되거나 nvzqz/static-assertions#22 가 머지되는 대로 이 문제를 해결하도록 합시다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant