forked from project-oak/hafnium-verification
-
Notifications
You must be signed in to change notification settings - Fork 4
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
Oxidize Hafnium's initialization sequence #45
Closed
Closed
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…afe wrapper functions instead.
…valuates condition expression in do-while loop)
jeehoonkang
reviewed
Sep 7, 2019
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 일단 이정도로 메시지 남깁니다..
- 코멘트 반영해주시고, 조만간 다시 코멘트 더 남기겠습니다.
jeehoonkang
reviewed
Sep 8, 2019
…mber fields on MemIter.
PR에 달린 코멘트가 너무 많으므로, 새롭게 PR을 만들도록 하겠습니다. |
jeehoonkang
pushed a commit
that referenced
this pull request
Sep 11, 2019
jeehoonkang
pushed a commit
that referenced
this pull request
Sep 11, 2019
jeehoonkang
pushed a commit
that referenced
this pull request
Sep 11, 2019
efenniht
added a commit
to efenniht/hafnium-verification
that referenced
this pull request
Nov 13, 2019
efenniht
added a commit
to efenniht/hafnium-verification
that referenced
this pull request
Nov 13, 2019
efenniht
added a commit
to efenniht/hafnium-verification
that referenced
this pull request
Nov 13, 2019
efenniht
added a commit
that referenced
this pull request
Nov 26, 2019
efenniht
added a commit
that referenced
this pull request
Nov 26, 2019
efenniht
added a commit
that referenced
this pull request
Nov 26, 2019
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hafnium의 초기화 코드를 모두 Rust로 포팅하였습니다.
main.c
,load.c
,fdt.c
,fdt_handler.c
main.rs
라는 이름은 일반적으로 binary를 만드는 crate일 때 사용되는 특별한 이름입니다. 따라서main.rs
대신init.rs
라는 파일로main.c
의 내용을 포팅했습니다.layout.c
,layout_fake.c
,cpu.c
,dlog.c
,panic.c
,plat.c
인데, 이것들은 모두 사연이 있어서 더 이상 포팅하지 않을 파일들입니다.{layout, layout_fake}.c
: Hafnium이 링크될 때 저장되는 섹션 별 주소를 읽는 함수들입니다. 완전히 arch-specific 하다고 말하기는 어렵지만 그렇다고 안 그렇다고 하기에도 어려운 코드입니다.{dlog, panic}.c
: variadic arguments를 받는 함수들이 남아 있습니다.cpu.c
: 부팅 과정에서 스택을 초기화하고 부팅 CPU ID를 저장하기 위해서 일회용의 static 변수가 있습니다. (Initializing static variablecpus
by raw pointer causes error in Rust #6)plat.c
: 플랫폼별로 달라질 수 있는 함수들이 선언되어 있습니다.#pragma weak
가 달려 있어서 다른 선언에 의해 덮어쓰일 수 있는데 (실제로project/reference/linux_fdt/plat.c
에서 덮어씁니다), Rust에는 해당하는 지시자가 없습니다.u64
와usize
가 혼재되어 있는데, 이것의 추상화 레벨을 명확히 만들어서 그 레벨을 넘어갈 때 모두 type cast가 일어나도록 하는 것입니다.MemoryManager
,CpuManager
,VmManager
,ApiManager
new
method를 호출하도록 합니다.singleton.rs
.vm_manager
를 전역 변수VM_MANAGER
에 할당하는 것이 맞지만,Vm
은 초기화할 때 자기 자신의 주소를 필요로 하므로Vm
이 초기화된 이후에는VmManager
가 이동할 수 없습니다. Doubly circular linked list 가 이 모든 일의 원흉입니다.CpuManager
를 만들면서, C 파일에서 관리하던Cpu
의 배열을 Rust로 옮겼습니다.cpus
by raw pointer causes error in Rust #6 과 관련되어서 그 당시에 실패한 작업인데 이번에는 qemu+gdb로 디버깅하는 법을 익혀서 성공했습니다!Cpu
에 기록된 스택을 사용해야 하므로 딱 하나의Cpu
만 초기화하도록cpu.c
를 수정하였습니다.ApiManager
를 만들었으므로 이제 여기에 Modeling an object forapi.rs
? #44 를 해결하면 됩니다.api_init
,cpu_module_init
,vcpu_init
,vcpu_set_cpu
,vm_find
.hf_vcpu_run_return_encode
함수를 삭제하고, 관련 유닛 테스트 코드를 Rust로 옮겼습니다.cargo test
로 실행할 수 있고, 이 명령을 kokoro test가 돌 때 같이 실행되도록 추가했습니다.libhfo2.a
가 만들어질 때 실제 arch-dependent (fake) 함수들이 같이 link되지 않아서입니다. fake 함수들을 포팅하면 되겠으나 그것은 너무 일이 커지므로 일단 그대로 두었습니다.