summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2017-10-04 14:20:51 +0100
committerPedro Alves <palves@redhat.com>2017-10-04 14:20:51 +0100
commitb776a1bae9936aadc8a7d2756c69ef08c274c57a (patch)
treef2ece06dbcb898043bb19834422f0adc8bbd46e7
parenta345c12b6e358ebc3d8738faaf6123d5b6198462 (diff)
downloadbinutils-gdb-users/palves/bfd_set_input_error.tar.gz
-rw-r--r--bfd/archive.c2
-rw-r--r--bfd/bfd-in2.h4
-rw-r--r--bfd/bfd.c51
-rw-r--r--bfd/elflink.c2
-rw-r--r--bfd/vms-lib.c2
5 files changed, 39 insertions, 22 deletions
diff --git a/bfd/archive.c b/bfd/archive.c
index 3ce3f9eb892..1e876856430 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -2309,7 +2309,7 @@ _bfd_write_archive_contents (bfd *arch)
return TRUE;
input_err:
- bfd_set_error (bfd_error_on_input, current, bfd_get_error ());
+ bfd_set_input_error (current, bfd_get_error ());
return FALSE;
}
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index d126aed0868..4ba05b10b6e 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -7054,7 +7054,9 @@ bfd_error_type;
bfd_error_type bfd_get_error (void);
-void bfd_set_error (bfd_error_type error_tag, ...);
+void bfd_set_error (bfd_error_type error_tag);
+
+void bfd_set_input_error (bfd *input, bfd_error_type error_tag);
const char *bfd_errmsg (bfd_error_type error_tag);
diff --git a/bfd/bfd.c b/bfd/bfd.c
index 665f182559b..f21c97aa534 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -497,32 +497,47 @@ FUNCTION
bfd_set_error
SYNOPSIS
- void bfd_set_error (bfd_error_type error_tag, ...);
+ void bfd_set_error (bfd_error_type error_tag);
DESCRIPTION
Set the BFD error condition to be @var{error_tag}.
- If @var{error_tag} is bfd_error_on_input, then this function
- takes two more parameters, the input bfd where the error
- occurred, and the bfd_error_type error.
+
+ @var{error_tag} must not be bfd_error_on_input. Use
+ bfd_set_input_error for input errors instead.
*/
void
-bfd_set_error (bfd_error_type error_tag, ...)
+bfd_set_error (bfd_error_type error_tag)
{
bfd_error = error_tag;
- if (error_tag == bfd_error_on_input)
- {
- /* This is an error that occurred during bfd_close when
- writing an archive, but on one of the input files. */
- va_list ap;
-
- va_start (ap, error_tag);
- input_bfd = va_arg (ap, bfd *);
- input_error = (bfd_error_type) va_arg (ap, int);
- if (input_error >= bfd_error_on_input)
- abort ();
- va_end (ap);
- }
+ if (bfd_error >= bfd_error_on_input)
+ abort ();
+}
+
+/*
+FUNCTION
+ bfd_set_input_error
+
+SYNOPSIS
+ void bfd_set_input_error (bfd *input, bfd_error_type error_tag);
+
+DESCRIPTION
+
+ Set the BFD error condition to be bfd_error_on_input.
+ @var{input} is the input bfd where the error occurred, and
+ @var{error_tag} the bfd_error_type error.
+*/
+
+void
+bfd_set_input_error (bfd *input, bfd_error_type error_tag)
+{
+ /* This is an error that occurred during bfd_close when writing an
+ archive, but on one of the input files. */
+ bfd_error = bfd_error_on_input;
+ input_bfd = input;
+ input_error = error_tag;
+ if (input_error >= bfd_error_on_input)
+ abort ();
}
/*
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 982bf4f04ff..ec959f3f6ec 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -10444,7 +10444,7 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
(_("error: %B: size of section %A is not "
"multiple of address size"),
input_bfd, o);
- bfd_set_error (bfd_error_on_input);
+ bfd_set_input_error (input_bfd, bfd_get_error ());
return FALSE;
}
o->flags |= SEC_ELF_REVERSE_COPY;
diff --git a/bfd/vms-lib.c b/bfd/vms-lib.c
index 7b1320de721..27f07e13a9b 100644
--- a/bfd/vms-lib.c
+++ b/bfd/vms-lib.c
@@ -2305,7 +2305,7 @@ _bfd_vms_lib_write_archive_contents (bfd *arch)
return TRUE;
input_err:
- bfd_set_error (bfd_error_on_input, current, bfd_get_error ());
+ bfd_set_input_error (current, bfd_get_error ());
return FALSE;
}