* emultempl/pe.em (debug_section_p): New bfd_map_over_sections hook.
(gld_${EMULATION_NAME}_after_open): Use it to iterate all sections of all input BFDs, looking for debug info. Enable long section names if any found. * emultempl/pe.em (debug_section_p): Likewise. (gld_${EMULATION_NAME}_after_open): Likewise. * NEWS: Retrospectively adjust news announcement. * ld.texinfo: Update documentation to mention new behaviour.
This commit is contained in:
parent
6aa8e5c2ae
commit
3efd345c3b
5 changed files with 81 additions and 2 deletions
11
ld/ChangeLog
11
ld/ChangeLog
|
@ -1,3 +1,14 @@
|
|||
2009-03-03 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||
|
||||
* emultempl/pe.em (debug_section_p): New bfd_map_over_sections hook.
|
||||
(gld_${EMULATION_NAME}_after_open): Use it to iterate all sections
|
||||
of all input BFDs, looking for debug info. Enable long section names
|
||||
if any found.
|
||||
* emultempl/pe.em (debug_section_p): Likewise.
|
||||
(gld_${EMULATION_NAME}_after_open): Likewise.
|
||||
* NEWS: Retrospectively adjust news announcement.
|
||||
* ld.texinfo: Update documentation to mention new behaviour.
|
||||
|
||||
2009-03-02 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||
|
||||
* ldgram.y: Add support for REGION_ALIAS operator.
|
||||
|
|
4
ld/NEWS
4
ld/NEWS
|
@ -5,7 +5,9 @@
|
|||
* PE targets no longer make use of the long section names PE extension to
|
||||
the COFF format when generating executable images, by default. The old
|
||||
(slightly non-conformant) behaviour can still be invoked by using the
|
||||
new '--enable-long-section-names' command-line option.
|
||||
new '--enable-long-section-names' command-line option. It is also enabled
|
||||
automatically in the presence of un-stripped debug information, as GDB
|
||||
needs to be able to find the debug info sections by their full names.
|
||||
|
||||
* --as-needed now links in a dynamic library if it satisfies undefined
|
||||
symbols in regular objects, or in other dynamic libraries. In the
|
||||
|
|
|
@ -1043,6 +1043,13 @@ pr_sym (struct bfd_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
|
|||
}
|
||||
#endif /* DLL_SUPPORT */
|
||||
|
||||
static void
|
||||
debug_section_p (bfd *abfd ATTRIBUTE_UNUSED, asection *sect, void *obj)
|
||||
{
|
||||
int *found = (int *) obj;
|
||||
if (strncmp (".debug_", sect->name, sizeof (".debug_") - 1) == 0)
|
||||
*found = 1;
|
||||
}
|
||||
|
||||
static void
|
||||
gld_${EMULATION_NAME}_after_open (void)
|
||||
|
@ -1076,6 +1083,29 @@ gld_${EMULATION_NAME}_after_open (void)
|
|||
pe_data (link_info.output_bfd)->pe_opthdr = pe;
|
||||
pe_data (link_info.output_bfd)->dll = init[DLLOFF].value;
|
||||
pe_data (link_info.output_bfd)->real_flags |= real_flags;
|
||||
|
||||
/* At this point we must decide whether to use long section names
|
||||
in the output or not. If the user hasn't explicitly specified
|
||||
on the command line, we leave it to the default for the format
|
||||
(object files yes, image files no), except if there is debug
|
||||
information present; GDB relies on the long section names to
|
||||
find it, so enable it in that case. */
|
||||
if (pe_use_coff_long_section_names < 0 && link_info.strip == strip_none)
|
||||
{
|
||||
/* Iterate over all sections of all input BFDs, checking
|
||||
for any that begin 'debug_' and are long names. */
|
||||
LANG_FOR_EACH_INPUT_STATEMENT (is)
|
||||
{
|
||||
int found_debug = 0;
|
||||
bfd_map_over_sections (is->the_bfd, debug_section_p, &found_debug);
|
||||
if (found_debug)
|
||||
{
|
||||
pe_use_coff_long_section_names = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pe_output_file_set_long_section_names (link_info.output_bfd);
|
||||
|
||||
#ifdef DLL_SUPPORT
|
||||
|
|
|
@ -1020,6 +1020,13 @@ pr_sym (struct bfd_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
|
|||
}
|
||||
#endif /* DLL_SUPPORT */
|
||||
|
||||
static void
|
||||
debug_section_p (bfd *abfd ATTRIBUTE_UNUSED, asection *sect, void *obj)
|
||||
{
|
||||
int *found = (int *) obj;
|
||||
if (strncmp (".debug_", sect->name, sizeof (".debug_") - 1) == 0)
|
||||
*found = 1;
|
||||
}
|
||||
|
||||
static void
|
||||
gld_${EMULATION_NAME}_after_open (void)
|
||||
|
@ -1053,6 +1060,29 @@ gld_${EMULATION_NAME}_after_open (void)
|
|||
pe_data (link_info.output_bfd)->pe_opthdr = pep;
|
||||
pe_data (link_info.output_bfd)->dll = init[DLLOFF].value;
|
||||
pe_data (link_info.output_bfd)->real_flags |= real_flags;
|
||||
|
||||
/* At this point we must decide whether to use long section names
|
||||
in the output or not. If the user hasn't explicitly specified
|
||||
on the command line, we leave it to the default for the format
|
||||
(object files yes, image files no), except if there is debug
|
||||
information present; GDB relies on the long section names to
|
||||
find it, so enable it in that case. */
|
||||
if (pep_use_coff_long_section_names < 0 && link_info.strip == strip_none)
|
||||
{
|
||||
/* Iterate over all sections of all input BFDs, checking
|
||||
for any that begin 'debug_' and are long names. */
|
||||
LANG_FOR_EACH_INPUT_STATEMENT (is)
|
||||
{
|
||||
int found_debug = 0;
|
||||
bfd_map_over_sections (is->the_bfd, debug_section_p, &found_debug);
|
||||
if (found_debug)
|
||||
{
|
||||
pep_use_coff_long_section_names = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pep_output_file_set_long_section_names (link_info.output_bfd);
|
||||
|
||||
#ifdef DLL_SUPPORT
|
||||
|
|
|
@ -2124,7 +2124,13 @@ allow their use in executable images as well, or to (probably pointlessly!)
|
|||
disallow it in object files, by using these two options. Executable images
|
||||
generated with these long section names are slightly non-standard, carrying
|
||||
as they do a string table, and may generate confusing output when examined
|
||||
with non-GNU PE-aware tools, such as file viewers and dumpers.
|
||||
with non-GNU PE-aware tools, such as file viewers and dumpers. However,
|
||||
GDB relies on the use of PE long section names to find Dwarf-2 debug
|
||||
information sections in an executable image at runtime, and so if neither
|
||||
option is specified on the command-line, @command{ld} will enable long
|
||||
section names, overriding the default and technically correct behaviour,
|
||||
when it finds the presence of debug information while linking an executable
|
||||
image and not stripping symbols.
|
||||
[This option is valid for all PE targeted ports of the linker]
|
||||
|
||||
@kindex --enable-stdcall-fixup
|
||||
|
|
Loading…
Reference in a new issue