pub fn add_rlib(&mut self, rlib: &Path, name: &str,
lto: bool) -> io::IoResult<()> {
let object = format!("{}.o", name);
- let bytecode = format!("{}.bc.deflate", name);
+ let bytecode = format!("{}.bytecode.deflate", name);
let mut ignore = vec!(bytecode.as_slice(), METADATA_FILENAME);
if lto {
ignore.push(object.as_slice());
// For LTO purposes, the bytecode of this library is also inserted
// into the archive.
+ // Note that we make sure that the bytecode filename in the archive is always at least
+ // 16 bytes long by adding a 16 byte extension to it. This is to work around a bug in
+ // LLDB that would cause it to crash if the name of a file in an archive was exactly
+ // 16 bytes.
let bc = obj_filename.with_extension("bc");
- let bc_deflated = obj_filename.with_extension("bc.deflate");
+ let bc_deflated = obj_filename.with_extension("bytecode.deflate");
match fs::File::open(&bc).read_to_end().and_then(|data| {
fs::File::create(&bc_deflated)
.write(match flate::deflate_bytes(data.as_slice()) {
let archive = ArchiveRO::open(&path).expect("wanted an rlib");
debug!("reading {}", name);
let bc = time(sess.time_passes(),
- format!("read {}.bc.deflate", name).as_slice(),
+ format!("read {}.bytecode.deflate", name).as_slice(),
(),
|_| {
- archive.read(format!("{}.bc.deflate",
+ archive.read(format!("{}.bytecode.deflate",
name).as_slice())
});
let bc = bc.expect("missing compressed bytecode in archive!");