This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH][gdb] Fix s390x -m31 build
- From: Tom de Vries <tdevries at suse dot de>
- To: gdb-patches at sourceware dot org
- Cc: Andreas Arnez <arnez at linux dot vnet dot ibm dot com>
- Date: Thu, 20 Jun 2019 11:33:41 +0200
- Subject: [PATCH][gdb] Fix s390x -m31 build
Hi,
When building gdb on s390x with -m31, we run into this Wformat
warning (which Werror turns into an error):
...
gdb/dwarf2read.c: In function \
'void create_addrmap_from_aranges(dwarf2_per_objfile*, \
dwarf2_section_info*)':
gdb/dwarf2read.c:3277:22: error: format '%zu' expects argument of type \
'size_t', but argument 3 has type 'int' [-Werror=format=]
warning (_("Section .debug_aranges in %s entry at offset %zu "
...
The Wformat warning is triggered in this statement:
...
warning (_("Section .debug_aranges in %s entry at offset %zu "
"length %s exceeds section length %s, "
"ignoring .debug_aranges."),
objfile_name (objfile), entry_addr - section->buffer,
plongest (bytes_read + entry_length),
pulongest (section->size));
...
where 'entry_addr - section->buffer' is of type ptrdiff_t and '%zu' prints an
unsigned with the same size as size_t/ssize_t.
On s390x with -m31, we have:
- size_t : unsigned long int (32-bit)
- ptrdiff_t: int (32-bit)
Wformat warns against this because even though long int and int have the same
size, the types are not compatible.
[ The Wformat warning is to similar to what we would get for x86_64 -m32
(where long and int are also the same size) and:
...
int i;
printf ("%ld", i);
... ]
Fix this by changing the length modifier from 'z' to the ptrdiff_t length
modifier 't', and change the conversion specifier from 'u' to the more
appropriate 'd'.
Build and reg-tested on x86_64.
Build on s390x-linux with -m31.
OK for trunk?
Thanks,
- Tom
[gdb] Fix s390x -m31 build
gdb/ChangeLog:
2019-06-20 Tom de Vries <tdevries@suse.de>
* dwarf2read.c (create_addrmap_from_aranges)
(read_debug_names_from_section): Print ptrdiff_t using '%td' instead
of '%zu'.
---
gdb/dwarf2read.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 9cf513b582..0fcd0defce 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -3246,7 +3246,7 @@ create_addrmap_from_aranges (struct dwarf2_per_objfile *dwarf2_per_objfile,
const uint8_t offset_size = dwarf5_is_dwarf64 ? 8 : 4;
if (addr + entry_length > section->buffer + section->size)
{
- warning (_("Section .debug_aranges in %s entry at offset %zu "
+ warning (_("Section .debug_aranges in %s entry at offset %td "
"length %s exceeds section length %s, "
"ignoring .debug_aranges."),
objfile_name (objfile), entry_addr - section->buffer,
@@ -3260,7 +3260,7 @@ create_addrmap_from_aranges (struct dwarf2_per_objfile *dwarf2_per_objfile,
addr += 2;
if (version != 2)
{
- warning (_("Section .debug_aranges in %s entry at offset %zu "
+ warning (_("Section .debug_aranges in %s entry at offset %tu "
"has unsupported version %d, ignoring .debug_aranges."),
objfile_name (objfile), entry_addr - section->buffer,
version);
@@ -3274,7 +3274,7 @@ create_addrmap_from_aranges (struct dwarf2_per_objfile *dwarf2_per_objfile,
= debug_info_offset_to_per_cu.find (sect_offset (debug_info_offset));
if (per_cu_it == debug_info_offset_to_per_cu.cend ())
{
- warning (_("Section .debug_aranges in %s entry at offset %zu "
+ warning (_("Section .debug_aranges in %s entry at offset %tu "
"debug_info_offset %s does not exists, "
"ignoring .debug_aranges."),
objfile_name (objfile), entry_addr - section->buffer,
@@ -3286,7 +3286,7 @@ create_addrmap_from_aranges (struct dwarf2_per_objfile *dwarf2_per_objfile,
const uint8_t address_size = *addr++;
if (address_size < 1 || address_size > 8)
{
- warning (_("Section .debug_aranges in %s entry at offset %zu "
+ warning (_("Section .debug_aranges in %s entry at offset %tu "
"address_size %u is invalid, ignoring .debug_aranges."),
objfile_name (objfile), entry_addr - section->buffer,
address_size);
@@ -3296,7 +3296,7 @@ create_addrmap_from_aranges (struct dwarf2_per_objfile *dwarf2_per_objfile,
const uint8_t segment_selector_size = *addr++;
if (segment_selector_size != 0)
{
- warning (_("Section .debug_aranges in %s entry at offset %zu "
+ warning (_("Section .debug_aranges in %s entry at offset %tu "
"segment_selector_size %u is not supported, "
"ignoring .debug_aranges."),
objfile_name (objfile), entry_addr - section->buffer,
@@ -3312,7 +3312,7 @@ create_addrmap_from_aranges (struct dwarf2_per_objfile *dwarf2_per_objfile,
padding > 0; padding--)
if (*addr++ != 0)
{
- warning (_("Section .debug_aranges in %s entry at offset %zu "
+ warning (_("Section .debug_aranges in %s entry at offset %tu "
"padding is not zero, ignoring .debug_aranges."),
objfile_name (objfile), entry_addr - section->buffer);
return;
@@ -3322,7 +3322,7 @@ create_addrmap_from_aranges (struct dwarf2_per_objfile *dwarf2_per_objfile,
{
if (addr + 2 * address_size > entry_end)
{
- warning (_("Section .debug_aranges in %s entry at offset %zu "
+ warning (_("Section .debug_aranges in %s entry at offset %tu "
"address list is not properly terminated, "
"ignoring .debug_aranges."),
objfile_name (objfile), entry_addr - section->buffer);
@@ -5537,7 +5537,7 @@ read_debug_names_from_section (struct objfile *objfile,
if (addr != abbrev_table_start + abbrev_table_size)
{
warning (_("Section .debug_names in %s has abbreviation_table "
- "of size %zu vs. written as %u, ignoring .debug_names."),
+ "of size %tu vs. written as %u, ignoring .debug_names."),
filename, addr - abbrev_table_start, abbrev_table_size);
return false;
}