From: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
To: gdb-patches@sourceware.org
Cc: Weimin Pan <weimin.pan@oracle.com>
Subject: Fix gdb 8.1 Solaris/SPARC compilation (PR build/22206)
Date: Tue, 26 Sep 2017 09:33:00 -0000 [thread overview]
Message-ID: <yddfub9x0rp.fsf@CeBiTec.Uni-Bielefeld.DE> (raw)
[-- Attachment #1: Type: text/plain, Size: 4675 bytes --]
When testing my Solaris < 10 removal patch on Solaris/SPARC, I found
that gdb mainline is currently broken there due to the recent SPARC M7
ADI patches:
/vol/src/gnu/gdb/gdb/local/gdb/sparc64-tdep.c:1876:0: error: "PSR_ICC" redefined [-Werror]
#define PSR_ICC 0x00f00000
^
In file included from /usr/include/v7/sys/privregs.h:24:0,
from /usr/include/sys/regset.h:420,
from /usr/include/sys/ucontext.h:21,
from /usr/include/sys/signal.h:231,
from /usr/include/sys/procset.h:23,
from /usr/include/sys/wait.h:25,
from /usr/include/stdlib.h:21,
from build-gnulib/import/stdlib.h:36,
from /vol/src/gnu/gdb/gdb/local/gdb/common/common-defs.h:53,
from /vol/src/gnu/gdb/gdb/local/gdb/defs.h:28,
from /vol/src/gnu/gdb/gdb/local/gdb/sparc64-tdep.c:20:
/usr/include/v7/sys/psr.h:35:0: note: this is the location of the previous definition
#define PSR_ICC 0x00F00000 /* integer condition codes */
^
/vol/src/gnu/gdb/gdb/local/gdb/sparc64-tdep.c:1878:0: error: "PSR_IMPL" redefined [-Werror]
#define PSR_IMPL 0xf0000000
^
In file included from /usr/include/v7/sys/privregs.h:24:0,
from /usr/include/sys/regset.h:420,
from /usr/include/sys/ucontext.h:21,
from /usr/include/sys/signal.h:231,
from /usr/include/sys/procset.h:23,
from /usr/include/sys/wait.h:25,
from /usr/include/stdlib.h:21,
from build-gnulib/import/stdlib.h:36,
from /vol/src/gnu/gdb/gdb/local/gdb/common/common-defs.h:53,
from /vol/src/gnu/gdb/gdb/local/gdb/defs.h:28,
from /vol/src/gnu/gdb/gdb/local/gdb/sparc64-tdep.c:20:
/usr/include/v7/sys/psr.h:41:0: note: this is the location of the previous definition
#define PSR_IMPL 0xF0000000 /* implementation */
^
Comparing Solaris 11.4 <v7/sys/psr.h> and sparc64-tdep.c, there are more
inconsistencies:
<v7/sys/psr.h>:
#define PSR_S 0x00000080 /* supervisor mode */
#define PSR_ICC 0x00F00000 /* integer condition codes */
#define PSR_VER 0x0F000000 /* mask version */
#define PSR_IMPL 0xF0000000 /* implementation */
#define PSR_RSV 0x000FC000 /* reserved */
sparc64-tdep.c:
#define PSR_S 0x00000080
#define PSR_ICC 0x00f00000
#define PSR_VERS 0x0f000000
#define PSR_IMPL 0xf0000000
#define PSR_V8PLUS 0xff000000
#define PSR_XCC 0x000f0000
Apart from the capitalization differences that trip g++, the names
differ (PSR_VER vs. PSR_VERS), PSR_XCC is included in Solaris' PSR_RSV,
and there's no PSR_V8PLUS on Solaris either.
/vol/src/gnu/gdb/gdb/local/gdb/sparc64-tdep.c: In function ‘int adi_tag_fd()’:
/vol/src/gnu/gdb/gdb/local/gdb/sparc64-tdep.c:296:63: error: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘pid_t {aka long int}’ [-Werror=format=]
snprintf (cl_name, sizeof(cl_name), "/proc/%d/adi/tags", pid);
^
/vol/src/gnu/gdb/gdb/local/gdb/sparc64-tdep.c: In function ‘bool adi_is_addr_mapped(CORE_ADDR, std::size_t)’:
/vol/src/gnu/gdb/gdb/local/gdb/sparc64-tdep.c:314:64: error: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘pid_t {aka long int}’ [-Werror=format=]
snprintf (filename, sizeof filename, "/proc/%d/adi/maps", pid);
^
You cannot always print a pid_t, which can be either int or long on
Solaris, as an int.
Obviously, the ADI patch which modifies code shared between all SPARC
targets, hasn't been tested on anything but Linux/SPARC.
The patch below includes the minimal fixes necessary to unbreak the
Solaris/SPARC build.
However, as detailed in the PR, there's more breakage here: apart from
not bothering to implement ADI support on Solaris, the code contains
several more changes to shared/common SPARC code that are simply wrong
on anything but Linux/SPARC.
The patch was tested on sparcv9-sun-solaris2.10 and
sparcv9-sun-solaris2.11.4 (build and gdb/gdb gdb/gdb smoke test only).
Ok for mainline?
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University
2017-09-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR build/22206
* sparc64-tdep.c (adi_tag_fd): Print pid as long.
(adi_is_addr_mapped): Likewise.
(PSR_ICC): Don't redefine.
(PSR_IMPL): Likewise.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: sol2sparc-gdb81.patch --]
[-- Type: text/x-patch, Size: 1320 bytes --]
# HG changeset patch
# Parent 5123ae285cd10f18efd6d5db4a75bc4989514ef1
Fix gdb 8.1 Solaris/SPARC compilation (PR build/22206)
diff --git a/gdb/sparc64-tdep.c b/gdb/sparc64-tdep.c
--- a/gdb/sparc64-tdep.c
+++ b/gdb/sparc64-tdep.c
@@ -293,7 +293,7 @@ adi_tag_fd (void)
return proc->stat.tag_fd;
char cl_name[MAX_PROC_NAME_SIZE];
- snprintf (cl_name, sizeof(cl_name), "/proc/%d/adi/tags", pid);
+ snprintf (cl_name, sizeof(cl_name), "/proc/%ld/adi/tags", (long) pid);
int target_errno;
proc->stat.tag_fd = target_fileio_open (NULL, cl_name, O_RDWR|O_EXCL,
0, &target_errno);
@@ -311,7 +311,7 @@ adi_is_addr_mapped (CORE_ADDR vaddr, siz
size_t i = 0;
pid_t pid = ptid_get_pid (inferior_ptid);
- snprintf (filename, sizeof filename, "/proc/%d/adi/maps", pid);
+ snprintf (filename, sizeof filename, "/proc/%ld/adi/maps", (long) pid);
char *data = target_fileio_read_stralloc (NULL, filename);
if (data)
{
@@ -1873,9 +1873,13 @@ sparc64_init_abi (struct gdbarch_info in
#define TSTATE_XCC 0x000000f000000000ULL
#define PSR_S 0x00000080
+#ifndef PSR_ICC
#define PSR_ICC 0x00f00000
+#endif
#define PSR_VERS 0x0f000000
+#ifndef PSR_IMPL
#define PSR_IMPL 0xf0000000
+#endif
#define PSR_V8PLUS 0xff000000
#define PSR_XCC 0x000f0000
next reply other threads:[~2017-09-26 9:33 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-26 9:33 Rainer Orth [this message]
2017-09-26 11:33 ` Pedro Alves
2017-09-26 13:04 ` Rainer Orth
2017-09-26 16:06 ` Wei-min Pan
2017-09-27 9:16 ` Rainer Orth
2017-09-27 20:43 ` Wei-min Pan
2017-09-28 12:40 ` Rainer Orth
2017-09-28 14:19 ` Pedro Alves
2017-09-28 14:37 ` Rainer Orth
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=yddfub9x0rp.fsf@CeBiTec.Uni-Bielefeld.DE \
--to=ro@cebitec.uni-bielefeld.de \
--cc=gdb-patches@sourceware.org \
--cc=weimin.pan@oracle.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