LCOV - code coverage report
Current view: top level - backends - ppc_regs.c (source / functions) Hit Total Coverage
Test: elfutils-0.181 Lines: 113 113 100.0 %
Date: 2020-09-08 14:07:57 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* Register names and numbers for PowerPC DWARF.
       2             :    Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
       3             :    This file is part of elfutils.
       4             : 
       5             :    This file is free software; you can redistribute it and/or modify
       6             :    it under the terms of either
       7             : 
       8             :      * the GNU Lesser General Public License as published by the Free
       9             :        Software Foundation; either version 3 of the License, or (at
      10             :        your option) any later version
      11             : 
      12             :    or
      13             : 
      14             :      * the GNU General Public License as published by the Free
      15             :        Software Foundation; either version 2 of the License, or (at
      16             :        your option) any later version
      17             : 
      18             :    or both in parallel, as here.
      19             : 
      20             :    elfutils is distributed in the hope that it will be useful, but
      21             :    WITHOUT ANY WARRANTY; without even the implied warranty of
      22             :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      23             :    General Public License for more details.
      24             : 
      25             :    You should have received copies of the GNU General Public License and
      26             :    the GNU Lesser General Public License along with this program.  If
      27             :    not, see <http://www.gnu.org/licenses/>.  */
      28             : 
      29             : #ifdef HAVE_CONFIG_H
      30             : # include <config.h>
      31             : #endif
      32             : 
      33             : #include <string.h>
      34             : #include <dwarf.h>
      35             : 
      36             : #define BACKEND ppc_
      37             : #include "libebl_CPU.h"
      38             : 
      39             : ssize_t
      40        5815 : ppc_register_info (Ebl *ebl __attribute__ ((unused)),
      41             :                    int regno, char *name, size_t namelen,
      42             :                    const char **prefix, const char **setname,
      43             :                    int *bits, int *type)
      44             : {
      45        5815 :   if (name == NULL)
      46             :     return 1156;
      47             : 
      48        5810 :   if (regno < 0 || regno > 1155 || namelen < 8)
      49             :     return -1;
      50             : 
      51        5810 :   *prefix = "";
      52        5810 :   *bits = ebl->machine == EM_PPC64 ? 64 : 32;
      53       11620 :   *type = (regno < 32 ? DW_ATE_signed
      54        5810 :            : regno < 64 ? DW_ATE_float : DW_ATE_unsigned);
      55             : 
      56        5810 :   if (regno < 32 || regno == 64 || regno == 66)
      57         196 :     *setname = "integer";
      58        5614 :   else if (regno < 64 || regno == 65)
      59             :     {
      60         169 :       *setname = "FPU";
      61         169 :       if (ebl->machine != EM_PPC64 && regno < 64)
      62          96 :         *bits = 64;
      63             :     }
      64        5445 :   else if (regno == 67 || regno == 356 || regno == 612 || regno >= 1124)
      65             :     {
      66         175 :       *setname = "vector";
      67         190 :       *bits = regno >= 1124 ? 128 : 32;
      68             :     }
      69             :   else
      70        5270 :     *setname = "privileged";
      71             : 
      72        5810 :   switch (regno)
      73             :     {
      74          64 :     case 0 ... 9:
      75          64 :       name[0] = 'r';
      76          64 :       name[1] = regno + '0';
      77          64 :       namelen = 2;
      78          64 :       break;
      79             : 
      80         122 :     case 10 ... 31:
      81         122 :       name[0] = 'r';
      82         122 :       name[1] = regno / 10 + '0';
      83         122 :       name[2] = regno % 10 + '0';
      84         122 :       namelen = 3;
      85         122 :       break;
      86             : 
      87          50 :     case 32 + 0 ... 32 + 9:
      88          50 :       name[0] = 'f';
      89          50 :       name[1] = (regno - 32) + '0';
      90          50 :       namelen = 2;
      91          50 :       break;
      92             : 
      93         110 :     case 32 + 10 ... 32 + 31:
      94         110 :       name[0] = 'f';
      95         110 :       name[1] = (regno - 32) / 10 + '0';
      96         110 :       name[2] = (regno - 32) % 10 + '0';
      97         110 :       namelen = 3;
      98         110 :       break;
      99             : 
     100             :     case 64:
     101          10 :       return stpcpy (name, "cr") + 1 - name;
     102             :     case 65:
     103          18 :       return stpcpy (name, "fpscr") + 1 - name;
     104             :     case 66:
     105          10 :       return stpcpy (name, "msr") + 1 - name;
     106             :     case 67:                    /* XXX unofficial assignment */
     107          10 :       return stpcpy (name, "vscr") + 1 - name;
     108             : 
     109          50 :     case 70 + 0 ... 70 + 9:
     110          50 :       name[0] = 's';
     111          50 :       name[1] = 'r';
     112          50 :       name[2] = (regno - 70) + '0';
     113          50 :       namelen = 3;
     114          50 :       break;
     115             : 
     116          30 :     case 70 + 10 ... 70 + 15:
     117          30 :       name[0] = 's';
     118          30 :       name[1] = 'r';
     119          30 :       name[2] = (regno - 70) / 10 + '0';
     120          30 :       name[3] = (regno - 70) % 10 + '0';
     121          30 :       namelen = 4;
     122          30 :       break;
     123             : 
     124             :     case 101:
     125          10 :       return stpcpy (name, "xer") + 1 - name;
     126             :     case 108:
     127          10 :       return stpcpy (name, "lr") + 1 - name;
     128             :     case 109:
     129          10 :       return stpcpy (name, "ctr") + 1 - name;
     130             :     case 118:
     131          10 :       return stpcpy (name, "dsisr") + 1 - name;
     132             :     case 119:
     133          10 :       return stpcpy (name, "dar") + 1 - name;
     134             :     case 122:
     135          10 :       return stpcpy (name, "dec") + 1 - name;
     136             :     case 356:
     137          10 :       return stpcpy (name, "vrsave") + 1 - name;
     138             :     case 612:
     139          10 :       return stpcpy (name, "spefscr") + 1 - name;
     140           5 :     case 100:
     141           5 :       if (*bits == 32)
     142           6 :         return stpcpy (name, "mq") + 1 - name;
     143          32 :       FALLTHROUGH;
     144             :     case 102 ... 107:
     145          32 :       name[0] = 's';
     146          32 :       name[1] = 'p';
     147          32 :       name[2] = 'r';
     148          32 :       name[3] = (regno - 100) + '0';
     149          32 :       namelen = 4;
     150          32 :       break;
     151             : 
     152             :     case 114:
     153          10 :       return stpcpy (name, "tfhar") + 1 - name;
     154             :     case 115:
     155          10 :       return stpcpy (name, "tfiar") + 1 - name;
     156             :     case 116:
     157          10 :       return stpcpy (name, "texasr") + 1 - name;
     158             : 
     159         420 :     case 110 ... 113:
     160             :     case 117:
     161             :     case 120 ... 121:
     162             :     case 123 ... 199:
     163         420 :       name[0] = 's';
     164         420 :       name[1] = 'p';
     165         420 :       name[2] = 'r';
     166         420 :       name[3] = (regno - 100) / 10 + '0';
     167         420 :       name[4] = (regno - 100) % 10 + '0';
     168         420 :       namelen = 5;
     169         420 :       break;
     170             : 
     171        3990 :     case 200 ... 355:
     172             :     case 357 ... 611:
     173             :     case 613 ... 999:
     174        3990 :       name[0] = 's';
     175        3990 :       name[1] = 'p';
     176        3990 :       name[2] = 'r';
     177        3990 :       name[3] = (regno - 100) / 100 + '0';
     178        3990 :       name[4] = ((regno - 100) % 100 / 10) + '0';
     179        3990 :       name[5] = (regno - 100) % 10 + '0';
     180        3990 :       namelen = 6;
     181        3990 :       break;
     182             : 
     183          50 :     case 1124 + 0 ... 1124 + 9:
     184          50 :       name[0] = 'v';
     185          50 :       name[1] = 'r';
     186          50 :       name[2] = (regno - 1124) + '0';
     187          50 :       namelen = 3;
     188          50 :       break;
     189             : 
     190         110 :     case 1124 + 10 ... 1124 + 31:
     191         110 :       name[0] = 'v';
     192         110 :       name[1] = 'r';
     193         110 :       name[2] = (regno - 1124) / 10 + '0';
     194         110 :       name[3] = (regno - 1124) % 10 + '0';
     195         110 :       namelen = 4;
     196         110 :       break;
     197             : 
     198         700 :     default:
     199         700 :       *setname = NULL;
     200         700 :       return 0;
     201             :     }
     202             : 
     203        5028 :   name[namelen++] = '\0';
     204        5028 :   return namelen;
     205             : }
     206             : 
     207             : __typeof (ppc_register_info)
     208             :      ppc64_register_info __attribute__ ((alias ("ppc_register_info")));

Generated by: LCOV version 1.13