trans: &CrateTranslation,
outputs: &OutputFilenames) {
- // On Windows, LLVM integrated assembler emits bad stack unwind tables when
- // segmented stacks are enabled. However, unwind info directives in assembly
- // output are OK, so we generate assembly first and then run it through
- // an external assembler.
- if sess.targ_cfg.os == abi::OsWin32 &&
- (sess.opts.output_type == link::output_type_object ||
- sess.opts.output_type == link::output_type_exe) {
+ if sess.no_integrated_as() {
let output_type = link::output_type_assembly;
let asm_filename = outputs.obj_filename.with_extension("s");
link::write::run_assembler(sess, &asm_filename, &outputs.obj_filename);
- // Remove assembly source unless --save-temps was specified
+ // Remove assembly source, unless --save-temps was specified
if !sess.opts.save_temps {
fs::unlink(&asm_filename);
}
pub static use_softfp: uint = 1 << 26;
pub static gen_crate_map: uint = 1 << 27;
pub static prefer_dynamic: uint = 1 << 28;
+pub static no_integrated_as: uint = 1 << 29;
pub fn debugging_opts_map() -> ~[(&'static str, &'static str, uint)] {
~[("verbose", "in general, enable more debug printouts", verbose),
("soft-float", "Generate software floating point library calls", use_softfp),
("gen-crate-map", "Force generation of a toplevel crate map", gen_crate_map),
("prefer-dynamic", "Prefer dynamic linking to static linking", prefer_dynamic),
+ ("no-integrated-as",
+ "Use external assembler rather than LLVM's integrated one", no_integrated_as),
]
}
pub fn prefer_dynamic(&self) -> bool {
self.debugging_opt(prefer_dynamic)
}
+ pub fn no_integrated_as(&self) -> bool {
+ self.debugging_opt(no_integrated_as)
+ }
// pointless function, now...
pub fn str_of(&self, id: ast::Ident) -> @str {