projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gdb: Convert language la_compute_program field to a method
[deliverable/binutils-gdb.git]
/
ld
/
ldwrite.c
diff --git
a/ld/ldwrite.c
b/ld/ldwrite.c
index b7a1469c06a3696fd2efeac437f58f18e2f09eeb..5624dfdf4c0a5c22232c9facba346af624efcb45 100644
(file)
--- a/
ld/ldwrite.c
+++ b/
ld/ldwrite.c
@@
-1,7
+1,5
@@
/* ldwrite.c -- write out the linked file
/* ldwrite.c -- write out the linked file
- Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2002,
- 2003, 2004, 2005, 2006, 2007, 2008, 2010
- Free Software Foundation, Inc.
+ Copyright (C) 1991-2020 Free Software Foundation, Inc.
Written by Steve Chamberlain sac@cygnus.com
This file is part of the GNU Binutils.
Written by Steve Chamberlain sac@cygnus.com
This file is part of the GNU Binutils.
@@
-25,6
+23,7
@@
#include "bfd.h"
#include "bfdlink.h"
#include "libiberty.h"
#include "bfd.h"
#include "bfdlink.h"
#include "libiberty.h"
+#include "ctf-api.h"
#include "safe-ctype.h"
#include "ld.h"
#include "safe-ctype.h"
#include "ld.h"
@@
-47,7
+46,6
@@
build_link_order (lang_statement_union_type *statement)
asection *output_section;
struct bfd_link_order *link_order;
bfd_vma value;
asection *output_section;
struct bfd_link_order *link_order;
bfd_vma value;
- bfd_boolean big_endian = FALSE;
output_section = statement->data_statement.output_section;
ASSERT (output_section->owner == link_info.output_bfd);
output_section = statement->data_statement.output_section;
ASSERT (output_section->owner == link_info.output_bfd);
@@
-59,7
+57,7
@@
build_link_order (lang_statement_union_type *statement)
link_order = bfd_new_link_order (link_info.output_bfd, output_section);
if (link_order == NULL)
link_order = bfd_new_link_order (link_info.output_bfd, output_section);
if (link_order == NULL)
- einfo (_("%
P%F
: bfd_new_link_order failed\n"));
+ einfo (_("%
F%P
: bfd_new_link_order failed\n"));
link_order->type = bfd_data_link_order;
link_order->offset = statement->data_statement.output_offset;
link_order->type = bfd_data_link_order;
link_order->offset = statement->data_statement.output_offset;
@@
-67,74
+65,38
@@
build_link_order (lang_statement_union_type *statement)
value = statement->data_statement.value;
value = statement->data_statement.value;
- /* If the endianness of the output BFD is not known, then we
- base the endianness of the data on the first input file.
- By convention, the bfd_put routines for an unknown
+ /* By convention, the bfd_put routines for an unknown
endianness are big endian, so we must swap here if the
endianness are big endian, so we must swap here if the
- input file is little endian. */
- if (bfd_big_endian (link_info.output_bfd))
- big_endian = TRUE;
- else if (bfd_little_endian (link_info.output_bfd))
- big_endian = FALSE;
- else
+ input is little endian. */
+ if (!bfd_big_endian (link_info.output_bfd)
+ && !bfd_little_endian (link_info.output_bfd)
+ && !link_info.big_endian)
{
{
- bfd_boolean swap;
-
- swap = FALSE;
- if (command_line.endian == ENDIAN_BIG)
- big_endian = TRUE;
- else if (command_line.endian == ENDIAN_LITTLE)
- {
- big_endian = FALSE;
- swap = TRUE;
- }
- else if (command_line.endian == ENDIAN_UNSET)
- {
- big_endian = TRUE;
- {
- LANG_FOR_EACH_INPUT_STATEMENT (s)
- {
- if (s->the_bfd != NULL)
- {
- if (bfd_little_endian (s->the_bfd))
- {
- big_endian = FALSE;
- swap = TRUE;
- }
- break;
- }
- }
- }
- }
+ bfd_byte buffer[8];
-
if (swap
)
+
switch (statement->data_statement.type
)
{
{
- bfd_byte buffer[8];
-
-
switch (statement->data_statement.type
)
+ case QUAD:
+ case SQUAD:
+
if (sizeof (bfd_vma) >= QUAD_SIZE
)
{
{
- case QUAD:
- case SQUAD:
- if (sizeof (bfd_vma) >= QUAD_SIZE)
- {
- bfd_putl64 (value, buffer);
- value = bfd_getb64 (buffer);
- break;
- }
- /* Fall through. */
- case LONG:
- bfd_putl32 (value, buffer);
- value = bfd_getb32 (buffer);
- break;
- case SHORT:
- bfd_putl16 (value, buffer);
- value = bfd_getb16 (buffer);
+ bfd_putl64 (value, buffer);
+ value = bfd_getb64 (buffer);
break;
break;
- case BYTE:
- break;
- default:
- abort ();
}
}
+ /* Fall through. */
+ case LONG:
+ bfd_putl32 (value, buffer);
+ value = bfd_getb32 (buffer);
+ break;
+ case SHORT:
+ bfd_putl16 (value, buffer);
+ value = bfd_getb16 (buffer);
+ break;
+ case BYTE:
+ break;
+ default:
+ abort ();
}
}
}
}
@@
-158,10
+120,10
@@
build_link_order (lang_statement_union_type *statement)
high = (bfd_vma) -1;
bfd_put_32 (link_info.output_bfd, high,
(link_order->u.data.contents
high = (bfd_vma) -1;
bfd_put_32 (link_info.output_bfd, high,
(link_order->u.data.contents
- + (big_endian ? 0 : 4)));
+ + (
link_info.
big_endian ? 0 : 4)));
bfd_put_32 (link_info.output_bfd, value,
(link_order->u.data.contents
bfd_put_32 (link_info.output_bfd, value,
(link_order->u.data.contents
- + (big_endian ? 4 : 0)));
+ + (
link_info.
big_endian ? 4 : 0)));
}
link_order->size = QUAD_SIZE;
break;
}
link_order->size = QUAD_SIZE;
break;
@@
-183,6
+145,7
@@
build_link_order (lang_statement_union_type *statement)
default:
abort ();
}
default:
abort ();
}
+ link_order->u.data.size = link_order->size;
}
break;
}
break;
@@
-204,13
+167,13
@@
build_link_order (lang_statement_union_type *statement)
link_order = bfd_new_link_order (link_info.output_bfd, output_section);
if (link_order == NULL)
link_order = bfd_new_link_order (link_info.output_bfd, output_section);
if (link_order == NULL)
- einfo (_("%
P%F
: bfd_new_link_order failed\n"));
+ einfo (_("%
F%P
: bfd_new_link_order failed\n"));
link_order->offset = rs->output_offset;
link_order->size = bfd_get_reloc_size (rs->howto);
link_order->u.reloc.p = (struct bfd_link_order_reloc *)
link_order->offset = rs->output_offset;
link_order->size = bfd_get_reloc_size (rs->howto);
link_order->u.reloc.p = (struct bfd_link_order_reloc *)
-
xmalloc (sizeof (struct bfd_link_order_reloc));
+ xmalloc (sizeof (struct bfd_link_order_reloc));
link_order->u.reloc.p->reloc = rs->reloc;
link_order->u.reloc.p->addend = rs->addend_value;
link_order->u.reloc.p->reloc = rs->reloc;
link_order->u.reloc.p->addend = rs->addend_value;
@@
-240,7
+203,7
@@
build_link_order (lang_statement_union_type *statement)
attached */
asection *i = statement->input_section.section;
attached */
asection *i = statement->input_section.section;
- if (
!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+ if (
i->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
&& (i->flags & SEC_EXCLUDE) == 0)
{
asection *output_section = i->output_section;
&& (i->flags & SEC_EXCLUDE) == 0)
{
asection *output_section = i->output_section;
@@
-255,6
+218,8
@@
build_link_order (lang_statement_union_type *statement)
link_order = bfd_new_link_order (link_info.output_bfd,
output_section);
link_order = bfd_new_link_order (link_info.output_bfd,
output_section);
+ if (link_order == NULL)
+ einfo (_("%F%P: bfd_new_link_order failed\n"));
if ((i->flags & SEC_NEVER_LOAD) != 0
&& (i->flags & SEC_DEBUGGING) == 0)
if ((i->flags & SEC_NEVER_LOAD) != 0
&& (i->flags & SEC_DEBUGGING) == 0)
@@
-294,6
+259,8
@@
build_link_order (lang_statement_union_type *statement)
link_order = bfd_new_link_order (link_info.output_bfd,
output_section);
link_order = bfd_new_link_order (link_info.output_bfd,
output_section);
+ if (link_order == NULL)
+ einfo (_("%F%P: bfd_new_link_order failed\n"));
link_order->type = bfd_data_link_order;
link_order->size = statement->padding_statement.size;
link_order->offset = statement->padding_statement.output_offset;
link_order->type = bfd_data_link_order;
link_order->size = statement->padding_statement.size;
link_order->offset = statement->padding_statement.output_offset;
@@
-337,7
+304,7
@@
clone_section (bfd *abfd, asection *s, const char *name, int *count)
{
char *tname;
char *sname;
{
char *tname;
char *sname;
- unsigned int len;
+ unsigned int len;
asection *n;
struct bfd_link_hash_entry *h;
asection *n;
struct bfd_link_hash_entry *h;
@@
-410,13
+377,9
@@
ds (asection *s)
while (l)
{
if (l->type == bfd_indirect_link_order)
while (l)
{
if (l->type == bfd_indirect_link_order)
- {
- printf ("%8x %s\n", l->offset, l->u.indirect.section->owner->filename);
- }
+ printf ("%8x %s\n", l->offset, l->u.indirect.section->owner->filename);
else
else
- {
- printf (_("%8x something else\n"), l->offset);
- }
+ printf (_("%8x something else\n"), l->offset);
l = l->next;
}
printf ("\n");
l = l->next;
}
printf ("\n");
@@
-489,13
+452,13
@@
split_sections (bfd *abfd, struct bfd_link_info *info)
|| info->strip == strip_some)
thislines = sec->lineno_count;
|| info->strip == strip_some)
thislines = sec->lineno_count;
- if (
info->relocatable
)
+ if (
bfd_link_relocatable (info)
)
thisrelocs = sec->reloc_count;
thissize = sec->size;
}
thisrelocs = sec->reloc_count;
thissize = sec->size;
}
- else if (
info->relocatable
+ else if (
bfd_link_relocatable (info)
&& (p->type == bfd_section_reloc_link_order
|| p->type == bfd_symbol_reloc_link_order))
thisrelocs++;
&& (p->type == bfd_section_reloc_link_order
|| p->type == bfd_symbol_reloc_link_order))
thisrelocs++;
@@
-573,6
+536,7
@@
ldwrite (void)
/* Reset error indicator, which can typically something like invalid
format from opening up the .o files. */
bfd_set_error (bfd_error_no_error);
/* Reset error indicator, which can typically something like invalid
format from opening up the .o files. */
bfd_set_error (bfd_error_no_error);
+ lang_clear_os_map ();
lang_for_each_statement (build_link_order);
if (config.split_by_reloc != (unsigned) -1
lang_for_each_statement (build_link_order);
if (config.split_by_reloc != (unsigned) -1
This page took
0.026785 seconds
and
4
git commands to generate.