문제

어떻게 gcc 구현한 스택을 줄이기 위한 C++리눅스에서 예외?특히,그것은 어떻게 알고 있는 소멸자 때 호출을 줄이기와 프레임(즉,어떤 종류의 정보를 저장하고 그것은 어디에 저장되는)?

도움이 되었습니까?

해결책

섹션 참조 6.2 의 x86_64ABI.이 정보는 인터페이스의 기초 데이터.이것은 또한 독립적인 C++및 형태로 저장되어 있습니다 다른 목적으로 사용될 뿐입니다.

거기에는 주로 두 섹션의 엘프 바이너리로 방출되는 gcc 관심있는 예외 처리를 위해.그 .eh_frame.gcc_except_table.

.eh_frame 다음과 같은 난쟁이 형식으로(디버깅는 형식으로 제공으로 재생할 때 당신 gdb 를 사용하).그것은 정확히 동일한 형식으로 .debug_frame 섹션에서 방출되는 컴파일하는 경우 -g.기본적으로 포함하는 데 필요한 정보가 다시 컴퓨터 상태 레지스터와 스택에서 어떤 시점까지 높은 호출 스택입니다.보 난쟁이 표준 dwarfstd.org 이에 대한 자세한 내용은.

.gcc_except_table 예외에 대한 정보를 포함 처리"랜딩 패드"위의 처리기입니다.이 필요로하는 경우 푸.불행하게도 이 섹션은 잘 설명되어 있습니다.유일한 정보의 조각을 나는 할 수 있었던 이삭에서 온 gcc 메일링 리스트가 있습니다.특히 볼 이 게시물

나머지 부분의 정보는 다음이 무엇 실제 코드는 해석하는 정보에서 이러한 데이터는 섹션이 있습니다.관련 코드에서 생활 libstdc++및 libgcc.나를 기억할 수 없는 순간에 있는 조각에서 살다.통역에 대한 왜소화 정보 프레임에서 찾을 수 있습 gcc 소스 코드 파일에서 gcc/편-dw.c

다른 팁

많은 없 문서 현재 사용할 수 있는,그러나 기본적인 시스템는 GCC 변환 try/catch 블록 호출 기능 다음 링크 라이브러리에 필요한 런타임 지원 (문서에 대해 트리인 건물 코드 을 포함한"라는 문장을 던지는 예외 없이 직접 표현에 GIMPLE 때문에,그것에 의해 구현되는 함수를 호출").

불행하게도 나는 익숙하지 않으로 이러한 기능과 당신에게 말할 수 없이 보면 무엇을(아닌 다른 근원에 대한 libgcc--포함하는 예외 처리 런타임).

가 있"예외 처리를 위해 새내기"문서를 사용할 수 있다.

이 보 Itanium,아마도 구현하는 것은 비슷한 대 86: 예외 처리 ABI

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top