본문으로 건너뛰기

© 2026 Molayo

GeekNews헤드라인2026. 06. 02. 09:24

QBE - 컴파일러 백엔드: 버전 1.3

요약

컴파일러 백엔드인 QBE 버전 1.3 업데이트에 대한 분석입니다. 새로운 extern 키워드 지원을 통해 TLS 및 공유 라이브러리 접근성이 향상되었으며, OS 개발 및 다양한 플랫폼 지원 가능성이 확대되었습니다.

핵심 포인트

  • 새로운 extern 키워드로 TLS 및 공유 라이브러리 지원 강화
  • Windows 지원 추가 및 다양한 운영체제 활용성 증대
  • 자체 호스팅 OS 개발을 위한 PIC/PIE 컴파일러로서의 가치
  • 공유 객체 및 동적 심볼 접근을 위한 컴파일러 지원 필요성

오래 진행 중인 취미 프로젝트로 TRIPOS/Amiga Exec 스타일의 작은 OS를 만들고 있음
메모리 보호가 없고, 평면 메모리 맵(flat memory map)이며, 메시지 전달도 포인터를 넘기는 수준임
이런 시스템을 자체 호스팅(self-hosting)하려면 PIE/PIC를 만들 수 있는 작은 컴파일러가 훨씬 편함. Amiga 스타일 라이브러리는 당연히 PIC(Position Independent Code)여야 하고, 실행 파일을 공유 메모리 맵 어딘가에 올릴 때 로드 시점 패치를 많이 하지 않아도 되는 점도 좋음
GCC와 Clang은 가능하지만 너무 거대함. 마지막으로 확인했을 때 TCC는 PIC를 못 했고, QBE를 더 살펴봐야겠음

나도 평면 메모리 맵, 전부 PIE, 시스템 호출이 함수 호출인 OS인 Ashet OS를 만들고 있음
이미 꽤 진척됐고, 여러 플랫폼을 지원함
곧 자체 호스팅까지 가기는 어려울 듯함. Thumb-2 코드 생성이 필요하고, 이를 돌릴 방법이 사실상 직접 컴파일러를 쓰는 것뿐이기 때문임. 커널 코드를 제외하고 사용 가능한 RAM이 8MB뿐이라는 제약이 있음
ELF 파일을 변환해 만드는 자체 실행 파일 형식 .ashex를 사용함. 이 과정에서 사실상 절대 점프 하나인 특수 섹션을 소비하고, 앱 로더가 이를 실제 시스템 호출 주소로 다시 씀
평면 메모리 시스템의 어려움은 공유 객체를 깔끔하게 지원하는 데 있음. 서로 다른 애플리케이션 사이에서 코드를 공유하려면 모든 동적 심볼 접근이 레지스터에 저장된 변수를 통해 이뤄지도록 컴파일러 지원이 필요함

새 extern 키워드가 생겨서 정말 반가움
릴리스 노트에는 없지만 이것이 thread와도 함께 동작해서 initial-exec TLS(Thread Local Storage)를 가능하게 함. 다른 공유 라이브러리에 정의된 스레드 로컬 전역 변수에 접근할 때 필요하며, FreeBSD의 ctype.h에 필요함 extern은 macOS나 Haiku 같은 플랫폼에서 공유 라이브러리의 일반 전역 변수, 예를 들어 stderr에 접근할 때도 필요함. 이제 QBE 기반 컴파일러가 훨씬 더 많은 운영체제와 사용 사례를 지원할 수 있게 됨
Roland의 성능 개선도 매우 고마움. 정말 훌륭한 작업을 했음

이걸 제대로 읽은 게 맞다면 정식 Windows 지원이 들어간 건가?
QBE의 역사적이면서도 현재까지 큰 제약 중 하나가 이 부분 아니었나? 정말 보기 좋음

AI 자동 생성 콘텐츠

본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0