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

[홍한석] 컨트리뷰톤 최종보고서; DWARF 정보 지원-DW_TAG_pointer_type 지원하기 #60

Open
flavono123 opened this issue Nov 17, 2017 · 0 comments

Comments

@flavono123
Copy link

flavono123 commented Nov 17, 2017

Overview

  1. uftrace 튜토리얼과 기존 문서로 실습/공부하던 중, -A 플래그의 인자 argspec 중 구조체 필드가 지원 되었으면 하는 새로운 기능 추가 즉, 구조체 필드도 uftrace replay로 출력, 에 대한 아이디어가 생겼습니다.
  2. 그와 관련해 소스 코드 리뷰와 기존 이슈를 추적하던 도중 진행 중이던 DWARF 정보 추출(extract argspec from DWARF debug info#174)이란 기존 작업 브랜치가 있음을 확인했고, 구조체 필드보다 상대적으로 간단한 enum 이름 출력 기능으로 아이디어를 선회했습니다.
  3. 그러나, 해당 기능은 메인테이너 남형님께서 개발하고 계심을 듣게 되었고, 저는 기존 함수 포인터 출력에 관해서 DWARF 정보로 자동으로 argspec을 만드는 패치를 진행했습니다.
  4. 하지만 로직 상 낭비가 있다는 피드백을 받은 후 이를 모든 포인터 타입(DW_TAG_pointer_type)에 대해 지원하는 것으로 개선하고 있습니다.

Gitter 대화

-A 플래그 인자 argspec에서 부동소수형 사용 중 문제와 해결

float 타입 인자와 반환 값 출력에서 문제를 발견해 질문했습니다:
uftrace_uftrace_-_gitter

이에 대해 메인테이너로부터 해결 방법과 현재 argspec을 정리한다는 답변을 받았습니다:
uftrace_uftrace_-_gitter

그 외

uftrace를 uftrace로 추적하기 위한 커스텀 빌드 과정 중 컴파일 플래그 설정에 대해서도 gitter를 통해 해결했습니다:
uftrace_uftrace_-_gitter

기존 issue 추적과 comments

원하던 기능(enum의 인자 출력 지원) 추가를 진행하다 보니 기존 issue(extract argspec from DWARF debug info#174)에서 이를 다루고 있었습니다:
extract_argspec_from_dwarf_debug_info_ _issue__174_ _namhyung_uftrace

그런데 master 브랜치가 아닌 별도의 브랜치(review/dwarf-argspec-v2)에서 개발 중이라 이를 fetch 하는 질문을 시작으로 해당 issue에 대한 토의(discussion) 했습니다:
extract_argspec_from_dwarf_debug_info_ _issue__174_ _namhyung_uftrace

먼저 함수 포인터 argspec를 자동으로 만들어주는 패치를 진행했습니다:

  1. 별도의 브랜치이다 보니 rebase 작업이 필요했으나, 충돌(conflicts)을 해결하지 못하고 관련 있는 commit(1e2dc9f0b29291)만 찾아 이를 cherry-pick 하는 선행 작업이 필요했습니다:
### from the `origin/review/dwarf-argspec-v2` branch ###
$ git cherry-pick 1e2dc9f5
$ git cherry-pick 0b29291d
### ... do my patches ... ###
  1. 제가 한 패치(commit)은다음과 같습니다:
$ cat util/dwarf.c
...
static int arg_type_cb(Dwarf_Attribute *attr, void *arg)
...
          case DW_TAG_pointer_type:
               td->fmt = ARG_FMT_FUNC_PTR;
               done = true;
               continue;
...
static void add_type_info(char *spec, size_t len, Dwarf_Die *die, void *arg)
...
       case ARG_FMT_FUNC_PTR:
               strcat(spec, "/p");
...

그리고 origin/master와의 Compare Changes입니다.

  1. 그러나 모든 포인터 인자에 대해 함수 포인터 형식을 지정하는 것은 해당 인자가 함수 포인터가 아닐 시 불필요한 코드를 수행한다는 피드백을 듣고 현재 이를 개선하고 있습니다:

extract_argspec_from_dwarf_debug_info_ _issue__174_ _namhyung_uftrace

당장 merge 될 수 없고, 메인테이너의 추가 작업과 master로 rebase 이후의 패치를 기대할 수 있습니다.

컨트리뷰톤 활동 내용 개인 블로그 포스팅

조금 지엽적인 내용에 저만의 언어로 썼지만, 컨트리뷰톤 하며 공부/경험한 내용을 보실 수 있습니다:

@flavono123 flavono123 changed the title [홍한석] 컨트리뷰톤 최종보고서; DWARF 정보 지원 [홍한석] 컨트리뷰톤 최종보고서; DWARF 정보 지원-DW_TAG_pointer_type 지원하기 Nov 17, 2017
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