Add support for generating DWARF2 debug sections in the x86 PE port
This commit is contained in:
parent
e63bbc887e
commit
8a7140c38f
@ -1,3 +1,17 @@
|
||||
2004-04-29 Brian Ford <ford@vss.fsi.com>
|
||||
|
||||
* bfd.c (bfd_get_sign_extend_vma): Add pe[i]-i386 case to DJGPP hack.
|
||||
* coffcode.h (DOT_DEBUG, GNU_LINKONCE_WI): Define.
|
||||
[!COFF_WITH_PE] (sec_to_styp_flags, styp_to_sec_flags): Use them.
|
||||
(coff_compute_section_file_positions) [RS6000COFF_C]: Likewise.
|
||||
[COFF_WITH_PE] (sec_to_styp_flags): Handle DWARF 2/3 .debug* and
|
||||
.gnu.linkonce.wi. sections.
|
||||
* pe-i386.c (COFF_SUPPORT_GNU_LINKONCE): Define.
|
||||
(COFF_SECTION_ALIGNMENT_ENTRIES): Add entries for .debug and
|
||||
.gnu.linkonce.wi..
|
||||
* pei-i386.c (COFF_SUPPORT_GNU_LINKONCE): Likewise.
|
||||
(COFF_SECTION_ALIGNMENT_ENTRIES): Likewise.
|
||||
|
||||
2004-04-28 Chris Demetriou <cgd@broadcom.com>
|
||||
|
||||
* reloc.c: Remove BFD_RELOC_PCREL_HI16_S and BFD_RELOC_PCREL_LO16.
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Generic BFD library interface and support routines.
|
||||
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
2000, 2001, 2002, 2003
|
||||
2000, 2001, 2002, 2003, 2004
|
||||
Free Software Foundation, Inc.
|
||||
Written by Cygnus Support.
|
||||
|
||||
@ -765,12 +765,14 @@ bfd_get_sign_extend_vma (bfd *abfd)
|
||||
|
||||
name = bfd_get_target (abfd);
|
||||
|
||||
/* Return a proper value for DJGPP COFF (an x86 COFF variant).
|
||||
/* Return a proper value for DJGPP & PE COFF (x86 COFF variants).
|
||||
This function is required for DWARF2 support, but there is
|
||||
no place to store this information in the COFF back end.
|
||||
Should enough other COFF targets add support for DWARF2,
|
||||
a place will have to be found. Until then, this hack will do. */
|
||||
if (strncmp (name, "coff-go32", sizeof ("coff-go32") - 1) == 0)
|
||||
if (strncmp (name, "coff-go32", sizeof ("coff-go32") - 1) == 0
|
||||
|| strcmp (name, "pe-i386") == 0
|
||||
|| strcmp (name, "pei-i386") == 0)
|
||||
return 1;
|
||||
|
||||
bfd_set_error (bfd_error_wrong_format);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Support for the generic parts of most COFF variants, for BFD.
|
||||
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
2000, 2001, 2002, 2003
|
||||
2000, 2001, 2002, 2003, 2004
|
||||
Free Software Foundation, Inc.
|
||||
Written by Cygnus Support.
|
||||
|
||||
@ -309,6 +309,9 @@ CODE_FRAGMENT
|
||||
|
||||
#define STRING_SIZE_SIZE (4)
|
||||
|
||||
#define DOT_DEBUG ".debug"
|
||||
#define GNU_LINKONCE_WI ".gnu.linkonce.wi."
|
||||
|
||||
static long sec_to_styp_flags
|
||||
PARAMS ((const char *, flagword));
|
||||
static bfd_boolean styp_to_sec_flags
|
||||
@ -428,7 +431,7 @@ sec_to_styp_flags (sec_name, sec_flags)
|
||||
styp_flags = STYP_LIT;
|
||||
#endif /* _LIT */
|
||||
}
|
||||
else if (!strncmp (sec_name, ".debug", 6))
|
||||
else if (!strncmp (sec_name, DOT_DEBUG, sizeof (DOT_DEBUG) - 1))
|
||||
{
|
||||
/* Handle the XCOFF debug section and DWARF2 debug sections. */
|
||||
if (!sec_name[6])
|
||||
@ -441,7 +444,7 @@ sec_to_styp_flags (sec_name, sec_flags)
|
||||
styp_flags = STYP_DEBUG_INFO;
|
||||
}
|
||||
#ifdef COFF_LONG_SECTION_NAMES
|
||||
else if (!strncmp (sec_name, ".gnu.linkonce.wi.", 17))
|
||||
else if (!strncmp (sec_name, GNU_LINKONCE_WI, sizeof (GNU_LINKONCE_WI) - 1))
|
||||
{
|
||||
styp_flags = STYP_DEBUG_INFO;
|
||||
}
|
||||
@ -518,7 +521,7 @@ sec_to_styp_flags (sec_name, sec_flags)
|
||||
|
||||
static long
|
||||
sec_to_styp_flags (sec_name, sec_flags)
|
||||
const char *sec_name ATTRIBUTE_UNUSED;
|
||||
const char *sec_name;
|
||||
flagword sec_flags;
|
||||
{
|
||||
long styp_flags = 0;
|
||||
@ -531,6 +534,11 @@ sec_to_styp_flags (sec_name, sec_flags)
|
||||
PE files. The STYP_* flags and the IMAGE_SCN_* flags overlap,
|
||||
but there are more IMAGE_SCN_* flags. */
|
||||
|
||||
/* FIXME: There is no gas syntax to specify the debug section flag. */
|
||||
if (strncmp (sec_name, DOT_DEBUG, sizeof (DOT_DEBUG) - 1) == 0
|
||||
|| strncmp (sec_name, GNU_LINKONCE_WI, sizeof (GNU_LINKONCE_WI) - 1) == 0)
|
||||
sec_flags = SEC_READONLY | SEC_DEBUGGING;
|
||||
|
||||
/* skip LOAD */
|
||||
/* READONLY later */
|
||||
/* skip RELOC */
|
||||
@ -675,12 +683,12 @@ styp_to_sec_flags (abfd, hdr, name, section, flags_ptr)
|
||||
#endif
|
||||
sec_flags |= SEC_ALLOC;
|
||||
}
|
||||
else if (strncmp (name, ".debug", 6) == 0
|
||||
else if (strncmp (name, DOT_DEBUG, sizeof (DOT_DEBUG) - 1) == 0
|
||||
#ifdef _COMMENT
|
||||
|| strcmp (name, _COMMENT) == 0
|
||||
#endif
|
||||
#ifdef COFF_LONG_SECTION_NAMES
|
||||
|| strncmp (name, ".gnu.linkonce.wi.", 17) == 0
|
||||
|| strncmp (name, GNU_LINKONCE_WI, sizeof (GNU_LINKONCE_WI) - 1) == 0
|
||||
#endif
|
||||
|| strncmp (name, ".stab", 5) == 0)
|
||||
{
|
||||
@ -3004,7 +3012,7 @@ coff_compute_section_file_positions (abfd)
|
||||
{
|
||||
asection *dsec;
|
||||
|
||||
dsec = bfd_make_section_old_way (abfd, ".debug");
|
||||
dsec = bfd_make_section_old_way (abfd, DOT_DEBUG);
|
||||
if (dsec == NULL)
|
||||
abort ();
|
||||
dsec->_raw_size = sz;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* BFD back-end for Intel 386 PECOFF files.
|
||||
Copyright 1995, 1996, 1999, 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright 1995, 1996, 1999, 2001, 2002, 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
@ -20,12 +20,13 @@
|
||||
#include "bfd.h"
|
||||
#include "sysdep.h"
|
||||
|
||||
#define TARGET_SYM i386pe_vec
|
||||
#define TARGET_NAME "pe-i386"
|
||||
#define TARGET_SYM i386pe_vec
|
||||
#define TARGET_NAME "pe-i386"
|
||||
#define COFF_WITH_PE
|
||||
#define PCRELOFFSET TRUE
|
||||
#define TARGET_UNDERSCORE '_'
|
||||
#define PCRELOFFSET TRUE
|
||||
#define TARGET_UNDERSCORE '_'
|
||||
#define COFF_LONG_SECTION_NAMES
|
||||
#define COFF_SUPPORT_GNU_LINKONCE
|
||||
#define COFF_LONG_FILENAMES
|
||||
|
||||
#define COFF_SECTION_ALIGNMENT_ENTRIES \
|
||||
@ -38,6 +39,10 @@
|
||||
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
|
||||
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
||||
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
|
||||
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }
|
||||
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
||||
{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
|
||||
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
|
||||
{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
|
||||
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
|
||||
|
||||
#include "coff-i386.c"
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* BFD back-end for Intel 386 PE IMAGE COFF files.
|
||||
Copyright 1995, 1996, 1999, 2002 Free Software Foundation, Inc.
|
||||
Copyright 1995, 1996, 1999, 2002, 2004 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
@ -20,13 +20,14 @@
|
||||
#include "bfd.h"
|
||||
#include "sysdep.h"
|
||||
|
||||
#define TARGET_SYM i386pei_vec
|
||||
#define TARGET_NAME "pei-i386"
|
||||
#define TARGET_SYM i386pei_vec
|
||||
#define TARGET_NAME "pei-i386"
|
||||
#define COFF_IMAGE_WITH_PE
|
||||
#define COFF_WITH_PE
|
||||
#define PCRELOFFSET TRUE
|
||||
#define TARGET_UNDERSCORE '_'
|
||||
#define PCRELOFFSET TRUE
|
||||
#define TARGET_UNDERSCORE '_'
|
||||
#define COFF_LONG_SECTION_NAMES
|
||||
#define COFF_SUPPORT_GNU_LINKONCE
|
||||
#define COFF_LONG_FILENAMES
|
||||
|
||||
#define COFF_SECTION_ALIGNMENT_ENTRIES \
|
||||
@ -39,6 +40,10 @@
|
||||
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
|
||||
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
||||
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
|
||||
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }
|
||||
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
||||
{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
|
||||
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
|
||||
{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
|
||||
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
|
||||
|
||||
#include "coff-i386.c"
|
||||
|
@ -1,3 +1,7 @@
|
||||
2004-04-29 Brian Ford <ford@vss.fsi.com>
|
||||
|
||||
* dwarf2dbg.c (dwarf2_finish): Add SEC_DEBUGGING to section flags.
|
||||
|
||||
2004-04-28 Chris Demetriou <cgd@broadcom.com>
|
||||
|
||||
* config/tc-mips.c (HAVE_32BIT_ADDRESSES, append_insn, macro_build)
|
||||
|
@ -1371,7 +1371,7 @@ dwarf2_finish (void)
|
||||
|
||||
/* Create and switch to the line number section. */
|
||||
line_seg = subseg_new (".debug_line", 0);
|
||||
bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY);
|
||||
bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY | SEC_DEBUGGING);
|
||||
|
||||
/* For each subsection, chain the debug entries together. */
|
||||
for (s = all_segs; s; s = s->next)
|
||||
@ -1400,9 +1400,12 @@ dwarf2_finish (void)
|
||||
abbrev_seg = subseg_new (".debug_abbrev", 0);
|
||||
aranges_seg = subseg_new (".debug_aranges", 0);
|
||||
|
||||
bfd_set_section_flags (stdoutput, info_seg, SEC_READONLY);
|
||||
bfd_set_section_flags (stdoutput, abbrev_seg, SEC_READONLY);
|
||||
bfd_set_section_flags (stdoutput, aranges_seg, SEC_READONLY);
|
||||
bfd_set_section_flags (stdoutput, info_seg,
|
||||
SEC_READONLY | SEC_DEBUGGING);
|
||||
bfd_set_section_flags (stdoutput, abbrev_seg,
|
||||
SEC_READONLY | SEC_DEBUGGING);
|
||||
bfd_set_section_flags (stdoutput, aranges_seg,
|
||||
SEC_READONLY | SEC_DEBUGGING);
|
||||
|
||||
record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2004-04-29 Brian Ford <ford@vss.fsi.com>
|
||||
|
||||
* scripttempl/pe.sc: Handle .debug* and .gnu.linkonce.wi.* sections
|
||||
for DWARF 2/3. Update stab section's syntax.
|
||||
|
||||
2004-04-29 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* pe-dll.c: Revert changes accidentally committed 2004-03-08.
|
||||
|
@ -159,13 +159,91 @@ SECTIONS
|
||||
|
||||
.stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stab ]
|
||||
*(.stab)
|
||||
}
|
||||
|
||||
.stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stabstr ]
|
||||
*(.stabstr)
|
||||
}
|
||||
|
||||
/* DWARF debug sections.
|
||||
Symbols in the DWARF debugging sections are relative to the beginning
|
||||
of the section. Unlike other targets that fake this by putting the
|
||||
section VMA at 0, the PE format will not allow it. */
|
||||
|
||||
/* DWARF 1.1 and DWARF 2. */
|
||||
.debug_aranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_aranges)
|
||||
}
|
||||
|
||||
.debug_pubnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_pubnames)
|
||||
}
|
||||
|
||||
/* DWARF 2. */
|
||||
.debug_info ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_info) *(.gnu.linkonce.wi.*)
|
||||
}
|
||||
|
||||
.debug_abbrev ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_abbrev)
|
||||
}
|
||||
|
||||
.debug_line ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_line)
|
||||
}
|
||||
|
||||
.debug_frame ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_frame)
|
||||
}
|
||||
|
||||
.debug_str ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_str)
|
||||
}
|
||||
|
||||
.debug_loc ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_loc)
|
||||
}
|
||||
|
||||
.debug_macinfo ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_macinfo)
|
||||
}
|
||||
|
||||
/* SGI/MIPS DWARF 2 extensions. */
|
||||
.debug_weaknames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_weaknames)
|
||||
}
|
||||
|
||||
.debug_funcnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_funcnames)
|
||||
}
|
||||
|
||||
.debug_typenames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_typenames)
|
||||
}
|
||||
|
||||
.debug_varnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_varnames)
|
||||
}
|
||||
|
||||
/* DWARF 3. */
|
||||
.debug_ranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
*(.debug_ranges)
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
Loading…
Reference in New Issue
Block a user