1.1 ! jmmv 1: [[!template id=project
! 2:
! 3: title="Verification tool for NetBSD32"
! 4:
! 5: contact="""
! 6: [tech-toolchain](mailto:tech-toolchain@NetBSD.org)
! 7: """
! 8:
! 9: mentors="""
! 10: [J&ouml;rg Sonnenberger](mailto:joerg@NetBSD.org)
! 11: """
! 12:
! 13: duration="3 months"
! 14:
! 15: description="""
! 16: NetBSD supports a number of platforms where both 32bit and 64bit execution is possible.
! 17: The more well known example is the i386/AMD64 pair and the other important one is SPARC/SPARC64.
! 18: On this platforms it is highly desirable to allow running all 32bit applications with a 64bit kernel.
! 19: This is the purpose of the netbsd32 compatibility layer.
! 20:
! 21: At the moment, the netbsd32 layer consists of a number of system call stubs and structure definitions written and maintained by hand.
! 22: It is hard to ensure that the stubs and definitions are up-to-date and correct.
! 23: One complication is the difference in alignment rules.
! 24: On i386 uint64_t has a 32bit alignment, but on AMD64 it uses natural (64bit) alignment.
! 25: This and the resulting padding introduced by the compiler can create hard to find bugs.
! 26:
! 27: The goal of this project is to replace the manual labour with an automatic tool.
! 28: This tool should allow both verification / generation of structure definitions for use in netbsd32 code as well as allow generation of system call stubs and conversion functions.
! 29: For this purpose, the [Clang C parser](http://clang.llvm.org) or the [libclang frontend](http://llvm.org/devmtg/2010-11/Gregor-libclang.pdf) can be used to analyse the C code.
! 30: Generated stubs should also ensure that no kernel stack data is leaked in hidden padding without having to resort to unnecessary large memset calls.
! 31: """
! 32: ]]
! 33:
! 34: [[!tag gsoc]]
! 35: [[!tag hard]]
! 36: [[!tag userland]]