diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-07-11 17:46:19 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-11 17:46:19 +0200 |
| commit | 685ba0869366e8efa9894fcb48bef631e2779bab (patch) | |
| tree | 8b4b194952a50664b1815d73fa56f62129c48f39 /compiler/rustc_codegen_llvm/src/allocator.rs | |
| parent | c6df564b8c81c6f2298f617104cd201c8d5131c8 (diff) | |
| parent | 329e0994000ecdb5a3dfd468f08b37b67006647f (diff) | |
| download | rust-685ba0869366e8efa9894fcb48bef631e2779bab.tar.gz rust-685ba0869366e8efa9894fcb48bef631e2779bab.zip | |
Rollup merge of #113497 - xSetech:mips_32_abi, r=davidtwco
Support explicit 32-bit MIPS ABI for the synthetic object PR #95604 introduced a "synthetic object file to ensure all exported and used symbols participate in the linking". One constraint on this file is that for MIPS-based targets, its architecture-specific ELF flags must be the same as all other object files passed to the linker. That's enforced by LLD, here: https://github.com/llvm/llvm-project/blob/llvmorg-16.0.6/lld/ELF/Arch/MipsArchTree.cpp#L77 The current approach to determining e_flags for 32-bit was implemented in PR #96930, which links to this issue that summarizes the problem well: https://github.com/ayrtonm/psx-sdk-rs/issues/9 > ... the temporary object file is created with an e_flags which is > invalid for 32-bit MIPS targets. The main issue is that it omits the ABI > bits (EF_MIPS_ABI_O32) which implies it uses the N64 ABI. To enable the N32 MIPS ABI (which succeeded O32), this patch enables setting the synthetic object's ABI based on the target "llvm-abiname" field, if it's given; otherwise, the O32 ABI is assumed for 32-bit MIPS targets. More information about the N32 ABI can be found here: https://web.archive.org/web/20160121005457/http://techpubs.sgi.com/library/manuals/2000/007-2816-005/pdf/007-2816-005.pdf
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/allocator.rs')
0 files changed, 0 insertions, 0 deletions
