From 8c6845782707f98080fa789050c9d70afadb1842 Mon Sep 17 00:00:00 2001 From: Jie Zhang Date: Fri, 11 Jul 2008 19:24:39 +0000 Subject: bfd/ * elf.c (_bfd_elf_map_sections_to_segments): Don't put executable sections into the same segment with other read only sections if --sep-code. * elf32-bfin.c (elf32_bfin_code_in_l1): New variable. (elf32_bfin_data_in_l1): New variable. (elf32_bfin_final_write_processing): New. (elf32_bfin_special_sections[]): New. (elf_backend_final_write_processing): Define. (elf_backend_special_sections): Define. binutils/ * readelf.c (get_machine_flags): Deal with Blackfin specific flags. include/ * bfdlink.h (struct bfd_link_info): Add sep_code member variable. * elf/bfin.h (EF_BFIN_CODE_IN_L1): Define. (EF_BFIN_DATA_IN_L1): Define. ld/ * Makefile.am (eelf32bfin.c): Depend on bfin.em. (eelf32bfinfd.c): Likewise. * Makefile.in: Regenerate. * gen-doc.texi: Set Blackfin. * ld.texinfo: Document --sep-code and Blackfin specific options. * ldmain.c (main): Initialize link_info.sep_code. * lexsup.c (enum option_values): Add OPTION_SEP_CODE. (ld_options[]): Add --sep-code. (parse_args): Deal with --sep-code. * emulparams/bfin.sh (EXTRA_EM_FILE): Define. * emulparams/elf32bfinfd.sh (OTHER_SECTIONS): Define. * emultempl/bfin.em: New file. --- ld/ChangeLog | 16 +++++++++++ ld/Makefile.am | 4 +-- ld/Makefile.in | 4 +-- ld/emulparams/bfin.sh | 1 + ld/emulparams/elf32bfinfd.sh | 21 +++++++++++++++ ld/emultempl/bfin.em | 64 ++++++++++++++++++++++++++++++++++++++++++++ ld/gen-doc.texi | 1 + ld/ld.texinfo | 36 +++++++++++++++++++++++++ ld/ldmain.c | 1 + ld/lexsup.c | 6 +++++ 10 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 ld/emultempl/bfin.em (limited to 'ld') diff --git a/ld/ChangeLog b/ld/ChangeLog index 8e6d62a..91bae67 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,19 @@ +2008-07-12 Jie Zhang + + * Makefile.am (eelf32bfin.c): Depend on bfin.em. + (eelf32bfinfd.c): Likewise. + * Makefile.in: Regenerate. + * gen-doc.texi: Set Blackfin. + * ld.texinfo: Document --sep-code and Blackfin specific + options. + * ldmain.c (main): Initialize link_info.sep_code. + * lexsup.c (enum option_values): Add OPTION_SEP_CODE. + (ld_options[]): Add --sep-code. + (parse_args): Deal with --sep-code. + * emulparams/bfin.sh (EXTRA_EM_FILE): Define. + * emulparams/elf32bfinfd.sh (OTHER_SECTIONS): Define. + * emultempl/bfin.em: New file. + 2008-07-09 Danny Smith *pe-dll.c (autofilter_symbolprefixlist): Excude all symbols diff --git a/ld/Makefile.am b/ld/Makefile.am index 80c53d8..fe8edf0 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -653,11 +653,11 @@ edelta68.c: $(srcdir)/emulparams/delta68.sh \ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/delta68.sc ${GEN_DEPENDS} ${GENSCRIPTS} delta68 "$(tdir_delta68)" eelf32bfin.c: $(srcdir)/emulparams/bfin.sh \ - $(ELF_DEPS) \ + $(ELF_DEPS) $(srcdir)/emultempl/bfin.em \ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32bfin "$(tdir_elf32bfin)" bfin eelf32bfinfd.c: $(srcdir)/emulparams/elf32bfinfd.sh $(srcdir)/emulparams/bfin.sh \ - $(ELF_DEPS) \ + $(ELF_DEPS) $(srcdir)/emultempl/bfin.em \ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32bfinfd "$(tdir_elf32bfinfd)" elf32bfinfd eelf32_dlx.c: $(srcdir)/emulparams/elf32_dlx.sh \ diff --git a/ld/Makefile.in b/ld/Makefile.in index 94e5d68..06b4846 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -1482,11 +1482,11 @@ edelta68.c: $(srcdir)/emulparams/delta68.sh \ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/delta68.sc ${GEN_DEPENDS} ${GENSCRIPTS} delta68 "$(tdir_delta68)" eelf32bfin.c: $(srcdir)/emulparams/bfin.sh \ - $(ELF_DEPS) \ + $(ELF_DEPS) $(srcdir)/emultempl/bfin.em \ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32bfin "$(tdir_elf32bfin)" bfin eelf32bfinfd.c: $(srcdir)/emulparams/elf32bfinfd.sh $(srcdir)/emulparams/bfin.sh \ - $(ELF_DEPS) \ + $(ELF_DEPS) $(srcdir)/emultempl/bfin.em \ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32bfinfd "$(tdir_elf32bfinfd)" elf32bfinfd eelf32_dlx.c: $(srcdir)/emulparams/elf32_dlx.sh \ diff --git a/ld/emulparams/bfin.sh b/ld/emulparams/bfin.sh index 1c764e8..f33baf5 100755 --- a/ld/emulparams/bfin.sh +++ b/ld/emulparams/bfin.sh @@ -10,3 +10,4 @@ TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes EMBEDDED=yes USER_LABEL_PREFIX=_ +EXTRA_EM_FILE=bfin diff --git a/ld/emulparams/elf32bfinfd.sh b/ld/emulparams/elf32bfinfd.sh index 19ec748..588a53f 100644 --- a/ld/emulparams/elf32bfinfd.sh +++ b/ld/emulparams/elf32bfinfd.sh @@ -14,3 +14,24 @@ OTHER_READONLY_SECTIONS=" ${RELOCATING+__ROFIXUP_END__ = .;} } " +# 0xff700000, 0xff800000, 0xff900000 and 0xffa00000 are also used in +# Dynamic linker and linux kernel. They need to be keep synchronized. +OTHER_SECTIONS=" + .l1.data 0xff700000 : + { + *(.l1.data) + } + .l1.data.A 0xff800000 : + { + *(.l1.data.A) + } + .l1.data.B 0xff900000 : + { + *(.l1.data.B) + } + .l1.text 0xffa00000 : + { + *(.l1.text) + } +" +EXTRA_EM_FILE=bfin diff --git a/ld/emultempl/bfin.em b/ld/emultempl/bfin.em new file mode 100644 index 0000000..326537d --- /dev/null +++ b/ld/emultempl/bfin.em @@ -0,0 +1,64 @@ +# This shell script emits a C file. -*- C -*- +# Copyright 2006 Free Software Foundation, Inc. +# +# This file is part of GLD, the Gnu Linker. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. +# + +# This file is sourced from elf32.em, and defines extra bfin-elf +# specific routines. +# +cat >>e${EMULATION_NAME}.c <