New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MIR] Add Storage{Live,Dead} statements to emit llvm.lifetime.{start,end}. #35409

Merged
merged 2 commits into from Aug 14, 2016
Jump to file or symbol
Failed to load files and symbols.
+28 −26
Diff settings

Always

Just for now

Viewing a subset of changes. View all
Prev

Get rid of the .note interpretation of rustc dylib metadata.

  • Loading branch information...
eddyb committed Aug 14, 2016
commit 1bb14445160329c2ca5ff9c202e791ca0098d944
@@ -867,34 +867,29 @@ fn get_metadata_section_imp(target: &Target, flavor: CrateFlavor, filename: &Pat
}
pub fn meta_section_name(target: &Target) -> &'static str {
// Historical note:
//
// When using link.exe it was seen that the section name `.note.rustc`
// was getting shortened to `.note.ru`, and according to the PE and COFF
// specification:
//
// > Executable images do not use a string table and do not support
// > section names longer than 8 characters
//
// https://msdn.microsoft.com/en-us/library/windows/hardware/gg463119.aspx
//
// As a result, we choose a slightly shorter name! As to why
// `.note.rustc` works on MinGW, that's another good question...
if target.options.is_like_osx {
"__DATA,__note.rustc"
} else if target.options.is_like_msvc {
// When using link.exe it was seen that the section name `.note.rustc`
// was getting shortened to `.note.ru`, and according to the PE and COFF
// specification:
//
// > Executable images do not use a string table and do not support
// > section names longer than 8 characters
//
// https://msdn.microsoft.com/en-us/library/windows/hardware/gg463119.aspx
//
// As a result, we choose a slightly shorter name! As to why
// `.note.rustc` works on MinGW, that's another good question...
".rustc"
"__DATA,.rustc"
} else {
".note.rustc"
".rustc"
}
}
pub fn read_meta_section_name(target: &Target) -> &'static str {
if target.options.is_like_osx {
"__note.rustc"
} else if target.options.is_like_msvc {
".rustc"
} else {
".note.rustc"
}
pub fn read_meta_section_name(_target: &Target) -> &'static str {
".rustc"
}
// A diagnostic function for dumping crate metadata to an output stream
View
@@ -2250,10 +2250,17 @@ fn write_metadata(cx: &SharedCrateContext,
};
unsafe {
llvm::LLVMSetInitializer(llglobal, llconst);
let name =
let section_name =
cx.tcx().sess.cstore.metadata_section_name(&cx.sess().target.target);
let name = CString::new(name).unwrap();
llvm::LLVMSetSection(llglobal, name.as_ptr())
let name = CString::new(section_name).unwrap();
llvm::LLVMSetSection(llglobal, name.as_ptr());
// Also generate a .section directive to force no
// flags, at least for ELF outputs, so that the
// metadata doesn't get loaded into memory.
let directive = format!(".section {}", section_name);
let directive = CString::new(directive).unwrap();
llvm::LLVMSetModuleInlineAsm(cx.metadata_llmod(), directive.as_ptr())
}
return metadata;
}
ProTip! Use n and p to navigate between commits in a pull request.