2008-07-30 10:28:31 +00:00
|
|
|
# Test the assigment of sections to segments.
|
|
|
|
#
|
bfd:
* Makefile.am (ALL_MACHINES): Add cpu-tic6x.lo.
(ALL_MACHINES_CFILES): Add cpu-tic6x.c.
(BFD32_BACKENDS): Add elf32-tic6x.lo.
(BFD32_BACKENDS_CFILES): Add elf32-tic6x.c.
* Makefile.in: Regenerate.
* archures.c (bfd_arch_tic6x, bfd_tic6x_arch): New.
(bfd_archures_list): Update.
* config.bfd (tic6x-*-elf): New.
* configure.in (bfd_elf32_tic6x_be_vec, bfd_elf32_tic6x_le_vec):
New.
* configure: Regenerate.
* cpu-tic6x.c, elf32-tic6x.c: New.
* reloc.c (BFD_RELOC_C6000_PCR_S21, BFD_RELOC_C6000_PCR_S12,
BFD_RELOC_C6000_PCR_S10, BFD_RELOC_C6000_PCR_S7,
BFD_RELOC_C6000_ABS_S16, BFD_RELOC_C6000_ABS_L16,
BFD_RELOC_C6000_ABS_H16, BFD_RELOC_C6000_SBR_U15_B,
BFD_RELOC_C6000_SBR_U15_H, BFD_RELOC_C6000_SBR_U15_W,
BFD_RELOC_C6000_SBR_S16, BFD_RELOC_C6000_SBR_L16_B,
BFD_RELOC_C6000_SBR_L16_H, BFD_RELOC_C6000_SBR_L16_W,
BFD_RELOC_C6000_SBR_H16_B, BFD_RELOC_C6000_SBR_H16_H,
BFD_RELOC_C6000_SBR_H16_W, BFD_RELOC_C6000_SBR_GOT_U15_W,
BFD_RELOC_C6000_SBR_GOT_L16_W, BFD_RELOC_C6000_SBR_GOT_H16_W,
BFD_RELOC_C6000_DSBT_INDEX, BFD_RELOC_C6000_PREL31,
BFD_RELOC_C6000_COPY, BFD_RELOC_C6000_ALIGN,
BFD_RELOC_C6000_FPHEAD, BFD_RELOC_C6000_NOCMP): New.
* targets.c (bfd_elf32_tic6x_be_vec, bfd_elf32_tic6x_le_vec): New.
(_bfd_target_vector): Update.
* bfd-in2.h, libbfd.h: Regenerate.
binutils:
* MAINTAINERS: Add self as TI C6X maintainer.
* NEWS: Add news entry for TI C6X support.
* readelf.c: Include elf/tic6x.h.
(guess_is_rela): Handle EM_TI_C6000.
(dump_relocations): Likewise.
(get_tic6x_dynamic_type): New.
(get_dynamic_type): Call it.
(get_machine_flags): Handle EF_C6000_REL.
(get_osabi_name): Handle machine-specific values only for relevant
machines. Handle C6X values.
(get_tic6x_segment_type): New.
(get_segment_type): Call it.
(get_tic6x_section_type_name): New.
(get_section_type_name): Call it.
(is_32bit_abs_reloc, is_16bit_abs_reloc, is_none_reloc): Handle
EM_TI_C6000.
gas:
* Makefile.am (TARGET_CPU_CFILES): Add config/tc-tic6x.c.
(TARGET_CPU_HFILES): Add config/tc-tic6x.h.
* Makefile.in: Regenerate.
* NEWS: Add news entry for TI C6X support.
* app.c (do_scrub_chars): Handle "||^" for TI C6X. Handle
TC_PREDICATE_START_CHAR and TC_PREDICATE_END_CHAR. Keep spaces in
operands if TC_KEEP_OPERAND_SPACES.
* configure.tgt (tic6x-*-*): New.
* config/tc-ia64.h (TC_PREDICATE_START_CHAR,
TC_PREDICATE_END_CHAR): Define.
* config/tc-tic6x.c, config/tc-tic6x.h: New.
* doc/Makefile.am (CPU_DOCS): Add c-tic6x.texi.
* doc/Makefile.in: Regenerate.
* doc/all.texi (TIC6X): Define.
* doc/as.texinfo: Add TI C6X documentation. Include c-tic6x.texi.
* doc/c-tic6x.texi: New.
gas/testsuite:
* gas/tic6x: New directory and testcases.
include:
* dis-asm.h (print_insn_tic6x): Declare.
include/elf:
* common.h (ELFOSABI_C6000_ELFABI, ELFOSABI_C6000_LINUX): Define.
* tic6x.h: New.
include/opcode:
* tic6x-control-registers.h, tic6x-insn-formats.h,
tic6x-opcode-table.h, tic6x.h: New.
ld:
* Makefile.am (ALL_EMULATIONS): Add eelf32_tic6x_be.o and
eelf32_tic6x_le.o.
(eelf32_tic6x_be.c, eelf32_tic6x_le.c): New.
* NEWS: Add news entry for TI C6X support.
* configure.tgt (tic6x-*-*): New.
* emulparams/elf32_tic6x_be.sh, emulparams/elf32_tic6x_le.sh: New.
ld/testsuite:
* ld-elf/flags1.d, ld-elf/merge.d: XFAIL for tic6x-*-*.
* ld-elf/sec-to-seg.exp: Set B_test_same_seg to 0 for tic6x-*-*.
* ld-tic6x: New directory and testcases.
opcodes:
* Makefile.am (TARGET_LIBOPCODES_CFILES): Add tic6x-dis.c.
* Makefile.in: Regenerate.
* configure.in (bfd_tic6x_arch): New.
* configure: Regenerate.
* disassemble.c (ARCH_tic6x): Define if ARCH_all.
(disassembler): Handle TI C6X.
* tic6x-dis.c: New.
2010-03-25 21:12:36 +00:00
|
|
|
# Copyright 2008, 2010 Free Software Foundation, Inc.
|
2008-07-30 10:28:31 +00:00
|
|
|
# Contributed by Red Hat.
|
|
|
|
#
|
|
|
|
# This file is part of the GNU Binutils.
|
|
|
|
#
|
|
|
|
# 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 3 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.
|
|
|
|
|
|
|
|
set testname "assignment of ELF sections to segments"
|
|
|
|
|
|
|
|
if {! [is_elf_format] } {
|
|
|
|
unsupported $testname
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if { ! [ld_assemble $as $srcdir/$subdir/sec-to-seg1.s tmpdir/sec-to-seg1.o]
|
|
|
|
|| ! [ld_assemble $as $srcdir/$subdir/sec-to-seg2.s tmpdir/sec-to-seg2.o]} then {
|
|
|
|
unresolved $testname
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
proc sec_to_seg_test { testname scriptname same_seg } {
|
|
|
|
global srcdir
|
|
|
|
global subdir
|
|
|
|
global ld
|
|
|
|
global exec_output
|
|
|
|
global READELF
|
|
|
|
|
|
|
|
if {! [ld_simple_link $ld tmpdir/sec-to-seg "-T $srcdir/$subdir/$scriptname tmpdir/sec-to-seg1.o tmpdir/sec-to-seg2.o"] } then {
|
|
|
|
fail $testname
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
send_log "$READELF --program-headers --section-headers tmpdir/sec-to-seg\n"
|
|
|
|
set exec_output [run_host_cmd "$READELF" "--program-headers --section-headers tmpdir/sec-to-seg"]
|
|
|
|
|
|
|
|
if { $same_seg == 1 } {
|
|
|
|
if {! [regexp ".*.sec1 .sec2" $exec_output] } {
|
|
|
|
fail $testname
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if { [regexp ".*.sec1 .sec2" $exec_output] } {
|
|
|
|
fail $testname
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pass $testname
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
|
|
|
# Assuming a pagesize of 0x1000 then:
|
|
|
|
#
|
|
|
|
# Test Sec1 End Sec 2 Start Expected Result
|
|
|
|
# ---- -------- ----------- ---------------
|
|
|
|
# A 00001042 00001043 Both sections on same page: assign to same segment.
|
|
|
|
# B 00001042 00002044 Sections on adjacent pages: assign to same segment.
|
|
|
|
# C 00001042 00003044 Sections on disjoint pages: assign to separate segments.
|
|
|
|
|
|
|
|
# These targets have a pagesize of 1, so they will always end up
|
|
|
|
# placing the two sections in separate segments in the B test.
|
|
|
|
if { [istarget avr-*-*]
|
|
|
|
|| [istarget cr16-*-*]
|
|
|
|
|| [istarget crx-*-*]
|
|
|
|
|| [istarget dlx-*-*]
|
|
|
|
|| [istarget h8300-*-*]
|
2010-10-28 06:27:55 +00:00
|
|
|
|| [istarget i960-*-*]
|
2008-07-30 10:28:31 +00:00
|
|
|
|| [istarget ip2k-*-*]
|
|
|
|
|| [istarget m32r-*-*]
|
|
|
|
|| [istarget m88k-*-*]
|
2010-10-28 06:27:55 +00:00
|
|
|
|| [istarget microblaze-*-*]
|
|
|
|
|| [istarget moxie-*-*]
|
2008-07-30 10:28:31 +00:00
|
|
|
|| [istarget msp430-*-*]
|
2010-10-28 06:27:55 +00:00
|
|
|
|| [istarget mt-*-*]
|
2008-07-30 10:28:31 +00:00
|
|
|
} {
|
|
|
|
set B_test_same_seg 0
|
|
|
|
} else {
|
|
|
|
set B_test_same_seg 1
|
|
|
|
}
|
|
|
|
|
|
|
|
sec_to_seg_test "assignment of ELF sections to segments (same page)" "sec-to-seg-script-same-page.t" 1
|
|
|
|
sec_to_seg_test "assignment of ELF sections to segments (adjacent pages)" "sec-to-seg-script-adjoining-pages.t" $B_test_same_seg
|
|
|
|
sec_to_seg_test "assignment of ELF sections to segments (disjoint pages)" "sec-to-seg-script-disjoint-pages.t" 0
|
|
|
|
|
|
|
|
|
|
|
|
# FIXME: Add more tests to check other rules of section to segment assignment.
|