--- bfd/elf.c.orig 2019-09-09 23:19:43.000000000 +1000 +++ bfd/elf.c 2021-12-09 12:00:17.599120000 +1000 @@ -1087,6 +1087,7 @@ case ELFOSABI_NONE: case ELFOSABI_GNU: case ELFOSABI_FREEBSD: + case ELFOSABI_BSDSUNIX: if ((hdr->sh_flags & SHF_GNU_MBIND) != 0) elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_mbind; break; @@ -10426,6 +10427,65 @@ } static bfd_boolean +elfcore_grok_bsdsunix_psinfo (bfd *abfd, Elf_Internal_Note *note) +{ + size_t offset; + + switch (elf_elfheader (abfd)->e_ident[EI_CLASS]) + { + case ELFCLASS32: + if (note->descsz < 108) + return FALSE; + break; + + case ELFCLASS64: + if (note->descsz < 120) + return FALSE; + break; + + default: + return FALSE; + } + + /* Check for version 1 in pr_version. */ + if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1) + return FALSE; + + offset = 4; + + /* Skip over pr_psinfosz. */ + if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32) + offset += 4; + else + { + offset += 4; /* Padding before pr_psinfosz. */ + offset += 8; + } + + /* pr_fname is PRFNAMESZ (16) + 1 bytes in size. */ + elf_tdata (abfd)->core->program + = _bfd_elfcore_strndup (abfd, note->descdata + offset, 17); + offset += 17; + + /* pr_psargs is PRARGSZ (80) + 1 bytes in size. */ + elf_tdata (abfd)->core->command + = _bfd_elfcore_strndup (abfd, note->descdata + offset, 81); + offset += 81; + + /* Padding before pr_pid. */ + offset += 2; + + /* The pr_pid field was added in version "1a". */ + if (note->descsz < offset + 4) + return TRUE; + + elf_tdata (abfd)->core->pid + = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset); + + return TRUE; +} + +static bfd_boolean elfcore_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note) { size_t offset; @@ -10498,6 +10558,78 @@ } static bfd_boolean +elfcore_grok_bsdsunix_prstatus (bfd *abfd, Elf_Internal_Note *note) +{ + size_t offset; + size_t size; + size_t min_size; + + /* Compute offset of pr_getregsz, skipping over pr_statussz. + Also compute minimum size of this note. */ + switch (elf_elfheader (abfd)->e_ident[EI_CLASS]) + { + case ELFCLASS32: + offset = 4 + 4; + min_size = offset + (4 * 2) + 4 + 4 + 4; + break; + + case ELFCLASS64: + offset = 4 + 4 + 8; /* Includes padding before pr_statussz. */ + min_size = offset + (8 * 2) + 4 + 4 + 4 + 4; + break; + + default: + return FALSE; + } + + if (note->descsz < min_size) + return FALSE; + + /* Check for version 1 in pr_version. */ + if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1) + return FALSE; + + /* Extract size of pr_reg from pr_gregsetsz. */ + /* Skip over pr_gregsetsz and pr_fpregsetsz. */ + if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32) + { + size = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset); + offset += 4 * 2; + } + else + { + size = bfd_h_get_64 (abfd, (bfd_byte *) note->descdata + offset); + offset += 8 * 2; + } + + /* Skip over pr_osreldate. */ + offset += 4; + + /* Read signal from pr_cursig. */ + if (elf_tdata (abfd)->core->signal == 0) + elf_tdata (abfd)->core->signal + = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset); + offset += 4; + + /* Read TID from pr_pid. */ + elf_tdata (abfd)->core->lwpid + = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset); + offset += 4; + + /* Padding before pr_reg. */ + if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64) + offset += 4; + + /* Make sure that there is enough data remaining in the note. */ + if ((note->descsz - offset) < size) + return FALSE; + + /* Make a ".reg/999" section and a ".reg" section. */ + return _bfd_elfcore_make_pseudosection (abfd, ".reg", + size, note->descpos + offset); +} + +static bfd_boolean elfcore_grok_freebsd_note (bfd *abfd, Elf_Internal_Note *note) { const struct elf_backend_data *bed = get_elf_backend_data (abfd); @@ -10556,6 +10688,64 @@ } static bfd_boolean +elfcore_grok_bsdsunix_note (bfd *abfd, Elf_Internal_Note *note) +{ + const struct elf_backend_data *bed = get_elf_backend_data (abfd); + + switch (note->type) + { + case NT_PRSTATUS: + if (bed->elf_backend_grok_bsdsunix_prstatus) + if ((*bed->elf_backend_grok_bsdsunix_prstatus) (abfd, note)) + return TRUE; + return elfcore_grok_bsdsunix_prstatus (abfd, note); + + case NT_FPREGSET: + return elfcore_grok_prfpreg (abfd, note); + + case NT_PRPSINFO: + return elfcore_grok_bsdsunix_psinfo (abfd, note); + + case NT_BSDSUNIX_THRMISC: + if (note->namesz == 8) + return elfcore_make_note_pseudosection (abfd, ".thrmisc", note); + else + return TRUE; + + case NT_BSDSUNIX_PROCSTAT_PROC: + return elfcore_make_note_pseudosection (abfd, ".note.bsdsunixcore.proc", + note); + + case NT_BSDSUNIX_PROCSTAT_FILES: + return elfcore_make_note_pseudosection (abfd, ".note.bsdsunixcore.files", + note); + + case NT_BSDSUNIX_PROCSTAT_VMMAP: + return elfcore_make_note_pseudosection (abfd, ".note.bsdsunixcore.vmmap", + note); + + case NT_BSDSUNIX_PROCSTAT_AUXV: + return elfcore_make_auxv_note_section (abfd, note, 4); + + case NT_X86_XSTATE: + if (note->namesz == 8) + return elfcore_grok_xstatereg (abfd, note); + else + return TRUE; + + case NT_BSDSUNIX_PTLWPINFO: + return elfcore_make_note_pseudosection (abfd, ".note.bsdsunixcore.lwpinfo", + note); + + case NT_ARM_VFP: + return elfcore_grok_arm_vfp (abfd, note); + + default: + return TRUE; + } +} + +static bfd_boolean elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp) { char *cp; @@ -11219,6 +11409,8 @@ char *note_name; if (get_elf_backend_data (abfd)->elf_osabi == ELFOSABI_FREEBSD) note_name = "FreeBSD"; + else if (get_elf_backend_data (abfd)->elf_osabi == ELFOSABI_BSDSUNIX) + note_name = "BSDSUniX"; else note_name = "LINUX"; return elfcore_write_note (abfd, buf, bufsiz, @@ -11781,6 +11973,7 @@ { GROKER_ELEMENT ("", elfcore_grok_note), GROKER_ELEMENT ("FreeBSD", elfcore_grok_freebsd_note), + GROKER_ELEMENT ("BSDSUniX", elfcore_grok_bsdsunix_note), GROKER_ELEMENT ("NetBSD-CORE", elfcore_grok_netbsd_note), GROKER_ELEMENT ( "OpenBSD", elfcore_grok_openbsd_note), GROKER_ELEMENT ("QNX", elfcore_grok_nto_note), @@ -12174,7 +12367,8 @@ if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE) i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_GNU; else if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_GNU - && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_FREEBSD) + && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_FREEBSD + && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_BSDSUNIX) { if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) _bfd_error_handler (_("GNU_MBIND section is unsupported")); --- bfd/elf32-i386.c.orig 2019-09-09 23:19:43.000000000 +1000 +++ bfd/elf32-i386.c 2021-12-10 22:17:31.703329000 +1000 @@ -447,6 +447,23 @@ offset = 28; size = bfd_get_32 (abfd, note->descdata + 8); } + else if (note->namesz == 9 && strcmp (note->namedata, "BSDSUniX") == 0) + { + int pr_version = bfd_get_32 (abfd, note->descdata); + + if (pr_version != 1) + return FALSE; + + /* pr_cursig */ + elf_tdata (abfd)->core->signal = bfd_get_32 (abfd, note->descdata + 20); + + /* pr_pid */ + elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 24); + + /* pr_reg */ + offset = 28; + size = bfd_get_32 (abfd, note->descdata + 8); + } else { switch (note->descsz) @@ -489,6 +506,18 @@ elf_tdata (abfd)->core->command = _bfd_elfcore_strndup (abfd, note->descdata + 25, 81); } + else if (note->namesz == 9 && strcmp (note->namedata, "BSDSUniX") == 0) + { + int pr_version = bfd_get_32 (abfd, note->descdata); + + if (pr_version != 1) + return FALSE; + + elf_tdata (abfd)->core->program + = _bfd_elfcore_strndup (abfd, note->descdata + 8, 17); + elf_tdata (abfd)->core->command + = _bfd_elfcore_strndup (abfd, note->descdata + 25, 81); + } else { switch (note->descsz) @@ -4384,6 +4413,34 @@ #define elf_backend_linux_prpsinfo32_ugid16 TRUE #define elf32_bed elf32_i386_bed + +#include "elf32-target.h" + +/* BSDSUniX support. */ + +#undef TARGET_LITTLE_SYM +#define TARGET_LITTLE_SYM i386_elf32_bsdsux_vec +#undef TARGET_LITTLE_NAME +#define TARGET_LITTLE_NAME "elf32-i386-bsdsunix" +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_BSDSUNIX + +/* The kernel recognizes executables as valid only if they carry a + "BSDSUniX" label in the ELF header. So we put this label on all + executables and (for simplicity) also all other object files. */ + +static void +elf_i386_bsdsux_post_process_headers (bfd *abfd, struct bfd_link_info *info) +{ + _bfd_elf_post_process_headers (abfd, info); +} + +#undef elf_backend_post_process_headers +#define elf_backend_post_process_headers elf_i386_bsdsux_post_process_headers +#undef elf32_bed +#define elf32_bed elf32_i386_bsdsux_bed + +#undef elf_backend_add_symbol_hook #include "elf32-target.h" --- bfd/elf32-mips.c.orig 2019-09-09 23:19:43.000000000 +1000 +++ bfd/elf32-mips.c 2021-12-10 22:19:15.943020000 +1000 @@ -2620,6 +2620,27 @@ /* Include the target file again for this target. */ #include "elf32-target.h" +/* BSDSUniX support. */ + +#undef TARGET_LITTLE_SYM +#undef TARGET_LITTLE_NAME +#undef TARGET_BIG_SYM +#undef TARGET_BIG_NAME + +#define TARGET_LITTLE_SYM mips_elf32_tradbsdsux_le_vec +#define TARGET_LITTLE_NAME "elf32-tradlittlemips-bsdsunix" +#define TARGET_BIG_SYM mips_elf32_tradbsdsux_be_vec +#define TARGET_BIG_NAME "elf32-tradbigmips-bsdsunix" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_BSDSUNIX + +#undef elf32_bed +#define elf32_bed elf32_bsdsux_tradbed + +#undef elf_backend_write_core_note + +#include "elf32-target.h" /* FreeBSD support. */ #undef TARGET_LITTLE_SYM --- bfd/elf32-ppc.c.orig 2019-10-09 17:16:05.000000000 +1000 +++ bfd/elf32-ppc.c 2021-12-10 22:20:21.344288000 +1000 @@ -10384,6 +10384,24 @@ #include "elf32-target.h" +/* BSDSUniX Target */ + +#undef TARGET_LITTLE_SYM +#undef TARGET_LITTLE_NAME + +#undef TARGET_BIG_SYM +#define TARGET_BIG_SYM powerpc_elf32_bsdsux_vec +#undef TARGET_BIG_NAME +#define TARGET_BIG_NAME "elf32-powerpc-bsdsunix" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_BSDSUNIX + +#undef elf32_bed +#define elf32_bed elf32_powerpc_bsdsux_bed + +#include "elf32-target.h" + /* FreeBSD Target */ #undef TARGET_LITTLE_SYM --- bfd/elf64-alpha.c.orig 2019-09-09 23:19:43.000000000 +1000 +++ bfd/elf64-alpha.c 2021-12-10 22:24:51.592266000 +1000 @@ -5531,6 +5531,39 @@ #include "elf64-target.h" +/* BSDSUniX support. */ + +#undef TARGET_LITTLE_SYM +#define TARGET_LITTLE_SYM alpha_elf64_bsdsux_vec +#undef TARGET_LITTLE_NAME +#define TARGET_LITTLE_NAME "elf64-alpha-bsdsunix" +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_BSDSUNIX + +/* The kernel recognizes executables as valid only if they carry a + "BSDSUniX" label in the ELF header. So we put this label on all + executables and (for simplicity) also all other object files. */ + +static void +elf64_alpha_bsdsux_post_process_headers (bfd * abfd, + struct bfd_link_info * link_info ATTRIBUTE_UNUSED) +{ + Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form. */ + + i_ehdrp = elf_elfheader (abfd); + + i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi; +} + +#undef elf_backend_post_process_headers +#define elf_backend_post_process_headers \ + elf64_alpha_bsdsux_post_process_headers + +#undef elf64_bed +#define elf64_bed elf64_alpha_bsdsux_bed + +#include "elf64-target.h" + /* FreeBSD support. */ #undef TARGET_LITTLE_SYM --- bfd/elf64-mips.c.orig 2019-09-09 23:19:43.000000000 +1000 +++ bfd/elf64-mips.c 2021-12-10 22:26:04.032678000 +1000 @@ -4859,6 +4859,28 @@ #include "elf64-target.h" +/* BSDSUniX support. */ + +#undef TARGET_LITTLE_SYM +#undef TARGET_LITTLE_NAME +#undef TARGET_BIG_SYM +#undef TARGET_BIG_NAME + +#define TARGET_LITTLE_SYM mips_elf64_tradbsdsux_le_vec +#define TARGET_LITTLE_NAME "elf64-tradlittlemips-bsdsunix" +#define TARGET_BIG_SYM mips_elf64_tradbsdsux_be_vec +#define TARGET_BIG_NAME "elf64-tradbigmips-bsdsunix" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_BSDSUNIX + +#undef elf64_bed +#define elf64_bed elf64_bsdsux_tradbed + +#undef elf64_mips_write_core_note + +#include "elf64-target.h" + /* FreeBSD support. */ #undef TARGET_LITTLE_SYM --- bfd/elf64-ppc.c.orig 2019-10-09 17:16:05.000000000 +1000 +++ bfd/elf64-ppc.c 2021-12-10 22:26:55.675251000 +1000 @@ -16976,6 +16976,24 @@ #include "elf64-target.h" +/* BSDSUniX support */ + +#undef TARGET_LITTLE_SYM +#undef TARGET_LITTLE_NAME + +#undef TARGET_BIG_SYM +#define TARGET_BIG_SYM powerpc_elf64_bsdsux_vec +#undef TARGET_BIG_NAME +#define TARGET_BIG_NAME "elf64-powerpc-bsdsunix" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_BSDSUNIX + +#undef elf64_bed +#define elf64_bed elf64_powerpc_bsdsux_bed + +#include "elf64-target.h" + /* FreeBSD support */ #undef TARGET_LITTLE_SYM --- bfd/elf64-ppc.c.orig.orig 2019-10-09 17:16:05.000000000 +1000 +++ bfd/elf64-ppc.c.orig 2021-12-10 22:27:49.641726000 +1000 @@ -16976,6 +16976,24 @@ #include "elf64-target.h" +/* BSDSUniX support */ + +#undef TARGET_LITTLE_SYM +#undef TARGET_LITTLE_NAME + +#undef TARGET_BIG_SYM +#define TARGET_BIG_SYM powerpc_elf64_bsdsux_vec +#undef TARGET_BIG_NAME +#define TARGET_BIG_NAME "elf64-powerpc-bsdsunix" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_BSDSUNIX + +#undef elf64_bed +#define elf64_bed elf64_powerpc_bsdsux_bed + +#include "elf64-target.h" + /* FreeBSD support */ #undef TARGET_LITTLE_SYM @@ -16993,3 +17011,4 @@ #define elf64_bed elf64_powerpc_fbsd_bed #include "elf64-target.h" + --- bfd/elf64-sparc.c.orig 2019-09-09 23:19:43.000000000 +1000 +++ bfd/elf64-sparc.c 2021-12-10 22:28:37.124039000 +1000 @@ -977,6 +977,19 @@ #include "elf64-target.h" +/* BSDSUniX support */ +#undef TARGET_BIG_SYM +#define TARGET_BIG_SYM sparc_elf64_bsdsux_vec +#undef TARGET_BIG_NAME +#define TARGET_BIG_NAME "elf64-sparc-bsdsunix" +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_BSDSUNIX + +#undef elf64_bed +#define elf64_bed elf64_sparc_bsdsux_bed + +#include "elf64-target.h" + /* FreeBSD support */ #undef TARGET_BIG_SYM #define TARGET_BIG_SYM sparc_elf64_fbsd_vec --- bfd/elf64-x86-64.c.orig 2019-09-09 23:19:43.000000000 +1000 +++ bfd/elf64-x86-64.c 2021-12-10 22:31:24.698299000 +1000 @@ -5199,6 +5199,21 @@ #include "elf64-target.h" +/* BSDSUniX support. */ + +#undef TARGET_LITTLE_SYM +#define TARGET_LITTLE_SYM x86_64_elf64_bsdsux_vec +#undef TARGET_LITTLE_NAME +#define TARGET_LITTLE_NAME "elf64-x86-64-bsdsunix" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_BSDSUNIX + +#undef elf64_bed +#define elf64_bed elf64_x86_64_bsdsux_bed + +#include "elf64-target.h" + /* FreeBSD support. */ #undef TARGET_LITTLE_SYM @@ -5532,6 +5547,21 @@ #include "elf64-target.h" +/* BSDSUniX L1OM support. */ + +#undef TARGET_LITTLE_SYM +#define TARGET_LITTLE_SYM l1om_elf64_bsdsux_vec +#undef TARGET_LITTLE_NAME +#define TARGET_LITTLE_NAME "elf64-l1om-bsdsunix" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_BSDSUNIX + +#undef elf64_bed +#define elf64_bed elf64_l1om_bsdsux_bed + +#include "elf64-target.h" + /* FreeBSD L1OM support. */ #undef TARGET_LITTLE_SYM @@ -5579,6 +5609,21 @@ #undef elf_backend_want_plt_sym #define elf_backend_want_plt_sym 0 + +#include "elf64-target.h" + +/* BSDSUniX K1OM support. */ + +#undef TARGET_LITTLE_SYM +#define TARGET_LITTLE_SYM k1om_elf64_bsdsux_vec +#undef TARGET_LITTLE_NAME +#define TARGET_LITTLE_NAME "elf64-k1om-bsdsunix" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_BSDSUNIX + +#undef elf64_bed +#define elf64_bed elf64_k1om_bsdsux_bed #include "elf64-target.h" --- bfd/elfn32-mips.c.orig 2019-09-09 23:19:43.000000000 +1000 +++ bfd/elfn32-mips.c 2021-12-10 22:33:49.886550000 +1000 @@ -78,6 +78,8 @@ (bfd *, Elf_Internal_Note *); static bfd_boolean elf32_mips_grok_psinfo (bfd *, Elf_Internal_Note *); +static bfd_boolean elf_n32_mips_grok_bsdsunix_prstatus + (bfd *, Elf_Internal_Note *); static bfd_boolean elf_n32_mips_grok_freebsd_prstatus (bfd *, Elf_Internal_Note *); static irix_compat_t elf_n32_mips_irix_compat @@ -3930,6 +3932,56 @@ } static bfd_boolean +elf_n32_mips_grok_bsdsunix_prstatus (bfd *abfd, Elf_Internal_Note *note) +{ + size_t offset; + size_t size; + size_t min_size; + + /* Compute offset of pr_getregsz, skipping over pr_statussz. + Also compute minimum size of this note. */ + offset = 4 + 4; + min_size = offset + 4 * 2 + 4 + 4 + 4; + + if (note->descsz < min_size) + return FALSE; + + /* Check for version 1 in pr_version. */ + if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1) + return FALSE; + + /* Extract size of pr_reg from pr_gregsetsz. */ + /* Skip over pr_gregsetsz and pr_fpregsetsz. */ + size = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset); + offset += 4 * 2; + + /* Skip over pr_osreldate. */ + offset += 4; + + /* Read signal from pr_cursig. */ + if (elf_tdata (abfd)->core->signal == 0) + elf_tdata (abfd)->core->signal + = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset); + offset += 4; + + /* Read TID from pr_pid. */ + elf_tdata (abfd)->core->lwpid + = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset); + offset += 4; + + /* Padding before pr_reg. */ + offset += 4; + + /* Make sure that there is enough data remaining in the note. */ + if (note->descsz - offset < size) + return FALSE; + + /* Make a ".reg/999" section and a ".reg" section. */ + return _bfd_elfcore_make_pseudosection (abfd, ".reg", + size, note->descpos + offset); +} + +static bfd_boolean elf_n32_mips_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note) { size_t offset; @@ -4139,6 +4191,8 @@ #define elf_backend_hide_symbol _bfd_mips_elf_hide_symbol #define elf_backend_grok_prstatus elf32_mips_grok_prstatus #define elf_backend_grok_psinfo elf32_mips_grok_psinfo +#define elf_backend_grok_bsdsunix_prstatus \ + elf_n32_mips_grok_bsdsunix_prstatus #define elf_backend_grok_freebsd_prstatus \ elf_n32_mips_grok_freebsd_prstatus #define elf_backend_ecoff_debug_swap &mips_elf32_ecoff_debug_swap @@ -4214,6 +4268,29 @@ #define elf_backend_write_core_note elf32_mips_write_core_note /* Include the target file again for this target. */ +#include "elf32-target.h" + + +/* BSDSUniX support. */ + +#undef TARGET_LITTLE_SYM +#undef TARGET_LITTLE_NAME +#undef TARGET_BIG_SYM +#undef TARGET_BIG_NAME + +#define TARGET_LITTLE_SYM mips_elf32_ntradbsdsux_le_vec +#define TARGET_LITTLE_NAME "elf32-ntradlittlemips-bsdsunix" +#define TARGET_BIG_SYM mips_elf32_ntradbsdsux_be_vec +#define TARGET_BIG_NAME "elf32-ntradbigmips-bsdsunix" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_BSDSUNIX + +#undef elf32_bed +#define elf32_bed elf32_bsdsux_tradbed + +#undef elf_backend_write_core_note + #include "elf32-target.h" --- binutils/elfedit.c.orig 2019-09-09 23:19:43.000000000 +1000 +++ binutils/elfedit.c 2021-12-10 22:38:10.065275000 +1000 @@ -781,6 +781,7 @@ { ELFOSABI_NSK, "NSK" }, { ELFOSABI_AROS, "AROS" }, { ELFOSABI_FENIXOS, "FenixOS" } + { ELFOSABI_BSDSUNIX, "BSDSUniX" }, }; /* Return ELFOSABI_XXX for an OSABI string, OSABI. */ --- binutils/readelf.c.orig 2019-10-09 17:16:05.000000000 +1000 +++ binutils/readelf.c 2021-12-10 22:41:17.308853000 +1000 @@ -3792,6 +3792,7 @@ case ELFOSABI_FENIXOS: return "FenixOS"; case ELFOSABI_CLOUDABI: return "Nuxi CloudABI"; case ELFOSABI_OPENVOS: return "Stratus Technologies OpenVOS"; + case ELFOSABI_BSDSUNIX: return "UNIX - BSDSUniX"; default: if (osabi >= 64) switch (filedata->file_header.e_machine) @@ -4034,6 +4035,7 @@ { case ELFOSABI_GNU: case ELFOSABI_FREEBSD: + case ELFOSABI_BSDSUNIX: if (p_type >= PT_GNU_MBIND_LO && p_type <= PT_GNU_MBIND_HI) { sprintf (buff, "GNU_MBIND+%#lx", p_type - PT_GNU_MBIND_LO); @@ -11140,6 +11142,7 @@ if (type == STT_GNU_IFUNC && (filedata->file_header.e_ident[EI_OSABI] == ELFOSABI_GNU + || filedata->file_header.e_ident[EI_OSABI] == ELFOSABI_BSDSUNIX || filedata->file_header.e_ident[EI_OSABI] == ELFOSABI_FREEBSD)) return "IFUNC"; @@ -17988,6 +17991,9 @@ case GNU_ABI_TAG_SOLARIS: osname = "Solaris"; break; + case GNU_ABI_TAG_BSDSUNIX: + osname = "BSDSUniX"; + break; case GNU_ABI_TAG_FREEBSD: osname = "FreeBSD"; break; @@ -18191,6 +18197,37 @@ } static const char * +get_bsdsunix_elfcore_note_type (Filedata * filedata, unsigned e_type) +{ + switch (e_type) + { + case NT_BSDSUNIX_THRMISC: + return _("NT_THRMISC (thrmisc structure)"); + case NT_BSDSUNIX_PROCSTAT_PROC: + return _("NT_PROCSTAT_PROC (proc data)"); + case NT_BSDSUNIX_PROCSTAT_FILES: + return _("NT_PROCSTAT_FILES (files data)"); + case NT_BSDSUNIX_PROCSTAT_VMMAP: + return _("NT_PROCSTAT_VMMAP (vmmap data)"); + case NT_BSDSUNIX_PROCSTAT_GROUPS: + return _("NT_PROCSTAT_GROUPS (groups data)"); + case NT_BSDSUNIX_PROCSTAT_UMASK: + return _("NT_PROCSTAT_UMASK (umask data)"); + case NT_BSDSUNIX_PROCSTAT_RLIMIT: + return _("NT_PROCSTAT_RLIMIT (rlimit data)"); + case NT_BSDSUNIX_PROCSTAT_OSREL: + return _("NT_PROCSTAT_OSREL (osreldate data)"); + case NT_BSDSUNIX_PROCSTAT_PSSTRINGS: + return _("NT_PROCSTAT_PSSTRINGS (ps_strings data)"); + case NT_BSDSUNIX_PROCSTAT_AUXV: + return _("NT_PROCSTAT_AUXV (auxv data)"); + case NT_BSDSUNIX_PTLWPINFO: + return _("NT_PTLWPINFO (ptrace_lwpinfo structure)"); + } + return get_note_type (filedata, e_type); +} + +static const char * get_freebsd_elfcore_note_type (Filedata * filedata, unsigned e_type) { switch (e_type) @@ -19082,6 +19119,10 @@ else if (const_strneq (pnote->namedata, "GNU")) /* GNU-specific object file notes. */ nt = get_gnu_elf_note_type (pnote->type); + + else if (const_strneq (pnote->namedata, "BSDSUniX")) + /* BSDSUniX-specific core file notes. */ + nt = get_bsdsunix_elfcore_note_type (filedata, pnote->type); else if (const_strneq (pnote->namedata, "FreeBSD")) /* FreeBSD-specific core file notes. */