Compare commits

...
2 Commits
Author SHA1 Message Date
weaselbot 0b12a037c4 Correct rationale in simd_x86_64.S comment
The SIMD operations are written in assembly because loading and
operating on indeterminate values is UB in C++ but well-defined in
assembly. msan not tracking the loads is a side effect, not the reason.
Closes #71
2026-08-03 02:37:18 +00:00
andrew 5c16b8ee90 Add .note.gnu.property section for CET/CFI to simd_x86_64.S
The assembly file was missing the GNU property note that records
control-flow integrity (CET) support, causing hardening-check to
report 'Control flow integrity: no, not found!'.  Add the note
matching what clang emits with -fcf-protection.
2026-08-02 22:31:56 -04:00
+15 -3
View File
@@ -1,7 +1,8 @@
// SIMD operations on potentially-indeterminate Node16::index[16] bytes. // SIMD operations on potentially-indeterminate Node16::index[16] bytes.
// Written in assembly so msan doesn't track the loads. The caller is // Written in assembly because loading and operating on indeterminate values
// responsible for masking the returned bitfield to [0, numChildren) before // is UB in C++ but well-defined in assembly. (A side effect is that msan
// using it. // doesn't track the loads.) The caller is responsible for masking the
// returned bitfield to [0, numChildren) before using it.
// //
// All functions return a 16-bit bitmask in %eax (bit i set = condition true // All functions return a 16-bit bitmask in %eax (bit i set = condition true
// at index i). The upper 16 bits of %eax are zero. // at index i). The upper 16 bits of %eax are zero.
@@ -71,4 +72,15 @@ mask_in_range_16:
ret ret
.size mask_in_range_16, .-mask_in_range_16 .size mask_in_range_16, .-mask_in_range_16
.section .note.gnu.property,"a",@note
.p2align 3, 0x0
.long 4
.long 16
.long 5
.asciz "GNU"
.long 0xc0000002
.long 4
.long 0x3
.p2align 3, 0x0
.section .note.GNU-stack,"",@progbits .section .note.GNU-stack,"",@progbits