bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug binutils/15152] readelf and objdump don't print strings from .dwz f


From: cvs-commit at gcc dot gnu.org
Subject: [Bug binutils/15152] readelf and objdump don't print strings from .dwz file
Date: Wed, 15 Nov 2017 11:36:22 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=15152

--- Comment #2 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot 
gnu.org> ---
The master branch has been updated by Nick Clifton <address@hidden>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=dda8d76d0dd2b07df769f6cae20aff483468b342

commit dda8d76d0dd2b07df769f6cae20aff483468b342
Author: Nick Clifton <address@hidden>
Date:   Wed Nov 15 11:34:03 2017 +0000

    Add support to readelf and objdump for following links to separate debug
information files.

    Hi Guys,

      I am applying the rather large patch attached to this email to enhance
      the readelf and objdump programs so that they now have the ability to
      follow links to separate debug info files.  (As requested by PR
      15152).  So for example whereas before we had this output:

        $ readelf -wi main.exe

        Contents of the .debug_info section:
        [...]
        <15>   DW_AT_comp_dir    : (alt indirect string, offset: 0x30c)
        [...]

      With the new option enabled we get:

        $ readelf -wiK main.exe

        main.exe: Found separate debug info file: dwz.debug
        Contents of the .debug_info section (loaded from main.exe):
        [...]
        <15>   DW_AT_comp_dir    : (alt indirect string, offset: 0x30c)
/home/nickc/Downloads/dwzm
        [...]

      The link following feature also means that we can get two lots of
      output if the same section exists in both the main file and the
      separate debug info file:

        $ readelf -wiK main.exe
        main.exe: Found separate debug info file: dwz.debug
        Contents of the .debug_info section (loaded from main.exe):
        [...]
        Contents of the .debug_info section (loaded from dwz.debug):
        [...]

      The patch also adds the ability to display the contents of debuglink
      sections:

        $ readelf -wk main.exe
        Contents of the .gnu_debugaltlink section:

          Separate debug info file: dwz.debug
          Build-ID (0x14 bytes):
         c4 a8 89 8d 64 cf 70 8a 35 68 21 f2 ed 24 45 3e 18 7a 7a 93

      Naturally there are long versions of these options (=follow-links and
      =links).  The documentation has been updated as well, and since both
      readelf and objdump use the same set of debug display options, I have
      moved the text into a separate file.  There are also a couple of new
      binutils tests to exercise the new behaviour.

      There are a couple of missing features in the current patch however,
      although I do intend to address them in follow up submissions:

      Firstly the code does not check the build-id inside separate debug
      info files when it is searching for a file specified by a
      .gnu_debugaltlink section.  It just assumes that if the file is there,
      then it contains the information being sought.

      Secondly I have not checked the DWARF-5 version of these link
      features, so there will probably be code to add there.

      Thirdly I have only implemented link following for the
      DW_FORM_GNU_strp_alt format.  Other alternate formats (eg
      DW_FORM_GNU_ref_alt) have yet to be implemented.

      Lastly, whilst implementing this feature I found it necessary to move
      some of the global variables used by readelf (eg section_headers) into
      a structure that can be passed around.  I have moved all of the global
      variables that were necessary to get the patch working, but I need to
      complete the operation and move the remaining, file-specific variables
      (eg dynamic_strings).

    Cheers
      Nick

    binutils    PR 15152
        * dwarf.h (enum dwarf_section_display_enum): Add gnu_debuglink,
        gnu_debugaltlink and separate_debug_str.
        (struct dwarf_section): Add filename field.
        Add prototypes for load_separate_debug_file, close_debug_file and
        open_debug_file.
        * dwarf.c (do_debug_links): New.
        (do_follow_links): New.
        (separate_debug_file, separate_debug_filename): New.
        (fetch_alt_indirect_string): New function.  Retrieves a string
        from the debug string table in the separate debug info file.
        (read_and_display_attr_value): Use it with DW_FORM_GNU_strp_alt.
        (load_debug_section_with_follow): New function.  Like
        load_debug_section, but if the first attempt fails, then tries
        again in the separate debug info file.
        (introduce): New function.
        (process_debug_info): Use load_debug_section_with_follow and
        introduce.
        (load_debug_info): Likewise.
        (display_debug_lines_raw): Likewise.
        (display_debug_lines_decoded): Likewise.
        (display_debug_macinfo): Likewise.
        (display_debug_macro): Likewise.
        (display_debug_abbrev): Likewise.
        (display_debug_loc): Likewise.
        (display_debug_str): Likewise.
        (display_debug_aranges): Likewise.
        (display_debug_addr); Likewise.
        (display_debug_frames): Likewise.
        (display_gdb_index): Likewise.
        (process_cu_tu_index): Likewise.
        (load_cu_tu_indexes): Likewise.
        (display_debug_links): New function.  Displays the contents of a
        .gnu_debuglink or .gnu_debugaltlink section.
        (calc_gnu_debuglink_ctc32):New function.  Calculates a CRC32
        value.
        (check_gnu_debuglink): New function.  Checks the CRC of a
        potential separate debug info file.
        (parse_gnu_debuglink): New function.  Reads a CRC value out of a
        .gnu_debuglink section.
        (check_gnu_debugaltlink): New function.
        (parse_gnu_debugaltlink): New function.  Reads the build-id value
        out of a .gnu_debugaltlink section.
        (load_separate_debug_info): New function.  Finds and loads a
        separate debug info file.
        (load_separate_debug_file): New function. Attempts to find and
        follow a link to a separate debug info file.
        (free_debug_memory): Free the separate debug info file
        information.
        (opts_table): Add "follow-links" and "links".
        (dwarf_select_sections_by_letters): Add "k" and "K".
        (debug_displays): Reformat.  Add .gnu-debuglink and
        .gnu_debugaltlink.
        Add an extra entry for .debug_str in a separate debug info file.
        * doc/binutils.texi: Move description of debug dump features
        common to both readelf and objdump into...
        * objdump.c (usage): Add -Wk and -WK.
        (load_specific_debug_section): Initialise the filename field in
        the dwarf_section structure.
        (close_debug_file): New function.
        (open_debug_file): New function.
        (dump_dwarf): Load and dump the separate debug info sections.
        * readelf.c (struct filedata): New structure.  Contains various
        variables that used to be global:
        (current_file_size, string_table, string_table_length, elf_header)
        (section_headers, program_headers, dump_sects, num_dump_sects):
        Move into filedata structure.
        (cmdline): New global variable.  Contains list of sections to dump
        by number, as specified on the command line.
        Add filedata parameter to most functions.
        (load_debug_section): Load the string table if it has not already
        been retrieved.
        (close_file): New function.
        (close_debug_file): New function.
        (open_file): New function.
        (open_debug_file): New function.
        (process_object): Process sections in any separate debug info files.
        * doc/debug.options.texi: New file.  Add description of =links and
        =follow-links options.
        * NEWS: Mention the new feature.
        * elfcomm.c: Have the byte gte functions take a const pointer.
        * elfcomm.h: Update prototypes.
        * testsuite/binutils-all/dw5.W: Update expected output.
        * testsuite/binutils-all/objdump.WL: Update expected output.
        * testsuite/binutils-all/objdump.exp: Add test of -WK and -Wk.
        * testsuite/binutils-all/readelf.exp: Add test of -wK and -wk.
        * testsuite/binutils-all/readelf.k: New file.
        * testsuite/binutils-all/objdump.Wk: New file.
        * testsuite/binutils-all/objdump.WK2: New file.
        * testsuite/binutils-all/linkdebug.s: New file.
        * testsuite/binutils-all/debuglink.s: New file.

    gas * testsuite/gas/avr/large-debug-line-table.d: Update expected
        output.
        * testsuite/gas/elf/dwarf2-11.d: Likewise.
        * testsuite/gas/elf/dwarf2-12.d: Likewise.
        * testsuite/gas/elf/dwarf2-13.d: Likewise.
        * testsuite/gas/elf/dwarf2-14.d: Likewise.
        * testsuite/gas/elf/dwarf2-15.d: Likewise.
        * testsuite/gas/elf/dwarf2-16.d: Likewise.
        * testsuite/gas/elf/dwarf2-17.d: Likewise.
        * testsuite/gas/elf/dwarf2-18.d: Likewise.
        * testsuite/gas/elf/dwarf2-5.d: Likewise.
        * testsuite/gas/elf/dwarf2-6.d: Likewise.
        * testsuite/gas/elf/dwarf2-7.d: Likewise.

    ld  * testsuite/ld-avr/gc-section-debugline.d: Update expected
        output.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]