From: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
To: gdb-patches@sourceware.org
Subject: Fix tui compilation with Solaris libcurses (PR tui/21482)
Date: Thu, 18 May 2017 08:56:00 -0000 [thread overview]
Message-ID: <yddh90i1r31.fsf@CeBiTec.Uni-Bielefeld.DE> (raw)
[-- Attachment #1: Type: text/plain, Size: 3709 bytes --]
On both mainline and the 8.0 branch, gdb compilation fails on Solaris 10
with the native libcurses:
* Initially, compilation failed like this:
In file included from /vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/gdb_curses.h:42:
0,
from /vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/tui/tui-data.h:2
6,
from /vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/tui/tui-disasm.c
:31:
/vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/tui/tui-disasm.c: In function ‘CORE_A
DDR tui_disassemble(gdbarch*, tui_asm_line*, CORE_ADDR, int)’:
/vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/tui/tui-disasm.c:71:19: error: ‘class
string_file’ has no member named ‘wclear’; did you mean ‘clear’?
gdb_dis_out.clear ();
^
/vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/tui/tui-disasm.c:78:19: error: ‘class
string_file’ has no member named ‘wclear’; did you mean ‘clear’?
gdb_dis_out.clear ();
^
make[2]: *** [Makefile:1927: tui-disasm.o] Error 1
It turned out this happens because <curses.h> has
#define clear() wclear(stdscr)
This can be avoided by defining NOMACROS, which the patch below does
for solaris2.*.
* Even with this workaround, compilation fails in gdb/tui for several
instances of the same problem:
/vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/tui/tui-winsource.c: In function ‘void tui_erase_source_content(tui_win_info*, int)’:
/vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/tui/tui-winsource.c:257:18: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
no_src_str);
^
In file included from /vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/gdb_curses.h:42:0,
from /vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/tui/tui-data.h:26,
from /vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/tui/tui-winsource.c:33:
/vol/gcc-7/lib/gcc/sparc-sun-solaris2.10/7.1.0/include-fixed/curses.h:699:12: note: initializing argument 4 of ‘int mvwaddstr(WINDOW*, int, int, char*)’
extern int mvwaddstr(WINDOW *, int, int, char *);
^~~~~~~~~
make[2]: *** [Makefile:1927: tui-winsource.o] Error 1
Unlike ncurses, <curses.h> declares
extern int mvwaddstr(WINDOW *, int, int, char *);
i.e. the last arg is char *, not const char *.
The patch fixes this by casting the last arg to mvwaddstr to char *,
as was recently done on mainline in a newterm() call (the only
difference between 8.0 and mainline gdb/tui).
With those changes, gdb on the 8.0 branch compiles cleanly on
sparcv9-sun-solaris2.10 with native curses and amd64-pc-solaris2.12
with bundled ncurses (well, almost: on Solaris 12 ncurses in
/usr/include is used, but gdb linked against -lcurses which fails:
Undefined first referenced
symbol in file
wattr_on tui-wingeneral.o
wattr_off tui-wingeneral.o
but that's a different and preexisting problem).
Ok for mainline and 8.0 branch?
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University
2017-05-17 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR tui/21482
* configure.ac <solaris2.*> (NOMACROS): Define.
* configure: Regenerate.
* config.in: Regenerate.
* tui/tui-windata.c (tui_erase_data_content): Cast last mvwaddstr
to char *.
* tui/tui-wingeneral.c (box_win): Likewise.
* tui/tui-winsource.c (tui_erase_source_content): Likewise.
(tui_show_source_line): Likewise.
(tui_show_exec_info_content): Likewise.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: sol2-gdb-tui-curses.patch --]
[-- Type: text/x-patch, Size: 2772 bytes --]
# HG changeset patch
# Parent bfb43bbf7ca9808a9e660c111b68eef77999e76c
Fix tui compilation with Solaris libcurses (PR tui/21482)
diff --git a/gdb/configure.ac b/gdb/configure.ac
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -1312,6 +1312,14 @@ case $host_os in
Solaris 2.[789] when using GCC. ])
fi ;;
esac
+# On Solaris, we need to define NOMACROS so the native <curses.h> doesn't
+# define clear which interferes with the clear member of class string_file.
+case $host_os in
+ solaris2.*)
+ AC_DEFINE(NOMACROS, 1,
+ [Define to 1 to avoid <curses.h> defining clear which interferes with class string_file. ])
+ ;;
+esac
AC_CHECK_HEADERS(curses.h cursesX.h ncurses.h ncurses/ncurses.h ncurses/term.h)
AC_CHECK_HEADERS(term.h, [], [],
[#if HAVE_CURSES_H
diff --git a/gdb/tui/tui-windata.c b/gdb/tui/tui-windata.c
--- a/gdb/tui/tui-windata.c
+++ b/gdb/tui/tui-windata.c
@@ -117,7 +117,7 @@ tui_erase_data_content (const char *prom
mvwaddstr (TUI_DATA_WIN->generic.handle,
(TUI_DATA_WIN->generic.height / 2),
x_pos,
- prompt);
+ (char *) prompt);
}
wrefresh (TUI_DATA_WIN->generic.handle);
}
diff --git a/gdb/tui/tui-wingeneral.c b/gdb/tui/tui-wingeneral.c
--- a/gdb/tui/tui-wingeneral.c
+++ b/gdb/tui/tui-wingeneral.c
@@ -101,7 +101,7 @@ box_win (struct tui_gen_win_info *win_in
box (win, tui_border_vline, tui_border_hline);
#endif
if (win_info->title)
- mvwaddstr (win, 0, 3, win_info->title);
+ mvwaddstr (win, 0, 3, (char *) win_info->title);
wattroff (win, attrs);
}
}
diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c
--- a/gdb/tui/tui-winsource.c
+++ b/gdb/tui/tui-winsource.c
@@ -254,7 +254,7 @@ tui_erase_source_content (struct tui_win
mvwaddstr (win_info->generic.handle,
(win_info->generic.height / 2),
x_pos,
- no_src_str);
+ (char *) no_src_str);
/* elz: Added this function call to set the real contents of
the window to what is on the screen, so that later calls
@@ -280,7 +280,7 @@ tui_show_source_line (struct tui_win_inf
wattron (win_info->generic.handle, A_STANDOUT);
mvwaddstr (win_info->generic.handle, lineno, 1,
- line->which_element.source.line);
+ (char *) line->which_element.source.line);
if (line->which_element.source.is_exec_point)
wattroff (win_info->generic.handle, A_STANDOUT);
@@ -565,7 +565,8 @@ tui_show_exec_info_content (struct tui_w
mvwaddstr (exec_info->handle,
cur_line,
0,
- exec_info->content[cur_line - 1]->which_element.simple_string);
+ (char *) exec_info->content[cur_line - 1]
+ ->which_element.simple_string);
tui_refresh_win (exec_info);
exec_info->content_in_use = TRUE;
}
next reply other threads:[~2017-05-18 8:56 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-18 8:56 Rainer Orth [this message]
2017-05-18 13:19 ` Pedro Alves
2017-05-18 13:36 ` Rainer Orth
2017-05-19 12:50 ` Rainer Orth
2017-05-19 12:52 ` Pedro Alves
2017-05-19 13:20 ` Eli Zaretskii
2017-05-19 13:26 ` Rainer Orth
2017-05-19 13:43 ` Pedro Alves
2017-05-19 13:39 ` Pedro Alves
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=yddh90i1r31.fsf@CeBiTec.Uni-Bielefeld.DE \
--to=ro@cebitec.uni-bielefeld.de \
--cc=gdb-patches@sourceware.org \
/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