From 2cf5d842706a6dcb51bee5982db0d4c46343c2a9 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 17 May 2011 16:02:29 +0000 Subject: PR ld/12759 * emultempl/rxelf.em (ignore_lma): New variable. (rx_elf_create_output_section_statements): Pass the setiing of ignore_lma to bfd_elf32_rx_set_target_flags. (OPTION_IGNORE_LMA): Define. (OPTION_NO_IGNORE_LMA): Define. (PARSE_AND_LIST_LONGOPTS): Add ignore lma. (PARSE_AND_LIST_OPTIONS): Add ignore lma. (PARSE_AND_LIST_ARGS_CASES): Add ignore lma. * elf32-rx.c (ignore_lma): New variable. (bfd_elf32_rx_set_target_flags): Add ignore_lma parameter. (rx_modify_program_headers): Only copy the LMA into the VMA if ignore_lma is true. --- bfd/ChangeLog | 8 ++++++++ bfd/elf32-rx.c | 37 +++++++++++++++++++++---------------- ld/ChangeLog | 12 ++++++++++++ ld/emultempl/rxelf.em | 24 ++++++++++++++++++++---- 4 files changed, 61 insertions(+), 20 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a5355b5015..0e8bdf123e 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2011-05-17 Tomohiro Kashiwada + + PR ld/12759 + * elf32-rx.c (ignore_lma): New variable. + (bfd_elf32_rx_set_target_flags): Add ignore_lma parameter. + (rx_modify_program_headers): Only copy the LMA into the VMA if + ignore_lma is true. + 2011-05-17 Alan Modra PR ld/12760 diff --git a/bfd/elf32-rx.c b/bfd/elf32-rx.c index 55f2eaafc7..5691ced146 100644 --- a/bfd/elf32-rx.c +++ b/bfd/elf32-rx.c @@ -2855,13 +2855,16 @@ rx_elf_set_private_flags (bfd * abfd, flagword flags) } static bfd_boolean no_warn_mismatch = FALSE; +static bfd_boolean ignore_lma = TRUE; -void bfd_elf32_rx_set_target_flags (bfd_boolean); +void bfd_elf32_rx_set_target_flags (bfd_boolean, bfd_boolean); void -bfd_elf32_rx_set_target_flags (bfd_boolean user_no_warn_mismatch) +bfd_elf32_rx_set_target_flags (bfd_boolean user_no_warn_mismatch, + bfd_boolean user_ignore_lma) { no_warn_mismatch = user_no_warn_mismatch; + ignore_lma = user_ignore_lma; } /* Merge backend specific data from an object file to the output @@ -3332,22 +3335,24 @@ elf32_rx_modify_program_headers (bfd * abfd ATTRIBUTE_UNUSED, phdr = tdata->phdr; count = tdata->program_header_size / bed->s->sizeof_phdr; - for (i = count; i-- != 0; ) - if (phdr[i].p_type == PT_LOAD) - { - /* The Renesas tools expect p_paddr to be zero. However, - there is no other way to store the writable data in ROM for - startup initialization. So, we let the linker *think* - we're using paddr and vaddr the "usual" way, but at the - last minute we move the paddr into the vaddr (which is what - the simulator uses) and zero out paddr. Note that this - does not affect the section headers, just the program - headers. We hope. */ + if (ignore_lma) + for (i = count; i-- != 0;) + if (phdr[i].p_type == PT_LOAD) + { + /* The Renesas tools expect p_paddr to be zero. However, + there is no other way to store the writable data in ROM for + startup initialization. So, we let the linker *think* + we're using paddr and vaddr the "usual" way, but at the + last minute we move the paddr into the vaddr (which is what + the simulator uses) and zero out paddr. Note that this + does not affect the section headers, just the program + headers. We hope. */ phdr[i].p_vaddr = phdr[i].p_paddr; - /* If we zero out p_paddr, then the LMA in the section table +#if 0 /* If we zero out p_paddr, then the LMA in the section table becomes wrong. */ - /*phdr[i].p_paddr = 0;*/ - } + phdr[i].p_paddr = 0; +#endif + } return TRUE; } diff --git a/ld/ChangeLog b/ld/ChangeLog index 7b782c8d72..d0b21575b3 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,15 @@ +2011-05-17 Tomohiro Kashiwada + + PR ld/12759 + * emultempl/rxelf.em (ignore_lma): New variable. + (rx_elf_create_output_section_statements): Pass the setiing of + ignore_lma to bfd_elf32_rx_set_target_flags. + (OPTION_IGNORE_LMA): Define. + (OPTION_NO_IGNORE_LMA): Define. + (PARSE_AND_LIST_LONGOPTS): Add ignore lma. + (PARSE_AND_LIST_OPTIONS): Add ignore lma. + (PARSE_AND_LIST_ARGS_CASES): Add ignore lma. + 2011-05-17 Alan Modra PR ld/12760 diff --git a/ld/emultempl/rxelf.em b/ld/emultempl/rxelf.em index c4a2dacc3a..159a649f40 100644 --- a/ld/emultempl/rxelf.em +++ b/ld/emultempl/rxelf.em @@ -1,5 +1,5 @@ # This shell script emits a C file. -*- C -*- -# Copyright 2009 Free Software Foundation, Inc. +# Copyright 2009, 2011 Free Software Foundation, Inc. # # This file is part of the GNU Binutils. # @@ -26,15 +26,16 @@ test -z "$TARGET2_TYPE" && TARGET2_TYPE="rel" fragment <