summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2011-05-17 16:02:29 +0000
committerNick Clifton <nickc@redhat.com>2011-05-17 16:02:29 +0000
commit2cf5d842706a6dcb51bee5982db0d4c46343c2a9 (patch)
tree9828962a7c5f48958441fca2c31bef0095391215
parentafba6dabf7747b9c4b26644d596cc99bffcd5860 (diff)
downloadbinutils-redhat-2cf5d842706a6dcb51bee5982db0d4c46343c2a9.tar.gz
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.
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/elf32-rx.c37
-rw-r--r--ld/ChangeLog12
-rw-r--r--ld/emultempl/rxelf.em24
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 <kikairoya@gmail.com>
+
+ 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 <amodra@gmail.com>
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 <kikairoya@gmail.com>
+
+ 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 <amodra@gmail.com>
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 <<EOF
static bfd_boolean no_flag_mismatch_warnings = FALSE;
+static bfd_boolean ignore_lma = TRUE;
/* 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
rx_elf_create_output_section_statements (void)
{
- extern void bfd_elf32_rx_set_target_flags (bfd_boolean);
+ extern void bfd_elf32_rx_set_target_flags (bfd_boolean, bfd_boolean);
- bfd_elf32_rx_set_target_flags (no_flag_mismatch_warnings);
+ bfd_elf32_rx_set_target_flags (no_flag_mismatch_warnings, ignore_lma);
}
EOF
@@ -44,21 +45,36 @@ EOF
#
PARSE_AND_LIST_PROLOGUE='
#define OPTION_NO_FLAG_MISMATCH_WARNINGS 301
+#define OPTION_IGNORE_LMA 302
+#define OPTION_NO_IGNORE_LMA 303
'
PARSE_AND_LIST_LONGOPTS='
{ "no-flag-mismatch-warnings", no_argument, NULL, OPTION_NO_FLAG_MISMATCH_WARNINGS},
+ { "ignore-lma", no_argument, NULL, OPTION_IGNORE_LMA},
+ { "no-ignore-lma", no_argument, NULL, OPTION_NO_IGNORE_LMA},
'
PARSE_AND_LIST_OPTIONS='
- fprintf (file, _(" --no-flag-mismatch-warnings Don'\''t warn about objects with incompatible"
+ fprintf (file, _(" --no-flag-mismatch-warnings Don'\''t warn about objects with incompatible\n"
" endian or dsp settings\n"));
+ fprintf (file, _(" --ignore-lma Ignore segment LMAs [default]\n"
+ " (for Renesas Tools compatibility)\n"));
+ fprintf (file, _(" --no-ignore-lma Don'\''t ignore segment LMAs\n"));
'
PARSE_AND_LIST_ARGS_CASES='
case OPTION_NO_FLAG_MISMATCH_WARNINGS:
no_flag_mismatch_warnings = TRUE;
break;
+
+ case OPTION_IGNORE_LMA:
+ ignore_lma = TRUE;
+ break;
+
+ case OPTION_NO_IGNORE_LMA:
+ ignore_lma = FALSE;
+ break;
'
LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=rx_elf_create_output_section_statements