aboutsummaryrefslogtreecommitdiff
path: root/gdb/ada-lang.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2024-12-02 12:37:28 -0700
committerTom Tromey <tromey@adacore.com>2024-12-12 07:41:12 -0700
commitf6dcf290ce55686474bedb3feeadd82f215e170b (patch)
tree50bb542ba23e4af80284297691d565ca802310ac /gdb/ada-lang.c
parent267749aeb02ae0bcd040d45cf4157462e571d96b (diff)
downloadbinutils-f6dcf290ce55686474bedb3feeadd82f215e170b.zip
binutils-f6dcf290ce55686474bedb3feeadd82f215e170b.tar.gz
binutils-f6dcf290ce55686474bedb3feeadd82f215e170b.tar.bz2
Use generic_printstr from ada_language::printstr
Currently, if you create a lazy string while in Ada language mode, the string will be rendered strangely, like: "["d0"]["9f"]["d1"]["80"]["d0"]["b8"]... This happens because ada_printstr does not really handle UTF-8 decoding. This patch changes ada_language::printstr to use generic_printstr when UTF-8 is used. Note that this code could probably be improved some more -- the current patch only addresses the narrow case of the Python API. I've filed a follow-up bug (PR ada/32413) for the remaining changes. Approved-By: Andrew Burgess <aburgess@redhat.com>
Diffstat (limited to 'gdb/ada-lang.c')
-rw-r--r--gdb/ada-lang.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index bd5dcce..e86b664 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -13800,8 +13800,15 @@ public:
const char *encoding, int force_ellipses,
const struct value_print_options *options) const override
{
- ada_printstr (stream, elttype, string, length, encoding,
- force_ellipses, options);
+ /* ada_printstr doesn't handle UTF-8 too well, but we want this
+ for lazy-string printing. Defer this case to the generic
+ code. */
+ if (encoding != nullptr && strcasecmp (encoding, "UTF-8") == 0)
+ generic_printstr (stream, elttype, string, length, encoding,
+ force_ellipses, '"', 0, options);
+ else
+ ada_printstr (stream, elttype, string, length, encoding,
+ force_ellipses, options);
}
/* See language.h. */