Uninitialized garbage on ia64 can be deadly (2004)
a year ago
- #ia64
- #function-signature
- #debugging
- Calling a function with the wrong signature can lead to serious issues, especially on the ia64 architecture.
- The CreateThread function expects a specific function signature (LPTHREAD_START_ROUTINE), but many mistakenly cast void-returning functions to it.
- On ia64, registers have an extra 'NaT' (Not a Thing) bit, which indicates invalid values, similar to floating-point NaN.
- Speculative execution on ia64 can leave registers in a NaT state, leading to STATUS_REG_NAT_CONSUMPTION exceptions if mishandled.
- Mismatched function signatures or incorrect parameter counts can cause NaT-related crashes, making debugging extremely difficult.
- The ia64 architecture is less forgiving than i386, punishing shortcuts and mismatches that might work elsewhere.