PR ld/12759
authorNick Clifton <nickc@redhat.com>
Tue, 17 May 2011 16:02:31 +0000 (16:02 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 17 May 2011 16:02:31 +0000 (16:02 +0000)
* 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
bfd/elf32-rx.c
ld/ChangeLog
ld/emultempl/rxelf.em

index a5355b5..0e8bdf1 100644 (file)
@@ -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
index 55f2eaa..5691ced 100644 (file)
@@ -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;
 }
index 7b782c8..d0b2157 100644 (file)
@@ -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
index c4a2dac..159a649 100644 (file)
@@ -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