Saturday, 12 September 2015

Calling conventions are hard - Fuzz them!

I am busy implementing the C AMD64 calling conventions in my C compiler suite and have a topic worthy of a post. It is about testing the C ABI (How C programs layout structs and perform function calls).

The old Linux C x86 ABI was relatively simple, to call a function you pushed arguments onto the stack in reverse order and you are done with it. Unfortunately for me, most people now use AMD64 processors, so that is what I need to target first. The AMD64 ABI designers apparently didn't like simple or well specified things (presumably because it would make software engineering too easy), so they created this document to describe the way C structs/arguments are laid out in memory and registers among other things.

I have a few problems with the document, such as a lack of examples, lack of pseudo code for the classification algorithm, and underspecified edge cases. However, regardless of whether my complaints are valid or not, I still need to implement the thing correctly before my compiler can self host. I need a good way to test my implementation...


We have a few C compilers like gcc and clang we can test against, but hand writing interesting test cases is a chore, so I decided to automate it. The general steps are quite simple:

  • Decide how many arguments you want.
  • Decide the types of those arguments.
  • Generate values for the arguments.
  • Decide the return type.
  • Generate a return values.
  • Generate code to do the call and check the values.
The tool is located here here and took an afternoon to write. Here's the end result:

The final step is to write a script to split the caller and callee into two files to test interop when each is compiled by different C compiler.

Bugs found:


  1. I made a AMD64 compiler. I used the stack and pushed arguments. It seems to work. LOL You Jedi Mind Trick CiA agent, LOL. What a lame Jedi Mind Trick.

    1. Hi Terry, I think things are different in TempleOS and Linux. Thanks for the comment.

  2. Nice Website...
    Hey JOIN now and Increase Facebook Likes your profile and websites.
    Increase Facebook Likes and check your website worth worth my websites
    FB Likes and check your website worth Website Value Calculator
    Hot Wallpapers seo tools website
    its may be very beneficial for you also really

  3. Instruments measurement testing is very much popular in several corporate offices. Several intelligent testing instruments are used for intelligent testing. This test helps the employer of any office to judge the mental ability of any individual working in his office. This also helps to understand the cultural and background difference between two employees.

  4. Why not make things exciting with a Milano Formals short dress? Milano Formals new arrival dresses are perfect for all of life's most festive and important events.
    Prom Dresses 2016

  5. Hello!! I'am glad to read the whole content of this topic and am very excited.Thank you.

    gclub online

  6. Thank you for sharing valuable information.



  7. มาเล่น”สล็อต” กันดีกว่า

    เนื่องจากเป็นการเล่นพนันที่ใช้เงินลงทุนน้อย แต่มีโอกาสชนะเดิมพันที่มีทั้งรางวัลเล็กและรางวัลใหญ่ได้เงินเป็นจำนวนมาก ได้ลุ้นระทึก สร้างความเร้าใจตลอดช่วงเวลาที่วงล้อของสล็อตหมุนไป ปัจจุบันปัจจุบันเทคโนโลยีสื่อสารที่ทันสมัย ทำให้ เกมส์สล็อต ได้รับการพัฒนาและยกระดับ จากที่เคยเล่นกันแพร่หลายเฉพาะในสถาน ให้สามารถเล่นกันทางออนไลน์ได้แล้ว

    โดยการเล่นผ่านเว็บไซต์ผู้ให้บริการ ออนไลน์ หรือแอพริเคชั่นบนมือถือ ซึ่งการเล่น เกมสล็อตออนไลน์ ได้รับความนิยมไม่ยิ่งหย่อนไปกว่าการเล่นสล็อตในสถาน หรืออาจจะได้ว่าได้รับความนิยมมากกว่าในสถานก็ว่าได้ เนื่องจากอำนวยสะดวกให้แก่ผู้ที่ชื่นชอบการเล่นสล็อตสามารถเล่นได้ทุกที่ ทุกเวลา ไม่พลาดโอกาสการทำกำไรได้ทั้งวันทั่งคืน ปัจจุบันสล็อตออนไลน์ เป็นหนึ่งในเกมส์พนันออนไลน์ที่ได้รับความนิยมสูงมาก


  8. มาเด้ เป็นยังไง? เป็นส่วนประกอบของสารสกัดที่ได้มาจากธรรมชาติมีทั้งยังวิตามินรวม แร่ เอนเหล้าองุ่นรวมทั้งเชลล์บรรเทา
    เป็นศาสตร์การบำบัดที่มีต้นกำเนิดมาจาก สหพันธ์สาธารณรัฐเยอรมนี โดยกานศึกษาค้นพบของหมอ ซามุเอลฮาเนมัน แก่มากยิ่งกว่า 200
    ปีโดยมีแนวทางบรรเทาว่า (ใช้สิ่งที่คล้ายคลึงกันมารักษาสิ่งที่คล้ายคลึงกัน) หรือการนำเอาสารที่เป็นต้นเหตุของอาการนั้นๆ
    มาเด้ หน้าใส
    ฉีดมาเด้ ที่ไหนดี

  9. Nice and valuable article for reader. I have related topic which is share with you. You can visit my Blog How to generate free eBay gift card code ?