Emit an error if -Z instrument-xray is not supported
This is somewhat important because LLVM enables the pass based on target architecture, but support by the target OS also matters. For example, XRay attributes are processed by codegen for macOS targets, but Apple linker fails to process relocations in XRay data sections, so the feature as a whole is not supported there for the time being.
This commit is contained in:
parent
8e49c84740
commit
3561dc948c
@ -25,6 +25,8 @@ session_profile_sample_use_file_does_not_exist = file `{$path}` passed to `-C pr
|
|||||||
|
|
||||||
session_target_requires_unwind_tables = target requires unwind tables, they cannot be disabled with `-C force-unwind-tables=no`
|
session_target_requires_unwind_tables = target requires unwind tables, they cannot be disabled with `-C force-unwind-tables=no`
|
||||||
|
|
||||||
|
session_instrumentation_not_supported = {$us} instrumentation is not supported for this target
|
||||||
|
|
||||||
session_sanitizer_not_supported = {$us} sanitizer is not supported for this target
|
session_sanitizer_not_supported = {$us} sanitizer is not supported for this target
|
||||||
|
|
||||||
session_sanitizers_not_supported = {$us} sanitizers are not supported for this target
|
session_sanitizers_not_supported = {$us} sanitizers are not supported for this target
|
||||||
|
@ -71,6 +71,12 @@ pub struct ProfileSampleUseFileDoesNotExist<'a> {
|
|||||||
#[diag(session_target_requires_unwind_tables)]
|
#[diag(session_target_requires_unwind_tables)]
|
||||||
pub struct TargetRequiresUnwindTables;
|
pub struct TargetRequiresUnwindTables;
|
||||||
|
|
||||||
|
#[derive(Diagnostic)]
|
||||||
|
#[diag(session_instrumentation_not_supported)]
|
||||||
|
pub struct InstrumentationNotSupported {
|
||||||
|
pub us: String,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
#[diag(session_sanitizer_not_supported)]
|
#[diag(session_sanitizer_not_supported)]
|
||||||
pub struct SanitizerNotSupported {
|
pub struct SanitizerNotSupported {
|
||||||
|
@ -1589,6 +1589,10 @@ fn validate_commandline_args_with_session_available(sess: &Session) {
|
|||||||
{
|
{
|
||||||
sess.emit_err(errors::SplitDebugInfoUnstablePlatform { debuginfo: sess.split_debuginfo() });
|
sess.emit_err(errors::SplitDebugInfoUnstablePlatform { debuginfo: sess.split_debuginfo() });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if sess.opts.unstable_opts.instrument_xray.is_some() && !sess.target.options.supports_xray {
|
||||||
|
sess.emit_err(errors::InstrumentationNotSupported { us: "XRay".to_string() });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Holds data on the current incremental compilation session, if there is one.
|
/// Holds data on the current incremental compilation session, if there is one.
|
||||||
|
9
tests/ui/instrument-xray/target-not-supported.rs
Normal file
9
tests/ui/instrument-xray/target-not-supported.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
// Verifies that `-Z instrument-xray` cannot be used with unsupported targets,
|
||||||
|
//
|
||||||
|
// needs-llvm-components: x86
|
||||||
|
// compile-flags: -Z instrument-xray --target x86_64-apple-darwin
|
||||||
|
// error-pattern: error: XRay instrumentation is not supported for this target
|
||||||
|
|
||||||
|
#![feature(no_core)]
|
||||||
|
#![no_core]
|
||||||
|
#![no_main]
|
4
tests/ui/instrument-xray/target-not-supported.stderr
Normal file
4
tests/ui/instrument-xray/target-not-supported.stderr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
error: XRay instrumentation is not supported for this target
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
Loading…
Reference in New Issue
Block a user