GCC에서 이국적인 부트로더를 사용하는 것이 합리적입니까?

GCC에서 이국적인 부트로더를 사용하는 것이 합리적입니까?

GCC가 현재 특정 기능 및 아키텍처의 버그를 감지하기 위해 사소하지 않은 방식으로 부트스트랩을 수행한다는 증거가 있는 사람이 있습니까? 아니면 적어도 GCC에서 오류를 확인하기 위한 실제 부팅 기술을 찾을 수 있는 일부 문서를 알려 주시겠습니까?

일반 부트로더

  • GCC 버전(X-1)을 사용하여 GCC 버전(X)을 컴파일하고 호출합니다.
  • 느린 바이너리를 사용하는 새로운 컴파일러입니다.
  • 새로운 컴파일러 사용직접 컴파일하고 생성하세요.두번째
  • 두번째빠른 바이너리를 갖춘 새로운 컴파일러입니다.
  • 허락하다두번째직접 컴파일하고 생성하세요.
  • 이때 만약에오류가 없고 결과 실행 파일의 바이너리 덤프가 생성됩니다.두번째그리고그것은 동일해야합니다.

GCC 접근 방식은 또한 개발 중에 사용되는 코드의 기능을 최소한으로 유지하므로 부팅에 성공하면 최소한의 기능 세트에는 버그가 없다는 것을 알 수 있습니다. (단순한 부트스트래핑으로 적용 범위를 늘리기 위해 더 많은 기능을 사용하는 Clang과 반대입니다.)

구성 파일은 최적화 부스트랩을 안내합니다.

  • 사용플래그로 자체 컴파일 -fprofile-generate하고 생성두번째
  • 사용두번째자체 컴파일(프로필 정보 생성)
  • 사용다음을 사용하여 컴파일 -fprofile-use하고 생성합니다.두번째'

  • 사용두번째'플래그로 자체 컴파일 -fprofile-generate하고 생성

  • 사용자체 컴파일(프로필 정보 생성)
  • 사용두번째'다음을 사용하여 컴파일 -fprofile-use하고 생성합니다.씨'

  • 이때 만약에오류가 없고 결과 실행 파일의 바이너리 덤프가 생성됩니다.두번째'그리고씨'그것은 동일해야합니다.

역방향 및 순방향 부트스트래핑

  • GCC 버전(X-1)을 GCC 버전 X로 컴파일하고 생성합니다.
  • 그런 다음 일반 부트로더를 시작합니다.
  • A를 사용하여 GCC 버전 X를 컴파일하고 생성합니다.
  • 정기적으로 안내.

주제에서 벗어남: 누군가 특별한 부트스트랩을 염두에 두고(예: 크로스 플랫폼 빌드) GCC 부트스트랩 그래프를 만들고 부트스트랩이 실패한 위치를 빠르게 확인할 수 있다면 좋을 것 같습니다.

관련 정보