Make llvm::set_section take a &CStr · rust-lang/rust@3310419 (original) (raw)

1

1

`use std::cell::RefCell;

`

2

``

`-

use std::ffi::CString;

`

``

2

`+

use std::ffi::{CStr, CString};

`

3

3

``

4

4

`use libc::c_uint;

`

5

5

`use rustc_codegen_ssa::traits::{

`

`@@ -292,10 +292,10 @@ pub(crate) fn save_cov_data_to_mod<'ll, 'tcx>(

`

292

292

`.unwrap();

`

293

293

`debug!("covmap var name: {:?}", covmap_var_name);

`

294

294

``

295

``

`-

let covmap_section_name = llvm::build_string(|s| unsafe {

`

``

295

`+

let covmap_section_name = CString::new(llvm::build_byte_buffer(|s| unsafe {

`

296

296

` llvm::LLVMRustCoverageWriteMapSectionNameToString(cx.llmod, s);

`

297

``

`-

})

`

298

``

`-

.expect("Rust Coverage section name failed UTF-8 conversion");

`

``

297

`+

}))

`

``

298

`+

.expect("covmap section name should not contain NUL");

`

299

299

`debug!("covmap section name: {:?}", covmap_section_name);

`

300

300

``

301

301

`let llglobal = llvm::add_global(cx.llmod, cx.val_ty(cov_data_val), &covmap_var_name);

`

`@@ -310,7 +310,7 @@ pub(crate) fn save_cov_data_to_mod<'ll, 'tcx>(

`

310

310

``

311

311

`pub(crate) fn save_func_record_to_mod<'ll, 'tcx>(

`

312

312

`cx: &CodegenCx<'ll, 'tcx>,

`

313

``

`-

covfun_section_name: &str,

`

``

313

`+

covfun_section_name: &CStr,

`

314

314

`func_name_hash: u64,

`

315

315

`func_record_val: &'ll llvm::Value,

`

316

316

`is_used: bool,

`

`@@ -354,9 +354,9 @@ pub(crate) fn save_func_record_to_mod<'ll, 'tcx>(

`

354

354

`` /// - __llvm_covfun on Linux

``

355

355

`` /// - __LLVM_COV,__llvm_covfun on macOS (includes __LLVM_COV, segment prefix)

``

356

356

`` /// - .lcovfun$M on Windows (includes $M sorting suffix)

``

357

``

`-

pub(crate) fn covfun_section_name(cx: &CodegenCx<'_, '_>) -> String {

`

358

``

`-

llvm::build_string(|s| unsafe {

`

``

357

`+

pub(crate) fn covfun_section_name(cx: &CodegenCx<'_, '_>) -> CString {

`

``

358

`+

CString::new(llvm::build_byte_buffer(|s| unsafe {

`

359

359

` llvm::LLVMRustCoverageWriteFuncSectionNameToString(cx.llmod, s);

`

360

``

`-

})

`

361

``

`-

.expect("Rust Coverage function record section name failed UTF-8 conversion")

`

``

360

`+

}))

`

``

361

`+

.expect("covfun section name should not contain NUL")

`

362

362

`}

`