public inbox for binutils-cvs@sourceware.org
 help / color / mirror / Atom feed
* [binutils-gdb] Add new ELF section and segment types to readelf.
@ 2024-05-28  9:12 Nick Clifton
  0 siblings, 0 replies; only message in thread
From: Nick Clifton @ 2024-05-28  9:12 UTC (permalink / raw)
  To: binutils-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=08b0f198b16af719c329581e0ddc290c4c9b17ae

commit 08b0f198b16af719c329581e0ddc290c4c9b17ae
Author: Nick Clifton <nickc@redhat.com>
Date:   Tue May 28 10:12:28 2024 +0100

    Add new ELF section and segment types to readelf.

Diff:
---
 binutils/readelf.c    | 617 +++++++++++++++++++++++++++++++-------------------
 include/elf/aarch64.h |  10 +-
 include/elf/alpha.h   |   4 +-
 include/elf/arm.h     |  11 +-
 include/elf/common.h  |  89 +++++---
 include/elf/csky.h    |   2 +-
 include/elf/hppa.h    |  14 +-
 include/elf/mips.h    |  87 +++----
 include/elf/msp430.h  |   2 +-
 include/elf/riscv.h   |   2 +-
 include/elf/x86-64.h  |   2 +-
 11 files changed, 517 insertions(+), 323 deletions(-)

diff --git a/binutils/readelf.c b/binutils/readelf.c
index e2203cff295..103720e0b0d 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -5099,6 +5099,7 @@ get_osabi_name (Filedata * filedata, unsigned int osabi)
     case ELFOSABI_FENIXOS:	return "FenixOS";
     case ELFOSABI_CLOUDABI:	return "Nuxi CloudABI";
     case ELFOSABI_OPENVOS:	return "Stratus Technologies OpenVOS";
+    case ELFOSABI_CUDA:         return "CUDA";
     default:
       if (osabi >= 64)
 	switch (filedata->file_header.e_machine)
@@ -5158,9 +5159,9 @@ get_aarch64_segment_type (unsigned long type)
 {
   switch (type)
     {
-    case PT_AARCH64_ARCHEXT:  return "AARCH64_ARCHEXT";
+    case PT_AARCH64_ARCHEXT:    return "AARCH64_ARCHEXT";
     case PT_AARCH64_MEMTAG_MTE:	return "AARCH64_MEMTAG_MTE";
-    default:                  return NULL;
+    default:                    return NULL;
     }
 }
 
@@ -5169,8 +5170,9 @@ get_arm_segment_type (unsigned long type)
 {
   switch (type)
     {
-    case PT_ARM_EXIDX: return "EXIDX";
-    default:           return NULL;
+    case PT_ARM_ARCHEXT: return "ARM_ARCHEXT";
+    case PT_ARM_EXIDX:   return "ARM_EXIDX";
+    default:             return NULL;
     }
 }
 
@@ -5262,17 +5264,19 @@ get_hpux_segment_type (unsigned long type, unsigned e_machine)
       case PT_HP_HSL_ANNOT:	return "HP_HSL_ANNOT";
       case PT_HP_STACK:		return "HP_STACK";
       case PT_HP_CORE_UTSNAME:	return "HP_CORE_UTSNAME";
-      default:			return NULL;
+      default:
+	break;
       }
 
   if (e_machine == EM_IA_64)
     switch (type)
       {
-      case PT_HP_TLS:		 return "HP_TLS";
+      case PT_HP_TLS:	 	 return "HP_TLS";
       case PT_IA_64_HP_OPT_ANOT: return "HP_OPT_ANNOT";
       case PT_IA_64_HP_HSL_ANOT: return "HP_HSL_ANNOT";
       case PT_IA_64_HP_STACK:	 return "HP_STACK";
-      default:			 return NULL;
+      default:
+	break;
       }
 
   return NULL;
@@ -5283,18 +5287,126 @@ get_solaris_segment_type (unsigned long type)
 {
   switch (type)
     {
-    case 0x6464e550: return "PT_SUNW_UNWIND";
-    case 0x6474e550: return "PT_SUNW_EH_FRAME";
-    case 0x6ffffff7: return "PT_LOSUNW";
-    case 0x6ffffffa: return "PT_SUNWBSS";
-    case 0x6ffffffb: return "PT_SUNWSTACK";
-    case 0x6ffffffc: return "PT_SUNWDTRACE";
-    case 0x6ffffffd: return "PT_SUNWCAP";
-    case 0x6fffffff: return "PT_HISUNW";
-    default:         return NULL;
+    case PT_SUNW_UNWIND:   return "SUNW_UNWIND";
+    case PT_SUNW_EH_FRAME: return "SUNW_EH_FRAME";
+    case PT_SUNWBSS:       return "SUNW_BSS";
+    case PT_SUNWSTACK:     return "SUNW_STACK";
+    case PT_SUNWDTRACE:    return "SUNW_DTRACE";
+    case PT_SUNWCAP:       return "SUNW_CAP";
+    default:               return NULL;
     }
 }
 
+static const char *
+get_os_specific_segment_type (Filedata * filedata, unsigned long p_type)
+{
+  static char buff[32];
+  const char * result = NULL;
+
+  switch (filedata->file_header.e_ident[EI_OSABI])
+    {
+    case ELFOSABI_GNU:
+    case ELFOSABI_FREEBSD:
+      if (p_type >= PT_GNU_MBIND_LO && p_type <= PT_GNU_MBIND_HI)
+	{
+	  sprintf (buff, "GNU_MBIND+%#lx", p_type - PT_GNU_MBIND_LO);
+	  result = buff;
+	}
+      break;
+
+    case ELFOSABI_HPUX:
+      result = get_hpux_segment_type (p_type,
+				      filedata->file_header.e_machine);
+      break;
+
+    case ELFOSABI_SOLARIS:
+      result = get_solaris_segment_type (p_type);
+      break;
+
+    default:
+      break;
+    }
+
+  if (result != NULL)
+    return result;
+  
+  switch (p_type)
+    {
+    case PT_GNU_EH_FRAME:      return "GNU_EH_FRAME";
+    case PT_GNU_STACK:         return "GNU_STACK";
+    case PT_GNU_RELRO:         return "GNU_RELRO";
+    case PT_GNU_PROPERTY:      return "GNU_PROPERTY";
+    case PT_GNU_SFRAME:        return "GNU_SFRAME";
+
+    case PT_OPENBSD_MUTABLE:   return "OPENBSD_MUTABLE";
+    case PT_OPENBSD_RANDOMIZE: return "OPENBSD_RANDOMIZE";
+    case PT_OPENBSD_WXNEEDED:  return "OPENBSD_WXNEEDED";
+    case PT_OPENBSD_NOBTCFI:   return "OPENBSD_NOBTCFI";
+    case PT_OPENBSD_SYSCALLS:  return "OPENBSD_SYSCALLS";
+    case PT_OPENBSD_BOOTDATA:  return "OPENBSD_BOOTDATA";
+
+    default:
+      break;
+    }
+
+  sprintf (buff, "LOOS+%#lx", p_type - PT_LOOS);
+  return buff;
+}
+
+static const char *
+get_processor_specific_segment_type (Filedata * filedata, unsigned long p_type)
+{
+  static char buff[32];
+  const char * result = NULL;
+
+  switch (filedata->file_header.e_machine)
+    {
+    case EM_AARCH64:
+      result = get_aarch64_segment_type (p_type);
+      break;
+
+    case EM_ARM:
+      result = get_arm_segment_type (p_type);
+      break;
+
+    case EM_MIPS:
+    case EM_MIPS_RS3_LE:
+      result = get_mips_segment_type (p_type);
+      break;
+
+    case EM_PARISC:
+      result = get_parisc_segment_type (p_type);
+      break;
+
+    case EM_IA_64:
+      result = get_ia64_segment_type (p_type);
+      break;
+
+    case EM_TI_C6000:
+      result = get_tic6x_segment_type (p_type);
+      break;
+
+    case EM_S390:
+    case EM_S390_OLD:
+      result = get_s390_segment_type (p_type);
+      break;
+
+    case EM_RISCV:
+      result = get_riscv_segment_type (p_type);
+      break;
+
+    default:
+      result = NULL;
+      break;
+    }
+
+  if (result != NULL)
+    return result;
+
+  sprintf (buff, "LOPROC+%#lx", p_type - PT_LOPROC);
+  return buff;
+}
+  
 static const char *
 get_segment_type (Filedata * filedata, unsigned long p_type)
 {
@@ -5310,96 +5422,17 @@ get_segment_type (Filedata * filedata, unsigned long p_type)
     case PT_SHLIB:	return "SHLIB";
     case PT_PHDR:	return "PHDR";
     case PT_TLS:	return "TLS";
-    case PT_GNU_EH_FRAME: return "GNU_EH_FRAME";
-    case PT_GNU_STACK:	return "GNU_STACK";
-    case PT_GNU_RELRO:  return "GNU_RELRO";
-    case PT_GNU_PROPERTY: return "GNU_PROPERTY";
-    case PT_GNU_SFRAME: return "GNU_SFRAME";
-
-    case PT_OPENBSD_MUTABLE: return "OPENBSD_MUTABLE";
-    case PT_OPENBSD_RANDOMIZE: return "OPENBSD_RANDOMIZE";
-    case PT_OPENBSD_WXNEEDED: return "OPENBSD_WXNEEDED";
-    case PT_OPENBSD_NOBTCFI: return "OPENBSD_NOBTCFI";
-    case PT_OPENBSD_SYSCALLS: return "OPENBSD_SYSCALLS";
-    case PT_OPENBSD_BOOTDATA: return "OPENBSD_BOOTDATA";
-
-    default:
-      if ((p_type >= PT_LOPROC) && (p_type <= PT_HIPROC))
-	{
-	  const char * result;
-
-	  switch (filedata->file_header.e_machine)
-	    {
-	    case EM_AARCH64:
-	      result = get_aarch64_segment_type (p_type);
-	      break;
-	    case EM_ARM:
-	      result = get_arm_segment_type (p_type);
-	      break;
-	    case EM_MIPS:
-	    case EM_MIPS_RS3_LE:
-	      result = get_mips_segment_type (p_type);
-	      break;
-	    case EM_PARISC:
-	      result = get_parisc_segment_type (p_type);
-	      break;
-	    case EM_IA_64:
-	      result = get_ia64_segment_type (p_type);
-	      break;
-	    case EM_TI_C6000:
-	      result = get_tic6x_segment_type (p_type);
-	      break;
-	    case EM_S390:
-	    case EM_S390_OLD:
-	      result = get_s390_segment_type (p_type);
-	      break;
-	    case EM_RISCV:
-	      result = get_riscv_segment_type (p_type);
-	      break;
-	    default:
-	      result = NULL;
-	      break;
-	    }
-
-	  if (result != NULL)
-	    return result;
-
-	  sprintf (buff, "LOPROC+%#lx", p_type - PT_LOPROC);
-	}
-      else if ((p_type >= PT_LOOS) && (p_type <= PT_HIOS))
-	{
-	  const char * result = NULL;
+    case PT_NUM:	return "NUM";
+    }
 
-	  switch (filedata->file_header.e_ident[EI_OSABI])
-	    {
-	    case ELFOSABI_GNU:
-	    case ELFOSABI_FREEBSD:
-	      if (p_type >= PT_GNU_MBIND_LO && p_type <= PT_GNU_MBIND_HI)
-		{
-		  sprintf (buff, "GNU_MBIND+%#lx", p_type - PT_GNU_MBIND_LO);
-		  result = buff;
-		}
-	      break;
-	    case ELFOSABI_HPUX:
-	      result = get_hpux_segment_type (p_type,
-					      filedata->file_header.e_machine);
-	      break;
-	    case ELFOSABI_SOLARIS:
-	      result = get_solaris_segment_type (p_type);
-	      break;
-	    default:
-	      break;
-	    }
-	  if (result != NULL)
-	    return result;
+  if ((p_type >= PT_LOOS) && (p_type <= PT_HIOS))
+    return get_os_specific_segment_type (filedata, p_type);
 
-	  sprintf (buff, "LOOS+%#lx", p_type - PT_LOOS);
-	}
-      else
-	snprintf (buff, sizeof (buff), _("<unknown>: %lx"), p_type);
+  if ((p_type >= PT_LOPROC) && (p_type <= PT_HIPROC))
+    return get_processor_specific_segment_type (filedata, p_type);
 
-      return buff;
-    }
+  snprintf (buff, sizeof (buff), _("<unknown>: %lx"), p_type);
+  return buff;
 }
 
 static const char *
@@ -5475,9 +5508,9 @@ get_parisc_section_type_name (unsigned int sh_type)
     case SHT_PARISC_UNWIND:	return "PARISC_UNWIND";
     case SHT_PARISC_DOC:	return "PARISC_DOC";
     case SHT_PARISC_ANNOT:	return "PARISC_ANNOT";
+    case SHT_PARISC_DLKM:	return "PARISC_DLKM";
     case SHT_PARISC_SYMEXTN:	return "PARISC_SYMEXTN";
     case SHT_PARISC_STUBS:	return "PARISC_STUBS";
-    case SHT_PARISC_DLKM:	return "PARISC_DLKM";
     default:             	return NULL;
     }
 }
@@ -5494,6 +5527,17 @@ get_ia64_section_type_name (Filedata * filedata, unsigned int sh_type)
     case SHT_IA_64_EXT:		       return "IA_64_EXT";
     case SHT_IA_64_UNWIND:	       return "IA_64_UNWIND";
     case SHT_IA_64_PRIORITY_INIT:      return "IA_64_PRIORITY_INIT";
+    default:
+      break;
+    }
+  return NULL;
+}
+
+static const char *
+get_vms_section_type_name (unsigned int sh_type)
+{
+  switch (sh_type)
+    {
     case SHT_IA_64_VMS_TRACE:          return "VMS_TRACE";
     case SHT_IA_64_VMS_TIE_SIGNATURES: return "VMS_TIE_SIGNATURES";
     case SHT_IA_64_VMS_DEBUG:          return "VMS_DEBUG";
@@ -5522,8 +5566,16 @@ get_aarch64_section_type_name (unsigned int sh_type)
 {
   switch (sh_type)
     {
-    case SHT_AARCH64_ATTRIBUTES: return "AARCH64_ATTRIBUTES";
-    default:			 return NULL;
+    case SHT_AARCH64_ATTRIBUTES:
+      return "AARCH64_ATTRIBUTES";
+    case SHT_AARCH64_AUTH_RELR:
+      return "AARCH64_AUTH_RELR";
+    case SHT_AARCH64_MEMTAG_GLOBALS_STATIC:
+      return "AARCH64_MEMTAG_GLOBALS_STATIC";
+    case SHT_AARCH64_MEMTAG_GLOBALS_DYNAMIC:
+      return "AARCH64_MEMTAG_GLOBALS_DYNAMIC";
+    default:
+      return NULL;
     }
 }
 
@@ -5617,11 +5669,222 @@ get_csky_section_type_name (unsigned int sh_type)
 }
 
 static const char *
-get_section_type_name (Filedata * filedata, unsigned int sh_type)
+get_powerpc_section_type_name (unsigned int sh_type)
+{
+  switch (sh_type)
+    {
+    case SHT_ORDERED: return "ORDERED";
+    default:          return NULL;
+    }
+}
+
+static const char *
+get_alpha_section_type_name (unsigned int sh_type)
+{
+  switch (sh_type)
+    {
+    case SHT_ALPHA_DEBUG:   return "DEBUG";
+    case SHT_ALPHA_REGINFO: return "REGINFO";
+    default:                return NULL;
+    }
+}
+
+static const char *
+get_processor_specific_section_type_name (Filedata * filedata, unsigned int sh_type)
+{
+  static char buff[32];
+  const char * result = NULL;
+
+  switch (filedata->file_header.e_machine)
+    {
+    case EM_AARCH64:
+      result = get_aarch64_section_type_name (sh_type);
+      break;
+
+    case EM_ALPHA:
+      result = get_alpha_section_type_name (sh_type);
+      break;
+
+    case EM_ARC:
+    case EM_ARC_COMPACT:
+    case EM_ARC_COMPACT2:
+    case EM_ARC_COMPACT3:
+    case EM_ARC_COMPACT3_64:
+      result = get_arc_section_type_name (sh_type);
+      break;
+
+    case EM_ARM:
+      result = get_arm_section_type_name (sh_type);
+      break;
+
+    case EM_CSKY:
+      result = get_csky_section_type_name (sh_type);
+      break;
+
+    case EM_IA_64:
+      result = get_ia64_section_type_name (filedata, sh_type);
+      break;
+
+    case EM_MIPS:
+    case EM_MIPS_RS3_LE:
+      result = get_mips_section_type_name (sh_type);
+      break;
+
+    case EM_MSP430:
+      result = get_msp430_section_type_name (sh_type);
+      break;
+
+    case EM_NFP:
+      result = get_nfp_section_type_name (sh_type);
+      break;
+
+    case EM_PARISC:
+      result = get_parisc_section_type_name (sh_type);
+      break;
+
+    case EM_PPC64:
+    case EM_PPC:
+      return get_powerpc_section_type_name (sh_type);
+      break;
+
+    case EM_RISCV:
+      result = get_riscv_section_type_name (sh_type);
+      break;
+
+    case EM_TI_C6000:
+      result = get_tic6x_section_type_name (sh_type);
+      break;
+
+    case EM_V800:
+    case EM_V850:
+    case EM_CYGNUS_V850:
+      result = get_v850_section_type_name (sh_type);
+      break;
+
+    case EM_X86_64:
+    case EM_L1OM:
+    case EM_K1OM:
+      result = get_x86_64_section_type_name (sh_type);
+      break;
+
+    default:
+      break;
+    }
+
+  if (result != NULL)
+    return result;
+
+  switch (sh_type)
+    {
+      /* FIXME: Are these correct ?  If so, why do they not have #define's ?  */
+    case 0x7ffffffd: return "AUXILIARY";
+    case 0x7fffffff: return "FILTER";
+    default:
+      break;
+    }
+
+  sprintf (buff, "LOPROC+%#x", sh_type - SHT_LOPROC);
+  return buff;
+}
+
+static const char *
+get_os_specific_section_type_name (Filedata * filedata, unsigned int sh_type)
+{
+  static char buff[32];
+  const char * result = NULL;
+
+  switch (filedata->file_header.e_machine)
+    {
+    case EM_IA_64:
+      result = get_vms_section_type_name (sh_type);
+      break;
+    default:
+      break;
+    }
+
+  if (result != NULL)
+    return result;
+
+  if (filedata->file_header.e_ident[EI_OSABI] == ELFOSABI_SOLARIS)
+    result = get_solaris_section_type (sh_type);
+
+  if (result != NULL)
+    return result;
+
+  switch (sh_type)
+    {
+    case SHT_GNU_INCREMENTAL_INPUTS:  return "GNU_INCREMENTAL_INPUTS";
+    case SHT_GNU_ATTRIBUTES:          return "GNU_ATTRIBUTES";
+    case SHT_GNU_HASH:                return "GNU_HASH";
+    case SHT_GNU_LIBLIST:             return "GNU_LIBLIST";
+
+    case SHT_SUNW_move:               return "SUNW_MOVE";
+    case SHT_SUNW_COMDAT:             return "SUNW_COMDAT";
+    case SHT_SUNW_syminfo:            return "SUNW_SYMINFO";
+    case SHT_GNU_verdef:	      return "VERDEF";
+    case SHT_GNU_verneed:	      return "VERNEED";
+    case SHT_GNU_versym:	      return "VERSYM";
+      
+    case SHT_LLVM_ODRTAB:             return "LLVM_ODRTAB";
+    case SHT_LLVM_LINKER_OPTIONS:     return "LLVM_LINKER_OPTIONS";
+    case SHT_LLVM_ADDRSIG:            return "LLVM_ADDRSIG";
+    case SHT_LLVM_DEPENDENT_LIBRARIES: return "LLVM_DEPENDENT_LIBRARIES";
+    case SHT_LLVM_SYMPART:            return "LLVM_SYMPART";
+    case SHT_LLVM_PART_EHDR:          return "LLVM_PART_EHDR";
+    case SHT_LLVM_PART_PHDR:          return "LLVM_PART_PHDR";
+    case SHT_LLVM_BB_ADDR_MAP_V0:     return "LLVM_BB_ADDR_MAP_V0";
+    case SHT_LLVM_CALL_GRAPH_PROFILE: return "LLVM_CALL_GRAPH_PROFILE";
+    case SHT_LLVM_BB_ADDR_MAP:        return "LLVM_BB_ADDR_MAP";
+    case SHT_LLVM_OFFLOADING:         return "LLVM_OFFLOADING";
+    case SHT_LLVM_LTO:                return "LLVM_LTO";
+
+    case SHT_ANDROID_REL:             return "ANDROID_REL";
+    case SHT_ANDROID_RELA:            return "ANDROID_RELA";
+    case SHT_ANDROID_RELR:            return "ANDROID_RELR";
+
+    case SHT_CHECKSUM:                return "CHECKSUM";
+      
+      /* FIXME: Are these correct ?  If so, why do they not have #define's ?  */
+    case 0x6ffffff0:		     return "VERSYM";
+      
+    default:
+      break;
+    }
+
+  sprintf (buff, "LOOS+%#x", sh_type - SHT_LOOS);
+  return buff;
+}
+
+static const char *
+get_user_specific_section_type_name (Filedata * filedata, unsigned int sh_type)
 {
   static char buff[32];
   const char * result;
 
+  switch (filedata->file_header.e_machine)
+    {
+    case EM_V800:
+    case EM_V850:
+    case EM_CYGNUS_V850:
+      result = get_v850_section_type_name (sh_type);
+      break;
+
+    default:
+      result = NULL;
+      break;
+    }
+
+  if (result != NULL)
+    return result;
+
+  sprintf (buff, "LOUSER+%#x", sh_type - SHT_LOUSER);
+  return buff;
+}
+
+static const char *
+get_section_type_name (Filedata *    filedata,
+		       unsigned int  sh_type)
+{
   switch (sh_type)
     {
     case SHT_NULL:		return "NULL";
@@ -5645,139 +5908,25 @@ get_section_type_name (Filedata * filedata, unsigned int sh_type)
     case SHT_RELR:		return "RELR";
       /* End of generic section types.  */
 
-      /* OS specific section types:  */
-    case SHT_GNU_verdef:	return "VERDEF";
-    case SHT_GNU_verneed:	return "VERNEED";
-    case SHT_GNU_versym:	return "VERSYM";
-    case SHT_GNU_INCREMENTAL_INPUTS: return "GNU_INCREMENTAL_INPUTS";
-    case 0x6ffffff0:		return "VERSYM";
-    case SHT_GNU_ATTRIBUTES:	return "GNU_ATTRIBUTES";
-    case SHT_GNU_HASH:		return "GNU_HASH";
-    case SHT_GNU_LIBLIST:	return "GNU_LIBLIST";
-    case 0x6ffffffc:		return "VERDEF";
-    case 0x7ffffffd:		return "AUXILIARY";
-    case 0x7fffffff:		return "FILTER";
-
     default:
-      if ((sh_type >= SHT_LOPROC) && (sh_type <= SHT_HIPROC))
-	{
-	  switch (filedata->file_header.e_machine)
-	    {
-	    case EM_ARC:
-	    case EM_ARC_COMPACT:
-	    case EM_ARC_COMPACT2:
-	    case EM_ARC_COMPACT3:
-	    case EM_ARC_COMPACT3_64:
-	      result = get_arc_section_type_name (sh_type);
-	      break;
-	    case EM_MIPS:
-	    case EM_MIPS_RS3_LE:
-	      result = get_mips_section_type_name (sh_type);
-	      break;
-	    case EM_PARISC:
-	      result = get_parisc_section_type_name (sh_type);
-	      break;
-	    case EM_IA_64:
-	      result = get_ia64_section_type_name (filedata, sh_type);
-	      break;
-	    case EM_X86_64:
-	    case EM_L1OM:
-	    case EM_K1OM:
-	      result = get_x86_64_section_type_name (sh_type);
-	      break;
-	    case EM_AARCH64:
-	      result = get_aarch64_section_type_name (sh_type);
-	      break;
-	    case EM_ARM:
-	      result = get_arm_section_type_name (sh_type);
-	      break;
-	    case EM_TI_C6000:
-	      result = get_tic6x_section_type_name (sh_type);
-	      break;
-	    case EM_MSP430:
-	      result = get_msp430_section_type_name (sh_type);
-	      break;
-	    case EM_NFP:
-	      result = get_nfp_section_type_name (sh_type);
-	      break;
-	    case EM_V800:
-	    case EM_V850:
-	    case EM_CYGNUS_V850:
-	      result = get_v850_section_type_name (sh_type);
-	      break;
-	    case EM_RISCV:
-	      result = get_riscv_section_type_name (sh_type);
-	      break;
-	    case EM_CSKY:
-	      result = get_csky_section_type_name (sh_type);
-	      break;
-	    default:
-	      result = NULL;
-	      break;
-	    }
-
-	  if (result != NULL)
-	    return result;
-
-	  sprintf (buff, "LOPROC+%#x", sh_type - SHT_LOPROC);
-	}
-      else if ((sh_type >= SHT_LOOS) && (sh_type <= SHT_HIOS))
-	{
-	  switch (filedata->file_header.e_machine)
-	    {
-	    case EM_IA_64:
-	      result = get_ia64_section_type_name (filedata, sh_type);
-	      break;
-	    default:
-	      if (filedata->file_header.e_ident[EI_OSABI] == ELFOSABI_SOLARIS)
-		result = get_solaris_section_type (sh_type);
-	      else
-		{
-		  switch (sh_type)
-		    {
-		    case SHT_GNU_INCREMENTAL_INPUTS: result = "GNU_INCREMENTAL_INPUTS"; break;
-		    case SHT_GNU_ATTRIBUTES: result = "GNU_ATTRIBUTES"; break;
-		    case SHT_GNU_HASH: result = "GNU_HASH"; break;
-		    case SHT_GNU_LIBLIST: result = "GNU_LIBLIST"; break;
-		    default:
-		      result = NULL;
-		      break;
-		    }
-		}
-	      break;
-	    }
+      break;
+    }
 
-	  if (result != NULL)
-	    return result;
+  if ((sh_type >= SHT_LOPROC) && (sh_type <= SHT_HIPROC))
+    return get_processor_specific_section_type_name (filedata, sh_type);
 
-	  sprintf (buff, "LOOS+%#x", sh_type - SHT_LOOS);
-	}
-      else if ((sh_type >= SHT_LOUSER) && (sh_type <= SHT_HIUSER))
-	{
-	  switch (filedata->file_header.e_machine)
-	    {
-	    case EM_V800:
-	    case EM_V850:
-	    case EM_CYGNUS_V850:
-	      result = get_v850_section_type_name (sh_type);
-	      break;
-	    default:
-	      result = NULL;
-	      break;
-	    }
+  if ((sh_type >= SHT_LOOS) && (sh_type <= SHT_HIOS))
+    return get_os_specific_section_type_name (filedata, sh_type);
 
-	  if (result != NULL)
-	    return result;
+  if ((sh_type >= SHT_LOUSER) && (sh_type <= SHT_HIUSER))
+    return get_user_specific_section_type_name (filedata, sh_type);
 
-	  sprintf (buff, "LOUSER+%#x", sh_type - SHT_LOUSER);
-	}
-      else
-	/* This message is probably going to be displayed in a 15
-	   character wide field, so put the hex value first.  */
-	snprintf (buff, sizeof (buff), _("%08x: <unknown>"), sh_type);
+  static char buff[32];
 
-      return buff;
-    }
+  /* This message is probably going to be displayed in a 15
+     character wide field, so put the hex value first.  */
+  snprintf (buff, sizeof (buff), _("%08x: <unknown>"), sh_type);
+  return buff;
 }
 
 enum long_option_values
diff --git a/include/elf/aarch64.h b/include/elf/aarch64.h
index fe92a83a507..cd0f77d304f 100644
--- a/include/elf/aarch64.h
+++ b/include/elf/aarch64.h
@@ -31,7 +31,15 @@
 #define PT_AARCH64_MEMTAG_MTE     (PT_LOPROC + 0x2)
 
 /* Additional section types.  */
-#define SHT_AARCH64_ATTRIBUTES	0x70000003  /* Section holds attributes.  */
+/* Section holds attributes.  */
+#define SHT_AARCH64_ATTRIBUTES	(SHT_LOPROC + 3)
+/* Special aarch64-specific section for MTE support, as described in:
+   https://github.com/ARM-software/abi-aa/blob/main/pauthabielf64/pauthabielf64.rst#section-types  */
+#define SHT_AARCH64_AUTH_RELR   (SHT_LOPROC + 4)
+/* Special aarch64-specific sections for MTE support, as described in:
+   https://github.com/ARM-software/abi-aa/blob/main/memtagabielf64/memtagabielf64.rst#7section-types  */
+#define SHT_AARCH64_MEMTAG_GLOBALS_STATIC  (SHT_LOPROC + 7)
+#define SHT_AARCH64_MEMTAG_GLOBALS_DYNAMIC (SHT_LOPROC + 8)
 
 /* AArch64-specific values for sh_flags.  */
 #define SHF_ENTRYSECT		0x10000000   /* Section contains an
diff --git a/include/elf/alpha.h b/include/elf/alpha.h
index 02618c0bb1e..a65bf9cc6b6 100644
--- a/include/elf/alpha.h
+++ b/include/elf/alpha.h
@@ -42,10 +42,10 @@
 
 /* Section contains some sort of debugging information.  The exact
    format is unspecified.  It's probably ECOFF symbols.  */
-#define SHT_ALPHA_DEBUG		0x70000001
+#define SHT_ALPHA_DEBUG		(SHT_LOPROC + 1)
 
 /* Section contains register usage information.  */
-#define SHT_ALPHA_REGINFO	0x70000002
+#define SHT_ALPHA_REGINFO	(SHT_LOPROC + 2)
 
 /* A section of type SHT_MIPS_REGINFO contains the following
    structure.  */
diff --git a/include/elf/arm.h b/include/elf/arm.h
index 01708ef0b93..6d96d6b489f 100644
--- a/include/elf/arm.h
+++ b/include/elf/arm.h
@@ -37,6 +37,7 @@
 #define EF_ARM_VFP_FLOAT   0x400
 /* Removed, was EF_ARM_MAVERICK_FLOAT 0x800  */
 
+#define PT_ARM_ARCHEXT (PT_LOPROC + 0)
 /* Frame unwind information */
 #define PT_ARM_EXIDX (PT_LOPROC + 1)
 
@@ -76,11 +77,11 @@
 #define STT_ARM_16BIT      STT_HIPROC   /* A Thumb label.  */
 
 /* Additional section types.  */
-#define SHT_ARM_EXIDX	       0x70000001	/* Section holds ARM unwind info.  */
-#define SHT_ARM_PREEMPTMAP     0x70000002	/* Section pre-emption details.  */
-#define SHT_ARM_ATTRIBUTES     0x70000003	/* Section holds attributes.  */
-#define SHT_ARM_DEBUGOVERLAY   0x70000004	/* Section holds overlay debug info.  */
-#define SHT_ARM_OVERLAYSECTION 0x70000005	/* Section holds GDB and overlay integration info.  */
+#define SHT_ARM_EXIDX	       (SHT_LOPROC + 1)	/* Section holds ARM unwind info.  */
+#define SHT_ARM_PREEMPTMAP     (SHT_LOPROC + 2)	/* Section pre-emption details.  */
+#define SHT_ARM_ATTRIBUTES     (SHT_LOPROC + 3) /* Section holds attributes.  */
+#define SHT_ARM_DEBUGOVERLAY   (SHT_LOPROC + 4)	/* Section holds overlay debug info.  */
+#define SHT_ARM_OVERLAYSECTION (SHT_LOPROC + 5)	/* Section holds GDB and overlay integration info.  */
 
 /* ARM-specific values for sh_flags.  */
 #define SHF_ENTRYSECT      0x10000000   /* Section contains an entry point.  */
diff --git a/include/elf/common.h b/include/elf/common.h
index 7e62c34643c..78c85bd514b 100644
--- a/include/elf/common.h
+++ b/include/elf/common.h
@@ -76,20 +76,20 @@
 #define ELFOSABI_CLOUDABI    17 /* Nuxi CloudABI */
 #define ELFOSABI_OPENVOS     18 /* Stratus Technologies OpenVOS */
 
-#define ELFOSABI_C6000_ELFABI 64 /* Bare-metal TMS320C6000 */
-#define ELFOSABI_AMDGPU_HSA  64 /* AMD HSA Runtime */
-#define ELFOSABI_C6000_LINUX 65 /* Linux TMS320C6000 */
-#define ELFOSABI_AMDGPU_PAL  65 /* AMD PAL Runtime */
-#define ELFOSABI_ARM_FDPIC   65 /* ARM FDPIC */
+#define ELFOSABI_CUDA          51 /* NVIDIA CUDA architecture.  */
+#define ELFOSABI_C6000_ELFABI  64 /* Bare-metal TMS320C6000 */
+#define ELFOSABI_AMDGPU_HSA    64 /* AMD HSA Runtime */
+#define ELFOSABI_C6000_LINUX   65 /* Linux TMS320C6000 */
+#define ELFOSABI_AMDGPU_PAL    65 /* AMD PAL Runtime */
+#define ELFOSABI_ARM_FDPIC     65 /* ARM FDPIC */
 #define ELFOSABI_AMDGPU_MESA3D 66 /* AMD Mesa3D Runtime */
-#define ELFOSABI_ARM	     97	/* ARM */
-#define ELFOSABI_STANDALONE 255	/* Standalone (embedded) application */
+#define ELFOSABI_ARM	       97 /* ARM */
+#define ELFOSABI_STANDALONE   255 /* Standalone (embedded) application */
 
 #define EI_ABIVERSION	8	/* ABI version */
 
 #define EI_PAD		9	/* Start of padding bytes */
 
-
 /* Values for e_type, which identifies the object file type.  */
 
 #define ET_NONE		0	/* No file type */
@@ -479,11 +479,12 @@
 #define PT_SHLIB	5		/* Reserved, unspecified semantics */
 #define PT_PHDR		6		/* Entry for header table itself */
 #define PT_TLS		7		/* Thread local storage segment */
+#define	PT_NUM		8		/* Number of defined types.  */
+
 #define PT_LOOS		0x60000000	/* OS-specific */
 #define PT_HIOS		0x6fffffff	/* OS-specific */
-#define PT_LOPROC	0x70000000	/* Processor-specific */
-#define PT_HIPROC	0x7FFFFFFF	/* Processor-specific */
 
+#define PT_SUNW_UNWIND  (PT_LOOS + 0x464e550)
 #define PT_GNU_EH_FRAME	(PT_LOOS + 0x474e550) /* Frame unwind information */
 #define PT_SUNW_EH_FRAME PT_GNU_EH_FRAME      /* Solaris uses the same value */
 #define PT_GNU_STACK	(PT_LOOS + 0x474e551) /* Stack flags */
@@ -499,11 +500,20 @@
 #define PT_OPENBSD_SYSCALLS  (PT_LOOS + 0x5a3dbe9)  /* System call sites.  */
 #define PT_OPENBSD_BOOTDATA  (PT_LOOS + 0x5a41be6)  /* Section for boot arguments.  */
 
+/* Solaris segment types.  */
+#define PT_SUNWBSS	(PT_LOOS + 0xffffffa)	/* Sun Specific segment.  */
+#define PT_SUNWSTACK	(PT_LOOS + 0xffffffb)	/* Stack segment.  */
+#define PT_SUNWDTRACE   (PT_LOOS + 0xffffffc)
+#define PT_SUNWCAP      (PT_LOOS + 0xffffffd)
+
 /* Mbind segments */
 #define PT_GNU_MBIND_NUM 4096
 #define PT_GNU_MBIND_LO (PT_LOOS + 0x474e555)
 #define PT_GNU_MBIND_HI (PT_GNU_MBIND_LO + PT_GNU_MBIND_NUM - 1)
 
+#define PT_LOPROC	0x70000000	/* Processor-specific */
+#define PT_HIPROC	0x7FFFFFFF	/* Processor-specific */
+
 /* Program segment permissions, in program header p_flags field.  */
 
 #define PF_X		(1 << 0)	/* Segment is executable */
@@ -538,17 +548,40 @@
 #define SHT_LOOS	0x60000000	/* First of OS specific semantics */
 #define SHT_HIOS	0x6fffffff	/* Last of OS specific semantics */
 
-#define SHT_GNU_INCREMENTAL_INPUTS 0x6fff4700   /* incremental build data */
-#define SHT_GNU_ATTRIBUTES 0x6ffffff5	/* Object attributes */
-#define SHT_GNU_HASH	0x6ffffff6	/* GNU style symbol hash table */
-#define SHT_GNU_LIBLIST	0x6ffffff7	/* List of prelink dependencies */
-
+#define SHT_ANDROID_REL              0x60000001
+#define SHT_ANDROID_RELA             0x60000002
+
+#define SHT_GNU_INCREMENTAL_INPUTS   0x6fff4700 /* Incremental build data */
+
+#define SHT_LLVM_ODRTAB              0x6fff4c00 /* LLVM ODR table.  */
+#define SHT_LLVM_LINKER_OPTIONS      0x6fff4c01 /* LLVM Linker Options.  */
+#define SHT_LLVM_ADDRSIG             0x6fff4c03 /* List of address-significant symbols for safe ICF.  */
+#define SHT_LLVM_DEPENDENT_LIBRARIES 0x6fff4c04 /* LLVM Dependent Library Specifiers.  */
+#define SHT_LLVM_SYMPART             0x6fff4c05 /* Symbol partition specification.  */
+#define SHT_LLVM_PART_EHDR           0x6fff4c06 /* ELF header for loadable partition.  */
+#define SHT_LLVM_PART_PHDR           0x6fff4c07 /* Phdrs for loadable partition.  */
+#define SHT_LLVM_BB_ADDR_MAP_V0      0x6fff4c08 /* LLVM Basic Block Address Map.  */
+#define SHT_LLVM_CALL_GRAPH_PROFILE  0x6fff4c09 /* LLVM Call Graph Profile.  */
+#define SHT_LLVM_BB_ADDR_MAP         0x6fff4c0a /* LLVM Basic Block Address Map.  */
+#define SHT_LLVM_OFFLOADING          0x6fff4c0b /* LLVM device offloading data.  */
+#define SHT_LLVM_LTO                 0x6fff4c0c /* .llvm.lto for fat LTO.  */
+
+#define SHT_ANDROID_RELR             0x6fffff00
+
+#define SHT_GNU_ATTRIBUTES           0x6ffffff5	/* Object attributes */
+#define SHT_GNU_HASH	             0x6ffffff6	/* GNU style symbol hash table */
+#define SHT_GNU_LIBLIST	             0x6ffffff7	/* List of prelink dependencies */
+#define SHT_CHECKSUM	             0x6ffffff8	/* Checksum for DSO content.  */
+
+#define SHT_SUNW_move	             0x6ffffffa
+#define SHT_SUNW_COMDAT              0x6ffffffb
+#define SHT_SUNW_syminfo             0x6ffffffc
 /* The next three section types are defined by Solaris, and are named
    SHT_SUNW*.  We use them in GNU code, so we also define SHT_GNU*
    versions.  */
-#define SHT_SUNW_verdef	0x6ffffffd	/* Versions defined by file */
-#define SHT_SUNW_verneed 0x6ffffffe	/* Versions needed by file */
-#define SHT_SUNW_versym	0x6fffffff	/* Symbol versions */
+#define SHT_SUNW_verdef	             0x6ffffffd	/* Versions defined by file */
+#define SHT_SUNW_verneed             0x6ffffffe	/* Versions needed by file */
+#define SHT_SUNW_versym	             0x6fffffff	/* Symbol versions */
 
 #define SHT_GNU_verdef	SHT_SUNW_verdef
 #define SHT_GNU_verneed	SHT_SUNW_verneed
@@ -556,6 +589,7 @@
 
 #define SHT_LOPROC	0x70000000	/* Processor-specific semantics, lo */
 #define SHT_HIPROC	0x7FFFFFFF	/* Processor-specific semantics, hi */
+
 #define SHT_LOUSER	0x80000000	/* Application-specific semantics */
 /* #define SHT_HIUSER	0x8FFFFFFF    *//* Application-specific semantics */
 #define SHT_HIUSER	0xFFFFFFFF	/* New value, defined in Oct 4, 1999 Draft */
@@ -576,19 +610,16 @@
 
 /* #define SHF_MASKOS	0x0F000000    *//* OS-specific semantics */
 #define SHF_MASKOS	0x0FF00000	/* New value, Oct 4, 1999 Draft */
-#define SHF_GNU_RETAIN	      (1 << 21)	/* Section should not be garbage collected by the linker.  */
-#define SHF_MASKPROC	0xF0000000	/* Processor-specific semantics */
+#define SHF_GNU_RETAIN	(1 << 21)	/* Section should not be garbage collected by the linker.  */
+#define SHF_GNU_MBIND	(1 << 24)	/* Mbind section.  */
 
+#define SHF_MASKPROC	0xF0000000	/* Processor-specific semantics */
 /* This used to be implemented as a processor specific section flag.
-   We just make it generic.  */
-#define SHF_EXCLUDE	0x80000000	/* Link editor is to exclude
-					   this section from executable
-					   and shared library that it
-					   builds when those objects
-					   are not to be further
-					   relocated.  */
-
-#define SHF_GNU_MBIND	0x01000000	/* Mbind section.  */
+   We just make it generic.  The definition is:	the link editor is
+   to exclude this section from executable and shared libraries that
+   it builds when those objects are not to be further relocated.  */
+#define SHF_EXCLUDE	(1U << 31)
+
 
 /* Compression types.  */
 #define ELFCOMPRESS_ZLIB   1		/* Compressed with zlib.  */
diff --git a/include/elf/csky.h b/include/elf/csky.h
index fcecbb1ae90..c35a9ff0523 100644
--- a/include/elf/csky.h
+++ b/include/elf/csky.h
@@ -95,7 +95,7 @@ START_RELOC_NUMBERS (elf_csky_reloc_type)
 END_RELOC_NUMBERS (R_CKCORE_MAX)
 
 /* Additional section types.  */
-#define SHT_CSKY_ATTRIBUTES       0x70000001 /* Section holds attributes.  */
+#define SHT_CSKY_ATTRIBUTES       (SHT_LOPROC + 1) /* Section holds attributes.  */
 
 /* Object attribute tags.  */
 enum
diff --git a/include/elf/hppa.h b/include/elf/hppa.h
index 0cafb9938e0..fc901080dc0 100644
--- a/include/elf/hppa.h
+++ b/include/elf/hppa.h
@@ -63,27 +63,27 @@
 /* Processor specific section types.  */
 
 /* Section contains product specific extension bits.  */
-#define SHT_PARISC_EXT		0x70000000
+#define SHT_PARISC_EXT		(SHT_LOPROC + 0)
 
 /* Section contains unwind table entries.  */
-#define SHT_PARISC_UNWIND	0x70000001
+#define SHT_PARISC_UNWIND	(SHT_LOPROC + 1)
 
 /* Section contains debug information for optimized code.  */
-#define SHT_PARISC_DOC		0x70000002
+#define SHT_PARISC_DOC		(SHT_LOPROC + 2)
 
 /* Section contains code annotations.  */
-#define SHT_PARISC_ANNOT	0x70000003
+#define SHT_PARISC_ANNOT	(SHT_LOPROC + 3)
 
 /* DLKM special section.  */
-#define SHT_PARISC_DLKM		0x70000004
+#define SHT_PARISC_DLKM		(SHT_LOPROC + 4)
 
 /* These are strictly for compatibility with the older elf32-hppa
    implementation.  Hopefully we can eliminate them in the future.  */
 /* Optional section holding argument location/relocation info.  */
-#define SHT_PARISC_SYMEXTN    SHT_LOPROC + 8
+#define SHT_PARISC_SYMEXTN      (SHT_LOPROC + 8)
 
 /* Option section for linker stubs.  */
-#define SHT_PARISC_STUBS      SHT_LOPROC + 9
+#define SHT_PARISC_STUBS        (SHT_LOPROC + 9)
 
 /* Processor specific section flags.  */
 
diff --git a/include/elf/mips.h b/include/elf/mips.h
index 686d5500e02..fb3357666ec 100644
--- a/include/elf/mips.h
+++ b/include/elf/mips.h
@@ -373,131 +373,136 @@ END_RELOC_NUMBERS (R_MIPS_maxext)
 
 /* Section contains the set of dynamic shared objects used when
    statically linking.  */
-#define SHT_MIPS_LIBLIST	0x70000000
+#define SHT_MIPS_LIBLIST	(SHT_LOPROC + 0)
 
 /* I'm not sure what this is, but it's used on Irix 5.  */
-#define SHT_MIPS_MSYM		0x70000001
+#define SHT_MIPS_MSYM		(SHT_LOPROC + 1)
 
 /* Section contains list of symbols whose definitions conflict with
    symbols defined in shared objects.  */
-#define SHT_MIPS_CONFLICT	0x70000002
+#define SHT_MIPS_CONFLICT	(SHT_LOPROC + 2)
 
 /* Section contains the global pointer table.  */
-#define SHT_MIPS_GPTAB		0x70000003
+#define SHT_MIPS_GPTAB		(SHT_LOPROC + 3)
 
 /* Section contains microcode information.  The exact format is
    unspecified.  */
-#define SHT_MIPS_UCODE		0x70000004
+#define SHT_MIPS_UCODE		(SHT_LOPROC + 4)
 
 /* Section contains some sort of debugging information.  The exact
    format is unspecified.  It's probably ECOFF symbols.  */
-#define SHT_MIPS_DEBUG		0x70000005
+#define SHT_MIPS_DEBUG		(SHT_LOPROC + 5)
 
 /* Section contains register usage information.  */
-#define SHT_MIPS_REGINFO	0x70000006
+#define SHT_MIPS_REGINFO	(SHT_LOPROC + 6)
 
 /* ??? */
-#define SHT_MIPS_PACKAGE	0x70000007
+#define SHT_MIPS_PACKAGE	(SHT_LOPROC + 7)
 
 /* ??? */
-#define SHT_MIPS_PACKSYM	0x70000008
+#define SHT_MIPS_PACKSYM	(SHT_LOPROC + 8)
 
 /* ??? */
-#define SHT_MIPS_RELD		0x70000009
+#define SHT_MIPS_RELD		(SHT_LOPROC + 9)
 
+/* Note: SHT_LOPROC + 0xa is missing...  */
+  
 /* Section contains interface information.  */
-#define SHT_MIPS_IFACE		0x7000000b
+#define SHT_MIPS_IFACE		(SHT_LOPROC + 0xb)
 
 /* Section contains description of contents of another section.  */
-#define SHT_MIPS_CONTENT	0x7000000c
+#define SHT_MIPS_CONTENT	(SHT_LOPROC + 0xc)
 
 /* Section contains miscellaneous options.  */
-#define SHT_MIPS_OPTIONS	0x7000000d
+#define SHT_MIPS_OPTIONS	(SHT_LOPROC + 0xd)
+
+/* Note: SHT_LOPROC + 0xe is missing...  */
+/* Note: SHT_LOPROC + 0xf is missing...  */
 
 /* ??? */
-#define SHT_MIPS_SHDR		0x70000010
+#define SHT_MIPS_SHDR		(SHT_LOPROC + 0x10)
 
 /* ??? */
-#define SHT_MIPS_FDESC		0x70000011
+#define SHT_MIPS_FDESC		(SHT_LOPROC + 0x11)
 
 /* ??? */
-#define SHT_MIPS_EXTSYM		0x70000012
+#define SHT_MIPS_EXTSYM		(SHT_LOPROC + 0x12)
 
 /* ??? */
-#define SHT_MIPS_DENSE		0x70000013
+#define SHT_MIPS_DENSE		(SHT_LOPROC + 0x13)
 
 /* ??? */
-#define SHT_MIPS_PDESC		0x70000014
+#define SHT_MIPS_PDESC		(SHT_LOPROC + 0x14)
 
 /* ??? */
-#define SHT_MIPS_LOCSYM		0x70000015
+#define SHT_MIPS_LOCSYM		(SHT_LOPROC + 0x15)
 
 /* ??? */
-#define SHT_MIPS_AUXSYM		0x70000016
+#define SHT_MIPS_AUXSYM		(SHT_LOPROC + 0x16)
 
 /* ??? */
-#define SHT_MIPS_OPTSYM		0x70000017
+#define SHT_MIPS_OPTSYM		(SHT_LOPROC + 0x17)
 
 /* ??? */
-#define SHT_MIPS_LOCSTR		0x70000018
+#define SHT_MIPS_LOCSTR		(SHT_LOPROC + 0x18)
 
 /* ??? */
-#define SHT_MIPS_LINE		0x70000019
+#define SHT_MIPS_LINE		(SHT_LOPROC + 0x19)
 
 /* ??? */
-#define SHT_MIPS_RFDESC		0x7000001a
+#define SHT_MIPS_RFDESC		(SHT_LOPROC + 0x1a)
 
 /* Delta C++: symbol table */
-#define SHT_MIPS_DELTASYM	0x7000001b
+#define SHT_MIPS_DELTASYM	(SHT_LOPROC + 0x1b)
 
 /* Delta C++: instance table */
-#define SHT_MIPS_DELTAINST	0x7000001c
+#define SHT_MIPS_DELTAINST	(SHT_LOPROC + 0x1c)
 
 /* Delta C++: class table */
-#define SHT_MIPS_DELTACLASS	0x7000001d
+#define SHT_MIPS_DELTACLASS	(SHT_LOPROC + 0x1d)
 
 /* DWARF debugging section.  */
-#define SHT_MIPS_DWARF		0x7000001e
+#define SHT_MIPS_DWARF		(SHT_LOPROC + 0x1e)
 
 /* Delta C++: declarations */
-#define SHT_MIPS_DELTADECL	0x7000001f
+#define SHT_MIPS_DELTADECL	(SHT_LOPROC + 0x1f)
 
 /* List of libraries the binary depends on.  Includes a time stamp, version
    number.  */
-#define SHT_MIPS_SYMBOL_LIB	0x70000020
+#define SHT_MIPS_SYMBOL_LIB	(SHT_LOPROC + 0x20)
 
 /* Events section.  */
-#define SHT_MIPS_EVENTS		0x70000021
+#define SHT_MIPS_EVENTS		(SHT_LOPROC + 0x21)
 
 /* ??? */
-#define SHT_MIPS_TRANSLATE	0x70000022
+#define SHT_MIPS_TRANSLATE	(SHT_LOPROC + 0x22)
 
 /* Special pixie sections */
-#define SHT_MIPS_PIXIE		0x70000023
+#define SHT_MIPS_PIXIE		(SHT_LOPROC + 0x23)
 
 /* Address translation table (for debug info) */
-#define SHT_MIPS_XLATE		0x70000024
+#define SHT_MIPS_XLATE		(SHT_LOPROC + 0x24)
 
 /* SGI internal address translation table (for debug info) */
-#define SHT_MIPS_XLATE_DEBUG	0x70000025
+#define SHT_MIPS_XLATE_DEBUG	(SHT_LOPROC + 0x25)
 
 /* Intermediate code */
-#define SHT_MIPS_WHIRL		0x70000026
+#define SHT_MIPS_WHIRL		(SHT_LOPROC + 0x26)
 
 /* C++ exception handling region info */
-#define SHT_MIPS_EH_REGION	0x70000027
+#define SHT_MIPS_EH_REGION	(SHT_LOPROC + 0x27)
 
 /* Obsolete address translation table (for debug info) */
-#define SHT_MIPS_XLATE_OLD	0x70000028
+#define SHT_MIPS_XLATE_OLD	(SHT_LOPROC + 0x28)
 
 /* Runtime procedure descriptor table exception information (ucode) ??? */
-#define SHT_MIPS_PDR_EXCEPTION	0x70000029
+#define SHT_MIPS_PDR_EXCEPTION	(SHT_LOPROC + 0x29)
 
 /* ABI related flags section.  */
-#define SHT_MIPS_ABIFLAGS	0x7000002a
+#define SHT_MIPS_ABIFLAGS	(SHT_LOPROC + 0x2a)
 
 /* GNU style symbol hash table with xlat.  */
-#define SHT_MIPS_XHASH		0x7000002b
+#define SHT_MIPS_XHASH		(SHT_LOPROC + 0x2b)
 
 /* A section of type SHT_MIPS_LIBLIST contains an array of the
    following structure.  The sh_link field is the section index of the
diff --git a/include/elf/msp430.h b/include/elf/msp430.h
index dfff0d53546..3b085fdcf45 100644
--- a/include/elf/msp430.h
+++ b/include/elf/msp430.h
@@ -50,7 +50,7 @@
 #define E_MSP430_MACH_MSP430x47  47
 #define E_MSP430_MACH_MSP430x54  54
 
-#define SHT_MSP430_ATTRIBUTES	0x70000003	/* Section holds ABI attributes.  */
+#define SHT_MSP430_ATTRIBUTES	(SHT_LOPROC + 3)/* Section holds ABI attributes.  */
 #define SHT_MSP430_SEC_FLAGS	0x7f000005	/* Holds TI compiler's section flags.  */
 #define SHT_MSP430_SYM_ALIASES	0x7f000006	/* Holds TI compiler's symbol aliases.  */
 
diff --git a/include/elf/riscv.h b/include/elf/riscv.h
index c1e73f7f5c0..24903c04d91 100644
--- a/include/elf/riscv.h
+++ b/include/elf/riscv.h
@@ -141,7 +141,7 @@ END_RELOC_NUMBERS (R_RISCV_max)
 #define EF_RISCV_TSO 0x0010
 
 /* Additional section types.  */
-#define SHT_RISCV_ATTRIBUTES 0x70000003 /* Section holds attributes.  */
+#define SHT_RISCV_ATTRIBUTES (SHT_LOPROC + 3) /* Section holds attributes.  */
 
 /* Processor specific program header types.  */
 
diff --git a/include/elf/x86-64.h b/include/elf/x86-64.h
index ea5036a8bbf..6b5ada8e579 100644
--- a/include/elf/x86-64.h
+++ b/include/elf/x86-64.h
@@ -118,7 +118,7 @@ END_RELOC_NUMBERS (R_X86_64_max)
 
 /* Processor specific section types.  */
 
-#define SHT_X86_64_UNWIND	0x70000001	/* unwind information */
+#define SHT_X86_64_UNWIND	(SHT_LOPROC + 1)  /* Unwind information.  */
 
 /* Like SHN_COMMON but the symbol will be allocated in the .lbss
    section.  */

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-05-28  9:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-28  9:12 [binutils-gdb] Add new ELF section and segment types to readelf Nick Clifton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).