This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: [Bug-readline] [PATCH] Enable visibility annotations
- From: Pedro Alves <palves at redhat dot com>
- To: chet dot ramey at case dot edu, Yury Gribov <y dot gribov at samsung dot com>, bug-readline at gnu dot org
- Cc: Vyacheslav Barinov <v dot barinov at samsung dot com>, Yury Usishchev <y dot usishchev at samsung dot com>, Doug Evans <dje at google dot com>, "gdb at sourceware dot org" <gdb at sourceware dot org>, Jan Kratochvil <jan dot kratochvil at redhat dot com>
- Date: Thu, 14 Apr 2016 16:19:23 +0100
- Subject: Re: [Bug-readline] [PATCH] Enable visibility annotations
- Authentication-results: sourceware.org; auth=none
- References: <570F38DD dot 1030703 at samsung dot com> <570F3C7E dot 30005 at samsung dot com> <570F7554 dot 7070901 at redhat dot com> <570FB04D dot 2060107 at case dot edu>
[gdb list, plus a couple people]
See https://lists.gnu.org/archive/html/bug-readline/2016-04/msg00006.html
(note that ml archive only refreshes every 30 mins...)
On 04/14/2016 03:59 PM, Chet Ramey wrote:
> On 4/14/16 6:47 AM, Pedro Alves wrote:
>
>> FYI, this is probably doing to break (at least) gdb against system
>> readline. gdb relies on accessing a few private readline symbols... :-/
>>
>> E.g.:
>>
>> tui/tui-io.c:437: extern int _rl_echoing_p;
>> completer.c:1677: extern int _rl_complete_mark_directories;
>> completer.c:1770:extern int _rl_completion_prefix_display_length;
>> completer.c:1771:extern int _rl_print_completions_horizontally;
>>
>> Unless/until someone fixes these and adds the missing public APIs
>> to readline,
>
> These aren't exactly the result of `missing public APIs'. echoing_p is
> a saved value indicating whether or not the terminal flags readline
> inherits include ECHO -- something an application can easily check for
> itself.
It's not that GDB wants to do something with the value. It's that
when gdb enables/disables its TUI/curses mode (c-a x), it needs to
save/restore that variable, here:
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/tui/tui-io.c;h=18c648c08fdbe9a8f7d04c406c6a99e9149ca295;hb=2d059a33d890c017c8105b102a6b56ccbd6128b2#l426
That's quite old code. This gdb commit:
commit cc88a640ca1d0356c5feb40bb48869bab5a2bdce
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
AuthorDate: Wed May 11 23:38:44 2011 +0000
Imported readline 6.2, and upstream patch 001.
(That's gdb's built-in fallback readline copy, which is
discouraged in favor of the system one.)
Did:
void
tui_setup_io (int mode)
{
- extern int readline_echoing_p;
-
+ extern int _rl_echoing_p;
+
So looks like at some point readline_echoing_p was renamed
to _rl_echoing_p?
And that readline_echoing_p referencing code was added back in 2001 ...:
a198b876 gdb/tui/tuiIO.c (Stephane Carrez 2001-07-21 19:56:54 +0000 506) void
a198b876 gdb/tui/tuiIO.c (Stephane Carrez 2001-07-21 19:56:54 +0000 507) tui_setup_io (int mode)
a198b876 gdb/tui/tuiIO.c (Stephane Carrez 2001-07-21 19:56:54 +0000 508) {
a198b876 gdb/tui/tuiIO.c (Stephane Carrez 2001-07-21 19:56:54 +0000 509) extern int readline_echoing_p;
a198b876 gdb/tui/tuiIO.c (Stephane Carrez 2001-07-21 19:56:54 +0000 510)
I haven't tried to remove that and see what breaks.
> The others are values for settable variables and should be retrieved
> using rl_variable_value (variable_name). Since it returns a string,
> you can use the public macro RL_BOOLEAN_VARIABLE_VALUE to turn it into
> an int.
The GDB commit that added those was:
commit 82083d6dbbc0b2f6a76095582c6e7ffb3e06432a
Author: Doug Evans <xdje42@gmail.com>
AuthorDate: Sat Jan 31 14:11:54 2015 -0800
Unify CLI/TUI interface to readline tab completion.
This copies a lot of code from readline, but this is temporary.
Readline currently doesn't export what we need.
The plan is to have something that has been working for awhile,
and then we'll have a complete story to present to the readline
maintainers.
This is again about the curses mode (TUI).
Doug, could you comment?
> Bash doesn't use any _rl_ readline symbols, so I know it can be done.
Thanks,
Pedro Alves