From: Roland McGrath Date: Sun, 1 Apr 2007 23:11:40 +0000 (+0000) Subject: backends/ X-Git-Tag: elfutils-0.127~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5f6a41a8484d110cb38b0989a3a240dc28fd7310;p=thirdparty%2Felfutils.git backends/ 2007-04-01 Roland McGrath * x86_64_regs.c (x86_64_register_info): Add more registers from newer ABI spec. tests/ 2007-04-01 Roland McGrath * run-allregs.sh: Updated expected output for x86_64. --- diff --git a/backends/ChangeLog b/backends/ChangeLog index 57f33608b..e9f341582 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,8 @@ +2007-04-01 Roland McGrath + + * x86_64_regs.c (x86_64_register_info): Add more registers from newer + ABI spec. + 2007-01-11 Roland McGrath * ia64_symbol.c (ia64_machine_section_flag_check): New function. diff --git a/backends/x86_64_regs.c b/backends/x86_64_regs.c index 1128a3521..c17af85ed 100644 --- a/backends/x86_64_regs.c +++ b/backends/x86_64_regs.c @@ -1,5 +1,5 @@ /* Register names and numbers for x86-64 DWARF. - Copyright (C) 2005, 2006 Red Hat, Inc. + Copyright (C) 2005, 2006, 2007 Red Hat, Inc. This file is part of Red Hat elfutils. Red Hat elfutils is free software; you can redistribute it and/or modify @@ -29,6 +29,7 @@ #include #include +#include #define BACKEND x86_64_ #include "libebl_CPU.h" @@ -40,9 +41,9 @@ x86_64_register_info (Ebl *ebl __attribute__ ((unused)), int *bits, int *type) { if (name == NULL) - return 49; + return 67; - if (regno < 0 || regno > 48 || namelen < 6) + if (regno < 0 || regno > 66 || namelen < 7) return -1; *prefix = "%"; @@ -51,10 +52,7 @@ x86_64_register_info (Ebl *ebl __attribute__ ((unused)), if (regno < 17) { *setname = "integer"; - if (regno == 16 || regno == 6 || regno == 7) - *type = DW_ATE_address; - else - *type = DW_ATE_signed; + *type = DW_ATE_signed; } else if (regno < 33) { @@ -67,11 +65,15 @@ x86_64_register_info (Ebl *ebl __attribute__ ((unused)), *type = DW_ATE_float; *bits = 80; } - else + else if (regno < 49) + *setname = "MMX"; + else if (regno > 49 && regno < 60) { - *setname = "MMX"; - *bits = 64; + *setname = "segment"; + *bits = 16; } + else + *setname = "control"; switch (regno) { @@ -80,7 +82,9 @@ x86_64_register_info (Ebl *ebl __attribute__ ((unused)), "ax", "dx", "cx", "bx", "si", "di", "bp", "sp" }; - case 0 ... 7: + case 6 ... 7: + *type = DW_ATE_address; + case 0 ... 5: name[0] = 'r'; name[1] = baseregs[regno][0]; name[2] = baseregs[regno][1]; @@ -101,6 +105,7 @@ x86_64_register_info (Ebl *ebl __attribute__ ((unused)), break; case 16: + *type = DW_ATE_address; name[0] = 'r'; name[1] = 'i'; name[2] = 'p'; @@ -137,6 +142,37 @@ x86_64_register_info (Ebl *ebl __attribute__ ((unused)), name[2] = regno - 41 + '0'; namelen = 3; break; + + case 50 ... 55: + name[0] = "ecsdfg"[regno - 50]; + name[1] = 's'; + namelen = 2; + break; + + case 58 ... 59: + *type = DW_ATE_address; + *bits = 64; + name[0] = regno - 58 + 'f'; + return stpcpy (&name[1], "s.base") + 1 - name; + + case 49: + return stpcpy (name, "rflags") + 1 - name; + case 62: + return stpcpy (name, "tr") + 1 - name; + case 63: + return stpcpy (name, "ldtr") + 1 - name; + case 64: + return stpcpy (name, "mxcsr") + 1 - name; + + case 65 ... 66: + name[0] = 'f'; + name[1] = "cs"[regno - 65]; + name[2] = 'w'; + namelen = 3; + break; + + default: + return 0; } name[namelen++] = '\0'; diff --git a/tests/ChangeLog b/tests/ChangeLog index 770f33751..f57c6e10f 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2007-04-01 Roland McGrath + + * run-allregs.sh: Updated expected output for x86_64. + 2007-03-04 Roland McGrath * dwfl-bug-fd-leak.c: New file. diff --git a/tests/run-allregs.sh b/tests/run-allregs.sh index 46503f20a..bf2be9ebc 100755 --- a/tests/run-allregs.sh +++ b/tests/run-allregs.sh @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2005, 2006 Red Hat, Inc. +# Copyright (C) 2005, 2006, 2007 Red Hat, Inc. # This file is part of Red Hat elfutils. # # Red Hat elfutils is free software; you can redistribute it and/or modify @@ -132,6 +132,22 @@ SSE registers: 30: %xmm13 (xmm13), unsigned 128 bits 31: %xmm14 (xmm14), unsigned 128 bits 32: %xmm15 (xmm15), unsigned 128 bits +control registers: + 49: %rflags (rflags), unsigned 64 bits + 62: %tr (tr), unsigned 64 bits + 63: %ldtr (ldtr), unsigned 64 bits + 64: %mxcsr (mxcsr), unsigned 64 bits + 65: %fcw (fcw), unsigned 64 bits + 66: %fsw (fsw), unsigned 64 bits +segment registers: + 50: %es (es), unsigned 16 bits + 51: %cs (cs), unsigned 16 bits + 52: %ss (ss), unsigned 16 bits + 53: %ds (ds), unsigned 16 bits + 54: %fs (fs), unsigned 16 bits + 55: %gs (gs), unsigned 16 bits + 58: %fs.base (fs.base), address 64 bits + 59: %gs.base (gs.base), address 64 bits x87 registers: 33: %st0 (st0), float 80 bits 34: %st1 (st1), float 80 bits