2008-12-15 Tristan Gingold <gingold@adacore.com>
authorTristan Gingold <gingold@adacore.com>
Mon, 15 Dec 2008 11:32:08 +0000 (11:32 +0000)
committerTristan Gingold <gingold@adacore.com>
Mon, 15 Dec 2008 11:32:08 +0000 (11:32 +0000)
* dwarf2expr.c (execute_stack_op): Handle DW_OP_swap.

gdb/ChangeLog
gdb/dwarf2expr.c

index 493e5faf23c9fa48ebd54f74a56a991cee3cf57c..4a4f5dfc1e44113ee285236c972660a75d97a284 100644 (file)
@@ -1,3 +1,7 @@
+2008-12-15  Tristan Gingold  <gingold@adacore.com>
+
+       * dwarf2expr.c (execute_stack_op): Handle DW_OP_swap.
+
 2008-12-15  Jerome Guitton  <guitton@adacore.com>
 
        * ada-lang.c (ada_value_slice_ptr): Rename to...
index 707c0de3e16a1641d3e3aae88bc38ec7720104bb..de9cea861d1c8b260c3069622c408380d8f091ac 100644 (file)
@@ -514,6 +514,20 @@ execute_stack_op (struct dwarf_expr_context *ctx,
          offset = *op_ptr++;
          result = dwarf_expr_fetch (ctx, offset);
          break;
+         
+       case DW_OP_swap:
+         {
+           CORE_ADDR t1, t2;
+
+           if (ctx->stack_len < 2)
+              error (_("Not enough elements for DW_OP_swap. Need 2, have %d."),
+                     ctx->stack_len);
+           t1 = ctx->stack[ctx->stack_len - 1];
+           t2 = ctx->stack[ctx->stack_len - 2];
+           ctx->stack[ctx->stack_len - 1] = t2;
+           ctx->stack[ctx->stack_len - 2] = t1;
+           goto no_push;
+         }
 
        case DW_OP_over:
          result = dwarf_expr_fetch (ctx, 1);