Index: sys/amd64/amd64/elf_machdep.c =================================================================== --- sys/amd64/amd64/elf_machdep.c +++ sys/amd64/amd64/elf_machdep.c @@ -292,3 +292,10 @@ return (0); } + +int +elf_get_eflags(void) +{ + + return (0); +} Index: sys/arm/arm/elf_machdep.c =================================================================== --- sys/arm/arm/elf_machdep.c +++ sys/arm/arm/elf_machdep.c @@ -293,3 +293,10 @@ return (0); } + +int +elf_get_eflags(void) +{ + + return (0); +} Index: sys/arm64/arm64/elf_machdep.c =================================================================== --- sys/arm64/arm64/elf_machdep.c +++ sys/arm64/arm64/elf_machdep.c @@ -215,3 +215,10 @@ return (0); } + +int +elf_get_eflags(void) +{ + + return (0); +} Index: sys/i386/i386/elf_machdep.c =================================================================== --- sys/i386/i386/elf_machdep.c +++ sys/i386/i386/elf_machdep.c @@ -287,3 +287,10 @@ return (0); } + +int +elf_get_eflags(void) +{ + + return (0); +} Index: sys/kern/imgact_elf.c =================================================================== --- sys/kern/imgact_elf.c +++ sys/kern/imgact_elf.c @@ -1665,7 +1665,7 @@ ehdr->e_version = EV_CURRENT; ehdr->e_entry = 0; ehdr->e_phoff = sizeof(Elf_Ehdr); - ehdr->e_flags = 0; + ehdr->e_flags = elf_get_eflags(); ehdr->e_ehsize = sizeof(Elf_Ehdr); ehdr->e_phentsize = sizeof(Elf_Phdr); ehdr->e_phnum = numsegs + 1; Index: sys/mips/mips/elf_machdep.c =================================================================== --- sys/mips/mips/elf_machdep.c +++ sys/mips/mips/elf_machdep.c @@ -351,3 +351,37 @@ return (0); } + +int +elf_get_eflags(void) +{ + int eflags = 0; + +#if defined(CPU_MIPS4KC) + eflags |= EF_MIPS_ARCH_64R2; +#elif defined(CPU_MIPS24KC) + eflags |= EF_MIPS_ARCH_32R2; +#elif defined(CPU_MIPS74KC) + eflags |= EF_MIPS_ARCH_32R2; +#elif defined(CPU_MIPS1004KC) + eflags |= EF_MIPS_ARCH_32R2; +#elif defined(CPU_MIPS32) + eflags |= EF_MIPS_ARCH_32R2; +#elif defined(CPU_MIPS64) + eflags |= EF_MIPS_ARCH_64R2; +#elif defined(CPU_CNMIPS) + eflags |= EF_MIPS_ARCH_64R2; +#elif defined(CPU_RMI) + eflags |= EF_MIPS_ARCH_64R2; +#elif defined(CPU_SB1) + eflags |= EF_MIPS_ARCH_64R2; +#elif defined(CPU_BERI) + eflags |= EF_MIPS_ARCH_64R2; +#elif defined(CPU_NLM) + eflags |= EF_MIPS_ARCH_64R2; +#else + eflags |= EF_MIPS_ARCH_1; +#endif + + return (eflags); +} Index: sys/riscv/riscv/elf_machdep.c =================================================================== --- sys/riscv/riscv/elf_machdep.c +++ sys/riscv/riscv/elf_machdep.c @@ -167,3 +167,10 @@ return (0); } + +int +elf_get_eflags(void) +{ + + return (0); +} Index: sys/sparc64/sparc64/elf_machdep.c =================================================================== --- sys/sparc64/sparc64/elf_machdep.c +++ sys/sparc64/sparc64/elf_machdep.c @@ -422,3 +422,10 @@ return (0); } + +int +elf_get_eflags(void) +{ + + return (0); +} Index: sys/sys/elf_common.h =================================================================== --- sys/sys/elf_common.h +++ sys/sys/elf_common.h @@ -340,10 +340,27 @@ #define EF_MIPS_UCODE 0x00000010 #define EF_MIPS_ABI2 0x00000020 /* N32 */ #define EF_MIPS_OPTIONS_FIRST 0x00000080 -#define EF_MIPS_ARCH_ASE 0x0F000000 /* Architectural extensions */ -#define EF_MIPS_ARCH_ASE_MDMX 0x08000000 /* MDMX multimedia extension */ -#define EF_MIPS_ARCH_ASE_M16 0x04000000 /* MIPS-16 ISA extensions */ -#define EF_MIPS_ARCH 0xF0000000 /* Architecture field */ +#define EF_MIPS_32BITMODE 0x00000100 /* Compiled for 32-bit ABI */ +#define EF_MIPS_FP64 0x00000200 /* 64-bit FP regs, 32-bit CPU */ +#define EF_MIPS_NAN2008 0x00000400 /* Uses IEEE 754-2008 NaN */ +#define EF_MIPS_ABI_O32 0x00001000 /* Uses 1st MIPS ABI (UCODE) */ +#define EF_MIPS_ABI_O64 0x00002000 /* Uses UCODE MIPS64 ABI */ +#define EF_MIPS_ABI_EABI32 0x00003000 /* Uses Embedded ABI 32-bit */ +#define EF_MIPS_ABI_EABI64 0x00004000 /* Uses Embedded ABI 64-bit */ +#define EF_MIPS_ARCH_ASE 0x0F000000 /* Architectural extensions: */ +#define EF_MIPS_ARCH_ASE_MDMX 0x08000000 /* MDMX multimedia extension */ +#define EF_MIPS_ARCH_ASE_M16 0x04000000 /* MIPS-16 ISA extensions */ +#define EF_MIPS_ARCH_ASE_MICRO 0x02000000 /* MicroMips extensions/arch */ +#define EF_MIPS_ARCH 0xF0000000 /* Architecture field: */ +#define EF_MIPS_ARCH_1 0x00000000 /* MIPS I instructions */ +#define EF_MIPS_ARCH_2 0x10000000 /* MIPS II instructions */ +#define EF_MIPS_ARCH_3 0x20000000 /* MIPS III instructions */ +#define EF_MIPS_ARCH_4 0x30000000 /* MIPS IV instructions */ +#define EF_MIPS_ARCH_5 0x40000000 /* (Never introduced) */ +#define EF_MIPS_ARCH_32 0x50000000 /* Mips32 Revision 1 */ +#define EF_MIPS_ARCH_64 0x60000000 /* Mips64 Revision 1 */ +#define EF_MIPS_ARCH_32R2 0x70000000 /* Mips32 Revision 2 */ +#define EF_MIPS_ARCH_64R2 0x80000000 /* Mips64 Revision 2 */ #define EF_PPC_EMB 0x80000000 #define EF_PPC_RELOCATABLE 0x00010000 Index: sys/sys/imgact_elf.h =================================================================== --- sys/sys/imgact_elf.h +++ sys/sys/imgact_elf.h @@ -98,6 +98,9 @@ /* Machine specific function to dump per-thread information. */ void __elfN(dump_thread)(struct thread *, void *, size_t *); +/* Get the CPU specific e_flags information. */ +int elf_get_eflags(void); + extern int __elfN(fallback_brand); extern Elf_Brandnote __elfN(freebsd_brandnote); extern Elf_Brandnote __elfN(kfreebsd_brandnote);