]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
2010-06-20 Ian Lance Taylor <iant@google.com>
authorPedro Alves <palves@redhat.com>
Sun, 20 Jun 2010 22:23:36 +0000 (22:23 +0000)
committerPedro Alves <palves@redhat.com>
Sun, 20 Jun 2010 22:23:36 +0000 (22:23 +0000)
    Pedro Alves  <pedro@codesourcery.com>

* 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.

gdb/gdbserver/ChangeLog
gdb/gdbserver/linux-x86-low.c

index f25e40980f46775a65cf33dbfaf79e4f8a02965c..99aacba18864a85222bab0fc2ac91473b7812083 100644 (file)
@@ -1,3 +1,10 @@
+2010-06-20  Ian Lance Taylor  <iant@google.com>
+           Pedro Alves  <pedro@codesourcery.com>
+
+       * 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  <pedro@codesourcery.com>
 
        * tracepoint.c (condition_true_at_tracepoint): Don't run compiled
index 772aaa315359a8ffcc362c34b00009c49530fdbd..1e0d684f8e40e0254e9654fc23062e21a88eddc7 100644 (file)
@@ -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