aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2014-08-18 09:33:35 +0930
committerAlan Modra <amodra@gmail.com>2014-08-18 09:33:35 +0930
commit759388538d1339f6a634b2777e24f46427dd9c96 (patch)
tree7476c5a31a0fe3ebf289411c3b02897a4f6d6211 /ld
parent1e53931944810798e6741f664bd3ec727272fe11 (diff)
downloadgdb-759388538d1339f6a634b2777e24f46427dd9c96.zip
gdb-759388538d1339f6a634b2777e24f46427dd9c96.tar.gz
gdb-759388538d1339f6a634b2777e24f46427dd9c96.tar.bz2
Return error status from bfd_elf_discard_info.
bfd/ * elflink.c (bfd_elf_discard_info): Return int error status. * stabs.c (_bfd_discard_section_stabs): Comment typo fix. * bfd-in.h (bfd_elf_discard_info): Updata prototype. * bfd-in2.h: Regenerate. ld/ * emultempl/aarch64elf.em (gld${EMULATION_NAME}_after_allocation): Handle error status from bfd_elf_discard_info. * emultempl/armelf.em: Likewise. * emultempl/elf32.em: Likewise. * emultempl/hppaelf.em: Likewise. * emultempl/metagelf.em: Likewise. * emultempl/nios2elf.em: Likewise. * emultempl/ppc64elf.em: Likewise. * emultempl/tic6xdsbt.em: Likewise. * emultempl/vms.em: Likewise.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog13
-rw-r--r--ld/emultempl/aarch64elf.em15
-rw-r--r--ld/emultempl/armelf.em13
-rw-r--r--ld/emultempl/elf32.em9
-rw-r--r--ld/emultempl/hppaelf.em14
-rw-r--r--ld/emultempl/metagelf.em14
-rw-r--r--ld/emultempl/nios2elf.em14
-rw-r--r--ld/emultempl/ppc64elf.em12
-rw-r--r--ld/emultempl/tic6xdsbt.em9
-rw-r--r--ld/emultempl/vms.em9
10 files changed, 94 insertions, 28 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 773afba..2c1ec6a 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,16 @@
+2014-08-18 Alan Modra <amodra@gmail.com>
+
+ * emultempl/aarch64elf.em (gld${EMULATION_NAME}_after_allocation):
+ Handle error status from bfd_elf_discard_info.
+ * emultempl/armelf.em: Likewise.
+ * emultempl/elf32.em: Likewise.
+ * emultempl/hppaelf.em: Likewise.
+ * emultempl/metagelf.em: Likewise.
+ * emultempl/nios2elf.em: Likewise.
+ * emultempl/ppc64elf.em: Likewise.
+ * emultempl/tic6xdsbt.em: Likewise.
+ * emultempl/vms.em: Likewise.
+
2014-08-14 Alan Modra <amodra@gmail.com>
PR 16563
diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em
index 6134855..bb58901 100644
--- a/ld/emultempl/aarch64elf.em
+++ b/ld/emultempl/aarch64elf.em
@@ -219,20 +219,27 @@ build_section_lists (lang_statement_union_type *statement)
static void
gld${EMULATION_NAME}_after_allocation (void)
{
+ int ret;
+
/* bfd_elf32_discard_info just plays with debugging sections,
ie. doesn't affect any code, so we can delay resizing the
sections. It's likely we'll resize everything in the process of
adding stubs. */
- if (bfd_elf_discard_info (link_info.output_bfd, & link_info))
+ ret = bfd_elf_discard_info (link_info.output_bfd, & link_info);
+ if (ret < 0)
+ {
+ einfo ("%X%P: .eh_frame/.stab edit: %E\n");
+ return;
+ }
+ else if (ret > 0)
need_laying_out = 1;
/* If generating a relocatable output file, then we don't
have to examine the relocs. */
if (stub_file != NULL && !link_info.relocatable)
{
- int ret = elf${ELFSIZE}_aarch64_setup_section_lists (link_info.output_bfd,
- & link_info);
-
+ ret = elf${ELFSIZE}_aarch64_setup_section_lists (link_info.output_bfd,
+ &link_info);
if (ret != 0)
{
if (ret < 0)
diff --git a/ld/emultempl/armelf.em b/ld/emultempl/armelf.em
index 34028ee..371b440 100644
--- a/ld/emultempl/armelf.em
+++ b/ld/emultempl/armelf.em
@@ -271,6 +271,8 @@ compare_output_sec_vma (const void *a, const void *b)
static void
gld${EMULATION_NAME}_after_allocation (void)
{
+ int ret;
+
if (!link_info.relocatable)
{
/* Build a sorted list of input text sections, then use that to process
@@ -325,15 +327,20 @@ gld${EMULATION_NAME}_after_allocation (void)
ie. doesn't affect any code, so we can delay resizing the
sections. It's likely we'll resize everything in the process of
adding stubs. */
- if (bfd_elf_discard_info (link_info.output_bfd, & link_info))
+ ret = bfd_elf_discard_info (link_info.output_bfd, & link_info);
+ if (ret < 0)
+ {
+ einfo ("%X%P: .eh_frame/.stab edit: %E\n");
+ return;
+ }
+ else if (ret > 0)
need_laying_out = 1;
/* If generating a relocatable output file, then we don't
have to examine the relocs. */
if (stub_file != NULL && !link_info.relocatable)
{
- int ret = elf32_arm_setup_section_lists (link_info.output_bfd, & link_info);
-
+ ret = elf32_arm_setup_section_lists (link_info.output_bfd, &link_info);
if (ret != 0)
{
if (ret < 0)
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index 39b4ccd..67c437d 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -1942,9 +1942,12 @@ fragment <<EOF
static void
gld${EMULATION_NAME}_after_allocation (void)
{
- bfd_boolean need_layout = bfd_elf_discard_info (link_info.output_bfd,
- &link_info);
- gld${EMULATION_NAME}_map_segments (need_layout);
+ int need_layout = bfd_elf_discard_info (link_info.output_bfd, &link_info);
+
+ if (need_layout < 0)
+ einfo ("%X%P: .eh_frame/.stab edit: %E\n");
+ else
+ gld${EMULATION_NAME}_map_segments (need_layout);
}
EOF
fi
diff --git a/ld/emultempl/hppaelf.em b/ld/emultempl/hppaelf.em
index 7cb4537..6955796 100644
--- a/ld/emultempl/hppaelf.em
+++ b/ld/emultempl/hppaelf.em
@@ -242,20 +242,26 @@ build_section_lists (lang_statement_union_type *statement)
static void
gld${EMULATION_NAME}_after_allocation (void)
{
+ int ret;
+
/* bfd_elf_discard_info just plays with data and debugging sections,
ie. doesn't affect code size, so we can delay resizing the
sections. It's likely we'll resize everything in the process of
adding stubs. */
- if (bfd_elf_discard_info (link_info.output_bfd, &link_info))
+ ret = bfd_elf_discard_info (link_info.output_bfd, &link_info);
+ if (ret < 0)
+ {
+ einfo ("%X%P: .eh_frame/.stab edit: %E\n");
+ return;
+ }
+ else if (ret > 0)
need_laying_out = 1;
/* If generating a relocatable output file, then we don't
have to examine the relocs. */
if (stub_file != NULL && !link_info.relocatable)
{
- int ret = elf32_hppa_setup_section_lists (link_info.output_bfd,
- &link_info);
-
+ ret = elf32_hppa_setup_section_lists (link_info.output_bfd, &link_info);
if (ret != 0)
{
if (ret < 0)
diff --git a/ld/emultempl/metagelf.em b/ld/emultempl/metagelf.em
index 1f77ecd..97739dc 100644
--- a/ld/emultempl/metagelf.em
+++ b/ld/emultempl/metagelf.em
@@ -219,20 +219,26 @@ build_section_lists (lang_statement_union_type *statement)
static void
gld${EMULATION_NAME}_after_allocation (void)
{
+ int ret;
+
/* bfd_elf_discard_info just plays with data and debugging sections,
ie. doesn't affect code size, so we can delay resizing the
sections. It's likely we'll resize everything in the process of
adding stubs. */
- if (bfd_elf_discard_info (link_info.output_bfd, &link_info))
+ ret = bfd_elf_discard_info (link_info.output_bfd, &link_info);
+ if (ret < 0)
+ {
+ einfo ("%X%P: .eh_frame/.stab edit: %E\n");
+ return;
+ }
+ else if (ret > 0)
need_laying_out = 1;
/* If generating a relocatable output file, then we don't
have to examine the relocs. */
if (stub_file != NULL && !link_info.relocatable)
{
- int ret = elf_metag_setup_section_lists (link_info.output_bfd,
- &link_info);
-
+ ret = elf_metag_setup_section_lists (link_info.output_bfd, &link_info);
if (ret != 0)
{
if (ret < 0)
diff --git a/ld/emultempl/nios2elf.em b/ld/emultempl/nios2elf.em
index 991a11b..bdf54a3 100644
--- a/ld/emultempl/nios2elf.em
+++ b/ld/emultempl/nios2elf.em
@@ -236,20 +236,26 @@ build_section_lists (lang_statement_union_type *statement)
static void
gld${EMULATION_NAME}_after_allocation (void)
{
+ int ret;
+
/* bfd_elf_discard_info just plays with data and debugging sections,
ie. doesn't affect code size, so we can delay resizing the
sections. It's likely we'll resize everything in the process of
adding stubs. */
- if (bfd_elf_discard_info (link_info.output_bfd, &link_info))
+ ret = bfd_elf_discard_info (link_info.output_bfd, &link_info);
+ if (ret < 0)
+ {
+ einfo ("%X%P: .eh_frame/.stab edit: %E\n");
+ return;
+ }
+ else if (ret > 0)
need_laying_out = 1;
/* If generating a relocatable output file, then we don't
have to examine the relocs. */
if (stub_file != NULL && !link_info.relocatable && RELAXATION_ENABLED)
{
- int ret = nios2_elf32_setup_section_lists (link_info.output_bfd,
- &link_info);
-
+ ret = nios2_elf32_setup_section_lists (link_info.output_bfd, &link_info);
if (ret != 0)
{
if (ret < 0)
diff --git a/ld/emultempl/ppc64elf.em b/ld/emultempl/ppc64elf.em
index d45fdac..3e316af 100644
--- a/ld/emultempl/ppc64elf.em
+++ b/ld/emultempl/ppc64elf.em
@@ -458,18 +458,26 @@ build_section_lists (lang_statement_union_type *statement)
static void
gld${EMULATION_NAME}_after_allocation (void)
{
+ int ret;
+
/* bfd_elf_discard_info just plays with data and debugging sections,
ie. doesn't affect code size, so we can delay resizing the
sections. It's likely we'll resize everything in the process of
adding stubs. */
- if (bfd_elf_discard_info (link_info.output_bfd, &link_info))
+ ret = bfd_elf_discard_info (link_info.output_bfd, &link_info);
+ if (ret < 0)
+ {
+ einfo ("%X%P: .eh_frame/.stab edit: %E\n");
+ return;
+ }
+ else if (ret > 0)
need_laying_out = 1;
/* If generating a relocatable output file, then we don't have any
stubs. */
if (stub_file != NULL && !link_info.relocatable)
{
- int ret = ppc64_elf_setup_section_lists (&link_info);
+ ret = ppc64_elf_setup_section_lists (&link_info);
if (ret < 0)
einfo ("%X%P: can not size stub section: %E\n");
else if (ret > 0)
diff --git a/ld/emultempl/tic6xdsbt.em b/ld/emultempl/tic6xdsbt.em
index ca957c4..ff591f1 100644
--- a/ld/emultempl/tic6xdsbt.em
+++ b/ld/emultempl/tic6xdsbt.em
@@ -95,6 +95,7 @@ static void
gld${EMULATION_NAME}_after_allocation (void)
{
int layout_changed = 0;
+ int ret;
if (!link_info.relocatable)
{
@@ -149,7 +150,13 @@ gld${EMULATION_NAME}_after_allocation (void)
/* bfd_elf32_discard_info just plays with debugging sections,
ie. doesn't affect any code, so we can delay resizing the
sections. */
- if (bfd_elf_discard_info (link_info.output_bfd, & link_info))
+ ret = bfd_elf_discard_info (link_info.output_bfd, & link_info);
+ if (ret < 0)
+ {
+ einfo ("%X%P: .eh_frame/.stab edit: %E\n");
+ return;
+ }
+ else if (ret > 0)
layout_changed = 1;
gld${EMULATION_NAME}_map_segments (layout_changed);
diff --git a/ld/emultempl/vms.em b/ld/emultempl/vms.em
index b1f61d5..40be66d 100644
--- a/ld/emultempl/vms.em
+++ b/ld/emultempl/vms.em
@@ -207,9 +207,12 @@ gld${EMULATION_NAME}_before_allocation (void)
static void
gld${EMULATION_NAME}_after_allocation (void)
{
- bfd_boolean need_layout = bfd_elf_discard_info (link_info.output_bfd,
- &link_info);
- gld${EMULATION_NAME}_map_segments (need_layout);
+ int need_layout = bfd_elf_discard_info (link_info.output_bfd, &link_info);
+
+ if (need_layout < 0)
+ einfo ("%X%P: .eh_frame/.stab edit: %E\n");
+ else
+ gld${EMULATION_NAME}_map_segments (need_layout);
}
static void