diff options
| author | Roland McGrath <[email protected]> | 2006-07-21 10:06:31 +0000 |
|---|---|---|
| committer | Roland McGrath <[email protected]> | 2006-07-21 10:06:31 +0000 |
| commit | 950246297c03f9ce25f645470250619e40d71018 (patch) | |
| tree | 9727ed2b50b6c582cfb7f36672361f7f3d335876 /backends/ia64_regs.c | |
| parent | 858b189f82ecc32ca7042e74ccb022f794a9f83b (diff) | |
backends/
2006-07-21 Roland McGrath <[email protected]>
* 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 <[email protected]>
* allregs.c (struct reginfo): Increase size of name.
(one_register): Assert that it's big enough.
Diffstat (limited to 'backends/ia64_regs.c')
| -rw-r--r-- | backends/ia64_regs.c | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/backends/ia64_regs.c b/backends/ia64_regs.c new file mode 100644 index 00000000..bcb456e9 --- /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; +} |
