diff options
| author | Roland McGrath <[email protected]> | 2006-10-10 00:25:21 +0000 |
|---|---|---|
| committer | Roland McGrath <[email protected]> | 2006-10-10 00:25:21 +0000 |
| commit | c373d850ec9ca342f4c71d5e287c8d8bf0723cd6 (patch) | |
| tree | c8f9ea814866cdfb30ac9506ccddbc8629ebe345 /backends/i386_regs.c | |
| parent | 1dee360aa30fecd20f403f98fd1cb9e543afcca7 (diff) | |
2006-10-09 Roland McGrath <[email protected]>
* ia64_symbol.c (ia64_reloc_simple_type): Treat SECREL types as simple.
Diffstat (limited to 'backends/i386_regs.c')
| -rw-r--r-- | backends/i386_regs.c | 42 |
1 files changed, 34 insertions, 8 deletions
diff --git a/backends/i386_regs.c b/backends/i386_regs.c index 248700b6..a63c5439 100644 --- a/backends/i386_regs.c +++ b/backends/i386_regs.c @@ -28,14 +28,16 @@ #endif #include <string.h> +#include <dwarf.h> #define BACKEND i386_ #include "libebl_CPU.h" ssize_t -i386_register_name (Ebl *ebl __attribute__ ((unused)), +i386_register_info (Ebl *ebl __attribute__ ((unused)), int regno, char *name, size_t namelen, - const char **prefix, const char **setname) + const char **prefix, const char **setname, + int *bits, int *type) { if (name == NULL) return 46; @@ -44,18 +46,37 @@ i386_register_name (Ebl *ebl __attribute__ ((unused)), return -1; *prefix = "%"; + *bits = 32; + *type = DW_ATE_unsigned; if (regno < 11) - *setname = "integer"; + { + *setname = "integer"; + if (regno < 9) + *type = DW_ATE_signed; + } else if (regno < 19) - *setname = "x87"; + { + *setname = "x87"; + *type = DW_ATE_float; + *bits = 80; + } else if (regno < 29) - *setname = "SSE"; + { + *setname = "SSE"; + *bits = 128; + } else if (regno < 37) - *setname = "MMX"; + { + *setname = "MMX"; + *bits = 64; + } else if (regno < 40) *setname = "FPU-control"; else - *setname = "segment"; + { + *setname = "segment"; + *bits = 16; + } switch (regno) { @@ -64,7 +85,12 @@ i386_register_name (Ebl *ebl __attribute__ ((unused)), "ax", "cx", "dx", "bx", "sp", "bp", "si", "di", "ip" }; - case 0 ... 8: + case 4: + case 5: + case 8: + *type = DW_ATE_address; + case 0 ... 3: + case 6 ... 7: name[0] = 'e'; name[1] = baseregs[regno][0]; name[2] = baseregs[regno][1]; |
