2012-02-01 26 views
7

Theo this article gcc sử dụng một số định dạng trung gian trước khi tạo mã. Tôi đọc rằng định dạng GIMPLE sử dụng ba mã địa chỉ, có vẻ là ngôn ngữ trung gian dễ sử dụng nhất. Nhưng tôi cần một số chi tiết hơn, vì tôi cần xây dựng một công cụ có thể lấy mã trung gian và chèn một số mã vào nó trước khi tạo mã cuối cùng.Chơi với định dạng trung gian của gcc

Đối với điều này, trước tiên tôi cần phải biết làm thế nào tôi thậm chí có thể tạo mã định dạng GIMPLE và lưu nó vào một tệp. Vì vậy, tôi đang tìm một số tài liệu và ví dụ. Ngoài ra, nếu có ai đó đã làm việc với những điều như vậy, tôi có thể biết sự phức tạp của nhiệm vụ này, đó là để chèn một số mã vào mã trung gian?

+2

Đây là một liên kết, http://gcc.gnu.org/wiki/GimpleFrontEnd – MetallicPriest

+0

Một ví dụ điển hình là http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gccint/GIMPLE-Example.html – MetallicPriest

+0

nếu bạn đang tìm cách tạo mã, bạn có thể xem llvm. Ít nhất đó là tài liệu tốt hơn nhiều. –

Trả lời

13

Bạn có thể thấy việc viết một plugin cho GCC dễ dàng hơn, cho phép bạn nối thế hệ GIMPLE và thay đổi nó trong GCC, nên giảm thời gian ngừng lưu, chỉnh sửa sau đó thử trình biên dịch từ biểu mẫu GIMPLE. MELT là một plugin như vậy (mặc dù nó cung cấp cách nhiều hơn là chỉ thay đổi các biểu diễn cấp thấp hơn). Ngoài ra còn có một PDF here trên các plugin thay đổi GIMPLE.

Khác, bạn có thể xem here để biết thông tin về cách GIMPLE của GCC hoạt động. Về việc bán phá giá GIMPLE ra:

Bạn có thể yêu cầu kết xuất biểu diễn dạng GIMPLE với cờ -fdump-tree-gimple.

+10

Tôi là nhà phát triển chính của MELT, và tôi đã thêm một vài ngày trước các trang hướng dẫn mới trên http://gcc-melt.org/GCC-MELT-HiPEAC2012.pdf (cũng có các nội dung khác của http://gcc-melt.org/ ...) –

5

Bạn có thể dễ dàng tạo biểu diễn GIMPLE của bất kỳ tệp nào bằng cờ -fdump-tree-gimple.

Nếu bạn muốn viết một plugin, thì bạn có thể quan tâm đến cách chuyển công việc trên GCC. Bạn có thể thấy đầu ra của từng vượt qua với cờ có dạng:

-fdump-<ir>-<passname> 

nơi ir có thể là:

  • tree: Intraprocedural đi trên GIMPLE
  • ipa: Interprocedural đi trên GIMPLE
  • rtl: Vé vào hệ thống trên RTL

Sử dụng <passname> = all để xem tất cả các bãi, ví dụ: -fdump-ipa-all.

-1

Tôi đã thử cờ -fdump-tree-gimple. Nó chỉ hoạt động cho ngôn ngữ C/C++ và không cho các ngôn ngữ khác như Java, Ada, Fortran và Objective-C)

+2

Câu hỏi được gắn thẻ C. Vì vậy, các ngôn ngữ khác không có liên quan. – Mysticial

Các vấn đề liên quan