diff --git a/ld/ChangeLog b/ld/ChangeLog index c7d9999547..4cfcf6d8ba 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2017-11-21 Nick Clifton + + PR 22419 + * emultempl/v850elf.em (v850_create_output_section_statements): + New function. Generate an error if attempting to convert the + format of the output file. + * testsuite/ld-unique/pr21529.d: Skip for the V850. + * testsuite/ld-elf/pr21884.d: Skip for the V850. + 2017-11-21 Claudiu Zissulescu * testsuite/ld-arc/jli-simple.d: Update test. diff --git a/ld/emultempl/v850elf.em b/ld/emultempl/v850elf.em index 2d59023498..5bc82cceeb 100644 --- a/ld/emultempl/v850elf.em +++ b/ld/emultempl/v850elf.em @@ -49,6 +49,27 @@ v850_after_open (void) gld${EMULATION_NAME}_after_open (); } +/* This is a convenient point to tell BFD about target specific flags. + After the output has been created, but before inputs are read. */ + +static void +v850_create_output_section_statements (void) +{ + /* See PR 22419 for an example of why this is necessary. */ + if (strstr (bfd_get_target (link_info.output_bfd), "v850") == NULL) + { + /* The V850 backend needs special fields in the output hash structure. + These will only be created if the output format is an arm format, + hence we do not support linking and changing output formats at the + same time. Use a link followed by objcopy to change output formats. */ + einfo (_("%F%X%P: error: Cannot change output format (to %s) whilst linking V850 binaries.\n"), + bfd_get_target (link_info.output_bfd)); + return; + } +} + + EOF LDEMUL_AFTER_OPEN=v850_after_open +LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=v850_create_output_section_statements diff --git a/ld/testsuite/ld-elf/pr21884.d b/ld/testsuite/ld-elf/pr21884.d index 0de7b83b18..2645a874bf 100644 --- a/ld/testsuite/ld-elf/pr21884.d +++ b/ld/testsuite/ld-elf/pr21884.d @@ -2,7 +2,7 @@ #source: pr21884b.s #ld: -T pr21884.t #objdump: -b binary -s -#notarget: aarch64*-*-* arm*-*-* avr-*-* hppa-*-* ia64-*-* m68hc1*-*-* nds32*-*-* score-*-* +#notarget: aarch64*-*-* arm*-*-* avr-*-* hppa-*-* ia64-*-* m68hc1*-*-* nds32*-*-* score-*-* v850-*-* # Skip targets which can't change output format to binary. .*: file format binary diff --git a/ld/testsuite/ld-unique/pr21529.d b/ld/testsuite/ld-unique/pr21529.d index ffc1a72440..655a9eff9e 100644 --- a/ld/testsuite/ld-unique/pr21529.d +++ b/ld/testsuite/ld-unique/pr21529.d @@ -1,6 +1,6 @@ #ld: --oformat binary -T pr21529.ld -e main #objdump: -s -b binary -#notarget: aarch64*-*-* arm*-*-* avr-*-* ia64-*-* m68hc1*-*-* nds32*-*-* score-*-* +#notarget: aarch64*-*-* arm*-*-* avr-*-* ia64-*-* m68hc1*-*-* nds32*-*-* score-*-* v850-*-* # Skip targets which can't change output format to binary. #pass