source

gcc용 코드 생성기 백엔드를 어떻게 작성합니까?

manysource 2023. 6. 9. 22:07

gcc용 코드 생성기 백엔드를 어떻게 작성합니까?

저는 저만의 (매우 간단한) 바이트 코드 언어와 이를 실행할 가상 머신을 만들었습니다.잘 작동하지만 이제 gcc(또는 자유롭게 사용할 수 있는 다른 컴파일러)를 사용하여 일반 c 프로그램에서 이 기계에 대한 바이트 코드를 생성하고 싶습니다.그래서 문제는 어떻게 gcc를 수정하거나 확장하여 그것이 나만의 바이트 코드를 출력할 수 있는가 하는 것입니다.참고로 저는 제 바이트 코드를 기계 코드로 컴파일하고 싶지 않습니다. 저는 c-코드를 (나만의) 바이트 코드로 "컴파일"하고 싶습니다.

저는 이것이 잠재적으로 큰 질문이라는 것을 알고 있으며, 가장 좋은 대답은 "gcc 소스 코드를 보러 가라"는 것일 수 있습니다.이 일을 시작하는 방법에 대한 도움이 필요합니다.gcc에 사용자 지정 생성기를 추가하는 과정을 설명할 수 있는 이 주제에 대한 기사나 책이 있을 것이라고 생각하지만, 구글 검색을 통해 아무것도 찾지 못했습니다.

나는 우리가 이전에 설계한 8비트 프로세서로 gcc를 포팅하느라 바쁩니다.우리 기계는 8비트이고 어큐뮬레이터가 하나밖에 없기 때문에 저는 좀 어려운 작업이지만, 당신이 더 많은 리소스를 가지고 있다면 쉬워질 수 있습니다.다음은 gcc 4.9로 관리하고 cygwin을 사용하는 방법입니다.

  1. gcc 4.9 소스 다운로드
  2. 아키텍처 이름 추가config.sub250라인 주변에서 찾기# Decode aliases for certain CPU-COMPANY combinations.해당 목록에 추가| my_processor \
  3. 동일한 파일에서 다음을 찾습니다.# Recognize the basic CPU types with company name.목록에 자신을 추가합니다.| my_processor-* \
  4. 파일 검색gcc/config.gcc${target} 파일에서 줄 880 주위에 있는 경우를 찾습니다. 다음 방법으로 자신을 추가하십시오.

      ;;
    my_processor*-*-*)
      c_target_objs="my_processor-c.o"
      cxx_target_objs="my_processor-c.o"
      target_has_targetm_common=no
      tmake_file="${tmake_file} my_processor/t-my_processor"
      ;;
    
  5. 폴더 만들기gcc-4.9.0\gcc\config\my_processor
  6. 기존 프로젝트에서 파일을 복사하여 편집하거나 처음부터 직접 파일을 만들 수 있습니다.우리의 프로젝트에서 우리는 msp430 프로젝트의 모든 파일을 복사하고 편집했습니다.
  7. 다음 파일이 있어야 합니다(일부 파일이 필수는 아님).
    • my_processor.c
    • my_processor.h
    • my_processor.md
    • my_processor.opt
    • my_processor-c.c
    • my_processor.def
    • my_processor-protos.h
    • constraints.md
    • predicates.md
    • README.txt
    • t-my_processor
  8. 길을 내다gcc-4.9.0/build/object
  9. 달려.../../configure --target=my_processor --prefix=path for my compiler --enable-languages="c"
  10. 만들다
  11. 설치를 시키다
  12. 많은 조사와 디버깅을 합니다.
  13. 즐겁게 보내세요.

그것은 힘든 일입니다.

예를 들어, 나는 또한 나만의 바이트 코드로 나만의 "아키텍처"를 설계하고 그것을 위해 GCC로 C/C++ 코드를 생성하기를 원했습니다.이것이 제가 만드는 방법입니다.

  1. 처음에 당신은 GCC의 매뉴얼에서 이식에 대한 모든 것을 읽어야 합니다.
  2. 또한 GCC Internals를 꼭 읽어보시기 바랍니다.
  3. 컴파일러에 대한 많은 내용을 읽어 보십시오.
  4. 또한 이 질문과 여기에 있는 답을 참조하십시오.
  5. 자세한 내용은 Google에서 확인하십시오.
  6. 여러분이 정말로 준비가 되었는지 스스로에게 물어보세요.
  7. 아주 좋은 카페 기계를 가지고 있어야 합니다...당신은 그것이 필요할 것입니다.
  8. 컴퓨터 종속 파일을 gcc에 추가하기 시작합니다.
  9. 호스트 간 대상 방식으로 gcc를 컴파일합니다.
  10. Hex-Editor에서 코드 결과를 확인합니다.
  11. 더 많은 테스트를 수행합니다.
  12. 이제 자신만의 아키텍처로 즐기십시오.d

완료되면 OS 의존 라이브러리 없이 corc++만 사용할 수 있습니다(현재 아키텍처에서 실행 중인 OS가 없습니다). 이제 크로스 컴파일러로 다른 많은 라이브러리를 컴파일하여 좋은 프레임워크를 만들어야 합니다.

PS: LLVM(Clang)이 이식하기 더 쉽습니다...아마도 당신은 거기서 시작하고 싶나요?

그렇게 어렵지는 않습니다.시스템과 유사하다면 RTL(?)을 수정합니다.make compile test부트스트랩 단계를 거치고, 작동할 때까지 헹구고 반복합니다.당신은 아마도 실제 코드를 작성할 필요가 없고 기계 정의 템플릿만 작성할 수 있습니다.

언급URL : https://stackoverflow.com/questions/10617215/how-to-write-your-own-code-generator-backend-for-gcc