summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <npopov@redhat.com>2021-12-17 11:26:39 +0100
committerNikita Popov <nikita.ppv@gmail.com>2021-12-18 18:44:03 +0100
commit79d53096041c05db5f54a0fdf0b0dae4fe48ccec (patch)
treec38a090371cf3c3d23a67c5fd7114277d396b6d1
parent16d8a91d511b0e90391bcb20b8c67036071d9392 (diff)
downloadrust-79d53096041c05db5f54a0fdf0b0dae4fe48ccec.tar.gz
Explicitly set no ELF flags for .rustc section
For a data section, the object crate will set the SHF_ALLOC by default, which is exactly what we don't want. Explicitly set sh_flags to zero to avoid this.
-rw-r--r--compiler/rustc_codegen_ssa/src/back/metadata.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/metadata.rs b/compiler/rustc_codegen_ssa/src/back/metadata.rs
index 1df5540e3b8..7c97143e807 100644
--- a/compiler/rustc_codegen_ssa/src/back/metadata.rs
+++ b/compiler/rustc_codegen_ssa/src/back/metadata.rs
@@ -259,8 +259,15 @@ pub fn create_compressed_metadata_file(
let section = file.add_section(
file.segment_name(StandardSegment::Data).to_vec(),
b".rustc".to_vec(),
- SectionKind::Data,
+ SectionKind::ReadOnlyData,
);
+ match file.format() {
+ BinaryFormat::Elf => {
+ // Explicitly set no flags to avoid SHF_ALLOC default for data section.
+ file.section_mut(section).flags = SectionFlags::Elf { sh_flags: 0 };
+ }
+ _ => {}
+ };
let offset = file.append_section_data(section, &compressed, 1);
// For MachO and probably PE this is necessary to prevent the linker from throwing away the