Make add_separate_debug_objfile static
[deliverable/binutils-gdb.git] / binutils / readelf.c
index 2a9d1455647bb04d2c874b8560019265e554be41..1d8f62bf50b625445061b3d9acedaff89c9b37d0 100644 (file)
@@ -4852,7 +4852,7 @@ process_file_header (Filedata * filedata)
       return FALSE;
     }
 
-  init_dwarf_regnames (header->e_machine);
+  init_dwarf_regnames_by_elf_machine_code (header->e_machine);
 
   if (do_header)
     {
@@ -5262,11 +5262,17 @@ process_program_headers (Filedata * filedata)
              unsigned int j;
 
              for (j = 1; j < filedata->file_header.e_phnum; j++)
-               if (filedata->program_headers[j].p_vaddr <= segment->p_vaddr
-                   && (filedata->program_headers[j].p_vaddr
-                       + filedata->program_headers[j].p_memsz)
-                   >= (segment->p_vaddr + segment->p_filesz))
-                 break;
+               {
+                 Elf_Internal_Phdr *load = filedata->program_headers + j;
+                 if (load->p_type == PT_LOAD
+                     && load->p_offset <= segment->p_offset
+                     && (load->p_offset + load->p_filesz
+                         >= segment->p_offset + segment->p_filesz)
+                     && load->p_vaddr <= segment->p_vaddr
+                     && (load->p_vaddr + load->p_filesz
+                         >= segment->p_vaddr + segment->p_filesz))
+                   break;
+               }
              if (j == filedata->file_header.e_phnum)
                error (_("the PHDR segment is not covered by a LOAD segment\n"));
            }
@@ -12303,8 +12309,12 @@ process_syminfo (Filedata * filedata ATTRIBUTE_UNUSED)
   return TRUE;
 }
 
-#define IN_RANGE(START,END,ADDR,OFF)           \
-  (((ADDR) >= (START)) && ((ADDR) + (OFF) < (END)))
+/* A macro which evaluates to TRUE if the region ADDR .. ADDR + NELEM
+   is contained by the region START .. END.  The types of ADDR, START
+   and END should all be the same.  Note both ADDR + NELEM and END
+   point to just beyond the end of the regions that are being tested.  */
+#define IN_RANGE(START,END,ADDR,NELEM)         \
+  (((ADDR) >= (START)) && ((ADDR) < (END)) && ((ADDR) + (NELEM) <= (END)))
 
 /* Check to see if the given reloc needs to be handled in a target specific
    manner.  If so then process the reloc and return TRUE otherwise return
@@ -13405,7 +13415,7 @@ apply_relocations (Filedata *                 filedata,
            }
 
          rloc = start + rp->r_offset;
-         if (rloc >= end || (rloc + reloc_size) > end || (rloc < start))
+         if (!IN_RANGE (start, end, rloc, reloc_size))
            {
              warn (_("skipping invalid relocation offset 0x%lx in section %s\n"),
                    (unsigned long) rp->r_offset,
@@ -15738,6 +15748,36 @@ display_msp430x_attribute (unsigned char * p,
   return p;
 }
 
+static unsigned char *
+display_msp430_gnu_attribute (unsigned char * p,
+                             unsigned int tag,
+                             const unsigned char * const end)
+{
+  if (tag == Tag_GNU_MSP430_Data_Region)
+    {
+      unsigned int len;
+      int val;
+
+      val = read_uleb128 (p, &len, end);
+      p += len;
+      printf ("  Tag_GNU_MSP430_Data_Region: ");
+
+      switch (val)
+       {
+       case Val_GNU_MSP430_Data_Region_Any:
+         printf (_("Any Region\n"));
+         break;
+       case Val_GNU_MSP430_Data_Region_Lower:
+         printf (_("Lower Region Only\n"));
+         break;
+       default:
+         printf ("??? (%d)\n", val);
+       }
+      return p;
+    }
+  return display_tag_value (tag & 1, p, end);
+}
+
 struct riscv_attr_tag_t {
   const char *name;
   int tag;
@@ -19562,7 +19602,7 @@ process_arch_specific (Filedata * filedata)
     case EM_MSP430:
      return process_attributes (filedata, "mspabi", SHT_MSP430_ATTRIBUTES,
                                display_msp430x_attribute,
-                               display_generic_attribute);
+                               display_msp430_gnu_attribute);
 
     case EM_RISCV:
      return process_attributes (filedata, "riscv", SHT_RISCV_ATTRIBUTES,
This page took 0.025856 seconds and 4 git commands to generate.