/* ldwrite.c -- write out the linked file
- Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 2000
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2002
Free Software Foundation, Inc.
Written by Steve Chamberlain sac@cygnus.com
#include "ldlang.h"
#include "ldwrite.h"
#include "ldmisc.h"
-#include "ldgram.h"
+#include <ldgram.h>
#include "ldmain.h"
static void build_link_order PARAMS ((lang_statement_union_type *));
asection *output_section;
struct bfd_link_order *link_order;
bfd_vma value;
- boolean big_endian = false;
+ bfd_boolean big_endian = FALSE;
output_section = statement->data_statement.output_section;
ASSERT (output_section->owner == output_bfd);
endianness are big endian, so we must swap here if the
input file is little endian. */
if (bfd_big_endian (output_bfd))
- big_endian = true;
+ big_endian = TRUE;
else if (bfd_little_endian (output_bfd))
- big_endian = false;
+ big_endian = FALSE;
else
{
- boolean swap;
+ bfd_boolean swap;
- swap = false;
+ swap = FALSE;
if (command_line.endian == ENDIAN_BIG)
- big_endian = true;
+ big_endian = TRUE;
else if (command_line.endian == ENDIAN_LITTLE)
{
- big_endian = false;
- swap = true;
+ big_endian = FALSE;
+ swap = TRUE;
}
else if (command_line.endian == ENDIAN_UNSET)
{
- big_endian = true;
+ big_endian = TRUE;
{
LANG_FOR_EACH_INPUT_STATEMENT (s)
{
{
if (bfd_little_endian (s->the_bfd))
{
- big_endian = false;
- swap = true;
+ big_endian = FALSE;
+ swap = TRUE;
}
break;
}
case lang_input_section_enum:
/* Create a new link_order in the output section with this
attached */
- if (statement->input_section.ifile->just_syms_flag == false)
+ if (!statement->input_section.ifile->just_syms_flag)
{
asection *i = statement->input_section.section;
asection *output_section = i->output_section;
ASSERT (output_section->owner == output_bfd);
- if ((output_section->flags & SEC_HAS_CONTENTS) != 0)
+ if ((output_section->flags & SEC_HAS_CONTENTS) != 0
+ || ((output_section->flags & SEC_LOAD) != 0
+ && (output_section->flags & SEC_THREAD_LOCAL)))
{
struct bfd_link_order *link_order;
{
/* We've got a never load section inside one which
is going to be output, we'll change it into a
- fill link_order */
- link_order->type = bfd_fill_link_order;
- link_order->u.fill.value = 0;
+ fill. */
+ link_order->type = bfd_data_link_order;
+ link_order->u.data.contents = "";
+ link_order->u.data.size = 1;
}
else
{
if ((output_section->flags & SEC_HAS_CONTENTS) != 0)
{
link_order = bfd_new_link_order (output_bfd, output_section);
- link_order->type = bfd_fill_link_order;
+ link_order->type = bfd_data_link_order;
link_order->size = statement->padding_statement.size;
link_order->offset = statement->padding_statement.output_offset;
- link_order->u.fill.value = statement->padding_statement.fill;
+ link_order->u.data.contents = statement->padding_statement.fill->data;
+ link_order->u.data.size = statement->padding_statement.fill->size;
}
}
break;
/* Call BFD to write out the linked file. */
-
/**********************************************************************/
-
/* Wander around the input sections, make sure that
we'll never try and create an output section with more relocs
than will fit.. Do this by always assuming the worst case, and
if ((sname = bfd_get_unique_section_name (abfd, templ, count)) == NULL
|| (n = bfd_make_section_anyway (abfd, sname)) == NULL
|| (h = bfd_link_hash_lookup (link_info.hash,
- sname, true, true, false)) == NULL)
+ sname, TRUE, TRUE, FALSE)) == NULL)
{
einfo (_("%F%P: clone section failed: %E\n"));
/* Silence gcc warnings. einfo exits, so we never reach here. */
}
#if TESTING
-static void
+static void
ds (s)
asection *s;
{
}
printf ("\n");
}
+
dump (s, a1, a2)
char *s;
asection *a1;
ds (a2);
}
-static void
+static void
sanity_check (abfd)
bfd *abfd;
{
#define dump(a, b, c)
#endif
-static void
+static void
split_sections (abfd, info)
bfd *abfd;
struct bfd_link_info *info;
}
sanity_check (abfd);
}
+
/**********************************************************************/
+
void
ldwrite ()
{
if (bfd_get_error () != bfd_error_no_error)
einfo (_("%F%P: final link failed: %E\n"));
else
- xexit(1);
+ xexit (1);
}
}