diff options
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 5 | ||||
-rw-r--r-- | ld/emultempl/sh64elf.em | 9 |
2 files changed, 13 insertions, 1 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 27af4c8..7dc68c6 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2003-07-08 J"orn Rennecke <joern.rennecke@superh.com> + + * emultempl/sh64elf.em (sh64_elf_${EMULATION_NAME}_after_allocation): + Allow second call from ldemul_finish. + 2003-07-04 J"orn Rennecke <joern.rennecke@superh.com> * emulparams/shelf32.sh (STACK_ADDR): Don't define. diff --git a/ld/emultempl/sh64elf.em b/ld/emultempl/sh64elf.em index 3c348fd..7f2b037 100644 --- a/ld/emultempl/sh64elf.em +++ b/ld/emultempl/sh64elf.em @@ -375,7 +375,14 @@ sh64_elf_${EMULATION_NAME}_after_allocation (void) } } - BFD_ASSERT (cranges->contents == NULL); + /* ldemul_after_allocation may be called twice. First directly from + lang_process, and the second time when lang_process calls ldemul_finish, + which calls gld${EMULATION_NAME}_finish, e.g. gldshelf32_finish, which + is defined in emultempl/elf32.em and calls ldemul_after_allocation, + if bfd_elf${ELFSIZE}_discard_info returned true. */ + if (cranges->contents != NULL) + free (cranges->contents); + BFD_ASSERT (sh64_elf_section_data (cranges)->sh64_info != NULL); /* Make sure we have .cranges in memory even if there were only |