backends/
2006-07-21 Roland McGrath <roland@redhat.com>
* i386_regs.c (i386_register_name): Fix return value when using stpcpy.
* ppc_regs.c (ppc_register_name): Likewise.
* s390_regs.c (s390_register_name): Likewise.
* ia64_retval.c: New file.
* Makefile.am (ia64_SRCS): Add it.
* ia64_init.c (ia64_init): Install return_value_location hook.
* ia64_regs.c: New file.
* Makefile.am (ia64_SRCS): Add it.
* ia64_init.c (ia64_init): Install register_name hook.
tests/
2006-07-21 Roland McGrath <roland@redhat.com>
* allregs.c (struct reginfo): Increase size of name.
(one_register): Assert that it's big enough.
diff --git a/backends/ia64_regs.c b/backends/ia64_regs.c
new file mode 100644
index 0000000..bcb456e
--- /dev/null
+++ b/backends/ia64_regs.c
@@ -0,0 +1,219 @@
+/* Register names and numbers for IA64 DWARF.
+ Copyright (C) 2006 Red Hat, Inc.
+ This file is part of Red Hat elfutils.
+
+ Red Hat elfutils is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by the
+ Free Software Foundation; version 2 of the License.
+
+ Red Hat elfutils is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with Red Hat elfutils; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+ Red Hat elfutils is an included package of the Open Invention Network.
+ An included package of the Open Invention Network is a package for which
+ Open Invention Network licensees cross-license their patents. No patent
+ license is granted, either expressly or impliedly, by designation as an
+ included package. Should you wish to participate in the Open Invention
+ Network licensing program, please visit www.openinventionnetwork.com
+ <http://www.openinventionnetwork.com>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+
+#define BACKEND i386_
+#include "libebl_CPU.h"
+
+ssize_t
+ia64_register_name (Ebl *ebl __attribute__ ((unused)),
+ int regno, char *name, size_t namelen,
+ const char **prefix, const char **setname)
+{
+ if (name == NULL)
+ return 687 + 64;
+
+ if (regno < 0 || regno > 687 + 63 || namelen < 12)
+ return -1;
+
+ *prefix = "";
+
+ *setname = "application";
+ switch (regno)
+ {
+ case 0 ... 9:
+ name[0] = 'r';
+ name[1] = (regno - 0) + '0';
+ namelen = 2;
+ *setname = "integer";
+ break;
+
+ case 10 ... 99:
+ name[0] = 'r';
+ name[1] = (regno - 0) / 10 + '0';
+ name[2] = (regno - 0) % 10 + '0';
+ namelen = 3;
+ *setname = "integer";
+ break;
+
+ case 100 ... 127:
+ name[0] = 'r';
+ name[1] = '1';
+ name[2] = (regno - 100) / 10 + '0';
+ name[3] = (regno - 0) % 10 + '0';
+ namelen = 4;
+ *setname = "integer";
+ break;
+
+ case 128 + 0 ... 128 + 9:
+ name[0] = 'f';
+ name[1] = (regno - 128) + '0';
+ namelen = 2;
+ *setname = "FPU";
+ break;
+
+ case 128 + 10 ... 128 + 99:
+ name[0] = 'f';
+ name[1] = (regno - 128) / 10 + '0';
+ name[2] = (regno - 128) % 10 + '0';
+ namelen = 3;
+ *setname = "FPU";
+ break;
+
+ case 128 + 100 ... 128 + 127:
+ name[0] = 'f';
+ name[1] = '1';
+ name[2] = (regno - 128 - 100) / 10 + '0';
+ name[3] = (regno - 128) % 10 + '0';
+ namelen = 4;
+ *setname = "FPU";
+ break;
+
+ case 320 + 0 ... 320 + 7:
+ name[0] = 'b';
+ name[1] = (regno - 320) + '0';
+ namelen = 2;
+ *setname = "branch";
+ break;
+
+ case 328:
+ return stpcpy (name, "vfp") + 1 - name;
+ case 329:
+ return stpcpy (name, "vrap") + 1 - name;
+ case 330:
+ return stpcpy (name, "pr") + 1 - name;
+ case 331:
+ return stpcpy (name, "ip") + 1 - name;
+ case 332:
+ return stpcpy (name, "psr") + 1 - name;
+ case 333:
+ return stpcpy (name, "cfm") + 1 - name;
+
+ case 334 + 0 ... 334 + 7:
+ name[0] = 'k';
+ name[1] = 'r';
+ name[2] = (regno - 334) + '0';
+ namelen = 3;
+ break;
+
+ case 350:
+ return stpcpy (name, "rsc") + 1 - name;
+ case 351:
+ return stpcpy (name, "bsp") + 1 - name;
+ case 352:
+ return stpcpy (name, "bspstore") + 1 - name;
+ case 353:
+ return stpcpy (name, "rnat") + 1 - name;
+ case 355:
+ return stpcpy (name, "fcr") + 1 - name;
+ case 358:
+ return stpcpy (name, "eflag") + 1 - name;
+ case 359:
+ return stpcpy (name, "csd") + 1 - name;
+ case 360:
+ return stpcpy (name, "ssd") + 1 - name;
+ case 361:
+ return stpcpy (name, "cflg") + 1 - name;
+ case 362:
+ return stpcpy (name, "fsr") + 1 - name;
+ case 363:
+ return stpcpy (name, "fir") + 1 - name;
+ case 364:
+ return stpcpy (name, "fdr") + 1 - name;
+ case 366:
+ return stpcpy (name, "ccv") + 1 - name;
+ case 370:
+ return stpcpy (name, "unat") + 1 - name;
+ case 374:
+ return stpcpy (name, "fpsr") + 1 - name;
+ case 378:
+ return stpcpy (name, "itc") + 1 - name;
+ case 398:
+ return stpcpy (name, "pfs") + 1 - name;
+ case 399:
+ return stpcpy (name, "lc") + 1 - name;
+ case 400:
+ return stpcpy (name, "ec") + 1 - name;
+
+ case 462 + 0 ... 462 + 9:
+ name[0] = 'n';
+ name[1] = 'a';
+ name[2] = 't';
+ name[3] = (regno - 462) + '0';
+ namelen = 4;
+ *setname = "NAT";
+ break;
+
+ case 462 + 10 ... 462 + 99:
+ name[0] = 'n';
+ name[1] = 'a';
+ name[2] = 't';
+ name[3] = (regno - 462) / 10 + '0';
+ name[4] = (regno - 462) % 10 + '0';
+ namelen = 5;
+ *setname = "NAT";
+ break;
+
+ case 462 + 100 ... 462 + 127:
+ name[0] = 'n';
+ name[1] = 'a';
+ name[2] = 't';
+ name[3] = (regno - 462 - 100) / 10 + '0';
+ name[4] = (regno - 462) % 10 + '0';
+ namelen = 5;
+ *setname = "NAT";
+ break;
+
+ case 590:
+ return stpcpy (name, "bof") + 1 - name;
+
+ case 687 + 0 ... 687 + 9:
+ name[0] = 'p';
+ name[1] = (regno - 687) + '0';
+ namelen = 2;
+ *setname = "predicate";
+ break;
+
+ case 687 + 10 ... 687 + 63:
+ name[0] = 'p';
+ name[1] = (regno - 687) / 10 + '0';
+ name[2] = (regno - 687) % 10 + '0';
+ namelen = 3;
+ *setname = "predicate";
+ break;
+
+ default:
+ *setname = NULL;
+ return 0;
+ }
+
+ name[namelen++] = '\0';
+ return namelen;
+}