aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2000-08-25 20:44:09 +0000
committerNick Clifton <nickc@redhat.com>2000-08-25 20:44:09 +0000
commitc13b1b775b2ff3918d53d0babed8247d8d34593c (patch)
tree5b3b8deeea03ce9d24c1ca49699041254475b7c0
parentdcb0bd0eef10207754cb0fa64af3f2b965a1a589 (diff)
downloadgdb-c13b1b775b2ff3918d53d0babed8247d8d34593c.zip
gdb-c13b1b775b2ff3918d53d0babed8247d8d34593c.tar.gz
gdb-c13b1b775b2ff3918d53d0babed8247d8d34593c.tar.bz2
When choosing the target for a particular endianness, do nothing if the target
is not supported.
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/ldlang.c55
2 files changed, 36 insertions, 25 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 89e1c34..e9d239b 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2000-08-25 Nick Clifton <nickc@redhat.com>
+
+ * ldlang.c (open_output): When choosing the target for a
+ particular endianness, do nothing if the target is not
+ supported.
+
2000-08-25 H.J. Lu <hjl@gnu.org>
* emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Don't
diff --git a/ld/ldlang.c b/ld/ldlang.c
index c3420c5..baaf7ed 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -1728,32 +1728,37 @@ open_output (name)
/* Get the chosen target. */
target = bfd_search_for_target (get_target, (void *) output_target);
- if (command_line.endian == ENDIAN_BIG)
- desired_endian = BFD_ENDIAN_BIG;
- else
- desired_endian = BFD_ENDIAN_LITTLE;
-
- /* See if the target has the wrong endianness. This should not happen
- if the linker script has provided big and little endian alternatives,
- but some scrips don't do this. */
- if (target->byteorder != desired_endian)
+ /* If the target is not supported, we cannot do anything. */
+ if (target != NULL)
{
- /* If it does, then see if the target provides
- an alternative with the correct endianness. */
- if (target->alternative_target != NULL
- && (target->alternative_target->byteorder == desired_endian))
- output_target = target->alternative_target->name;
+ if (command_line.endian == ENDIAN_BIG)
+ desired_endian = BFD_ENDIAN_BIG;
else
+ desired_endian = BFD_ENDIAN_LITTLE;
+
+ /* See if the target has the wrong endianness. This should not happen
+ if the linker script has provided big and little endian alternatives,
+ but some scrips don't do this. */
+ if (target->byteorder != desired_endian)
{
- /* Try to find a target as similar as possible to the default
- target, but which has the desired endian characteristic. */
- (void) bfd_search_for_target (closest_target_match, (void *) target);
-
- /* Oh dear - we could not find any targets that satisfy our requirements. */
- if (winner == NULL)
- einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
+ /* If it does, then see if the target provides
+ an alternative with the correct endianness. */
+ if (target->alternative_target != NULL
+ && (target->alternative_target->byteorder == desired_endian))
+ output_target = target->alternative_target->name;
else
- output_target = winner->name;
+ {
+ /* Try to find a target as similar as possible to the default
+ target, but which has the desired endian characteristic. */
+ (void) bfd_search_for_target (closest_target_match, (void *) target);
+
+ /* Oh dear - we could not find any targets that satisfy our
+ requirements. */
+ if (winner == NULL)
+ einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
+ else
+ output_target = winner->name;
+ }
}
}
}
@@ -3155,14 +3160,15 @@ lang_do_assignments (s, output_section_statement, fill, dot)
dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
}
- if (os->load_base)
+ if (os->load_base)
{
/* If nothing has been placed into the output section then
it won't have a bfd_section. */
if (os->bfd_section)
{
os->bfd_section->lma
- = exp_get_abs_int(os->load_base, 0,"load base", lang_final_phase_enum);
+ = exp_get_abs_int(os->load_base, 0,"load base",
+ lang_final_phase_enum);
}
}
}
@@ -3873,7 +3879,6 @@ lang_enter_output_section_statement (output_section_statement_name,
return os;
}
-
void
lang_final ()
{