llvm-project
f3274a49 - Prepare libcxx and libcxxabi for pointer field protection.

Commit
6 days ago
Prepare libcxx and libcxxabi for pointer field protection. Pointer field protection has the following characteristics: - Pointer fields in RTTI types are unsigned. Signing these fields is unnecessary because PFP is a mechanism for protecting the heap, and the RTTI objects typically live in global variables. Therefore, mark the fields with the no_field_protection to inhibit PFP for these fields. - libcxx's interim trivial relocatability implementation, which memcpy's some non-trivially-copyable objects according to the value of a trait, conflicts with PFP in tagged mode (in which the address of the pointer is used as part of the pointer encoding) by causing such copies to result in a crash in some cases where the object being copied includes a pointer field. These copies are undefined behavior. Therefore, make libcxx's trivially relocatable predicate simply return the value of the trivially copyable trait when PFP in tagged mode is enabled, which results in standards compliant behavior that is accommodated by PFP. Reviewers: philnik777, fmayer, ldionne Pull Request: https://github.com/llvm/llvm-project/pull/151651
Author
pcc pcc
Parents
Loading