From: Pedro Alves Date: Sun, 20 Jun 2010 22:23:36 +0000 (+0000) Subject: 2010-06-20 Ian Lance Taylor X-Git-Tag: gdb_7_2-branchpoint~185 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9e4344e5eae3650abd27c0a7b384604c4b32c37b;p=thirdparty%2Fbinutils-gdb.git 2010-06-20 Ian Lance Taylor Pedro Alves * linux-x86-low.c (always_true): Delete. (EMIT_ASM, EMIT_ASM32): Use an uncondition asm jmp instead of trying to fool the compiler with always_true. --- diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index f25e40980f4..99aacba1886 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,10 @@ +2010-06-20 Ian Lance Taylor + Pedro Alves + + * linux-x86-low.c (always_true): Delete. + (EMIT_ASM, EMIT_ASM32): Use an uncondition asm jmp instead of + trying to fool the compiler with always_true. + 2010-06-20 Pedro Alves * tracepoint.c (condition_true_at_tracepoint): Don't run compiled diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c index 772aaa31535..1e0d684f8e4 100644 --- a/gdb/gdbserver/linux-x86-low.c +++ b/gdb/gdbserver/linux-x86-low.c @@ -1484,41 +1484,37 @@ add_insns (unsigned char *start, int len) current_insn_ptr = buildaddr; } -/* A function used to trick optimizers. */ - -int -always_true (void) -{ - return 1; -} - /* Our general strategy for emitting code is to avoid specifying raw bytes whenever possible, and instead copy a block of inline asm that is embedded in the function. This is a little messy, because we need to keep the compiler from discarding what looks like dead code, plus suppress various warnings. */ -#define EMIT_ASM(NAME,INSNS) \ - { extern unsigned char start_ ## NAME, end_ ## NAME; \ - add_insns (&start_ ## NAME, &end_ ## NAME - &start_ ## NAME); \ - if (always_true ()) \ - goto skipover ## NAME; \ - __asm__ ("start_" #NAME ":\n\t" INSNS "\n\tend_" #NAME ":\n\t"); \ - skipover ## NAME: \ - ; } - +#define EMIT_ASM(NAME, INSNS) \ + do \ + { \ + extern unsigned char start_ ## NAME, end_ ## NAME; \ + add_insns (&start_ ## NAME, &end_ ## NAME - &start_ ## NAME); \ + __asm__ ("jmp end_" #NAME "\n" \ + "\t" "start_" #NAME ":" \ + "\t" INSNS "\n" \ + "\t" "end_" #NAME ":"); \ + } while (0) #ifdef __x86_64__ #define EMIT_ASM32(NAME,INSNS) \ - { extern unsigned char start_ ## NAME, end_ ## NAME; \ - add_insns (&start_ ## NAME, &end_ ## NAME - &start_ ## NAME); \ - if (always_true ()) \ - goto skipover ## NAME; \ - __asm__ (".code32\n\tstart_" #NAME ":\n\t" INSNS "\n\tend_" #NAME ":\n" \ - "\t.code64\n\t"); \ - skipover ## NAME: \ - ; } + do \ + { \ + extern unsigned char start_ ## NAME, end_ ## NAME; \ + add_insns (&start_ ## NAME, &end_ ## NAME - &start_ ## NAME); \ + __asm__ (".code32\n" \ + "\t" "jmp end_" #NAME "\n" \ + "\t" "start_" #NAME ":\n" \ + "\t" INSNS "\n" \ + "\t" "end_" #NAME ":\n" \ + ".code64\n"); \ + } while (0) #else