Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Joel Brobecker <brobecker@adacore.com>
To: Ulrich Weigand <uweigand@de.ibm.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [rfc][00/37] Eliminate builtin_type_ macros
Date: Tue, 09 Sep 2008 21:18:00 -0000	[thread overview]
Message-ID: <20080909211801.GH12222@adacore.com> (raw)
In-Reply-To: <20080909180502.GF12222@adacore.com>

[-- Attachment #1: Type: text/plain, Size: 1549 bytes --]

Hi Ulrich,

> I still got a few regressions with our testsuite, which I will
> investigate now. Can you hold the patch off a little while longer?

OK, our testsuite found 2 issues:
 
  1. Pointer arithmetics, in particular "PTR + PTR" or "PTR - PTR"
     expressions. For instance:

       (gdb) print b'address - a'address
       Argument to arithmetic operation not a number or boolean.
     
     It's worth mentioning that the problem was already present
     with pointer addition (adding two pointers doesn't necessarily
     make a lot of sense, but anyway...).

     The regression on the substraction is because we replaced the
     call to (rip'ed) value_sub by a call to value_binop, which
     doesn't support pointer differences.

     I think the semantics of pointer differences in Ada are different
     from C. It's just a number substraction.  So I just added support
     for it directly at the caller site, thus calling value_binop
     only for values that it supports. Same for addition.

  2. The second problem is just an oversight. You needed a variable
     to store the int builtin type, and unfortunately you reused
     a variable that was still in use.
     See ada-lang.c (evaluate_subexp) [OP_ATR_SIZE].

     For now, I just used builtin_type_int32. Not ideal, but should
     be large enough for the vast majority of objects we actually
     have to deal with in real life.

Two suggested patches attached...

BTW: I tested on x86-linux (DWARF & STABS) as well as on x86_64-linux
(DWARF only, obviously).

-- 
Joel

[-- Attachment #2: 01-ptrdiff.diff --]
[-- Type: text/plain, Size: 1252 bytes --]

diff -r ef6e8d4d28b4 -r c0202064b824 ada-lang.c
--- a/ada-lang.c	Tue Sep 09 10:27:10 2008 -0700
+++ b/ada-lang.c	Tue Sep 09 12:31:38 2008 -0700
@@ -9909,6 +9909,10 @@ ada_evaluate_subexp (struct type *expect
       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
       if (noside == EVAL_SKIP)
         goto nosideret;
+      if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
+        return (value_from_longest
+                 (value_type (arg1),
+                  value_as_long (arg1) + value_as_long (arg2)));
       if ((ada_is_fixed_point_type (value_type (arg1))
            || ada_is_fixed_point_type (value_type (arg2)))
           && value_type (arg1) != value_type (arg2))
@@ -9927,6 +9931,10 @@ ada_evaluate_subexp (struct type *expect
       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
       if (noside == EVAL_SKIP)
         goto nosideret;
+      if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
+        return (value_from_longest
+                 (value_type (arg1),
+                  value_as_long (arg1) - value_as_long (arg2)));
       if ((ada_is_fixed_point_type (value_type (arg1))
            || ada_is_fixed_point_type (value_type (arg2)))
           && value_type (arg1) != value_type (arg2))

[-- Attachment #3: 02-size_atr.diff --]
[-- Type: text/plain, Size: 749 bytes --]

diff -r c0202064b824 -r 61698126d402 ChangeLog.joel
diff -r c0202064b824 -r 61698126d402 ada-lang.c
--- a/ada-lang.c	Tue Sep 09 12:31:38 2008 -0700
+++ b/ada-lang.c	Tue Sep 09 12:57:26 2008 -0700
@@ -10541,11 +10541,10 @@ ada_evaluate_subexp (struct type *expect
 
       if (noside == EVAL_SKIP)
         goto nosideret;
-      type = builtin_type (exp->gdbarch)->builtin_int;
       if (noside == EVAL_AVOID_SIDE_EFFECTS)
-        return value_zero (type, not_lval);
-      else
-        return value_from_longest (type,
+        return value_zero (builtin_type_int32, not_lval);
+      else
+        return value_from_longest (builtin_type_int32,
                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
 
     case OP_ATR_VAL:

  parent reply	other threads:[~2008-09-09 21:18 UTC|newest]

Thread overview: 99+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-31 17:53 uweigand
2008-08-31 17:52 ` [rfc][13/37] Eliminate builtin_type_ macros: Update EVAL_SKIP dummy return type uweigand
2008-09-05 22:56   ` Joel Brobecker
2008-09-07 15:40     ` Ulrich Weigand
2008-09-07 15:49       ` Joel Brobecker
2008-08-31 17:52 ` [rfc][15/37] Eliminate builtin_type_ macros: Dereferencing of integer types uweigand
2008-09-01  7:19   ` Tom Tromey
2008-09-02 23:34     ` Ulrich Weigand
2008-09-05 23:02   ` Joel Brobecker
2008-08-31 17:52 ` [rfc][07/37] Eliminate builtin_type_ macros: Use expression arch for size_t type uweigand
2008-09-05 18:18   ` Joel Brobecker
2008-09-05 20:16     ` Ulrich Weigand
2008-08-31 17:52 ` [rfc][09/37] Eliminate builtin_type_ macros: Make argument promotion explicit uweigand
2008-08-31 17:52 ` [rfc][29/37] Eliminate builtin_type_ macros: Update valarith.c routines uweigand
2008-08-31 17:52 ` [rfc][21/37] Eliminate builtin_type_ macros: Platform-neutral builtin_type_void uweigand
2008-09-06  0:38   ` Joel Brobecker
2008-09-06  4:12     ` Daniel Jacobowitz
2008-09-06 14:00       ` Joel Brobecker
2008-09-07 15:59       ` Ulrich Weigand
2008-09-13 15:23         ` Daniel Jacobowitz
2008-09-13 17:23         ` Joel Brobecker
2008-08-31 17:52 ` [rfc][23/37] Eliminate builtin_type_ macros: Platform-neutral types for internal variables uweigand
2008-09-02 12:43   ` Daniel Jacobowitz
2008-09-02 21:55     ` Ulrich Weigand
2008-09-02 22:00       ` Daniel Jacobowitz
2008-09-02 23:53       ` Ulrich Weigand
2008-08-31 17:52 ` [rfc][05/37] Eliminate builtin_type_ macros: Replace LA_BOOL_TYPE macro uweigand
2008-09-05 18:08   ` Joel Brobecker
2008-08-31 17:52 ` [rfc][19/37] Eliminate builtin_type_ macros: Ada range type handling uweigand
2008-09-06  0:24   ` Joel Brobecker
2008-09-07 15:43     ` Ulrich Weigand
2008-09-09 18:00       ` Joel Brobecker
2008-09-09 20:21         ` Ulrich Weigand
2008-09-09 22:08           ` Joel Brobecker
2008-09-09 22:32             ` Ulrich Weigand
2008-09-10  6:09               ` Joel Brobecker
2008-09-10  9:51                 ` Ulrich Weigand
2008-08-31 17:52 ` [rfc][26/37] Eliminate builtin_type_ macros: Use per-frame architecture uweigand
2008-08-31 17:52 ` [rfc][32/37] Eliminate builtin_type_ macros: Update value-printing code uweigand
2008-08-31 17:52 ` [rfc][30/37] Eliminate builtin_type_ macros: Remove gdbarch_name_of_malloc uweigand
2008-08-31 17:52 ` [rfc][16/37] Eliminate builtin_type_ macros: Ada fixed/double conversions uweigand
2008-09-05 23:13   ` Joel Brobecker
2008-08-31 17:52 ` [rfc][24/37] Eliminate builtin_type_ macros: Platform-neutral generic integers uweigand
2008-09-06  3:15   ` Joel Brobecker
2008-09-07 16:44     ` Ulrich Weigand
2008-08-31 17:52 ` [rfc][02/37] Eliminate builtin_type_ macros: Introduce expression architecture uweigand
2008-08-31 17:52 ` [rfc][11/37] Eliminate builtin_type_ macros: Update ax-gdb expression evaluator uweigand
2008-08-31 17:52 ` [rfc][33/37] Eliminate builtin_type_ macros: Default target word size uweigand
2008-08-31 17:52 ` [rfc][01/37] Eliminate builtin_type_ macros: Unused write_exp_msymbol parameters uweigand
2008-08-31 17:53 ` [rfc][22/37] Eliminate builtin_type_ macros: Platform-neutral "true char" types uweigand
2008-08-31 17:53 ` [rfc][36/37] Eliminate builtin_type_ macros: Use target arch in solib code uweigand
2008-08-31 17:53 ` [rfc][12/37] Eliminate builtin_type_ macros: Remove redundant coerce_enum/coerce_number uweigand
2008-08-31 17:53 ` [rfc][17/37] Eliminate builtin_type_ macros: Ada pos_atr result type uweigand
2008-08-31 17:53 ` [rfc][08/37] Eliminate builtin_type_ macros: Make pointer arithmetic explicit uweigand
2008-09-02 12:38   ` Daniel Jacobowitz
2008-09-02 21:48     ` Ulrich Weigand
2008-09-02 21:52       ` Daniel Jacobowitz
2008-09-04 22:32       ` Tom Tromey
2008-09-05 18:21         ` Joel Brobecker
2008-08-31 17:53 ` [rfc][04/37] Eliminate builtin_type_ macros: Introduce java_language_arch_info uweigand
2008-08-31 17:53 ` [rfc][35/37] Eliminate builtin_type_ macros: Use target arch in bsd-uthread.c uweigand
2008-08-31 17:53 ` [rfc][20/37] Eliminate builtin_type_ macros: Objective-C expression evaluation uweigand
2008-08-31 17:53 ` [rfc][37/37] Eliminate builtin_type_ macros: Delete the macros uweigand
2008-08-31 17:53 ` [rfc][06/37] Eliminate builtin_type_ macros: Make OP_COMPLEX type explicit uweigand
2008-08-31 17:53 ` [rfc][27/37] Eliminate builtin_type_ macros: Update C++ ABI handling uweigand
2008-09-05 20:18   ` Ulrich Weigand
2008-08-31 17:53 ` [rfc][10/37] Eliminate builtin_type_ macros: Use expression arch for argument promotion uweigand
2008-09-05 22:39   ` Joel Brobecker
2008-08-31 17:53 ` [rfc][18/37] Eliminate builtin_type_ macros: Ada System.Address special handling uweigand
2008-08-31 17:53 ` [rfc][03/37] Eliminate builtin_type_ macros: Extract bitstring subscript handling uweigand
2008-09-05 18:16   ` Joel Brobecker
2008-09-05 20:17     ` Ulrich Weigand
2008-08-31 17:53 ` [rfc][14/37] Eliminate builtin_type_ macros: Implicit dereferencing of references uweigand
2008-08-31 18:12 ` [rfc][34/37] Eliminate builtin_type_ macros: Use target arch in procfs.c uweigand
2008-08-31 18:13 ` [rfc][31/37] Eliminate builtin_type_ macros: Inferior call argument types uweigand
2008-09-06  1:37   ` Joel Brobecker
2008-08-31 18:15 ` [rfc][28/37] Eliminate builtin_type_ macros: Update infcall.c routines uweigand
2008-09-02 12:48   ` Daniel Jacobowitz
2008-09-02 21:56     ` Ulrich Weigand
2008-08-31 18:16 ` [rfc][25/37] Eliminate builtin_type_ macros: Update *-tdep.c files uweigand
2008-08-31 22:20 ` [rfc][00/37] Eliminate builtin_type_ macros Mark Kettenis
2008-09-01  3:46   ` David Miller
2008-09-01 18:57   ` Ulrich Weigand
2008-09-02 10:22     ` Mark Kettenis
2008-09-02 12:30       ` Daniel Jacobowitz
2008-09-02 21:37       ` Ulrich Weigand
2008-09-02 12:50 ` Daniel Jacobowitz
2008-09-02 22:02   ` Ulrich Weigand
2008-09-02 22:12     ` Daniel Jacobowitz
2008-09-06  3:16 ` Joel Brobecker
2008-09-07 16:43   ` Ulrich Weigand
2008-09-09 18:05     ` Joel Brobecker
2008-09-09 20:21       ` Ulrich Weigand
2008-09-09 21:18       ` Joel Brobecker [this message]
2008-09-09 22:12         ` Ulrich Weigand
2008-09-10  6:18           ` Joel Brobecker
2008-09-10  9:43             ` Ulrich Weigand
2008-09-10 16:25               ` Joel Brobecker
2008-09-11 20:21 Ulrich Weigand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080909211801.GH12222@adacore.com \
    --to=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    --cc=uweigand@de.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox