ARM64

포스트: 14|조회수: 0|ARTIFACT
Items

Posts

14 posts

ARM64 - 프로세스(Process) preempt_disable(), preemption 스케줄(Schedule) 조건 분석

Guillermo Austin Kim|2017년 12월 25일

아래 제 블로그에서 ARM32 아키텍처에서 preempt_disable() 매크로 함수를 호출하면 __irq_svc 벡터에서 svc_preempt 함수를호출하지 않아, preemption이 수행되지 않는다고 확인했어요.http://rousalome.egloos.com/9964816 이번에는 ARM64(Aarch64) 아키텍처에서는 어떤 코드로 구현 되는지 살펴 볼께요. ARM64(Aarch64) 아키텍처는 ARM32 아키텍처와는 다르게 아예 어떤 코드가 실행이 되던 current_thread_info을 읽어올 수 있는 Instruction을 제공해요.코드는 아래와 같은데, "mrs" 명령어로 스택 Top 주소를 가져오네요. current_thread_info()가 호출될 때 속도를 더 빠르게 하기 위

ARM64(Aarch64) - 함수 호출시 Stack Push(스택 푸쉬) 규약

Guillermo Austin Kim|2017년 12월 25일

아래와 같은 콜 스택에서 유저 공간에서 돌던 레지스터 Stack Push와 Exception 발생 시 Stack Push에 대해서 살펴봤어요. 이제는 평상시 함수 호출 시 어떻게 Stack Push를 하는 지 점검하려고 해요. 자 계속 그 동안 다뤄왔던 아래 "rild"란 프로세스의 콜스택에서 msm_ipc_router_sendmsg()-> msm_ipc_router_send_to() 으로 함수가 호출된 후 스택 푸쉬가 어떻게 수행되는 지 점검해볼께요.-000|do_mem_abort()-001|el1_da(asm) -->|exception-002|ch_pop_remote_rx_intent()-003|glink_tx_common()-004|glink_txv()-005|ipc_router_glink

ARM64- 스택 푸쉬(Stack Push) Userspace -> Kernel Space

Guillermo Austin Kim|2017년 12월 25일

유저 스페이스에서 커널 스페이스로 전환하려면 시스템 콜을 호출해야 한다 것은 마르고 닳도록 들었죠?이번에는 ARM64 Architecture에서 EL0 ->EL1로 변환될 시, Stack을 어떻게 Push하는 지 살펴볼께요. "rild"란 프로세스의 콜스택을 예를 들어 볼 께요. 잘 보면, 유저 공간에서 sendto란 시스템 콜을 호출했다는 걸 알 수 있네요.-000|do_mem_abort()-001|el1_da(asm) -->|exception-002|ch_pop_remote_rx_intent()-003|glink_tx_common()-004|glink_txv()-005|ipc_router_glink_xprt_write()-006|msm_ipc_router_write_pkt(inline)-00

ARM64 - Exception 시 Stack Push

Guillermo Austin Kim|2017년 12월 25일

유저 공간에서 시스템 콜을 호출할 때 유저 공간에서 돌던 레지스터를 커널 공간 스택 Bottom Address 근처에 Push하거든요. 이번에는 Exception(Data abort)이 발생했을 때 스택에 어떤 값들을 Push하는 지 점검해 볼께요. 아래는 ch_pop_remote_rx_intent() 함수에서 exception이 발생한 콜스택인데요. Trace32로 잡았어요. 이 때 Stack 정보 좀 살펴볼께요.-000|do_mem_abort()-001|el1_da(asm) -->|exception-002|ch_pop_remote_rx_intent()-003|glink_tx_common()-004|glink_txv()-005|ipc_router_glink_xprt_write()-006|msm_