* 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.
+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
}
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
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;
}
+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
# 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.
#
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
#
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