From patchwork Fri Feb 18 09:50:17 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Kai Tietz X-Patchwork-Id: 83553 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 335CFB70A7 for ; Fri, 18 Feb 2011 20:50:35 +1100 (EST) Received: (qmail 8683 invoked by alias); 18 Feb 2011 09:50:32 -0000 Received: (qmail 8501 invoked by uid 22791); 18 Feb 2011 09:50:27 -0000 X-SWARE-Spam-Status: No, hits=-0.1 required=5.0 tests=AWL, BAYES_40, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, RFC_ABUSE_POST X-Spam-Check-By: sourceware.org Received: from mail-qw0-f47.google.com (HELO mail-qw0-f47.google.com) (209.85.216.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 18 Feb 2011 09:50:19 +0000 Received: by qwi2 with SMTP id 2so3248136qwi.20 for ; Fri, 18 Feb 2011 01:50:17 -0800 (PST) MIME-Version: 1.0 Received: by 10.224.63.228 with SMTP id c36mr429246qai.17.1298022617525; Fri, 18 Feb 2011 01:50:17 -0800 (PST) Received: by 10.229.214.131 with HTTP; Fri, 18 Feb 2011 01:50:17 -0800 (PST) In-Reply-To: <20110217191714.GD30899@tyan-ft48-01.lab.bos.redhat.com> References: <20110217190253.GC30899@tyan-ft48-01.lab.bos.redhat.com> <20110217191714.GD30899@tyan-ft48-01.lab.bos.redhat.com> Date: Fri, 18 Feb 2011 10:50:17 +0100 Message-ID: Subject: Re: [RFC patch]: Adjust the use of 'long' type in dwarf2.h header From: Kai Tietz To: Alan Modra Cc: GCC Patches , Binutils , gdb , Joel Brobecker , Jakub Jelinek X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org 2011/2/17 Jakub Jelinek : > On Thu, Feb 17, 2011 at 08:06:53PM +0100, Kai Tietz wrote: >> > I'd prefer if we could move those binutils specific internal implementation >> > details out of the dwarf2.h header, keep it really just for the stuff >> > defined in the standard, and add a new binutils specific header somewhere >> > else which would contain binutils specific details. >> >> Well, so we make dwarf2.h in include just host-specific and isn't able >> to cover things for foreign target, like 32-bit host can't use this >> header for 64-bit dwarf2 information. I am fine by this, but >> nevertheless is then the use of 'unsigned long' type within this >> header still an issue. Here should be used instead then 'intptr_t'. As >> on LLP64 unsigned long isn't wide-enough. > > I mean that none of the DWARF2_Internal types should be in the > include/dwarf2.h headers (that's implementation specific stuff), > and the DWARF2_External types are questionable too, to me they look > very much like implementation detail too.  E.g. DWARF2_External_LineInfo > type is dubious, because it might somehow describe version 2 or 3 > .debug_line header, but version 4 looks differently, etc. > So IMHO the DWARF2_External stuff should be moved too. > And the guard should be probably renamed from _ELF_DWARF2_H to _DWARF2_H, > I don't see anything ELF specific in the header. > >        Jakub > So I reworked my patch as Jakub suggested and retested it for x86_64-w64-mingw32, i686-w64-mingw32, and x86_64-pc-linux-gnu for gcc, binutils, and gdb. Ok for apply? binutils, gdb, gcc ChangeLog include/ 2011-02-18 Kai Tietz * dwarf2.h (_ELF_DWARF2_H): Renamed to _DWARF2_H. (DWARF2_External_LineInfo, DWARF2_Internal_LineInfo, DWARF2_External_PubNames, DWARF2_Internal_PubNames, DWARF2_External_CompUnit, DWARF2_Internal_CompUnit, DWARF2_External_ARange, DWARF2_Internal_ARange): Removed. ChangeLog binutils/ 2011-02-18 Kai Tietz * dwarf.c (read_leb128): Use dw2_vma_t instead of long type. (process_extended_line_op): Use for adr bfd_vma type and print those typed values via BFD_VMA_FMT. (fetch_indirect_string): Adjust offset's type. (decode_location_expression): Adjust argument types and uvalue type. (read_and_display_attr_value): Likewise. (read_and_display_attr): Likewise. (decode_location_expression): Adjust printf format. (process_debug_info): Likewise. (display_debug_lines_raw): Likewise. (display_debug_lines_decoded): Likewise. (display_debug_pubnames): Likewise. (display_debug_loc): Likewise. (display_debug_aranges): Likewise. * dwarf.h (DWARF2_External_LineInfo, DWARF2_Internal_LineInfo, DWARF2_External_PubNames, DWARF2_Internal_PubNames, DWARF2_External_CompUnit, DWARF2_Internal_CompUnit, DWARF2_External_ARange, DWARF2_Internal_ARange): Added.. (read_leb128): Adjust return type. Regards, Kai PS: A lot of those moved structures aren't used at all in binutils dwarf.c (which is the only consumer of some of those structures as a grep over binutils/gdb/gcc had shown). So maybe the unused could be removed in a second patch completely. Index: src/binutils/dwarf.c =================================================================== --- src.orig/binutils/dwarf.c 2011-02-17 11:00:34.000000000 +0100 +++ src/binutils/dwarf.c 2011-02-18 10:27:10.941857600 +0100 @@ -123,10 +123,10 @@ print_dwarf_vma (dwarf_vma val, unsigned fputs (buff + (byte_size == 4 ? 8 : 0), stdout); } -unsigned long int +bfd_vma read_leb128 (unsigned char *data, unsigned int *length_return, int sign) { - unsigned long int result = 0; + bfd_vma result = 0; unsigned int num_read = 0; unsigned int shift = 0; unsigned char byte; @@ -136,7 +136,7 @@ read_leb128 (unsigned char *data, unsign byte = *data++; num_read++; - result |= ((unsigned long int) (byte & 0x7f)) << shift; + result |= ((bfd_vma) (byte & 0x7f)) << shift; shift += 7; @@ -193,7 +193,7 @@ process_extended_line_op (unsigned char unsigned int bytes_read; unsigned int len; unsigned char *name; - unsigned long adr; + bfd_vma adr; len = read_leb128 (data, & bytes_read, 0); data += bytes_read; @@ -218,7 +218,7 @@ process_extended_line_op (unsigned char case DW_LNE_set_address: adr = byte_get (data, len - bytes_read - 1); - printf (_("set Address to 0x%lx\n"), adr); + printf (_("set Address to 0x%" BFD_VMA_FMT "x\n"), adr); state_machine_regs.address = adr; state_machine_regs.op_index = 0; break; @@ -230,16 +230,17 @@ process_extended_line_op (unsigned char printf (" %d\t", ++state_machine_regs.last_file_entry); name = data; data += strlen ((char *) data) + 1; - printf ("%lu\t", read_leb128 (data, & bytes_read, 0)); + printf ("%" BFD_VMA_FMT "u\t", read_leb128 (data, & bytes_read, 0)); data += bytes_read; - printf ("%lu\t", read_leb128 (data, & bytes_read, 0)); + printf ("%" BFD_VMA_FMT "u\t", + read_leb128 (data, & bytes_read, 0)); data += bytes_read; - printf ("%lu\t", read_leb128 (data, & bytes_read, 0)); + printf ("%" BFD_VMA_FMT "u\t", read_leb128 (data, & bytes_read, 0)); printf ("%s\n\n", name); break; case DW_LNE_set_discriminator: - printf (_("set Discriminator to %lu\n"), + printf (_("set Discriminator to %" BFD_VMA_FMT "u\n"), read_leb128 (data, & bytes_read, 0)); break; @@ -291,7 +292,7 @@ process_extended_line_op (unsigned char } static const char * -fetch_indirect_string (unsigned long offset) +fetch_indirect_string (bfd_vma offset) { struct dwarf_section *section = &debug_displays [str].section; @@ -302,7 +303,7 @@ fetch_indirect_string (unsigned long off offset -= section->address; if (offset > section->size) { - warn (_("DW_FORM_strp offset too big: %lx\n"), offset); + warn (_("DW_FORM_strp offset too big: %lx\n"), (long) offset); return _(""); } @@ -605,13 +606,13 @@ decode_location_expression (unsigned cha unsigned int pointer_size, unsigned int offset_size, int dwarf_version, - unsigned long length, - unsigned long cu_offset, + bfd_vma length, + bfd_vma cu_offset, struct dwarf_section * section) { unsigned op; unsigned int bytes_read; - unsigned long uvalue; + bfd_vma uvalue; unsigned char *end = data + length; int need_frame_base = 0; @@ -662,11 +663,13 @@ decode_location_expression (unsigned cha data += 8; break; case DW_OP_constu: - printf ("DW_OP_constu: %lu", read_leb128 (data, &bytes_read, 0)); + printf ("DW_OP_constu: %" BFD_VMA_FMT "u", + read_leb128 (data, &bytes_read, 0)); data += bytes_read; break; case DW_OP_consts: - printf ("DW_OP_consts: %ld", read_leb128 (data, &bytes_read, 1)); + printf ("DW_OP_consts: %" BFD_VMA_FMT "d", + read_leb128 (data, &bytes_read, 1)); data += bytes_read; break; case DW_OP_dup: @@ -721,7 +724,7 @@ decode_location_expression (unsigned cha printf ("DW_OP_plus"); break; case DW_OP_plus_uconst: - printf ("DW_OP_plus_uconst: %lu", + printf ("DW_OP_plus_uconst: %" BFD_VMA_FMT "u", read_leb128 (data, &bytes_read, 0)); data += bytes_read; break; @@ -867,7 +870,8 @@ decode_location_expression (unsigned cha case DW_OP_breg29: case DW_OP_breg30: case DW_OP_breg31: - printf ("DW_OP_breg%d (%s): %ld", op - DW_OP_breg0, + printf ("DW_OP_breg%d (%s): %" BFD_VMA_FMT "d", + op - DW_OP_breg0, regname (op - DW_OP_breg0, 1), read_leb128 (data, &bytes_read, 1)); data += bytes_read; @@ -876,22 +880,26 @@ decode_location_expression (unsigned cha case DW_OP_regx: uvalue = read_leb128 (data, &bytes_read, 0); data += bytes_read; - printf ("DW_OP_regx: %lu (%s)", uvalue, regname (uvalue, 1)); + printf ("DW_OP_regx: %" BFD_VMA_FMT "u (%s)", + uvalue, regname (uvalue, 1)); break; case DW_OP_fbreg: need_frame_base = 1; - printf ("DW_OP_fbreg: %ld", read_leb128 (data, &bytes_read, 1)); + printf ("DW_OP_fbreg: %" BFD_VMA_FMT "d", + read_leb128 (data, &bytes_read, 1)); data += bytes_read; break; case DW_OP_bregx: uvalue = read_leb128 (data, &bytes_read, 0); data += bytes_read; - printf ("DW_OP_bregx: %lu (%s) %ld", uvalue, regname (uvalue, 1), + printf ("DW_OP_bregx: %" BFD_VMA_FMT "u (%s) %" BFD_VMA_FMT "d", + uvalue, regname (uvalue, 1), read_leb128 (data, &bytes_read, 1)); data += bytes_read; break; case DW_OP_piece: - printf ("DW_OP_piece: %lu", read_leb128 (data, &bytes_read, 0)); + printf ("DW_OP_piece: %" BFD_VMA_FMT "u", + read_leb128 (data, &bytes_read, 0)); data += bytes_read; break; case DW_OP_deref_size: @@ -911,13 +919,15 @@ decode_location_expression (unsigned cha case DW_OP_call2: /* XXX: Strictly speaking for 64-bit DWARF3 files this ought to be an 8-byte wide computation. */ - printf ("DW_OP_call2: <0x%lx>", (long) byte_get (data, 2) + cu_offset); + printf ("DW_OP_call2: <0x%" BFD_VMA_FMT "x>", + (bfd_signed_vma) byte_get (data, 2) + cu_offset); data += 2; break; case DW_OP_call4: /* XXX: Strictly speaking for 64-bit DWARF3 files this ought to be an 8-byte wide computation. */ - printf ("DW_OP_call4: <0x%lx>", (long) byte_get (data, 4) + cu_offset); + printf ("DW_OP_call4: <0x%" BFD_VMA_FMT "x>", + (bfd_signed_vma) byte_get (data, 4) + cu_offset); data += 4; break; case DW_OP_call_ref: @@ -950,9 +960,11 @@ decode_location_expression (unsigned cha break; case DW_OP_bit_piece: printf ("DW_OP_bit_piece: "); - printf ("size: %lu ", read_leb128 (data, &bytes_read, 0)); + printf ("size: %" BFD_VMA_FMT "u ", + read_leb128 (data, &bytes_read, 0)); data += bytes_read; - printf ("offset: %lu ", read_leb128 (data, &bytes_read, 0)); + printf ("offset: %" BFD_VMA_FMT "u ", + read_leb128 (data, &bytes_read, 0)); data += bytes_read; break; @@ -1001,16 +1013,20 @@ decode_location_expression (unsigned cha } if (dwarf_version == 2) { - printf ("DW_OP_GNU_implicit_pointer: <0x%lx> %ld", - (long) byte_get (data, pointer_size), - read_leb128 (data + pointer_size, &bytes_read, 1)); + printf ("DW_OP_GNU_implicit_pointer: " + "<0x%" BFD_VMA_FMT "x> %" BFD_VMA_FMT "d", + (bfd_vma) byte_get (data, pointer_size), + (bfd_signed_vma) read_leb128 (data + pointer_size, + &bytes_read, 1)); data += pointer_size + bytes_read; } else { - printf ("DW_OP_GNU_implicit_pointer: <0x%lx> %ld", - (long) byte_get (data, offset_size), - read_leb128 (data + offset_size, &bytes_read, 1)); + printf ("DW_OP_GNU_implicit_pointer: " + "<0x%" BFD_VMA_FMT "x> %" BFD_VMA_FMT "d", + (bfd_vma) byte_get (data, offset_size), + (bfd_signed_vma) read_leb128 (data + offset_size, + &bytes_read, 1)); data += offset_size + bytes_read; } break; @@ -1072,15 +1088,15 @@ static unsigned char * read_and_display_attr_value (unsigned long attribute, unsigned long form, unsigned char * data, - unsigned long cu_offset, - unsigned long pointer_size, - unsigned long offset_size, + bfd_vma cu_offset, + bfd_vma pointer_size, + bfd_vma offset_size, int dwarf_version, debug_info * debug_info_p, int do_loc, struct dwarf_section * section) { - unsigned long uvalue = 0; + bfd_vma uvalue = 0; unsigned char *block_start = NULL; unsigned char * orig_data = data; unsigned int bytes_read; @@ -1167,7 +1183,7 @@ read_and_display_attr_value (unsigned lo { case DW_FORM_ref_addr: if (!do_loc) - printf (" <0x%lx>", uvalue); + printf (" <0x%" BFD_VMA_FMT "x>", uvalue); break; case DW_FORM_ref1: @@ -1175,14 +1191,14 @@ read_and_display_attr_value (unsigned lo case DW_FORM_ref4: case DW_FORM_ref_udata: if (!do_loc) - printf (" <0x%lx>", uvalue + cu_offset); + printf (" <0x%" BFD_VMA_FMT "x>", uvalue + cu_offset); break; case DW_FORM_data4: case DW_FORM_addr: case DW_FORM_sec_offset: if (!do_loc) - printf (" 0x%lx", uvalue); + printf (" 0x%" BFD_VMA_FMT "x", uvalue); break; case DW_FORM_flag_present: @@ -1192,7 +1208,7 @@ read_and_display_attr_value (unsigned lo case DW_FORM_sdata: case DW_FORM_udata: if (!do_loc) - printf (" %ld", uvalue); + printf (" %" BFD_VMA_FMT "d", uvalue); break; case DW_FORM_ref8: @@ -1200,7 +1216,7 @@ read_and_display_attr_value (unsigned lo if (!do_loc) { uvalue = byte_get (data, 4); - printf (" 0x%lx", uvalue); + printf (" 0x%" BFD_VMA_FMT "x", uvalue); printf (" 0x%lx", (unsigned long) byte_get (data + 4, 4)); } if ((do_loc || do_debug_loc || do_debug_ranges) @@ -1209,7 +1225,7 @@ read_and_display_attr_value (unsigned lo if (sizeof (uvalue) == 8) uvalue = byte_get (data, 8); else - error (_("DW_FORM_data8 is unsupported when sizeof (unsigned long) != 8\n")); + error (_("DW_FORM_data8 is unsupported when sizeof (bfd_vma) != 8\n")); } data += 8; break; @@ -1259,7 +1275,7 @@ read_and_display_attr_value (unsigned lo case DW_FORM_strp: if (!do_loc) - printf (_(" (indirect string, offset: 0x%lx): %s"), + printf (_(" (indirect string, offset: 0x%" BFD_VMA_FMT "x): %s"), uvalue, fetch_indirect_string (uvalue)); break; @@ -1313,7 +1329,7 @@ read_and_display_attr_value (unsigned lo if (lmax == 0 || num >= lmax) { lmax += 1024; - debug_info_p->loc_offsets = (long unsigned int *) + debug_info_p->loc_offsets = (bfd_vma *) xcrealloc (debug_info_p->loc_offsets, lmax, sizeof (*debug_info_p->loc_offsets)); debug_info_p->have_frame_base = (int *) @@ -1344,7 +1360,7 @@ read_and_display_attr_value (unsigned lo if (lmax == 0 || num >= lmax) { lmax += 1024; - debug_info_p->range_lists = (long unsigned int *) + debug_info_p->range_lists = (bfd_vma *) xcrealloc (debug_info_p->range_lists, lmax, sizeof (*debug_info_p->range_lists)); debug_info_p->max_range_lists = lmax; @@ -1383,7 +1399,8 @@ read_and_display_attr_value (unsigned lo printf (_("(declared as inline and inlined)")); break; default: - printf (_(" (Unknown inline attribute value: %lx)"), uvalue); + printf (_(" (Unknown inline attribute value: %" BFD_VMA_FMT "x)"), + uvalue); break; } break; @@ -1421,9 +1438,9 @@ read_and_display_attr_value (unsigned lo case DW_LANG_Upc: printf ("(Unified Parallel C)"); break; default: if (uvalue >= DW_LANG_lo_user && uvalue <= DW_LANG_hi_user) - printf ("(implementation defined: %lx)", uvalue); + printf ("(implementation defined: %" BFD_VMA_FMT "x)", uvalue); else - printf ("(Unknown: %lx)", uvalue); + printf ("(Unknown: %" BFD_VMA_FMT "x)", uvalue); break; } break; @@ -1584,7 +1601,7 @@ read_and_display_attr_value (unsigned lo uvalue += cu_offset; if (uvalue >= section->size) - warn (_("Offset %lx used as value for DW_AT_import attribute of DIE at offset %lx is too big.\n"), + warn (_("Offset %" BFD_VMA_FMT "x used as value for DW_AT_import attribute of DIE at offset %lx is too big.\n"), uvalue, (unsigned long) (orig_data - section->start)); else { @@ -1786,9 +1803,9 @@ static unsigned char * read_and_display_attr (unsigned long attribute, unsigned long form, unsigned char * data, - unsigned long cu_offset, - unsigned long pointer_size, - unsigned long offset_size, + bfd_vma cu_offset, + bfd_vma pointer_size, + bfd_vma offset_size, int dwarf_version, debug_info * debug_info_p, int do_loc, @@ -1900,7 +1917,7 @@ process_debug_info (struct dwarf_section unsigned char *hdrptr; unsigned char *tags; int level; - unsigned long cu_offset; + bfd_vma cu_offset; int offset_size; int initial_length_size; unsigned char signature[8] = { 0 }; @@ -1970,11 +1987,13 @@ process_debug_info (struct dwarf_section if (!do_loc) { - printf (_(" Compilation Unit @ offset 0x%lx:\n"), cu_offset); - printf (_(" Length: 0x%lx (%s)\n"), compunit.cu_length, + printf (_(" Compilation Unit @ offset 0x%" BFD_VMA_FMT "x:\n"), cu_offset); + printf (_(" Length: 0x%" BFD_VMA_FMT "x (%s)\n"), + compunit.cu_length, initial_length_size == 8 ? "64-bit" : "32-bit"); printf (_(" Version: %d\n"), compunit.cu_version); - printf (_(" Abbrev Offset: %ld\n"), compunit.cu_abbrev_offset); + printf (_(" Abbrev Offset: %" BFD_VMA_FMT "d\n"), + compunit.cu_abbrev_offset); printf (_(" Pointer Size: %d\n"), compunit.cu_pointer_size); if (do_types) { @@ -1990,7 +2009,9 @@ process_debug_info (struct dwarf_section if (cu_offset + compunit.cu_length + initial_length_size > section->size) { - warn (_("Debug info is corrupted, length of CU at %lx extends beyond end of section (length = %lx)\n"), + warn (_("Debug info is corrupted, length of CU at %" + BFD_VMA_FMT "x extends beyond end of section (length = %" + BFD_VMA_FMT "x)\n"), cu_offset, compunit.cu_length); break; } @@ -2001,7 +2022,8 @@ process_debug_info (struct dwarf_section && compunit.cu_version != 3 && compunit.cu_version != 4) { - warn (_("CU at offset %lx contains corrupt or unsupported version number: %d.\n"), + warn (_("CU at offset %" BFD_VMA_FMT "x contains corrupt or " + "unsupported version number: %d.\n"), cu_offset, compunit.cu_version); continue; } @@ -2268,7 +2290,7 @@ display_debug_lines_raw (struct dwarf_se linfo.li_line_base >>= 24; printf (_(" Offset: 0x%lx\n"), hdroff); - printf (_(" Length: %ld\n"), linfo.li_length); + printf (_(" Length: %ld\n"), (long) linfo.li_length); printf (_(" DWARF Version: %d\n"), linfo.li_version); printf (_(" Prologue Length: %d\n"), linfo.li_prologue_length); printf (_(" Minimum Instruction Length: %d\n"), linfo.li_min_insn_length); @@ -2329,11 +2351,14 @@ display_debug_lines_raw (struct dwarf_se data += strlen ((char *) data) + 1; - printf ("%lu\t", read_leb128 (data, & bytes_read, 0)); + printf ("%" BFD_VMA_FMT "u\t", + read_leb128 (data, & bytes_read, 0)); data += bytes_read; - printf ("%lu\t", read_leb128 (data, & bytes_read, 0)); + printf ("%" BFD_VMA_FMT "u\t", + read_leb128 (data, & bytes_read, 0)); data += bytes_read; - printf ("%lu\t", read_leb128 (data, & bytes_read, 0)); + printf ("%" BFD_VMA_FMT "u\t", + read_leb128 (data, & bytes_read, 0)); data += bytes_read; printf ("%s\n", name); } @@ -2505,7 +2530,8 @@ display_debug_lines_raw (struct dwarf_se for (i = standard_opcodes[op_code - 1]; i > 0 ; --i) { - printf ("0x%lx%s", read_leb128 (data, &bytes_read, 0), + printf ("0x%" BFD_VMA_FMT "x%s", + read_leb128 (data, &bytes_read, 0), i == 1 ? "" : ", "); data += bytes_read; } @@ -2918,7 +2944,8 @@ display_debug_lines_decoded (struct dwar for (i = standard_opcodes[op_code - 1]; i > 0 ; --i) { - printf ("0x%lx%s", read_leb128 (data, &bytes_read, 0), + printf ("0x%" BFD_VMA_FMT "x%s", + read_leb128 (data, &bytes_read, 0), i == 1 ? "" : ", "); data += bytes_read; } @@ -3076,7 +3103,7 @@ display_debug_pubnames (struct dwarf_sec && num_debug_info_entries > 0 && find_debug_info_for_offset (names.pn_offset) == NULL) warn (_(".debug_info offset of 0x%lx in %s section does not point to a CU header.\n"), - names.pn_offset, section->name); + (unsigned long) names.pn_offset, section->name); names.pn_size = byte_get (data, offset_size); data += offset_size; @@ -3097,13 +3124,13 @@ display_debug_pubnames (struct dwarf_sec } printf (_(" Length: %ld\n"), - names.pn_length); + (long) names.pn_length); printf (_(" Version: %d\n"), names.pn_version); printf (_(" Offset into .debug_info section: 0x%lx\n"), - names.pn_offset); + (unsigned long) names.pn_offset); printf (_(" Size of area in .debug_info section: %ld\n"), - names.pn_size); + (long) names.pn_size); printf (_("\n Offset\tName\n")); @@ -3323,7 +3350,7 @@ display_debug_loc (struct dwarf_section /* DWARF sections under Mach-O have non-zero addresses. */ if (debug_information [first].num_loc_offsets > 0 && debug_information [first].loc_offsets [0] != section->address) - warn (_("Location lists in %s section start at 0x%lx\n"), + warn (_("Location lists in %s section start at 0x%" BFD_VMA_FMT "x\n"), section->name, debug_information [first].loc_offsets [0]); printf (_("Contents of the %s section:\n\n"), section->name); @@ -3596,7 +3623,7 @@ display_debug_aranges (struct dwarf_sect && num_debug_info_entries > 0 && find_debug_info_for_offset (arange.ar_info_offset) == NULL) warn (_(".debug_info offset of 0x%lx in %s section does not point to a CU header.\n"), - arange.ar_info_offset, section->name); + (unsigned long) arange.ar_info_offset, section->name); arange.ar_pointer_size = byte_get (hdrptr, 1); hdrptr += 1; @@ -3610,9 +3637,11 @@ display_debug_aranges (struct dwarf_sect break; } - printf (_(" Length: %ld\n"), arange.ar_length); + printf (_(" Length: %ld\n"), + (long) arange.ar_length); printf (_(" Version: %d\n"), arange.ar_version); - printf (_(" Offset into .debug_info: 0x%lx\n"), arange.ar_info_offset); + printf (_(" Offset into .debug_info: 0x%lx\n"), + (unsigned long) arange.ar_info_offset); printf (_(" Pointer Size: %d\n"), arange.ar_pointer_size); printf (_(" Segment Size: %d\n"), arange.ar_segment_size); Index: src/binutils/dwarf.h =================================================================== --- src.orig/binutils/dwarf.h 2011-02-17 11:00:34.000000000 +0100 +++ src/binutils/dwarf.h 2011-02-18 10:25:34.608846800 +0100 @@ -22,6 +22,92 @@ typedef unsigned HOST_WIDEST_INT dwarf_vma; typedef unsigned HOST_WIDEST_INT dwarf_size_type; +/* Structure found in the .debug_line section. */ +typedef struct +{ + unsigned char li_length [4]; + unsigned char li_version [2]; + unsigned char li_prologue_length [4]; + unsigned char li_min_insn_length [1]; + unsigned char li_default_is_stmt [1]; + unsigned char li_line_base [1]; + unsigned char li_line_range [1]; + unsigned char li_opcode_base [1]; +} +DWARF2_External_LineInfo; + +typedef struct +{ + bfd_vma li_length; + unsigned short li_version; + unsigned int li_prologue_length; + unsigned char li_min_insn_length; + unsigned char li_max_ops_per_insn; + unsigned char li_default_is_stmt; + int li_line_base; + unsigned char li_line_range; + unsigned char li_opcode_base; +} +DWARF2_Internal_LineInfo; + +/* Structure found in .debug_pubnames section. */ +typedef struct +{ + unsigned char pn_length [4]; + unsigned char pn_version [2]; + unsigned char pn_offset [4]; + unsigned char pn_size [4]; +} +DWARF2_External_PubNames; + +typedef struct +{ + bfd_vma pn_length; + unsigned short pn_version; + bfd_vma pn_offset; + bfd_vma pn_size; +} +DWARF2_Internal_PubNames; + +/* Structure found in .debug_info section. */ +typedef struct +{ + unsigned char cu_length [4]; + unsigned char cu_version [2]; + unsigned char cu_abbrev_offset [4]; + unsigned char cu_pointer_size [1]; +} +DWARF2_External_CompUnit; + +typedef struct +{ + bfd_vma cu_length; + unsigned short cu_version; + bfd_vma cu_abbrev_offset; + unsigned char cu_pointer_size; +} +DWARF2_Internal_CompUnit; + +typedef struct +{ + unsigned char ar_length [4]; + unsigned char ar_version [2]; + unsigned char ar_info_offset [4]; + unsigned char ar_pointer_size [1]; + unsigned char ar_segment_size [1]; +} +DWARF2_External_ARange; + +typedef struct +{ + bfd_vma ar_length; + unsigned short ar_version; + bfd_vma ar_info_offset; + unsigned char ar_pointer_size; + unsigned char ar_segment_size; +} +DWARF2_Internal_ARange; + struct dwarf_section { /* A debug section has a different name when it's stored compressed @@ -79,15 +165,15 @@ typedef struct unsigned int pointer_size; unsigned int offset_size; int dwarf_version; - unsigned long cu_offset; - unsigned long base_address; + bfd_vma cu_offset; + bfd_vma base_address; /* This is an array of offsets to the location list table. */ - unsigned long *loc_offsets; + bfd_vma *loc_offsets; int *have_frame_base; unsigned int num_loc_offsets; unsigned int max_loc_offsets; /* List of .debug_ranges offsets seen in this .debug_info. */ - unsigned long *range_lists; + bfd_vma *range_lists; unsigned int num_range_lists; unsigned int max_range_lists; } @@ -131,5 +217,5 @@ void *cmalloc (size_t, size_t); void *xcmalloc (size_t, size_t); void *xcrealloc (void *, size_t, size_t); -unsigned long int read_leb128 (unsigned char *data, - unsigned int *length_return, int sign); +bfd_vma read_leb128 (unsigned char *data, + unsigned int *length_return, int sign); Index: src/include/dwarf2.h =================================================================== --- src.orig/include/dwarf2.h 2011-02-17 11:00:34.000000000 +0100 +++ src/include/dwarf2.h 2011-02-18 10:20:13.267332800 +0100 @@ -44,95 +44,8 @@ /* This file is shared between GCC and GDB, and should not contain prototypes. */ -#ifndef _ELF_DWARF2_H -#define _ELF_DWARF2_H - -/* Structure found in the .debug_line section. */ -typedef struct -{ - unsigned char li_length [4]; - unsigned char li_version [2]; - unsigned char li_prologue_length [4]; - unsigned char li_min_insn_length [1]; - unsigned char li_default_is_stmt [1]; - unsigned char li_line_base [1]; - unsigned char li_line_range [1]; - unsigned char li_opcode_base [1]; -} -DWARF2_External_LineInfo; - -typedef struct -{ - unsigned long li_length; - unsigned short li_version; - unsigned int li_prologue_length; - unsigned char li_min_insn_length; - unsigned char li_max_ops_per_insn; - unsigned char li_default_is_stmt; - int li_line_base; - unsigned char li_line_range; - unsigned char li_opcode_base; -} -DWARF2_Internal_LineInfo; - -/* Structure found in .debug_pubnames section. */ -typedef struct -{ - unsigned char pn_length [4]; - unsigned char pn_version [2]; - unsigned char pn_offset [4]; - unsigned char pn_size [4]; -} -DWARF2_External_PubNames; - -typedef struct -{ - unsigned long pn_length; - unsigned short pn_version; - unsigned long pn_offset; - unsigned long pn_size; -} -DWARF2_Internal_PubNames; - -/* Structure found in .debug_info section. */ -typedef struct -{ - unsigned char cu_length [4]; - unsigned char cu_version [2]; - unsigned char cu_abbrev_offset [4]; - unsigned char cu_pointer_size [1]; -} -DWARF2_External_CompUnit; - -typedef struct -{ - unsigned long cu_length; - unsigned short cu_version; - unsigned long cu_abbrev_offset; - unsigned char cu_pointer_size; -} -DWARF2_Internal_CompUnit; - -typedef struct -{ - unsigned char ar_length [4]; - unsigned char ar_version [2]; - unsigned char ar_info_offset [4]; - unsigned char ar_pointer_size [1]; - unsigned char ar_segment_size [1]; -} -DWARF2_External_ARange; - -typedef struct -{ - unsigned long ar_length; - unsigned short ar_version; - unsigned long ar_info_offset; - unsigned char ar_pointer_size; - unsigned char ar_segment_size; -} -DWARF2_Internal_ARange; - +#ifndef _DWARF2_H +#define _DWARF2_H /* Tag names and codes. */ enum dwarf_tag @@ -953,4 +866,4 @@ enum dwarf_macinfo_record_type #define DW_EH_PE_indirect 0x80 -#endif /* _ELF_DWARF2_H */ +#endif /* _DWARF2_H */