From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22122 invoked by alias); 29 Oct 2010 19:20:46 -0000 Received: (qmail 22112 invoked by uid 22791); 29 Oct 2010 19:20:45 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 29 Oct 2010 19:20:41 +0000 Received: (qmail 28522 invoked from network); 29 Oct 2010 19:20:40 -0000 Received: from unknown (HELO localhost) (froydnj@127.0.0.2) by mail.codesourcery.com with ESMTPA; 29 Oct 2010 19:20:40 -0000 From: Nathan Froyd To: gdb-patches@sourceware.org Subject: [PATCH] fix py-inferior.exp for remote cross-endian testing Date: Fri, 29 Oct 2010 19:20:00 -0000 Message-Id: <1288380039-21997-1-git-send-email-froydnj@codesourcery.com> X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-10/txt/msg00387.txt.bz2 The patch below fixes a problem seen when doing remote testing on a target that has a different endianness from the host. Python's pack function will pack according to host endianness, but the search_memory function searches according to target endianness. Searching for a value from the former with the latter, then, does not work correctly. The solution taken is to discover the target endianness early on using 'show endian' (the Python interface ought to have a method for this...) and then use that knowledge to explicitly indicate what endianness Python's pack function should use for multi-byte values. Strictly speaking, the change in the final hunk is unnecessary (endianness will always match in native testing), but is done for completeness. Tested with cross to powerpc-linux-gnu from i686-pc-linux-gnu. OK to commit? -Nathan * gdb.python/py-inferior.exp: Pack values in target endianness. --- gdb/testsuite/gdb.python/py-inferior.exp | 25 ++++++++++++++++++------- 1 files changed, 18 insertions(+), 7 deletions(-) diff --git a/gdb/testsuite/gdb.python/py-inferior.exp b/gdb/testsuite/gdb.python/py-inferior.exp index 45f43a1..7998b92 100644 --- a/gdb/testsuite/gdb.python/py-inferior.exp +++ b/gdb/testsuite/gdb.python/py-inferior.exp @@ -34,6 +34,17 @@ clean_restart ${testfile} # Skip all tests if Python scripting is not enabled. if { [skip_python_tests] } { continue } +gdb_test_multiple "show endian" "getting target endian" { + -re ".*little endian.*$gdb_prompt $" { + set python_pack_char "<" + # pass silently + } + -re ".*big endian.*$gdb_prompt $" { + set python_pack_char ">" + # pass silently + } +} + # The following tests require execution. if ![runto_main] then { @@ -106,7 +117,7 @@ gdb_test "set int16_search_buf\[10\] = 0x1234" "" "" gdb_test "py search_buf = gdb.selected_frame ().read_var ('int16_search_buf')" "" "" gdb_test "py start_addr = search_buf.address" "" "" gdb_test "py length = search_buf.type.sizeof" "" "" -gdb_test "py pattern = pack('H',0x1234)" "" \ +gdb_test "py pattern = pack('${python_pack_char}H',0x1234)" "" \ gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, length, pattern)" \ "${one_pattern_found}" "find 16-bit pattern, with value pattern" @@ -117,7 +128,7 @@ gdb_test "set int32_search_buf\[10\] = 0x12345678" "" "" gdb_test "py search_buf = gdb.selected_frame ().read_var ('int32_search_buf')" "" "" gdb_test "py start_addr = search_buf.address" "" "" gdb_test "py length = search_buf.type.sizeof" "" "" -gdb_test "py pattern = pack('I',0x12345678)" "" \ +gdb_test "py pattern = pack('${python_pack_char}I',0x12345678)" "" \ gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, length, pattern)" \ "${one_pattern_found}" "find 32-bit pattern, with python pattern" @@ -128,7 +139,7 @@ gdb_test "set int64_search_buf\[10\] = 0xfedcba9876543210LL" "" "" gdb_test "py search_buf = gdb.selected_frame ().read_var ('int64_search_buf')" "" "" gdb_test "py start_addr = search_buf.address" "" "" gdb_test "py length = search_buf.type.sizeof" "" "" -gdb_test "py pattern = pack('Q', 0xfedcba9876543210)" "" "" +gdb_test "py pattern = pack('${python_pack_char}Q', 0xfedcba9876543210)" "" "" gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, length, pattern)" \ "${one_pattern_found}" "find 64-bit pattern, with value pattern" @@ -141,8 +152,8 @@ gdb_test "set *(int32_t*) &search_buf\[13\] = 0x64646464" "" "" gdb_test "py search_buf = gdb.selected_frame ().read_var ('search_buf')" "" "" gdb_test "py start_addr = search_buf\[0\].address" "" "" gdb_test "py pattern1 = pack('B', 0x62)" "" "" -gdb_test "py pattern2 = pack('H', 0x6363)" "" "" -gdb_test "py pattern3 = pack('I', 0x64646464)" "" "" +gdb_test "py pattern2 = pack('${python_pack_char}H', 0x6363)" "" "" +gdb_test "py pattern3 = pack('${python_pack_char}I', 0x64646464)" "" "" gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, 100, pattern1)" \ "${one_pattern_found}" "find mixed-sized pattern" @@ -161,7 +172,7 @@ gdb_test "set *(int32_t*) &search_buf\[0*${CHUNK_SIZE}+100\] = 0x12345678" "" "" gdb_test "set *(int32_t*) &search_buf\[1*${CHUNK_SIZE}+100\] = 0x12345678" "" "" gdb_test "py start_addr = gdb.selected_frame ().read_var ('search_buf')" "" "" gdb_test "py length = gdb.selected_frame ().read_var ('search_buf_size')" "" "" -gdb_test "py pattern = pack('I', 0x12345678)" "" "" +gdb_test "py pattern = pack('${python_pack_char}I', 0x12345678)" "" "" gdb_test "py first = gdb.inferiors()\[0\].search_memory (start_addr,length, pattern)" "" "" gdb_test "py print first" "${one_pattern_found}" "search spanning large range 1st result" gdb_test "py start_addr = first + 1" @@ -175,7 +186,7 @@ gdb_test "py print third" "${pattern_not_found}" "search spanning large range 3r if [isnative] { gdb_test "set *(int32_t*) &search_buf\[${CHUNK_SIZE}-1\] = 0xfdb97531" "" "" - gdb_test "py pattern = pack('I', 0xfdb97531)" "" "" + gdb_test "py pattern = pack('${python_pack_char}I', 0xfdb97531)" "" "" gdb_test "py start_addr = gdb.selected_frame ().read_var ('search_buf')" "" "" gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, length, pattern)" \ "${one_pattern_found}" "find pattern straddling chunk boundary" -- 1.6.3.2