Print this page
crt: Need a position-independent CRT for PIE
- Implement the greatest possible part of the crt1 in C
- Implement SPARC versions of the ASM sections of crt1
- Build crt1 position-independently, minor ASM updates to be position
  independent
- Implement crt1 with the hook expected by modern GCC to support
  profiling, make gcrt1 a symlink for source compatibility (older GCC
  initializes profiling at firsnt use of _mcount if necessary, so
  doesn't need the gcrt)
- Split the CRT out of developer/library/lint into a separate c-runtime package

*** 54,73 **** * not initially so aligned, it will never become so aligned. * * One slightly confusing detail to keep in mind is that the 16-byte * alignment (%esp & 0xf == 0) is true just *before* the call instruction. * The call instruction will then push a return value, decrementing %esp by ! * 4. Therefore, if one dumps %esp at the at the very first instruction in * a function, it will end with a 0xc. The compiler expects this and * compensates for it properly. * * Note: If you change this value, you need to change it in the following * files as well: * * - lib/libc/i386/threads/machdep.c ! * - lib/common/i386/crti.s ! * - lib/common/i386/crt1.s */ #undef STACK_ALIGN #define STACK_ALIGN 16 static void resumecontext(void); --- 54,73 ---- * not initially so aligned, it will never become so aligned. * * One slightly confusing detail to keep in mind is that the 16-byte * alignment (%esp & 0xf == 0) is true just *before* the call instruction. * The call instruction will then push a return value, decrementing %esp by ! * 4. Therefore, if one dumps %esp at the very first instruction in * a function, it will end with a 0xc. The compiler expects this and * compensates for it properly. * * Note: If you change this value, you need to change it in the following * files as well: * * - lib/libc/i386/threads/machdep.c ! * - lib/crt/i86/crti.s ! * - lib/crt/i86/crt1.s */ #undef STACK_ALIGN #define STACK_ALIGN 16 static void resumecontext(void);