diff options
author | Alan Modra <amodra@gmail.com> | 2016-10-07 10:58:35 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2016-10-07 11:24:21 +1030 |
commit | 1047201fd0f402428bb3331638a198413f97f476 (patch) | |
tree | 36aba61eb942e9795c947b85abb2629582c14e79 /bfd/linker.c | |
parent | b62b1f7143c70caf5a14bd9684bbe50f51db706f (diff) | |
download | gdb-1047201fd0f402428bb3331638a198413f97f476.zip gdb-1047201fd0f402428bb3331638a198413f97f476.tar.gz gdb-1047201fd0f402428bb3331638a198413f97f476.tar.bz2 |
bfd_merge_private_bfd_data tidy
bfd_merge_private_bfd_data and _bfd_generic_verify_endian_match are
linker functions, so move them to linker.c.
bfd/
* Makefile.am (LIBBFD_H_FILES): Update.
* doc/Makefile.am (LIBBFD_H_DEP): Likewise.
* cpu-sh.c (sh_merge_bfd_arch): Move to..
* elf32-sh.c: ..here, and make static.
* elf32-arc.c (arc_elf_merge_private_bfd_data): Delete extraneous
error.
* elf32-cris.c (cris_elf_merge_private_bfd_data): Don't call
_bfd_generic_verify_endian_match.
* elf32-microblaze.c (microblaze_elf_merge_private_bfd_data): Delete.
(bfd_elf32_bfd_merge_private_bfd_data): Define as
_bfd_generic_verify_endian_match.
* elf32-mt.c (mt_elf_merge_private_bfd_data): Don't test
boolean == FALSE.
* elf32-xgate.c (_bfd_xgate_elf_merge_private_bfd_data): Delete.
(bfd_elf32_bfd_merge_private_bfd_data): Don't define.
* elf32-xgate.h (_bfd_xgate_elf_merge_private_bfd_data): Delete.
* libbfd-in.h (_bfd_generic_verify_endian_match): Delete.
* libbfd.c (_bfd_generic_verify_endian_match): Move to..
* linker.c: ..here, and make internal.
* bfd.c (bfd_merge_private_bfd_data): Move to..
* linker.c: ..here.
* Makefile.in: Regenerate.
* doc/Makefile.in: Regenerate.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
opcodes/
* sh-opc.h (sh_merge_bfd_arch): Delete prototype.
Diffstat (limited to 'bfd/linker.c')
-rw-r--r-- | bfd/linker.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/bfd/linker.c b/bfd/linker.c index 8dff5a0..7830b29 100644 --- a/bfd/linker.c +++ b/bfd/linker.c @@ -3332,3 +3332,58 @@ _bfd_generic_link_check_relocs (bfd *abfd ATTRIBUTE_UNUSED, { return TRUE; } + +/* +FUNCTION + bfd_merge_private_bfd_data + +SYNOPSIS + bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd); + +DESCRIPTION + Merge private BFD information from the BFD @var{ibfd} to the + the output file BFD @var{obfd} when linking. Return <<TRUE>> on success, + <<FALSE>> on error. Possible error returns are: + + o <<bfd_error_no_memory>> - + Not enough memory exists to create private data for @var{obfd}. + +.#define bfd_merge_private_bfd_data(ibfd, obfd) \ +. BFD_SEND (obfd, _bfd_merge_private_bfd_data, \ +. (ibfd, obfd)) + +*/ + +/* +INTERNAL_FUNCTION + _bfd_generic_verify_endian_match + +SYNOPSIS + bfd_boolean _bfd_generic_verify_endian_match + (bfd *ibfd, bfd *obfd); + +DESCRIPTION + Can be used from / for bfd_merge_private_bfd_data to check that + endianness matches between input and output file. Returns + TRUE for a match, otherwise returns FALSE and emits an error. +*/ + +bfd_boolean +_bfd_generic_verify_endian_match (bfd *ibfd, bfd *obfd) +{ + if (ibfd->xvec->byteorder != obfd->xvec->byteorder + && ibfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN + && obfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN) + { + if (bfd_big_endian (ibfd)) + _bfd_error_handler (_("%B: compiled for a big endian system " + "and target is little endian"), ibfd); + else + _bfd_error_handler (_("%B: compiled for a little endian system " + "and target is big endian"), ibfd); + bfd_set_error (bfd_error_wrong_format); + return FALSE; + } + + return TRUE; +} |