Rewrite {amd64,i386}-pseudo.c to better specify register liveness.
authorDoug Evans <dje@google.com>
Thu, 28 Aug 2014 18:38:22 +0000 (11:38 -0700)
committerDoug Evans <dje@google.com>
Thu, 28 Aug 2014 18:38:22 +0000 (11:38 -0700)
commitfb0576e98388c6f4585b94684cea8d18c97a91aa
tree1719ab4dd8e5ff6ae649b7e1d7481f800fe02ff7
parent376c8d5bbb7e31987e363ee4c481ae8ff5015a77
Rewrite {amd64,i386}-pseudo.c to better specify register liveness.

clang was using eax to construct %0 here:

  asm ("mov %%eax, 0(%0)\n\t"
       "mov %%ebx, 4(%0)\n\t"
       "mov %%ecx, 8(%0)\n\t"
       "mov %%edx, 12(%0)\n\t"
       "mov %%esi, 16(%0)\n\t"
       "mov %%edi, 20(%0)\n\t"
       : /* no output operands */
       : "r" (data)
       : "eax", "ebx", "ecx", "edx", "esi", "edi");

which caused amd64-word.exp (and others similarly) to fail.
It's a perfectly legit thing for clang to do given the available data.
The patch fixes this by marking the registers as live from the
time of the preceding breakpoint.

gdb/testsuite/ChangeLog:

* gdb.arch/amd64-pseudo.c (main): Rewrite to better specify when
eax,etc. are live with values set by gdb and thus the compiler can't
use them.
* gdb.arch/i386-pseudo.c (main): Ditto.
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.arch/amd64-pseudo.c
gdb/testsuite/gdb.arch/i386-pseudo.c