diff options
author | Nikita Popov <npopov@redhat.com> | 2021-12-17 11:26:39 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2021-12-18 18:44:03 +0100 |
commit | 79d53096041c05db5f54a0fdf0b0dae4fe48ccec (patch) | |
tree | c38a090371cf3c3d23a67c5fd7114277d396b6d1 | |
parent | 16d8a91d511b0e90391bcb20b8c67036071d9392 (diff) | |
download | rust-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.rs | 9 |
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 |