Rollup merge of #123649 - maurer:kcfi-v0, r=compiler-errors

KCFI: Use legal charset in shim encoding

To separate `ReifyReason::FnPtr` from `ReifyReason::VTable`, we hyphenated the shims. Hyphens are not actually legal, but underscores are, so use those instead.

r? `@compiler-errors`
This commit is contained in:
Matthias Krüger 2024-04-09 06:02:24 +02:00 committed by GitHub
commit 55e0668fea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 32 additions and 2 deletions

View File

@ -45,8 +45,8 @@ pub(super) fn mangle<'tcx>(
ty::InstanceDef::ThreadLocalShim(_) => Some("tls"), ty::InstanceDef::ThreadLocalShim(_) => Some("tls"),
ty::InstanceDef::VTableShim(_) => Some("vtable"), ty::InstanceDef::VTableShim(_) => Some("vtable"),
ty::InstanceDef::ReifyShim(_, None) => Some("reify"), ty::InstanceDef::ReifyShim(_, None) => Some("reify"),
ty::InstanceDef::ReifyShim(_, Some(ReifyReason::FnPtr)) => Some("reify-fnptr"), ty::InstanceDef::ReifyShim(_, Some(ReifyReason::FnPtr)) => Some("reify_fnptr"),
ty::InstanceDef::ReifyShim(_, Some(ReifyReason::Vtable)) => Some("reify-vtable"), ty::InstanceDef::ReifyShim(_, Some(ReifyReason::Vtable)) => Some("reify_vtable"),
ty::InstanceDef::ConstructCoroutineInClosureShim { .. } ty::InstanceDef::ConstructCoroutineInClosureShim { .. }
| ty::InstanceDef::CoroutineKindShim { .. } => Some("fn_once"), | ty::InstanceDef::CoroutineKindShim { .. } => Some("fn_once"),

View File

@ -0,0 +1,30 @@
// Check KCFI extra mangling works correctly on v0
//@ needs-sanitizer-kcfi
//@ no-prefer-dynamic
//@ compile-flags: -C panic=abort -Zsanitizer=kcfi -C symbol-mangling-version=v0
//@ build-pass
trait Foo {
fn foo(&self);
}
struct Bar;
impl Foo for Bar {
fn foo(&self) {}
}
struct Baz;
impl Foo for Baz {
#[track_caller]
fn foo(&self) {}
}
fn main() {
// Produces `ReifyShim(_, ReifyReason::FnPtr)`
let f: fn(&Bar) = Bar::foo;
f(&Bar);
// Produces `ReifyShim(_, ReifyReason::Vtable)`
let v: &dyn Foo = &Baz as _;
v.foo();
}