This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] HPPA64 .PARISC.unwind entries


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

commit 43f6cd0588a735c202934789d67b6ed4302f255d
Author: Alan Modra <amodra@gmail.com>
Date:   Wed Oct 10 13:14:56 2018 +1030

    HPPA64 .PARISC.unwind entries
    
    .PARISC.unwind has 32-bit addresses in both 32-bit ELF and 64-bit ELF.
    Well, strictly speaking, the 32-bit "start" and "end" fields are
    segment relative offsets.  (The 64-bit ABI says so, while the 32-bit
    ABI says they are addresses but it appears they are segment relative
    offsets in practice.  Likely the 32-bit ABI lacks an update.)
    
    	* readelf.c (hppa_process_unwind): Don't use eh_addr_size to
    	calculate number of entries.
    	(slurp_hppa_unwind_table): Don't use eh_addr_size here either.

Diff:
---
 binutils/ChangeLog | 7 +++++++
 binutils/readelf.c | 4 ++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 09436cc..fd56834 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,10 @@
+2018-10-10  Helge Deller <deller@gmx.de>
+	    Alan Modra  <amodra@gmail.com>
+
+	* readelf.c (hppa_process_unwind): Don't use eh_addr_size to
+	calculate number of entries.
+	(slurp_hppa_unwind_table): Don't use eh_addr_size here either.
+
 2018-10-10  Alan Modra  <amodra@gmail.com>
 
 	* objdump.c (dump_dwarf): Set s12z eh_addr_size to 4.
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 2748664..41f55ee 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -8065,7 +8065,7 @@ slurp_hppa_unwind_table (Filedata *                  filedata,
 
 	  i = rp->r_offset / unw_ent_size;
 
-	  switch ((rp->r_offset % unw_ent_size) / eh_addr_size)
+	  switch ((rp->r_offset % unw_ent_size) / 4)
 	    {
 	    case 0:
 	      aux->table[i].start.section = sym->st_shndx;
@@ -8133,7 +8133,7 @@ hppa_process_unwind (Filedata * filedata)
     {
       if (streq (SECTION_NAME (sec), ".PARISC.unwind"))
 	{
-	  unsigned long num_unwind = sec->sh_size / (2 * eh_addr_size + 8);
+	  unsigned long num_unwind = sec->sh_size / 16;
 
 	  printf (ngettext ("\nUnwind section '%s' at offset 0x%lx "
 			    "contains %lu entry:\n",


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]