From 768adc05c44c7e8b5c0f9ca5ad3ca96657715293 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Sun, 18 Sep 2016 23:56:01 +0100 Subject: gdb: Fix std::{min, max}-related build breakage on 32-bit hosts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Building on a 32-bit host fails currently with errors like: .../src/gdb/exec.c: In function ‘target_xfer_status section_table_read_available_memory(gdb_byte*, ULONGEST, ULONGEST, ULONGEST*)’: .../src/gdb/exec.c:801:54: error: no matching function for call to ‘min(ULONGEST, long unsigned int)’ end = std::min (offset + len, r->start + r->length); ^ In file included from /usr/include/c++/5.3.1/algorithm:61:0, from .../src/gdb/exec.c:46: /usr/include/c++/5.3.1/bits/stl_algobase.h:195:5: note: candidate: template const _Tp& std::min(const _Tp&, const _Tp&) min(const _Tp& __a, const _Tp& __b) ^ /usr/include/c++/5.3.1/bits/stl_algobase.h:195:5: note: template argument deduction/substitution failed: .../src/gdb/exec.c:801:54: note: deduced conflicting types for parameter ‘const _Tp’ (‘long long unsigned int’ and ‘long unsigned int’) end = std::min (offset + len, r->start + r->length); ^ In file included from /usr/include/c++/5.3.1/algorithm:61:0, from .../src/gdb/exec.c:46: /usr/include/c++/5.3.1/bits/stl_algobase.h:243:5: note: candidate: template const _Tp& std::min(const _Tp&, const _Tp&, _Compare) min(const _Tp& __a, const _Tp& __b, _Compare __comp) ^ The problem is that the std::min/std::max function templates use the same type for both parameters. When the argument types are different, the compiler can't automatically deduce which template specialization to pick from the arguments' types. Fix that by specifying the specialization we want explicitly. gdb/ChangeLog: 2016-09-18 Pedro Alves * breakpoint.c (hardware_watchpoint_inserted_in_range): Explicitly specify the std:min/std::max specialization. * exec.c (section_table_read_available_memory): Likewise. * remote.c (remote_read_qxfer): Likewise. * target.c (simple_verify_memory): Likewise. --- gdb/target.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gdb/target.c') diff --git a/gdb/target.c b/gdb/target.c index 628bceb..b93244d 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -3585,7 +3585,7 @@ simple_verify_memory (struct target_ops *ops, ULONGEST xfered_len; enum target_xfer_status status; gdb_byte buf[1024]; - ULONGEST howmuch = std::min (sizeof (buf), size - total_xfered); + ULONGEST howmuch = std::min (sizeof (buf), size - total_xfered); status = target_xfer_partial (ops, TARGET_OBJECT_MEMORY, NULL, buf, NULL, lma + total_xfered, howmuch, -- cgit v1.1