This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: Your change breaks GDB for ARM
- From: Andrew Cagney <ac131313 at redhat dot com>
- To: Richard dot Earnshaw at arm dot com
- Cc: Phil Edwards <phil at jaj dot com>, Richard Earnshaw <rearnsha at arm dot com>,gdb at sources dot redhat dot com
- Date: Fri, 21 Nov 2003 13:04:25 -0500
- Subject: Re: Your change breaks GDB for ARM
- References: <200311211649.hALGnRt02516@pc960.cambridge.arm.com>
oops, missed them. I guess I could #ifdef them out (richard?). Those
assignments haven't done anything useful since 2002-02-08 when the arm
became multi-arch partial.
Erm, maybe. When you open a remote target via RDP you get the option to
ask the target to set the endianness (or you can ask "tell me your
endianness"). If you select an endianness and it isn't supported, you
should get back the error RDIError_WrongByteSex; if you ask it to tell
you, it will report back either RDIError_BigEndian or
RDIError_LittleEndian. The idea is to allow the board to tell you what it
can support.
What should be done will depend on when we open the connection to the
board. If it's after we've selected an image to send, then we should pass
the endianness of the image in the initial connection. If it's before,
then we should ask the board. I think the best solution is to delay
connecting to the target until we have an image if possible. That avoids
the situation where we have a target that is bi-endian (eg a simulator --
most boards are fixed-endian) and it reports the one we don't want --
there's no way for the remote end to say "I'm currently foo, but I can
also to bar".
Try the attached. It warns the user of the conflict and points them at
"set endian" for how to change it. The other alternative is to force
the endianess based on what the target indicates, but as you note, that
could lead to interesting conflicts.
Andrew
2003-11-21 Andrew Cagney <cagney@redhat.com>
* remote-rdp.c (rdp_init): Warn the user when there is a conflict
between GDB's and the target's byte-order.
Index: remote-rdp.c
===================================================================
RCS file: /cvs/src/src/gdb/remote-rdp.c,v
retrieving revision 1.34
diff -u -r1.34 remote-rdp.c
--- remote-rdp.c 11 Jun 2003 13:16:28 -0000 1.34
+++ remote-rdp.c 21 Nov 2003 18:00:53 -0000
@@ -352,11 +352,17 @@
case SERIAL_TIMEOUT:
break;
case RDP_RES_VALUE_LITTLE_ENDIAN:
- target_byte_order = BFD_ENDIAN_LITTLE;
+ if (TARGET_BYTE_ORDER != BFD_ENDIAN_LITTLE)
+ warning ("\
+little-endian remote target conflicts with GDB's current (big-endian) byte order,\n\
+see \"set endian\" for how to set the byte order");
sync = 1;
break;
case RDP_RES_VALUE_BIG_ENDIAN:
- target_byte_order = BFD_ENDIAN_BIG;
+ if (TARGET_BYTE_ORDER != BFD_ENDIAN_BIG)
+ warning ("\
+big-endian remote target conflicts with GDB's current (little-endian) byte order,\n\
+see \"set endian\" how to set the byte order");
sync = 1;
break;
default: