Home | History | Annotate | Download | only in util
      1 /*
      2  * dwarf-regs.c : Mapping of DWARF debug register numbers into register names.
      3  * Extracted from probe-finder.c
      4  *
      5  * Written by Masami Hiramatsu <mhiramat (at) redhat.com>
      6  *
      7  * This program is free software; you can redistribute it and/or modify
      8  * it under the terms of the GNU General Public License as published by
      9  * the Free Software Foundation; either version 2 of the License, or
     10  * (at your option) any later version.
     11  *
     12  * This program is distributed in the hope that it will be useful,
     13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15  * GNU General Public License for more details.
     16  *
     17  * You should have received a copy of the GNU General Public License
     18  * along with this program; if not, write to the Free Software
     19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     20  *
     21  */
     22 
     23 #include <stddef.h>
     24 #include <dwarf-regs.h>
     25 
     26 /*
     27  * Generic dwarf analysis helpers
     28  */
     29 
     30 #define X86_32_MAX_REGS 8
     31 const char *x86_32_regs_table[X86_32_MAX_REGS] = {
     32 	"%ax",
     33 	"%cx",
     34 	"%dx",
     35 	"%bx",
     36 	"$stack",	/* Stack address instead of %sp */
     37 	"%bp",
     38 	"%si",
     39 	"%di",
     40 };
     41 
     42 #define X86_64_MAX_REGS 16
     43 const char *x86_64_regs_table[X86_64_MAX_REGS] = {
     44 	"%ax",
     45 	"%dx",
     46 	"%cx",
     47 	"%bx",
     48 	"%si",
     49 	"%di",
     50 	"%bp",
     51 	"%sp",
     52 	"%r8",
     53 	"%r9",
     54 	"%r10",
     55 	"%r11",
     56 	"%r12",
     57 	"%r13",
     58 	"%r14",
     59 	"%r15",
     60 };
     61 
     62 /* TODO: switching by dwarf address size */
     63 #ifdef __x86_64__
     64 #define ARCH_MAX_REGS X86_64_MAX_REGS
     65 #define arch_regs_table x86_64_regs_table
     66 #else
     67 #define ARCH_MAX_REGS X86_32_MAX_REGS
     68 #define arch_regs_table x86_32_regs_table
     69 #endif
     70 
     71 /* Return architecture dependent register string (for kprobe-tracer) */
     72 const char *get_arch_regstr(unsigned int n)
     73 {
     74 	return (n <= ARCH_MAX_REGS) ? arch_regs_table[n] : NULL;
     75 }
     76