Abort if input format is ARM and output format is not

This commit is contained in:
Nick Clifton 1999-07-05 07:51:39 +00:00
parent 9f20bbfd4c
commit f11523b013
4 changed files with 49 additions and 7 deletions

View File

@ -1,3 +1,12 @@
1999-07-05 Nick Clifton <nickc@cygnus.com>
* emultempl/pe.em (after_open): Abort if input format is ARM and
output format is not.
* emultempl/armcoff.em (after_open): Abort if input format is ARM
and output format is not.
* emultempl/armelf.em (after_open): Abort if input format is ARM
and output format is not.
1999-07-02 Ian Lance Taylor <ian@zembu.com>
* ldlang.c: Revert change of 1999-06-23.

View File

@ -148,11 +148,23 @@ gld${EMULATION_NAME}_before_allocation ()
static void
gld${EMULATION_NAME}_after_open ()
{
LANG_FOR_EACH_INPUT_STATEMENT (is)
if (strstr (bfd_get_target (output_bfd), "arm") == NULL)
{
if (bfd_arm_get_bfd_for_interworking (is->the_bfd, & link_info))
break;
/* The arm backend needs special fields in the output hash structure.
These will only be created if the output format is an arm format,
hence we do not support linking and changing output formats at the
same time. Use a link followed by objcopy to change output formats. */
einfo ("%F%X%P: error: cannot change output format whilst linking ARM binaries\n");
return;
}
{
LANG_FOR_EACH_INPUT_STATEMENT (is)
{
if (bfd_arm_get_bfd_for_interworking (is->the_bfd, & link_info))
break;
}
}
}
static void

View File

@ -308,13 +308,25 @@ gld${EMULATION_NAME}_after_open ()
{
struct bfd_link_needed_list *needed, *l;
LANG_FOR_EACH_INPUT_STATEMENT (is)
if (strstr (bfd_get_target (output_bfd), "arm") == NULL)
{
/* The interworking bfd must be the last one to be processed */
if (!is->next)
bfd_elf32_arm_get_bfd_for_interworking (is->the_bfd, & link_info);
/* The arm backend needs special fields in the output hash structure.
These will only be created if the output format is an arm format,
hence we do not support linking and changing output formats at the
same time. Use a link followed by objcopy to change output formats. */
einfo ("%F%X%P: error: cannot change output format whilst linking ARM binaries\n");
return;
}
{
LANG_FOR_EACH_INPUT_STATEMENT (is)
{
/* The interworking bfd must be the last one to be processed */
if (!is->next)
bfd_elf32_arm_get_bfd_for_interworking (is->the_bfd, & link_info);
}
}
/* We only need to worry about this when doing a final link. */
if (link_info.relocateable || link_info.shared)
return;

View File

@ -652,6 +652,15 @@ gld_${EMULATION_NAME}_after_open ()
#endif
#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe)
if (strstr (bfd_get_target (output_bfd), "arm") == NULL)
{
/* The arm backend needs special fields in the output hash structure.
These will only be created if the output format is an arm format,
hence we do not support linking and changing output formats at the
same time. Use a link followed by objcopy to change output formats. */
einfo ("%F%X%P: error: cannot change output format whilst linking ARM binaries\n");
return;
}
{
/* Find a BFD that can hold the interworking stubs. */
LANG_FOR_EACH_INPUT_STATEMENT (is)