diff options
author | Tom Tromey <tromey@adacore.com> | 2020-07-08 07:16:59 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2020-07-08 07:16:59 -0600 |
commit | 15f3b07769c44d88a5015bd166c14a6cddc6c46a (patch) | |
tree | 1faf40e5da00bc92bb396d40b77af192070c987c | |
parent | a7f987e8378830b181ce27359ca8bf115018db07 (diff) | |
download | gdb-15f3b07769c44d88a5015bd166c14a6cddc6c46a.zip gdb-15f3b07769c44d88a5015bd166c14a6cddc6c46a.tar.gz gdb-15f3b07769c44d88a5015bd166c14a6cddc6c46a.tar.bz2 |
Use read_memory in ada_exception_message_1
Testing using the internal AdaCore test suite showed a regression from
the target string reading changes. In particular, now
ada_exception_message_1 can get the wrong answer in some cases. In
particular, when an Ada exception catchpoint is hit, sometimes the
exception name will be incorrect. The case I was seeing changed from
the correct:
Catchpoint 2, CONSTRAINT_ERROR (catch C_E) at [...]
to:
Catchpoint 2, CONSTRAINT_ERROR (catch C_EE) at [...]
I was not able to reproduce this failure with the Fedora gnat.
Perhaps it is related to some local change to gnat; I do not know.
Meanwhile, because ada_exception_message_1 knows the length of the
string to read, we can use read_memory here. This fixes the bug.
I've updated the test suite to at least exercise this code path.
However, as mentioned above, the new test does not actually provoke
the failure.
gdb/ChangeLog
2020-07-08 Tom Tromey <tromey@adacore.com>
* ada-lang.c (ada_exception_message_1): Use read_memory.
gdb/testsuite/ChangeLog
2020-07-08 Tom Tromey <tromey@adacore.com>
* gdb.ada/catch_ex/foo.adb: Pass string to raise.
* gdb.ada/catch_ex.exp: Examine catchpoint text.
-rw-r--r-- | gdb/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/ada-lang.c | 7 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/catch_ex.exp | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/catch_ex/foo.adb | 2 |
5 files changed, 17 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c86d7e4..da904f1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2020-07-08 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (ada_exception_message_1): Use read_memory. + 2020-07-06 Andrew Burgess <andrew.burgess@embecosm.com> PR python/22748 diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 98508c1..cbcceba 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -11894,7 +11894,12 @@ ada_exception_message_1 (void) if (e_msg_len <= 0) return NULL; - return target_read_string (value_address (e_msg_val), INT_MAX); + gdb::unique_xmalloc_ptr<char> e_msg ((char *) xmalloc (e_msg_len + 1)); + read_memory (value_address (e_msg_val), (gdb_byte *) e_msg.get (), + e_msg_len); + e_msg.get ()[e_msg_len] = '\0'; + + return e_msg; } /* Same as ada_exception_message_1, except that all exceptions are diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 8eae1ab..6810ef6 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-07-08 Tom Tromey <tromey@adacore.com> + + * gdb.ada/catch_ex/foo.adb: Pass string to raise. + * gdb.ada/catch_ex.exp: Examine catchpoint text. + 2020-07-06 Andrew Burgess <andrew.burgess@embecosm.com> PR python/22748 diff --git a/gdb/testsuite/gdb.ada/catch_ex.exp b/gdb/testsuite/gdb.ada/catch_ex.exp index 7bb1c06..6891413 100644 --- a/gdb/testsuite/gdb.ada/catch_ex.exp +++ b/gdb/testsuite/gdb.ada/catch_ex.exp @@ -62,7 +62,7 @@ gdb_test "info break" \ "info break, catch all Ada exceptions" set catchpoint_msg \ - "Catchpoint $any_nb, CONSTRAINT_ERROR (\\\(foo\\.adb:$decimal explicit raise\\\) )?at $any_addr in foo \\\(\\\).*at .*foo.adb:$any_nb" + "Catchpoint $any_nb, CONSTRAINT_ERROR (\\\(ignore C_E\\\) )?at $any_addr in foo \\\(\\\).*at .*foo.adb:$any_nb" gdb_test "continue" \ "Continuing\.$eol$catchpoint_msg$eol.*SPOT1" \ "continuing to first exception" diff --git a/gdb/testsuite/gdb.ada/catch_ex/foo.adb b/gdb/testsuite/gdb.ada/catch_ex/foo.adb index bee394f..cdf0286 100644 --- a/gdb/testsuite/gdb.ada/catch_ex/foo.adb +++ b/gdb/testsuite/gdb.ada/catch_ex/foo.adb @@ -17,7 +17,7 @@ procedure Foo is begin begin - raise Constraint_Error; -- SPOT1 + raise Constraint_Error with "ignore C_E"; -- SPOT1 exception when others => null; |