summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mjw@redhat.com>2015-09-03 12:50:54 +0200
committerMark Wielaard <mjw@redhat.com>2015-09-03 12:50:54 +0200
commitc3f93ad84e653a23a66d8fa4110292ed900ede25 (patch)
treee2303aded753f9eb6060e2cbda1f9d71be2bfaca
parentb00a4fa78779ff0f304fa6cb34d49622679c86d4 (diff)
downloadelfutils-c3f93ad84e653a23a66d8fa4110292ed900ede25.tar.gz
backends: Use ebl->class consistently in sparc backend.
sparc_init would check the ELF class to register to correct core_note handler. But sparc_register_info would check the ELF machine to determine whether the register set was 32 or 64 bits. This caused some confusion and assertion failures in readelf when printing core notes where the sparc machine and class didn't seem to match up. Check the ELF class in both sparc_unit and sparc_register_info to give consistent results. Signed-off-by: Mark Wielaard <mjw@redhat.com>
-rw-r--r--backends/ChangeLog4
-rw-r--r--backends/sparc_regs.c12
2 files changed, 10 insertions, 6 deletions
diff --git a/backends/ChangeLog b/backends/ChangeLog
index c95e80f1..4accedcb 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,7 @@
+2015-09-03 Mark Wielaard <mjw@redhat.com>
+
+ * sparc_regs.c (sparc_register_info): Use ebl->class not ebl->machine.
+
2015-06-26 Pino Toscano <toscano.pino@tiscali.it>
* i386_initreg.c: Reduce scope of some includes to match their usage.
diff --git a/backends/sparc_regs.c b/backends/sparc_regs.c
index f9709bb3..2bddcf43 100644
--- a/backends/sparc_regs.c
+++ b/backends/sparc_regs.c
@@ -1,5 +1,5 @@
/* Register names and numbers for SPARC DWARF.
- Copyright (C) 2005, 2006 Red Hat, Inc.
+ Copyright (C) 2005, 2006, 2015 Red Hat, Inc.
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -42,8 +42,8 @@ sparc_register_info (Ebl *ebl,
const char **prefix, const char **setname,
int *bits, int *type)
{
- const int nfp = 32 + (ebl->machine == EM_SPARC ? 0 : 16);
- const int nspec = ebl->machine == EM_SPARC ? 8 : 6;
+ const int nfp = 32 + (ebl->class == ELFCLASS32 ? 0 : 16);
+ const int nspec = ebl->class == ELFCLASS32 ? 8 : 6;
if (name == NULL)
return 32 + nfp + nspec;
@@ -51,7 +51,7 @@ sparc_register_info (Ebl *ebl,
if (regno < 0 || regno >= 32 + nfp + nspec || namelen < 6)
return -1;
- *bits = ebl->machine == EM_SPARC ? 32 : 64;
+ *bits = ebl->class == ELFCLASS32 ? 32 : 64;
*type = DW_ATE_signed;
*prefix = "%";
@@ -66,9 +66,9 @@ sparc_register_info (Ebl *ebl,
};
*setname = "control";
*type = DW_ATE_unsigned;
- if ((ebl->machine != EM_SPARC ? 0 : 4) + 1 - (unsigned int) regno <= 1)
+ if ((ebl->class == ELFCLASS64 ? 0 : 4) + 1 - (unsigned int) regno <= 1)
*type = DW_ATE_address;
- return stpncpy (name, names[ebl->machine != EM_SPARC][regno],
+ return stpncpy (name, names[ebl->class == ELFCLASS64][regno],
namelen) + 1 - name;
}