diff --git a/crates/examples/src/readobj/elf.rs b/crates/examples/src/readobj/elf.rs index a8ed759b..21a8c4d2 100644 --- a/crates/examples/src/readobj/elf.rs +++ b/crates/examples/src/readobj/elf.rs @@ -76,7 +76,14 @@ fn print_file_header(p: &mut Printer<'_>, endian: Elf::Endian, p.flags(flags, 0, &FLAGS_EF_RISCV); p.flags(flags, EF_RISCV_FLOAT_ABI, &FLAGS_EF_RISCV_FLOAT_ABI); } - EM_LOONGARCH => p.flags(flags, 0, &FLAGS_EF_LOONGARCH), + EM_LOONGARCH => { + p.flags(flags, 0, &FLAGS_EF_LARCH_OBJABI); + p.flags( + flags, + EF_LARCH_ABI_MODIFIER_MASK, + &FLAGS_EF_LARCH_ABI_MODIFIER, + ); + } _ => {} }; p.field_hex("HeaderSize", elf.e_ehsize(endian)); @@ -1107,14 +1114,12 @@ static FLAGS_EF_RISCV_FLOAT_ABI: &[Flag] = &flags!( EF_RISCV_FLOAT_ABI_DOUBLE, EF_RISCV_FLOAT_ABI_QUAD, ); -static FLAGS_EF_LOONGARCH: &[Flag] = &flags!( - EF_LARCH_ABI_LP64S, - EF_LARCH_ABI_LP64F, - EF_LARCH_ABI_LP64D, - EF_LARCH_ABI_ILP32S, - EF_LARCH_ABI_ILP32F, - EF_LARCH_ABI_ILP32D, +static FLAGS_EF_LARCH_ABI_MODIFIER: &[Flag] = &flags!( + EF_LARCH_ABI_SOFT_FLOAT, + EF_LARCH_ABI_SINGLE_FLOAT, + EF_LARCH_ABI_DOUBLE_FLOAT, ); +static FLAGS_EF_LARCH_OBJABI: &[Flag] = &flags!(EF_LARCH_OBJABI_V1,); static FLAGS_PT: &[Flag] = &flags!( PT_NULL, PT_LOAD, diff --git a/src/elf.rs b/src/elf.rs index a037b94a..38b05891 100644 --- a/src/elf.rs +++ b/src/elf.rs @@ -6251,18 +6251,17 @@ pub const R_NDS32_TLS_TPOFF: u32 = 102; pub const R_NDS32_TLS_DESC: u32 = 119; // LoongArch values `FileHeader*::e_flags`. -/// Uses 64-bit GPRs and the stack for parameter passing -pub const EF_LARCH_ABI_LP64S: u32 = 0x1; -/// Uses 64-bit GPRs, 32-bit FPRs and the stack for parameter passing -pub const EF_LARCH_ABI_LP64F: u32 = 0x2; -/// Uses 64-bit GPRs, 64-bit FPRs and the stack for parameter passing -pub const EF_LARCH_ABI_LP64D: u32 = 0x3; -/// Uses 32-bit GPRs and the stack for parameter passing -pub const EF_LARCH_ABI_ILP32S: u32 = 0x5; -/// Uses 32-bit GPRs, 32-bit FPRs and the stack for parameter passing -pub const EF_LARCH_ABI_ILP32F: u32 = 0x6; -/// Uses 32-bit GPRs, 64-bit FPRs and the stack for parameter passing -pub const EF_LARCH_ABI_ILP32D: u32 = 0x7; +/// Additional properties of the base ABI type, including the FP calling +/// convention. +pub const EF_LARCH_ABI_MODIFIER_MASK: u32 = 0x7; +/// Uses GPRs and the stack for parameter passing +pub const EF_LARCH_ABI_SOFT_FLOAT: u32 = 0x1; +/// Uses GPRs, 32-bit FPRs and the stack for parameter passing +pub const EF_LARCH_ABI_SINGLE_FLOAT: u32 = 0x2; +/// Uses GPRs, 64-bit FPRs and the stack for parameter passing +pub const EF_LARCH_ABI_DOUBLE_FLOAT: u32 = 0x3; +/// Uses relocation types directly writing to immediate slots +pub const EF_LARCH_OBJABI_V1: u32 = 0x40; // LoongArch values `Rel*::r_type`. /// No reloc