public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Nathan Froyd <froydnj@codesourcery.com>
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	[thread overview]
Message-ID: <1288380039-21997-1-git-send-email-froydnj@codesourcery.com> (raw)

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

             reply	other threads:[~2010-10-29 19:20 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-29 19:20 Nathan Froyd [this message]
2010-10-29 19:49 ` Doug Evans
2010-10-29 20:16   ` Daniel Jacobowitz
2010-11-01 20:13     ` Tom Tromey
2010-11-03 17:24       ` Doug Evans

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=1288380039-21997-1-git-send-email-froydnj@codesourcery.com \
    --to=froydnj@codesourcery.com \
    --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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).