From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11272 invoked by alias); 11 Jan 2008 18:20:29 -0000 Received: (qmail 11260 invoked by uid 22791); 11 Jan 2008 18:20:26 -0000 X-Spam-Check-By: sourceware.org Received: from mtagate8.de.ibm.com (HELO mtagate8.de.ibm.com) (195.212.29.157) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 11 Jan 2008 18:20:04 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate8.de.ibm.com (8.13.8/8.13.8) with ESMTP id m0BIK1VD493424 for ; Fri, 11 Jan 2008 18:20:01 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v8.7) with ESMTP id m0BIK17j2273360 for ; Fri, 11 Jan 2008 19:20:01 +0100 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id m0BIK1UX020625 for ; Fri, 11 Jan 2008 19:20:01 +0100 Received: from bbkeks.de.ibm.com (dyn-9-152-248-40.boeblingen.de.ibm.com [9.152.248.40]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id m0BIK0Bx020518 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 11 Jan 2008 19:20:01 +0100 Message-ID: <4787B2E1.9060809@de.ibm.com> Date: Fri, 11 Jan 2008 18:20:00 -0000 From: Markus Deuling User-Agent: Thunderbird 2.0.0.9 (X11/20071031) MIME-Version: 1.0 To: GDB Patches , Ulrich Weigand , Eli Zaretskii Subject: [patch] Remove BITS_BIG_ENDIAN from defs.h Content-Type: multipart/mixed; boundary="------------090509080500020804000305" 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: 2008-01/txt/msg00279.txt.bz2 This is a multi-part message in MIME format. --------------090509080500020804000305 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1174 Hi, this patch removes BITS_BIG_ENDIAN from defs.h by replacing it with its expression. The way to recognize endianess of a target is gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG which is widely used by most files. So this macro is unnecessary. The other patch removes BITS_BIG_ENDIAN from the documentation. This patch introduces some new current_gdbarch's which will be replaced by a later patch. Tested on x86 without regressions. Is this ok ? ChangeLog: * value.h: Correct comment. * value.c (struct value): Likewise. * gdbtypes.h (struct field): Likewise. (unpack_field_as_long, modify_field): Replace BITS_BIG_ENDIAN by its expression. * valops.c (value_slice): Likewise. * valarith.c (value_subscript, value_bit_index): Likewise. * eval.c (evaluate_subexp_standard): Likewise. * dwarf2read.c (dwarf2_add_field): Likewise. * ada-lang.c (decode_packed_array, ada_value_primitive_packed_val) (move_bits, ada_value_assign, value_assign_to_component): Likewise. * defs.h (BITS_BIG_ENDIAN): Remove. ChangeLog doc: * gdbint.texinfo (BITS_BIG_ENDIAN): Remove. -- Markus Deuling GNU Toolchain for Linux on Cell BE deuling@de.ibm.com --------------090509080500020804000305 Content-Type: text/plain; name="diff-BITS_BIG_ENDIAN" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diff-BITS_BIG_ENDIAN" Content-length: 8308 diff -urpN src/gdb/ada-lang.c dev/gdb/ada-lang.c --- src/gdb/ada-lang.c 2008-01-09 11:01:28.000000000 +0100 +++ dev/gdb/ada-lang.c 2008-01-11 18:43:46.000000000 +0100 @@ -1875,7 +1875,8 @@ decode_packed_array (struct value *arr) return NULL; } - if (BITS_BIG_ENDIAN && ada_is_modular_type (value_type (arr))) + if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG + && ada_is_modular_type (value_type (arr))) { /* This is a (right-justified) modular type representing a packed array with no wrapper. In order to interpret the value through @@ -1998,7 +1999,7 @@ ada_value_primitive_packed_val (struct v int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8; /* Transmit bytes from least to most significant; delta is the direction the indices move. */ - int delta = BITS_BIG_ENDIAN ? -1 : 1; + int delta = (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) ? -1 : 1; type = ada_check_typedef (type); @@ -2047,7 +2048,7 @@ ada_value_primitive_packed_val (struct v memset (unpacked, 0, TYPE_LENGTH (type)); return v; } - else if (BITS_BIG_ENDIAN) + else if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) { src = len - 1; if (has_negatives (type) @@ -2141,7 +2142,7 @@ move_bits (gdb_byte *target, int targ_of targ_offset %= HOST_CHAR_BIT; source += src_offset / HOST_CHAR_BIT; src_offset %= HOST_CHAR_BIT; - if (BITS_BIG_ENDIAN) + if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) { accum = (unsigned char) *source; source += 1; @@ -2229,7 +2230,7 @@ ada_value_assign (struct value *toval, s fromval = value_cast (type, fromval); read_memory (to_addr, buffer, len); - if (BITS_BIG_ENDIAN) + if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) move_bits (buffer, value_bitpos (toval), value_contents (fromval), TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT - @@ -2276,7 +2277,7 @@ value_assign_to_component (struct value else bits = value_bitsize (component); - if (BITS_BIG_ENDIAN) + if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) move_bits (value_contents_writeable (container) + offset_in_container, value_bitpos (container) + bit_offset_in_container, value_contents (val), diff -urpN src/gdb/defs.h dev/gdb/defs.h --- src/gdb/defs.h 2008-01-11 13:28:02.000000000 +0100 +++ dev/gdb/defs.h 2008-01-11 18:45:26.000000000 +0100 @@ -1043,14 +1043,6 @@ enum { MAX_REGISTER_SIZE = 16 }; #define HOST_CHAR_BIT TARGET_CHAR_BIT #endif -/* The bit byte-order has to do just with numbering of bits in - debugging symbols and such. Conceptually, it's quite separate - from byte/word byte order. */ - -#if !defined (BITS_BIG_ENDIAN) -#define BITS_BIG_ENDIAN (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) -#endif - /* In findvar.c. */ extern LONGEST extract_signed_integer (const gdb_byte *, int); diff -urpN src/gdb/dwarf2read.c dev/gdb/dwarf2read.c --- src/gdb/dwarf2read.c 2008-01-11 14:32:31.000000000 +0100 +++ dev/gdb/dwarf2read.c 2008-01-11 18:41:27.000000000 +0100 @@ -3502,7 +3502,7 @@ dwarf2_add_field (struct field_info *fip attr = dwarf2_attr (die, DW_AT_bit_offset, cu); if (attr) { - if (BITS_BIG_ENDIAN) + if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) { /* For big endian bits, the DW_AT_bit_offset gives the additional bit offset from the MSB of the containing diff -urpN src/gdb/eval.c dev/gdb/eval.c --- src/gdb/eval.c 2008-01-08 11:22:24.000000000 +0100 +++ dev/gdb/eval.c 2008-01-11 18:40:32.000000000 +0100 @@ -686,7 +686,7 @@ evaluate_subexp_standard (struct type *e for (; range_low <= range_high; range_low++) { int bit_index = (unsigned) range_low % TARGET_CHAR_BIT; - if (BITS_BIG_ENDIAN) + if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) bit_index = TARGET_CHAR_BIT - 1 - bit_index; valaddr[(unsigned) range_low / TARGET_CHAR_BIT] |= 1 << bit_index; diff -urpN src/gdb/gdbtypes.h dev/gdb/gdbtypes.h --- src/gdb/gdbtypes.h 2008-01-01 23:53:10.000000000 +0100 +++ dev/gdb/gdbtypes.h 2008-01-11 18:39:29.000000000 +0100 @@ -403,8 +403,8 @@ struct main_type { /* Position of this field, counting in bits from start of containing structure. - For BITS_BIG_ENDIAN=1 targets, it is the bit offset to the MSB. - For BITS_BIG_ENDIAN=0 targets, it is the bit offset to the LSB. + For Big Endian targets, it is the bit offset to the MSB. + For Little Endian targets, it is the bit offset to the LSB. For a range bound or enum value, this is the value itself. */ int bitpos; diff -urpN src/gdb/valarith.c dev/gdb/valarith.c --- src/gdb/valarith.c 2008-01-08 11:22:24.000000000 +0100 +++ dev/gdb/valarith.c 2008-01-11 18:38:31.000000000 +0100 @@ -230,7 +230,8 @@ value_subscript (struct value *array, st offset = index / TARGET_CHAR_BIT; byte = *((char *) value_contents (array) + offset); bit_index = index % TARGET_CHAR_BIT; - byte >>= (BITS_BIG_ENDIAN ? TARGET_CHAR_BIT - 1 - bit_index : bit_index); + byte >>= (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG ? + TARGET_CHAR_BIT - 1 - bit_index : bit_index); v = value_from_longest (LA_BOOL_TYPE, byte & 1); set_value_bitpos (v, bit_index); set_value_bitsize (v, 1); @@ -1573,7 +1574,7 @@ value_bit_index (struct type *type, cons word = unpack_long (builtin_type_unsigned_char, valaddr + (rel_index / TARGET_CHAR_BIT)); rel_index %= TARGET_CHAR_BIT; - if (BITS_BIG_ENDIAN) + if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) rel_index = TARGET_CHAR_BIT - 1 - rel_index; return (word >> rel_index) & 1; } diff -urpN src/gdb/valops.c dev/gdb/valops.c --- src/gdb/valops.c 2008-01-08 11:22:24.000000000 +0100 +++ dev/gdb/valops.c 2008-01-11 18:36:58.000000000 +0100 @@ -2743,7 +2743,7 @@ value_slice (struct value *array, int lo else if (element > 0) { int j = i % TARGET_CHAR_BIT; - if (BITS_BIG_ENDIAN) + if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) j = TARGET_CHAR_BIT - 1 - j; value_contents_raw (slice)[i / TARGET_CHAR_BIT] |= (1 << j); } diff -urpN src/gdb/value.c dev/gdb/value.c --- src/gdb/value.c 2008-01-08 11:22:24.000000000 +0100 +++ dev/gdb/value.c 2008-01-11 18:36:10.000000000 +0100 @@ -72,8 +72,8 @@ struct value int bitsize; /* Only used for bitfields; position of start of field. For - BITS_BIG_ENDIAN=0 targets, it is the position of the LSB. For - BITS_BIG_ENDIAN=1 targets, it is the position of the MSB. */ + Little Endian targets, it is the position of the LSB. For + Big Endian targets, it is the position of the MSB. */ int bitpos; /* Frame register value is relative to. This will be described in @@ -1481,7 +1481,7 @@ unpack_field_as_long (struct type *type, /* Extract bits. See comment above. */ - if (BITS_BIG_ENDIAN) + if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) lsbcount = (sizeof val * 8 - bitpos % 8 - bitsize); else lsbcount = (bitpos % 8); @@ -1537,7 +1537,7 @@ modify_field (gdb_byte *addr, LONGEST fi oword = extract_unsigned_integer (addr, sizeof oword); /* Shifting for bit field depends on endianness of the target machine. */ - if (BITS_BIG_ENDIAN) + if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) bitpos = sizeof (oword) * 8 - bitpos - bitsize; oword &= ~(mask << bitpos); diff -urpN src/gdb/value.h dev/gdb/value.h --- src/gdb/value.h 2008-01-08 11:22:24.000000000 +0100 +++ dev/gdb/value.h 2008-01-11 18:34:08.000000000 +0100 @@ -62,8 +62,8 @@ extern int value_bitsize (struct value * extern void set_value_bitsize (struct value *, int bit); /* Only used for bitfields; position of start of field. For - BITS_BIG_ENDIAN=0 targets, it is the position of the LSB. For - BITS_BIG_ENDIAN=1 targets, it is the position of the MSB. */ + Little Endian targets, it is the position of the LSB. For + Big Endian targets, it is the position of the MSB. */ extern int value_bitpos (struct value *); extern void set_value_bitpos (struct value *, int bit); --------------090509080500020804000305 Content-Type: text/plain; name="diff-doc-ENDIAN" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diff-doc-ENDIAN" Content-length: 758 diff -urpN src/gdb/doc/gdbint.texinfo dev/gdb/doc/gdbint.texinfo --- src/gdb/doc/gdbint.texinfo 2008-01-05 17:49:53.000000000 +0100 +++ dev/gdb/doc/gdbint.texinfo 2008-01-11 18:47:54.000000000 +0100 @@ -3344,12 +3344,6 @@ Used to notify if the compiler promotes parameter to an @code{int}, but still reports the parameter as its original type, rather than the promoted type. -@item BITS_BIG_ENDIAN -@findex BITS_BIG_ENDIAN -Define this if the numbering of bits in the targets does @strong{not} match the -endianness of the target byte order. A value of 1 means that the bits -are numbered in a big-endian bit order, 0 means little-endian. - @item BREAKPOINT @findex BREAKPOINT This is the character array initializer for the bit pattern to put into --------------090509080500020804000305--