Skip to content

[RISC‐V 64] 0. 포팅 작업 순서

최기철 edited this page Aug 27, 2023 · 4 revisions

1. RISC-V 환경에서 빌드 성공시키기

  • 기능이 정상 동작하지 않더라도 ./configuremake 명령어 실행 시 빌드가 완료되어야 함

  • uftrace를 RISC-V 환경에서 실행해볼 수 있는 환경을 구축하는 것이 첫 목표


2. mcount.S 어셈블리 코드 구현하기

  mcount.S의 mcount_return 과 _mcount 또는 mcount (이하 mcount 함수로 단어 통일) 어셈블리 코드를 구현

2-1. mcount 함수 구현

  • mcount 함수의 최종 목표는 c언어로 된 mcount_entry 함수가 호출되어 정상적인 인자를 받아갈 수 있어야 함
    • libmcount/mcount.c 파일의 int mcount_entry(…) 함수를mcount.S에서 호출

    • mcount_entry 함수의 인자인 struct mcount_regs *parent_loc를 채워넣는 코드 작성

    • mcount_entry 함수 내부에서 넘겨받은 인자가 정상적으로 출력되는지 확인

2-2. mcount_return 함수 구현

  • mcount_return 함수의 최종 목표는 호출된 함수가 종료된 이후 Return Address로 넘어갈 수 있어야 함
    • mcount_exit 함수가 잘 호출되는지 확인하는 부분

    • 이 단계까지 마무리 되면 mcount 함수를 사용한 추적은 성공한 것으로 볼 수 있음


3. argument handling을 위해 mcount-support.c 구현 (현재 단계)

  • 해당 단계는 uftrace 실행 시 타겟 프로그램의 함수의 인자 및 리턴 값을 출력할 수 있는 코드를 구현하는 단계

4. PLT Hooking을 위해 plthook.S 구현

  • 해당 단계는 PLT Hooking 동작을 위해 구현하는 단계

5. uftrace의 나머지 기능 포팅 작업 또는 동작 검증 작업 진행

  • 해당 단계까지 왔다면, 컴파일 시 -pg 옵션을 주고 컴파일 한 프로그램을 추적하는 기본적인 Tracing은 성공

5-1. 나머지 기능 포팅

  • Dynamic Tracing (Dynamic.S를 비롯한 코드 구현 필요)

  • ......

5-2. 동작 검증 작업

  • 기존 아키텍처에서 정상적으로 동작하였던 기능이 RISC-V 환경에서도 정상적으로 동작하는지 테스트