rust/compiler
bors 7168c13579 Auto merge of #120588 - alexcrichton:wasm-rmeta-object, r=wesleywiser,bjorn3
wasm: Store rlib metadata in wasm object files

The goal of this commit is to remove warnings using LLVM tip-of-tree `wasm-ld`. In llvm/llvm-project#78658 the `wasm-ld` LLD driver no longer looks at archive indices and instead looks at all the objects in archives. Previously `lib.rmeta` files were simply raw rustc metadata bytes, not wasm objects, meaning that `wasm-ld` would emit a warning indicating so.

WebAssembly targets previously passed `--fatal-warnings` to `wasm-ld` by default which meant that if Rust were to update to LLVM 18 then all wasm targets would not work. This immediate blocker was resolved in rust-lang/rust#120278 which removed `--fatal-warnings` which enabled a theoretical update to LLVM 18 for wasm targets. This current state is ok-enough for now because rustc squashes all linker output by default if it doesn't fail. This means, for example, that rustc squashes all the linker warnings coming out of `wasm-ld` about `lib.rmeta` files with LLVM 18. This again isn't a pressing issue because the information is all hidden, but it runs the risk of being annoying if another linker error were to happen and then the output would have all these unrelated warnings that couldn't be fixed.

Thus, this PR comes into the picture. The goal of this PR is to resolve these warnings by using the WebAssembly object file format on wasm targets instead of using raw rustc metadata. When I first implemented the rlib-in-objects scheme in #84449 I remember either concluding that `wasm-ld` would either include the metadata in the output or I thought we didn't have to do anything there at all. I think I was wrong on both counts as `wasm-ld` does not include the metadata in the final output unless the object is referenced and we do actually need to do something to resolve these warnings.

This PR updates the object file format containing rustc metadata on WebAssembly targets to be an actual WebAssembly file. To avoid bringing in any new dependencies I've opted to hand-code this encoding at this time. If the object gets more complicated though it'd probably be best to pull in `wasmparser` and `wasm-encoder`. For now though there's two adjacent functions reading/writing wasm.

The only caveat I know of with this is that if `wasm-ld` does indeed look at the object file then the metadata will be included in the final output. I believe the only thing that could cause that at this time is `--whole-archive` which I don't think is passed for rlibs. I would clarify that I'm not 100% certain about this, however.
2024-02-21 07:14:52 +00:00
..
rustc Clean up rustc_*/Cargo.toml. 2023-10-30 08:46:02 +11:00
rustc_abi Fix rustc_abi build on stable 2024-01-16 21:15:31 +01:00
rustc_arena Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_ast Allow AST and HIR visitors to return ControlFlow 2024-02-18 03:49:28 -05:00
rustc_ast_lowering Reduce capabilities of Diagnostic. 2024-02-20 13:22:17 +11:00
rustc_ast_passes Reduce capabilities of Diagnostic. 2024-02-20 13:22:17 +11:00
rustc_ast_pretty Rollup merge of #121109 - nnethercote:TyKind-Err-guar-2, r=oli-obk 2024-02-16 00:27:32 +01:00
rustc_attr Use generic NonZero internally. 2024-02-15 08:09:42 +01:00
rustc_baked_icu_data Bump cfg(bootstrap)s 2023-11-15 19:41:28 -05:00
rustc_borrowck Auto merge of #120576 - nnethercote:merge-Diagnostic-DiagnosticBuilder, r=davidtwco 2024-02-20 12:05:09 +00:00
rustc_builtin_macros Rollup merge of #121318 - kadiwa4:no_assembly_in_supposedly_safe_code, r=Nilstrieb 2024-02-20 15:13:55 +01:00
rustc_codegen_cranelift Auto merge of #121034 - obeis:improve-static-mut-ref, r=RalfJung 2024-02-18 08:00:34 +00:00
rustc_codegen_gcc Auto merge of #121034 - obeis:improve-static-mut-ref, r=RalfJung 2024-02-18 08:00:34 +00:00
rustc_codegen_llvm Rollup merge of #121209 - nnethercote:infallible-join_codegen, r=bjorn3 2024-02-17 18:47:42 +01:00
rustc_codegen_ssa wasm: Store rlib metadata in wasm object files 2024-02-20 09:31:50 -08:00
rustc_const_eval Auto merge of #120576 - nnethercote:merge-Diagnostic-DiagnosticBuilder, r=davidtwco 2024-02-20 12:05:09 +00:00
rustc_data_structures Auto merge of #121265 - klensy:bump-18-02-24, r=Mark-Simulacrum 2024-02-18 16:54:15 +00:00
rustc_driver Bump cfg(bootstrap)s 2023-11-15 19:41:28 -05:00
rustc_driver_impl windows bump to 0.52 2024-02-18 16:02:16 +03:00
rustc_error_codes Improve wording of static_mut_ref 2024-02-18 06:01:40 +03:00
rustc_error_messages errors: only eagerly translate subdiagnostics 2024-02-15 10:34:41 +00:00
rustc_errors Auto merge of #120576 - nnethercote:merge-Diagnostic-DiagnosticBuilder, r=davidtwco 2024-02-20 12:05:09 +00:00
rustc_expand Auto merge of #120576 - nnethercote:merge-Diagnostic-DiagnosticBuilder, r=davidtwco 2024-02-20 12:05:09 +00:00
rustc_feature Auto merge of #120500 - oli-obk:intrinsics2.0, r=WaffleLapkin 2024-02-16 09:53:01 +00:00
rustc_fluent_macro Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_fs_util Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_graphviz Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_hir Rollup merge of #121256 - Jarcho:visitor2, r=oli-obk 2024-02-20 07:35:47 +01:00
rustc_hir_analysis Rollup merge of #121344 - fmease:lta-constr-by-input, r=oli-obk 2024-02-20 19:35:41 +01:00
rustc_hir_pretty Lower anonymous structs or unions to HIR 2024-02-12 12:47:23 +08:00
rustc_hir_typeck Rollup merge of #121323 - compiler-errors:raw-param-types, r=oli-obk 2024-02-20 19:35:41 +01:00
rustc_incremental Use better heuristic for printing Cargo specific diagnostics 2024-02-17 16:49:01 +01:00
rustc_index Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_index_macros Step all bootstrap cfgs forward 2024-02-08 07:44:34 -05:00
rustc_infer Rollup merge of #121344 - fmease:lta-constr-by-input, r=oli-obk 2024-02-20 19:35:41 +01:00
rustc_interface Rollup merge of #121209 - nnethercote:infallible-join_codegen, r=bjorn3 2024-02-17 18:47:42 +01:00
rustc_lexer Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_lint Rollup merge of #121318 - kadiwa4:no_assembly_in_supposedly_safe_code, r=Nilstrieb 2024-02-20 15:13:55 +01:00
rustc_lint_defs Rollup merge of #120716 - spastorino:change-some-lint-msgs, r=lcnr 2024-02-20 07:35:45 +01:00
rustc_llvm Pin cc version 2024-02-13 21:13:06 +00:00
rustc_log Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_macros Reduce capabilities of Diagnostic. 2024-02-20 13:22:17 +11:00
rustc_metadata Rollup merge of #121167 - petrochenkov:unload2, r=wesleywiser 2024-02-20 15:13:50 +01:00
rustc_middle Rollup merge of #121344 - fmease:lta-constr-by-input, r=oli-obk 2024-02-20 19:35:41 +01:00
rustc_mir_build Auto merge of #121172 - Nadrieril:simplify-empty-selection, r=matthewjasper 2024-02-21 03:11:24 +00:00
rustc_mir_dataflow Auto merge of #120500 - oli-obk:intrinsics2.0, r=WaffleLapkin 2024-02-16 09:53:01 +00:00
rustc_mir_transform Rollup merge of #121286 - gurry:constprop-lint-rename, r=oli-obk 2024-02-20 15:13:53 +01:00
rustc_monomorphize Reduce capabilities of Diagnostic. 2024-02-20 13:22:17 +11:00
rustc_next_trait_solver Move visitable bounds up into interner 2024-02-13 15:53:15 +00:00
rustc_parse Reduce capabilities of Diagnostic. 2024-02-20 13:22:17 +11:00
rustc_parse_format remove a couple of redundant clones 2024-02-17 12:46:18 +01:00
rustc_passes Rollup merge of #121167 - petrochenkov:unload2, r=wesleywiser 2024-02-20 15:13:50 +01:00
rustc_pattern_analysis Auto merge of #120576 - nnethercote:merge-Diagnostic-DiagnosticBuilder, r=davidtwco 2024-02-20 12:05:09 +00:00
rustc_privacy Dejargnonize subst 2024-02-12 15:46:35 +09:00
rustc_query_impl Replace NonZero::<_>::new with NonZero::new. 2024-02-15 08:09:42 +01:00
rustc_query_system Use generic NonZero internally. 2024-02-15 08:09:42 +01:00
rustc_resolve Rollup merge of #121167 - petrochenkov:unload2, r=wesleywiser 2024-02-20 15:13:50 +01:00
rustc_serialize Replace NonZero::<_>::new with NonZero::new. 2024-02-15 08:09:42 +01:00
rustc_session Auto merge of #120576 - nnethercote:merge-Diagnostic-DiagnosticBuilder, r=davidtwco 2024-02-20 12:05:09 +00:00
rustc_smir Merge CompilerError::CompilationFailed and CompilerError::ICE. 2024-02-17 09:40:44 +11:00
rustc_span Auto merge of #119673 - petrochenkov:dialoc5, r=compiler-errors,cjgillot 2024-02-18 20:51:16 +00:00
rustc_symbol_mangling Rollup merge of #120958 - ShoyuVanilla:remove-subst, r=oli-obk 2024-02-12 23:18:54 +01:00
rustc_target Rollup merge of #121291 - heiher:revert-medium-cmodel, r=Nilstrieb 2024-02-20 15:13:54 +01:00
rustc_trait_selection Rollup merge of #121344 - fmease:lta-constr-by-input, r=oli-obk 2024-02-20 19:35:41 +01:00
rustc_traits Rename some normalization-related items 2024-02-20 17:30:49 +01:00
rustc_transmute Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_ty_utils Fix stray trait mismatch in resolve_associated_item for AsyncFn 2024-02-20 15:45:05 +00:00
rustc_type_ir Introduce expand_weak_alias_tys 2024-02-20 17:31:49 +01:00
stable_mir Merge CompilerError::CompilationFailed and CompilerError::ICE. 2024-02-17 09:40:44 +11:00