* elf32-arm.c (elf32_arm_stub_long_branch_arm_nacl): New variable.

(elf32_arm_stub_long_branch_arm_nacl_pic): New variable.
	(arm_build_one_stub): Increase MAXRELOCS to 3.
	(arm_type_of_stub): Use them if GLOBALS->nacl_p.
	(struct elf32_arm_link_hash_table): Give add_stub_section member's
	pointee type a third argument.
	(elf32_arm_create_or_find_stub_sec): Update caller.
	(elf32_arm_size_stubs): Update argument type.
	* bfd-in.h (elf32_arm_size_stubs): Update decl.
	* bfd-in2.h: Regenerate.
	* libbfd.h: Regenerate.

	* emultempl/armelf.em (elf32_arm_add_stub_section): Take third
	argument ALIGNMENT_POWER, use it instead of constant 3.

	* ld-arm/farcall-arm-nacl.d: New file.
	* ld-arm/farcall-arm-nacl-pic.d: New file.
	* ld-arm/farcall-data-nacl.d: New file.
	* ld-arm/arm-elf.exp (armeabitests_common): Add extra element to
	"action" lists for those cases to use a different dump file for NaCl
	targets.
	Massage $armeabitests_common to drop the extra element or the one
	before it, depending on [istarget "arm*-*-nacl*"].

	* ld-arm/arm-elf.exp (armelftests_common): Move all "Cortex-A8
	erratum fix", Thumb-only and interworking cases to ...
	(armelftests_nonacl): ... here.
	(armeabitests_common): Move all "erratum 760522 fix", Thumb-only
	and interworking cases to ...
	(armeabitests_nonacl): ... here.
This commit is contained in:
Nick Clifton 2013-07-18 11:24:11 +00:00
parent 9f758fdc22
commit 7a89b94e91
11 changed files with 407 additions and 242 deletions

View file

@ -1,3 +1,17 @@
2013-07-18 Roland McGrath <mcgrathr@google.com>
* elf32-arm.c (elf32_arm_stub_long_branch_arm_nacl): New variable.
(elf32_arm_stub_long_branch_arm_nacl_pic): New variable.
(arm_build_one_stub): Increase MAXRELOCS to 3.
(arm_type_of_stub): Use them if GLOBALS->nacl_p.
(struct elf32_arm_link_hash_table): Give add_stub_section member's
pointee type a third argument.
(elf32_arm_create_or_find_stub_sec): Update caller.
(elf32_arm_size_stubs): Update argument type.
* bfd-in.h (elf32_arm_size_stubs): Update decl.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
2013-07-15 Maciej W. Rozycki <macro@codesourcery.com>
* elfxx-mips.c (mips_elf_merge_obj_attributes): Replace hardcoded

View file

@ -1,8 +1,6 @@
/* Main header file for the bfd library -- portable access to object files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
2012 Free Software Foundation, Inc.
Copyright 1990-2013 2013 Free Software Foundation, Inc.
Contributed by Cygnus Support.
@ -911,7 +909,8 @@ extern void elf32_arm_next_input_section
(struct bfd_link_info *, struct bfd_section *);
extern bfd_boolean elf32_arm_size_stubs
(bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
struct bfd_section * (*) (const char *, struct bfd_section *), void (*) (void));
struct bfd_section * (*) (const char *, struct bfd_section *, unsigned int),
void (*) (void));
extern bfd_boolean elf32_arm_build_stubs
(struct bfd_link_info *);
@ -1009,6 +1008,5 @@ struct coff_comdat_info
long symbol;
};
extern struct coff_comdat_info *bfd_coff_get_comdat_section
extern struct coff_comdat_info * bfd_coff_get_comdat_section
(bfd *, struct bfd_section *);

View file

@ -7,9 +7,7 @@
/* Main header file for the bfd library -- portable access to object files.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
2012 Free Software Foundation, Inc.
Copyright 1990-2013 2013 Free Software Foundation, Inc.
Contributed by Cygnus Support.
@ -918,7 +916,8 @@ extern void elf32_arm_next_input_section
(struct bfd_link_info *, struct bfd_section *);
extern bfd_boolean elf32_arm_size_stubs
(bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
struct bfd_section * (*) (const char *, struct bfd_section *), void (*) (void));
struct bfd_section * (*) (const char *, struct bfd_section *, unsigned int),
void (*) (void));
extern bfd_boolean elf32_arm_build_stubs
(struct bfd_link_info *);
@ -1016,9 +1015,8 @@ struct coff_comdat_info
long symbol;
};
extern struct coff_comdat_info *bfd_coff_get_comdat_section
extern struct coff_comdat_info * bfd_coff_get_comdat_section
(bfd *, struct bfd_section *);
/* Extracted from init.c. */
void bfd_init (void);

View file

@ -2415,6 +2415,33 @@ static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_tls_pic[] =
DATA_WORD (0, R_ARM_REL32, -4), /* dcd R_ARM_REL32(X) */
};
/* NaCl ARM -> ARM long branch stub. */
static const insn_sequence elf32_arm_stub_long_branch_arm_nacl[] =
{
ARM_INSN (0xe59fc00c), /* ldr ip, [pc, #12] */
ARM_INSN (0xe3ccc13f), /* bic ip, ip, #0xc000000f */
ARM_INSN (0xe12fff1c), /* bx ip */
ARM_INSN (0xe320f000), /* nop */
ARM_INSN (0xe125be70), /* bkpt 0x5be0 */
DATA_WORD (0, R_ARM_ABS32, 0), /* dcd R_ARM_ABS32(X) */
DATA_WORD (0, R_ARM_NONE, 0), /* .word 0 */
DATA_WORD (0, R_ARM_NONE, 0), /* .word 0 */
};
/* NaCl ARM -> ARM long branch stub, PIC. */
static const insn_sequence elf32_arm_stub_long_branch_arm_nacl_pic[] =
{
ARM_INSN (0xe59fc00c), /* ldr ip, [pc, #12] */
ARM_INSN (0xe08cc00f), /* add ip, ip, pc */
ARM_INSN (0xe3ccc13f), /* bic ip, ip, #0xc000000f */
ARM_INSN (0xe12fff1c), /* bx ip */
ARM_INSN (0xe125be70), /* bkpt 0x5be0 */
DATA_WORD (0, R_ARM_REL32, 8), /* dcd R_ARM_REL32(X+8) */
DATA_WORD (0, R_ARM_NONE, 0), /* .word 0 */
DATA_WORD (0, R_ARM_NONE, 0), /* .word 0 */
};
/* Cortex-A8 erratum-workaround stubs. */
/* Stub used for conditional branches (which may be beyond +/-1MB away, so we
@ -2491,6 +2518,8 @@ static const insn_sequence elf32_arm_stub_a8_veneer_blx[] =
DEF_STUB(long_branch_thumb_only_pic) \
DEF_STUB(long_branch_any_tls_pic) \
DEF_STUB(long_branch_v4t_thumb_tls_pic) \
DEF_STUB(long_branch_arm_nacl) \
DEF_STUB(long_branch_arm_nacl_pic) \
DEF_STUB(a8_veneer_b_cond) \
DEF_STUB(a8_veneer_b) \
DEF_STUB(a8_veneer_bl) \
@ -2983,7 +3012,7 @@ struct elf32_arm_link_hash_table
bfd *stub_bfd;
/* Linker call-backs. */
asection * (*add_stub_section) (const char *, asection *);
asection * (*add_stub_section) (const char *, asection *, unsigned int);
void (*layout_sections_again) (void);
/* Array to keep track of which stub sections have been created, and
@ -3772,9 +3801,13 @@ arm_type_of_stub (struct bfd_link_info *info,
? (r_type == R_ARM_TLS_CALL
/* TLS PIC Stub */
? arm_stub_long_branch_any_tls_pic
: arm_stub_long_branch_any_arm_pic)
: (globals->nacl_p
? arm_stub_long_branch_arm_nacl_pic
: arm_stub_long_branch_any_arm_pic))
/* non-PIC stubs. */
: arm_stub_long_branch_any_any;
: (globals->nacl_p
? arm_stub_long_branch_arm_nacl
: arm_stub_long_branch_any_any);
}
}
}
@ -3910,7 +3943,8 @@ elf32_arm_create_or_find_stub_sec (asection **link_sec_p, asection *section,
memcpy (s_name, link_sec->name, namelen);
memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
stub_sec = (*htab->add_stub_section) (s_name, link_sec);
stub_sec = (*htab->add_stub_section) (s_name, link_sec,
htab->nacl_p ? 4 : 3);
if (stub_sec == NULL)
return NULL;
htab->stub_group[link_sec->id].stub_sec = stub_sec;
@ -4043,6 +4077,10 @@ arm_stub_required_alignment (enum elf32_arm_stub_type stub_type)
case arm_stub_a8_veneer_blx:
return 4;
case arm_stub_long_branch_arm_nacl:
case arm_stub_long_branch_arm_nacl_pic:
return 16;
default:
abort (); /* Should be unreachable. */
}
@ -4052,7 +4090,7 @@ static bfd_boolean
arm_build_one_stub (struct bfd_hash_entry *gen_entry,
void * in_arg)
{
#define MAXRELOCS 2
#define MAXRELOCS 3
struct elf32_arm_stub_hash_entry *stub_entry;
struct elf32_arm_link_hash_table *globals;
struct bfd_link_info *info;
@ -4864,7 +4902,8 @@ elf32_arm_size_stubs (bfd *output_bfd,
bfd *stub_bfd,
struct bfd_link_info *info,
bfd_signed_vma group_size,
asection * (*add_stub_section) (const char *, asection *),
asection * (*add_stub_section) (const char *, asection *,
unsigned int),
void (*layout_sections_again) (void))
{
bfd_size_type stub_group_size;

View file

@ -1,3 +1,8 @@
2013-07-18 Roland McGrath <mcgrathr@google.com>
* emultempl/armelf.em (elf32_arm_add_stub_section): Take third
argument ALIGNMENT_POWER, use it instead of constant 3.
2013-07-08 Jeff Law <law@redhat.com>
* scripttempl/elf.sc: Handle function names and other text after

View file

@ -1,7 +1,5 @@
# This shell script emits a C file. -*- C -*-
# Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
# 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
# Free Software Foundation, Inc.
# Copyright 1991-2013 Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
@ -184,8 +182,9 @@ hook_in_stub (struct hook_stub_info *info, lang_statement_union_type **lp)
immediately after INPUT_SECTION. */
static asection *
elf32_arm_add_stub_section (const char *stub_sec_name,
asection *input_section)
elf32_arm_add_stub_section (const char * stub_sec_name,
asection * input_section,
unsigned int alignment_power)
{
asection *stub_sec;
flagword flags;
@ -201,7 +200,7 @@ elf32_arm_add_stub_section (const char *stub_sec_name,
if (stub_sec == NULL)
goto err_ret;
bfd_set_section_alignment (stub_file->the_bfd, stub_sec, 3);
bfd_set_section_alignment (stub_file->the_bfd, stub_sec, alignment_power);
output_section = input_section->output_section;
secname = bfd_get_section_name (output_section->owner, output_section);

View file

@ -1,3 +1,21 @@
2013-07-18 Roland McGrath <mcgrathr@google.com>
* ld-arm/farcall-arm-nacl.d: New file.
* ld-arm/farcall-arm-nacl-pic.d: New file.
* ld-arm/farcall-data-nacl.d: New file.
* ld-arm/arm-elf.exp (armeabitests_common): Add extra element to
"action" lists for those cases to use a different dump file for NaCl
targets.
Massage $armeabitests_common to drop the extra element or the one
before it, depending on [istarget "arm*-*-nacl*"].
* ld-arm/arm-elf.exp (armelftests_common): Move all "Cortex-A8
erratum fix", Thumb-only and interworking cases to ...
(armelftests_nonacl): ... here.
(armeabitests_common): Move all "erratum 760522 fix", Thumb-only
and interworking cases to ...
(armeabitests_nonacl): ... here.
2013-07-12 Maciej W. Rozycki <macro@codesourcery.com>
* ld-mips-elf/nan-2008.d: New test.

View file

@ -70,9 +70,6 @@ set armelftests_common {
{"Group relocations" "-Ttext 0x8000 --section-start zero=0x0 --section-start alpha=0xeef0 --section-start beta=0xffeef0" "" "" {group-relocs.s}
{{objdump -dr group-relocs.d}}
"group-relocs"}
{"Thumb-1 BL" "-Ttext 0x1000 --section-start .foo=0x401000" "" "" {thumb1-bl.s}
{{objdump -dr thumb1-bl.d}}
"thumb1-bl"}
{"Indirect cross-library function reference (set-up)"
"-shared" "" "" {arm-lib-plt-2a.s}
{}
@ -144,12 +141,6 @@ set armelftests_common {
{"TLS local PIC symbol static link" "-T arm.ld" "" "" {tls-local-static.s}
{{objdump -fdw tls-local-static.d}}
"tls-local-static"}
{"Thumb entry point" "-T arm.ld" "" "" {thumb-entry.s}
{{readelf -h thumb-entry.d}}
"thumb-entry"}
{"thumb-rel32" "-static -T arm.ld" "" "" {thumb-rel32.s}
{{objdump -s thumb-rel32.d}}
"thumb-rel32"}
{"MOVW/MOVT" "-static -T arm.ld" "" "" {arm-movwt.s}
{{objdump -dw arm-movwt.d}}
"arm-movwt"}
@ -168,6 +159,133 @@ set armelftests_common {
"-EL --vfp11-denorm-fix=scalar -Ttext=0x8000" "" "-EL -mfpu=vfpxd" {vfp11-fix-none.s}
{{objdump -dr vfp11-fix-none.d}}
"vfp11-fix-none"}
{"Unwinding and -gc-sections" "-gc-sections" "" "" {gc-unwind.s}
{{objdump -sj.data gc-unwind.d}}
"gc-unwind"}
{"script-type" "-static -T script-type.ld" "" "" {script-type.s}
{{readelf -s script-type.sym}}
"script-type"}
{"callweak" "-static -T arm.ld" "" "" {callweak.s}
{{objdump -dr callweak.d}}
"callweak"}
{"callweak-2" "-static -T arm.ld" "" "" {callweak-2.s}
{{objdump -dr callweak-2.d}}
"callweak-2"}
{"Relocation boundaries" "-defsym x=0 -defsym y=0 -defsym _start=0" "" "" {reloc-boundaries.s}
{{objdump -s reloc-boundaries.d}}
"reloc-boundaries"}
{"Data only mapping symbols" "-T data-only-map.ld -Map map" "" "" {data-only-map.s}
{{objdump -dr data-only-map.d}}
"data-only-map"}
{"Data only mapping symbols for merged sections" "-T rodata-merge-map.ld" "" "" {rodata-merge-map1.s rodata-merge-map2.s rodata-merge-map3.s}
{{readelf -s rodata-merge-map.sym}}
"rodata-merge-map"}
{"GOT relocations in executables (setup)" "-shared" ""
"" {exec-got-1a.s}
{}
"exec-got-1.so"}
{"GOT relocations in executables" "tmpdir/exec-got-1.so" ""
"" {exec-got-1b.s}
{{readelf --relocs exec-got-1.d}}
"exec-got-1"}
{"abs call" "-T arm.ld" "" "" {abs-call-1.s}
{{objdump -d abs-call-1.d}}
"abs-call-1"}
{"Simple non-PIC shared library (no PLT check)" "-shared" "" "" {arm-lib.s}
{{objdump -Rw arm-lib.r}}
"arm-lib.so"}
{"EABI soft-float ET_EXEC ABI flag" "-T arm.ld" "" "-mfloat-abi=soft -meabi=5" {eabi-soft-float.s}
{{readelf -h eabi-soft-float.d}}
"eabi-soft-float"}
{"EABI hard-float ET_EXEC ABI flag" "-T arm.ld" "" "-mfloat-abi=hard -meabi=5" {eabi-hard-float.s}
{{readelf -h eabi-hard-float.d}}
"eabi-hard-float"}
{"EABI hard-float ET_DYN ABI flag" "-shared" "" "-mfloat-abi=hard -meabi=5" {eabi-hard-float.s}
{{readelf -h eabi-hard-float.d}}
"eabi-hard-float.so"}
{"EABI ABI flags wrong ABI version" "-T arm.ld" "" "-mfloat-abi=soft -meabi=4" {eabi-soft-float.s}
{{readelf -h eabi-soft-float-ABI4.d}}
"eabi-soft-float-no-flags"}
{"EABI ABI flags ld -r" "-r" "" "-mfloat-abi=soft -meabi=5" {eabi-soft-float.s}
{{readelf -h eabi-soft-float-r.d}}
"eabi-soft-float-r.o"}
}
set armelftests_nonacl {
{"Thumb-1 BL" "-Ttext 0x1000 --section-start .foo=0x401000" "" "" {thumb1-bl.s}
{{objdump -dr thumb1-bl.d}}
"thumb1-bl"}
{"Thumb entry point" "-T arm.ld" "" "" {thumb-entry.s}
{{readelf -h thumb-entry.d}}
"thumb-entry"}
{"thumb-rel32" "-static -T arm.ld" "" "" {thumb-rel32.s}
{{objdump -s thumb-rel32.d}}
"thumb-rel32"}
{"jump19" "-static -T arm.ld" "" "" {jump19.s}
{{objdump -dr jump19.d}}
"jump19"}
{"Thumb and -gc-sections" "-shared -T arm-dyn.ld" "" "" {gc-thumb-lib.s}
{}
"gc-thumb-lib.so"}
{"Thumb and -gc-sections" "-pie -T arm.ld -gc-sections tmpdir/gc-thumb-lib.so" "" "" {gc-thumb.s}
{{readelf --relocs gc-thumb.d}}
"gc-thumb"}
{"arm-pic-veneer" "-static -T arm.ld --pic-veneer" "" "" {arm-pic-veneer.s}
{{objdump -d arm-pic-veneer.d}}
"arm-pic-veneer"}
{"Simple non-PIC shared library" "-shared" "" "" {arm-lib.s}
{{objdump -fdw arm-lib.d} {objdump -Rw arm-lib.r}}
"arm-lib.so"}
{"Simple PIC shared library" "-shared" "" "" {arm-lib-plt32.s}
{{objdump -fdw arm-lib-plt32.d} {objdump -Rw arm-lib-plt32.r}}
"arm-lib-plt32.so"}
{"Simple dynamic application" "tmpdir/arm-lib.so" "" "" {arm-app.s}
{{objdump -fdw arm-app.d} {objdump -Rw arm-app.r}}
"arm-app"}
{"Simple static application without .rel.plt in linker script"
"-T arm-no-rel-plt.ld" "" "" {arm-static-app.s}
{{objdump -fdw arm-static-app.d} {objdump -rw arm-static-app.r}}
"arm-static-app"}
{"Simple dynamic application without .rel.plt in linker script"
"tmpdir/arm-lib.so -T arm-no-rel-plt.ld" "" "" {arm-app.s}
{{ld arm-no-rel-plt.out}}
"arm-app"}
{"Non-pcrel function reference" "tmpdir/arm-lib.so" "" "" {arm-app-abs32.s}
{{objdump -fdw arm-app-abs32.d} {objdump -Rw arm-app-abs32.r}}
"arm-app-abs32"}
{"Thumb shared library with ARM entry points" "-shared -T arm-lib.ld" "" "-mthumb-interwork"
{mixed-lib.s}
{{objdump -fdw armthumb-lib.d} {readelf -Ds armthumb-lib.sym}}
"armthumb-lib.so"}
{"Mixed ARM/Thumb shared library" "-shared -T arm-lib.ld -use-blx" "" ""
{mixed-lib.s}
{{objdump -fdw mixed-lib.d} {objdump -Rw mixed-lib.r}
{readelf -Ds mixed-lib.sym}}
"mixed-lib.so"}
{"Mixed ARM/Thumb dynamic application" "tmpdir/mixed-lib.so -T arm-dyn.ld" "" ""
{mixed-app.s}
{{objdump -fdw mixed-app.d} {objdump -Rw mixed-app.r}
{readelf -Ds mixed-app.sym}}
"mixed-app"}
{"Mixed ARM/Thumb arch5 dynamic application" "tmpdir/mixed-lib.so -T arm-dyn.ld --use-blx" "" ""
{mixed-app.s}
{{objdump -fdw mixed-app-v5.d} {objdump -Rw mixed-app.r}
{readelf -Ds mixed-app.sym}}
"mixed-app-v5"}
{"Using Thumb lib by another lib" "-shared tmpdir/mixed-lib.so" "" "" {use-thumb-lib.s}
{{readelf -Ds use-thumb-lib.sym}}
"use-thumb-lib.so"}
{"Preempt Thumb symbol" "tmpdir/mixed-lib.so -T arm-dyn.ld --use-blx" "" ""
{preempt-app.s}
{{readelf -Ds preempt-app.sym}}
"preempt-app"}
{"TLS gnu shared library inlined trampoline" "--no-fix-arm1176 -shared -T arm-dyn.ld" "" "" {tls-descseq.s}
{{objdump -fdw tls-descseq.d} {objdump -Rw tls-descseq.r}}
"tls-lib2inline.so"}
{"TLS shared library gdesc local" "--no-fix-arm1176 -shared -T arm-dyn.ld" "" "" {tls-lib-loc.s}
{{objdump -fdw tls-lib-loc.d} {objdump -Rw tls-lib-loc.r}}
"tls-lib-loc.so"}
{"Cortex-A8 erratum fix, b.w"
"-EL -Ttext=0x8f00 --fix-cortex-a8" "" "-EL" {cortex-a8-fix-b.s}
{{objdump -dr cortex-a8-fix-b.d}}
@ -226,123 +344,6 @@ set armelftests_common {
"-EL -Ttext=0x8f00 --fix-cortex-a8" "" "-EL" {cortex-a8-fix-blx-bcond.s}
{{objdump -dr cortex-a8-fix-blx-bcond.d}}
"cortex-a8-fix-blx-bcond"}
{"Unwinding and -gc-sections" "-gc-sections" "" "" {gc-unwind.s}
{{objdump -sj.data gc-unwind.d}}
"gc-unwind"}
{"Thumb and -gc-sections" "-shared -T arm-dyn.ld" "" "" {gc-thumb-lib.s}
{}
"gc-thumb-lib.so"}
{"Thumb and -gc-sections" "-pie -T arm.ld -gc-sections tmpdir/gc-thumb-lib.so" "" "" {gc-thumb.s}
{{readelf --relocs gc-thumb.d}}
"gc-thumb"}
{"arm-pic-veneer" "-static -T arm.ld --pic-veneer" "" "" {arm-pic-veneer.s}
{{objdump -d arm-pic-veneer.d}}
"arm-pic-veneer"}
{"jump19" "-static -T arm.ld" "" "" {jump19.s}
{{objdump -dr jump19.d}}
"jump19"}
{"script-type" "-static -T script-type.ld" "" "" {script-type.s}
{{readelf -s script-type.sym}}
"script-type"}
{"callweak" "-static -T arm.ld" "" "" {callweak.s}
{{objdump -dr callweak.d}}
"callweak"}
{"callweak-2" "-static -T arm.ld" "" "" {callweak-2.s}
{{objdump -dr callweak-2.d}}
"callweak-2"}
{"Relocation boundaries" "-defsym x=0 -defsym y=0 -defsym _start=0" "" "" {reloc-boundaries.s}
{{objdump -s reloc-boundaries.d}}
"reloc-boundaries"}
{"Data only mapping symbols" "-T data-only-map.ld -Map map" "" "" {data-only-map.s}
{{objdump -dr data-only-map.d}}
"data-only-map"}
{"Data only mapping symbols for merged sections" "-T rodata-merge-map.ld" "" "" {rodata-merge-map1.s rodata-merge-map2.s rodata-merge-map3.s}
{{readelf -s rodata-merge-map.sym}}
"rodata-merge-map"}
{"GOT relocations in executables (setup)" "-shared" ""
"" {exec-got-1a.s}
{}
"exec-got-1.so"}
{"GOT relocations in executables" "tmpdir/exec-got-1.so" ""
"" {exec-got-1b.s}
{{readelf --relocs exec-got-1.d}}
"exec-got-1"}
{"abs call" "-T arm.ld" "" "" {abs-call-1.s}
{{objdump -d abs-call-1.d}}
"abs-call-1"}
{"Simple non-PIC shared library (no PLT check)" "-shared" "" "" {arm-lib.s}
{{objdump -Rw arm-lib.r}}
"arm-lib.so"}
{"EABI soft-float ET_EXEC ABI flag" "-T arm.ld" "" "-mfloat-abi=soft -meabi=5" {eabi-soft-float.s}
{{readelf -h eabi-soft-float.d}}
"eabi-soft-float"}
{"EABI hard-float ET_EXEC ABI flag" "-T arm.ld" "" "-mfloat-abi=hard -meabi=5" {eabi-hard-float.s}
{{readelf -h eabi-hard-float.d}}
"eabi-hard-float"}
{"EABI hard-float ET_DYN ABI flag" "-shared" "" "-mfloat-abi=hard -meabi=5" {eabi-hard-float.s}
{{readelf -h eabi-hard-float.d}}
"eabi-hard-float.so"}
{"EABI ABI flags wrong ABI version" "-T arm.ld" "" "-mfloat-abi=soft -meabi=4" {eabi-soft-float.s}
{{readelf -h eabi-soft-float-ABI4.d}}
"eabi-soft-float-no-flags"}
{"EABI ABI flags ld -r" "-r" "" "-mfloat-abi=soft -meabi=5" {eabi-soft-float.s}
{{readelf -h eabi-soft-float-r.d}}
"eabi-soft-float-r.o"}
}
set armelftests_nonacl {
{"Simple non-PIC shared library" "-shared" "" "" {arm-lib.s}
{{objdump -fdw arm-lib.d} {objdump -Rw arm-lib.r}}
"arm-lib.so"}
{"Simple PIC shared library" "-shared" "" "" {arm-lib-plt32.s}
{{objdump -fdw arm-lib-plt32.d} {objdump -Rw arm-lib-plt32.r}}
"arm-lib-plt32.so"}
{"Simple dynamic application" "tmpdir/arm-lib.so" "" "" {arm-app.s}
{{objdump -fdw arm-app.d} {objdump -Rw arm-app.r}}
"arm-app"}
{"Simple static application without .rel.plt in linker script"
"-T arm-no-rel-plt.ld" "" "" {arm-static-app.s}
{{objdump -fdw arm-static-app.d} {objdump -rw arm-static-app.r}}
"arm-static-app"}
{"Simple dynamic application without .rel.plt in linker script"
"tmpdir/arm-lib.so -T arm-no-rel-plt.ld" "" "" {arm-app.s}
{{ld arm-no-rel-plt.out}}
"arm-app"}
{"Non-pcrel function reference" "tmpdir/arm-lib.so" "" "" {arm-app-abs32.s}
{{objdump -fdw arm-app-abs32.d} {objdump -Rw arm-app-abs32.r}}
"arm-app-abs32"}
{"Thumb shared library with ARM entry points" "-shared -T arm-lib.ld" "" "-mthumb-interwork"
{mixed-lib.s}
{{objdump -fdw armthumb-lib.d} {readelf -Ds armthumb-lib.sym}}
"armthumb-lib.so"}
{"Mixed ARM/Thumb shared library" "-shared -T arm-lib.ld -use-blx" "" ""
{mixed-lib.s}
{{objdump -fdw mixed-lib.d} {objdump -Rw mixed-lib.r}
{readelf -Ds mixed-lib.sym}}
"mixed-lib.so"}
{"Mixed ARM/Thumb dynamic application" "tmpdir/mixed-lib.so -T arm-dyn.ld" "" ""
{mixed-app.s}
{{objdump -fdw mixed-app.d} {objdump -Rw mixed-app.r}
{readelf -Ds mixed-app.sym}}
"mixed-app"}
{"Mixed ARM/Thumb arch5 dynamic application" "tmpdir/mixed-lib.so -T arm-dyn.ld --use-blx" "" ""
{mixed-app.s}
{{objdump -fdw mixed-app-v5.d} {objdump -Rw mixed-app.r}
{readelf -Ds mixed-app.sym}}
"mixed-app-v5"}
{"Using Thumb lib by another lib" "-shared tmpdir/mixed-lib.so" "" "" {use-thumb-lib.s}
{{readelf -Ds use-thumb-lib.sym}}
"use-thumb-lib.so"}
{"Preempt Thumb symbol" "tmpdir/mixed-lib.so -T arm-dyn.ld --use-blx" "" ""
{preempt-app.s}
{{readelf -Ds preempt-app.sym}}
"preempt-app"}
{"TLS gnu shared library inlined trampoline" "--no-fix-arm1176 -shared -T arm-dyn.ld" "" "" {tls-descseq.s}
{{objdump -fdw tls-descseq.d} {objdump -Rw tls-descseq.r}}
"tls-lib2inline.so"}
{"TLS shared library gdesc local" "--no-fix-arm1176 -shared -T arm-dyn.ld" "" "" {tls-lib-loc.s}
{{objdump -fdw tls-lib-loc.d} {objdump -Rw tls-lib-loc.r}}
"tls-lib-loc.so"}
{"Cortex-A8 erratum fix, b.w to PLT"
"-EL -Tcortex-a8-fix-plt.ld --fix-cortex-a8 -shared" "" "-EL"
{cortex-a8-fix-b-plt.s}
@ -494,7 +495,13 @@ if { ![istarget "arm*-*-*eabi*"] && ![istarget "arm*-*-nacl*"] } {
return
}
# Farcalls stubs are fully supported for ARM-EABI only
# Farcalls stubs are fully supported for ARM-EABI only.
# This list is massaged below into run_ld_link_tests standard format.
# The source list is almost that same format. The one difference is
# that each "action" (elements of element 5) might have four elements
# instead of three; in that case, the fourth element is the name of
# the dump file to use for arm*-*nacl* targets instead of the canonical
# dump file (the third element).
set armeabitests_common {
{"EABI attribute merging" "-r" "" "" {attr-merge.s attr-merge.s}
{{readelf -A attr-merge.attr}}
@ -532,114 +539,29 @@ set armeabitests_common {
{"EABI attribute arch merging 2 reversed" "-r" "" "" {arch-v6.s arch-v6k.s}
{{readelf -A attr-merge-arch-2.attr}}
"attr-merge-arch-2r"}
{"Thumb-2 BL" "-Ttext 0x1000 --section-start .foo=0x1001000" "" "" {thumb2-bl.s}
{{objdump -dr thumb2-bl.d}}
"thumb2-bl"}
{"Thumb-2 Interworked branch" "-T arm.ld" "" "" {thumb2-b-interwork.s}
{{objdump -dr thumb2-b-interwork.d}}
"thumb2-b-interwork"}
{"BL/BLX interworking" "-T arm.ld" "" "" {thumb2-bl-blx-interwork.s}
{{objdump -dr thumb2-bl-blx-interwork.d}}
"thumb2-bl-blx-interwork"}
{"ARMv4 interworking" "-static -T arm.ld --fix-v4bx-interworking" "" "--fix-v4bx -meabi=4" {armv4-bx.s}
{{objdump -d armv4-bx.d}}
"armv4-bx"}
{"MOVW/MOVT and merged sections" "-T arm.ld" "" "" {movw-merge.s}
{{objdump -dw movw-merge.d}}
"movw-merge"}
{"MOVW/MOVT against shared libraries" "tmpdir/arm-lib.so" "" "" {arm-app-movw.s}
{{objdump -Rw arm-app.r}}
"arm-app-movw"}
{"Thumb-2-as-Thumb-1 BL" "--no-fix-arm1176 -Ttext 0x1000 --section-start .foo=0x100100c" "" "" {thumb2-bl-as-thumb1-bad.s}
{{objdump -d thumb2-bl-as-thumb1-bad.d}}
"thumb2-bl-as-thumb1-bad"}
{"Thumb-2 BL" "-Ttext 0x1000 --section-start .foo=0x100100c" "" "" {thumb2-bl-bad.s}
{{objdump -d thumb2-bl-bad.d}}
"thumb2-bl-bad"}
{"Branch to linker script symbol with BL for thumb-only target" "-T branch-lks-sym.ld" "" "" {thumb-bl-lks-sym.s}
{{objdump -d thumb-bl-lks-sym.d}}
"thumb-bl-lks-sym"}
{"Branch to linker script symbol with B for thumb-only target" "-T branch-lks-sym.ld" "" "" {thumb-b-lks-sym.s}
{{objdump -d thumb-b-lks-sym.d}}
"thumb-b-lks-sym"}
{"ARM-ARM farcall" "-Ttext 0x1000 --section-start .foo=0x2001020" "" "" {farcall-arm-arm.s}
{{objdump -d farcall-arm-arm.d}}
{{objdump -d farcall-arm-arm.d farcall-arm-nacl.d}}
"farcall-arm-arm"}
{"ARM-ARM farcall (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001020 --pic-veneer" "" "" {farcall-arm-arm.s}
{{objdump -d farcall-arm-arm-pic-veneer.d}}
{{objdump -d farcall-arm-arm-pic-veneer.d farcall-arm-nacl-pic.d}}
"farcall-arm-arm-pic-veneer"}
{"ARM-ARM farcall (BE8)" "-Ttext 0x1000 --section-start .foo=0x2001020 -EB --be8" "" "-EB" {farcall-arm-arm.s}
{{objdump -d farcall-arm-arm.d}}
{{objdump -d farcall-arm-arm.d farcall-arm-nacl.d}}
"farcall-arm-arm-be8"}
{"ARM-ARM farcall (BE)" "-Ttext 0x1000 --section-start .foo=0x2001020 -EB" "" "-EB" {farcall-arm-arm.s}
{{objdump -d farcall-arm-arm.d}}
{{objdump -d farcall-arm-arm.d farcall-arm-nacl.d}}
"farcall-arm-arm-be"}
{"Multiple farcalls" "-Ttext 0x1000 --section-start .foo=0x2002020" "" "" {farcall-mix.s}
{{objdump -d farcall-mix.d}}
"farcall-mix"}
{"Multiple farcalls from several sections" "-Ttext 0x1000 --section-start .mytext=0x2000 --section-start .foo=0x2003020" "" "" {farcall-mix2.s}
{{objdump -d farcall-mix2.d}}
"farcall-mix2"}
{"Default group size" "-Ttext 0x1000 --section-start .foo=0x2003020" "" "" {farcall-group.s farcall-group2.s}
{{objdump -d farcall-group.d}}
"farcall-group-default"}
{"Group size=2" "-Ttext 0x1000 --section-start .foo=0x2003020 --stub-group-size=2" "" "" {farcall-group.s farcall-group2.s}
{{objdump -d farcall-group-size2.d}}
"farcall-group-size2"}
{"Group size limit" "-Ttext 0x1000 --section-start .far=0x2003020" "" "" {farcall-group3.s farcall-group4.s}
{{objdump -d farcall-group-limit.d}}
"farcall-group-limit"}
{"Long branch with mixed text and data" "-T arm.ld" "" "" {farcall-data.s}
{{objdump -dr farcall-data.d}}
{{objdump -dr farcall-data.d farcall-data-nacl.d}}
"farcall-data"}
{"R_ARM_THM_JUMP24 Relocation veneers: Short 1"
"--no-fix-arm1176 --section-start destsect=0x00009000 --section-start .text=0x8000" ""
"-march=armv7-a -mthumb"
{jump-reloc-veneers.s}
{{objdump -d jump-reloc-veneers-short1.d}}
"jump-reloc-veneers-short1"}
{"R_ARM_THM_JUMP24 Relocation veneers: Short 2"
"--no-fix-arm1176 --section-start destsect=0x00900000 --section-start .text=0x8000" ""
"-march=armv7-a -mthumb"
{jump-reloc-veneers.s}
{{objdump -d jump-reloc-veneers-short2.d}}
"jump-reloc-veneers-short2"}
{"R_ARM_THM_JUMP24 Relocation veneers: Long"
"--no-fix-arm1176 --section-start destsect=0x09000000 --section-start .text=0x8000" ""
"-march=armv7-a -mthumb"
{jump-reloc-veneers.s}
{{objdump -d jump-reloc-veneers-long.d}}
"jump-reloc-veneers-long"}
{"erratum 760522 fix (default for v6z)" "--section-start=.foo=0x2001014" ""
"-march=armv6z" {fix-arm1176.s}
{{objdump -d fix-arm1176-on.d}}
"fix-arm1176-1"}
{"erratum 760522 fix (explicitly on at v6z)" "--section-start=.foo=0x2001014 --fix-arm1176" ""
"-march=armv6z" {fix-arm1176.s}
{{objdump -d fix-arm1176-on.d}}
"fix-arm1176-2"}
{"erratum 760522 fix (explicitly off at v6z)" "--section-start=.foo=0x2001014 --no-fix-arm1176" ""
"-march=armv6z" {fix-arm1176.s}
{{objdump -d fix-arm1176-off.d}}
"fix-arm1176-3"}
{"erratum 760522 fix (default for v5)" "--section-start=.foo=0x2001014 " ""
"-march=armv5te" {fix-arm1176.s}
{{objdump -d fix-arm1176-on.d}}
"fix-arm1176-4"}
{"erratum 760522 fix (default for v7-a)" "--section-start=.foo=0x2001014 " ""
"-march=armv7-a" {fix-arm1176.s}
{{objdump -d fix-arm1176-off.d}}
"fix-arm1176-5"}
{"erratum 760522 fix (default for ARM1156)" "--section-start=.foo=0x2001014 " ""
"-mcpu=arm1156t2f-s" {fix-arm1176.s}
{{objdump -d fix-arm1176-off.d}}
"fix-arm1176-6"}
}
set armeabitests_nonacl {
@ -700,6 +622,13 @@ set armeabitests_nonacl {
{{objdump -d farcall-thumb-arm-pic-veneer.d}}
"farcall-thumb-arm-pic-veneer"}
{"Multiple farcalls" "-Ttext 0x1000 --section-start .foo=0x2002020" "" "" {farcall-mix.s}
{{objdump -d farcall-mix.d}}
"farcall-mix"}
{"Multiple farcalls from several sections" "-Ttext 0x1000 --section-start .mytext=0x2000 --section-start .foo=0x2003020" "" "" {farcall-mix2.s}
{{objdump -d farcall-mix2.d}}
"farcall-mix2"}
{"Mixed ARM/Thumb dynamic application with farcalls" "tmpdir/mixed-lib.so -T arm-dyn.ld --section-start .far_arm=0x2100000 --section-start .far_thumb=0x2200000" "" ""
{farcall-mixed-app.s}
{{objdump -fdw farcall-mixed-app.d} {objdump -Rw farcall-mixed-app.r}
@ -721,6 +650,86 @@ set armeabitests_nonacl {
{{objdump -fdw farcall-mixed-lib.d}}
"farcall-mixed-lib.so"}
{"Thumb-2-as-Thumb-1 BL" "--no-fix-arm1176 -Ttext 0x1000 --section-start .foo=0x100100c" "" "" {thumb2-bl-as-thumb1-bad.s}
{{objdump -d thumb2-bl-as-thumb1-bad.d}}
"thumb2-bl-as-thumb1-bad"}
{"Thumb-2 BL" "-Ttext 0x1000 --section-start .foo=0x100100c" "" "" {thumb2-bl-bad.s}
{{objdump -d thumb2-bl-bad.d}}
"thumb2-bl-bad"}
{"Branch to linker script symbol with BL for thumb-only target" "-T branch-lks-sym.ld" "" "" {thumb-bl-lks-sym.s}
{{objdump -d thumb-bl-lks-sym.d}}
"thumb-bl-lks-sym"}
{"Branch to linker script symbol with B for thumb-only target" "-T branch-lks-sym.ld" "" "" {thumb-b-lks-sym.s}
{{objdump -d thumb-b-lks-sym.d}}
"thumb-b-lks-sym"}
{"erratum 760522 fix (default for v6z)" "--section-start=.foo=0x2001014" ""
"-march=armv6z" {fix-arm1176.s}
{{objdump -d fix-arm1176-on.d}}
"fix-arm1176-1"}
{"erratum 760522 fix (explicitly on at v6z)" "--section-start=.foo=0x2001014 --fix-arm1176" ""
"-march=armv6z" {fix-arm1176.s}
{{objdump -d fix-arm1176-on.d}}
"fix-arm1176-2"}
{"erratum 760522 fix (explicitly off at v6z)" "--section-start=.foo=0x2001014 --no-fix-arm1176" ""
"-march=armv6z" {fix-arm1176.s}
{{objdump -d fix-arm1176-off.d}}
"fix-arm1176-3"}
{"erratum 760522 fix (default for v5)" "--section-start=.foo=0x2001014 " ""
"-march=armv5te" {fix-arm1176.s}
{{objdump -d fix-arm1176-on.d}}
"fix-arm1176-4"}
{"erratum 760522 fix (default for v7-a)" "--section-start=.foo=0x2001014 " ""
"-march=armv7-a" {fix-arm1176.s}
{{objdump -d fix-arm1176-off.d}}
"fix-arm1176-5"}
{"erratum 760522 fix (default for ARM1156)" "--section-start=.foo=0x2001014 " ""
"-mcpu=arm1156t2f-s" {fix-arm1176.s}
{{objdump -d fix-arm1176-off.d}}
"fix-arm1176-6"}
{"Thumb-2 BL" "-Ttext 0x1000 --section-start .foo=0x1001000" "" "" {thumb2-bl.s}
{{objdump -dr thumb2-bl.d}}
"thumb2-bl"}
{"Thumb-2 Interworked branch" "-T arm.ld" "" "" {thumb2-b-interwork.s}
{{objdump -dr thumb2-b-interwork.d}}
"thumb2-b-interwork"}
{"BL/BLX interworking" "-T arm.ld" "" "" {thumb2-bl-blx-interwork.s}
{{objdump -dr thumb2-bl-blx-interwork.d}}
"thumb2-bl-blx-interwork"}
{"ARMv4 interworking" "-static -T arm.ld --fix-v4bx-interworking" "" "--fix-v4bx -meabi=4" {armv4-bx.s}
{{objdump -d armv4-bx.d}}
"armv4-bx"}
{"R_ARM_THM_JUMP24 Relocation veneers: Short 1"
"--no-fix-arm1176 --section-start destsect=0x00009000 --section-start .text=0x8000" ""
"-march=armv7-a -mthumb"
{jump-reloc-veneers.s}
{{objdump -d jump-reloc-veneers-short1.d}}
"jump-reloc-veneers-short1"}
{"R_ARM_THM_JUMP24 Relocation veneers: Short 2"
"--no-fix-arm1176 --section-start destsect=0x00900000 --section-start .text=0x8000" ""
"-march=armv7-a -mthumb"
{jump-reloc-veneers.s}
{{objdump -d jump-reloc-veneers-short2.d}}
"jump-reloc-veneers-short2"}
{"R_ARM_THM_JUMP24 Relocation veneers: Long"
"--no-fix-arm1176 --section-start destsect=0x09000000 --section-start .text=0x8000" ""
"-march=armv7-a -mthumb"
{jump-reloc-veneers.s}
{{objdump -d jump-reloc-veneers-long.d}}
"jump-reloc-veneers-long"}
{"Default group size" "-Ttext 0x1000 --section-start .foo=0x2003020" "" "" {farcall-group.s farcall-group2.s}
{{objdump -d farcall-group.d}}
"farcall-group-default"}
{"Group size=2" "-Ttext 0x1000 --section-start .foo=0x2003020 --stub-group-size=2" "" "" {farcall-group.s farcall-group2.s}
{{objdump -d farcall-group-size2.d}}
"farcall-group-size2"}
{"Group size limit" "-Ttext 0x1000 --section-start .far=0x2003020" "" "" {farcall-group3.s farcall-group4.s}
{{objdump -d farcall-group-limit.d}}
"farcall-group-limit"}
{"TLS gnu shared library" "--no-fix-arm1176 -shared -T arm-dyn.ld" "" "" {tls-gdesc.s}
{{objdump -fdw tls-gdesc.d} {objdump -Rw tls-gdesc.r}}
"tls-lib2.so"}
@ -738,8 +747,29 @@ set armeabitests_nonacl {
"tls-thumb1"}
}
# Massage the $armeabitests_common list into run_ld_link_tests standard form.
# See the comment before 'set armeabitests_common', above.
set elide_action_elt 3
set is_nacl [istarget "arm*-*-nacl*"]
if {$is_nacl} {
set elide_action_elt 2
}
set neabi_common [llength $armeabitests_common]
for {set i 0} {$i < $neabi_common} {incr i} {
set case [lindex $armeabitests_common $i]
set actions [lindex $case 5]
set nactions [llength $actions]
for {set j 0} {$j < $nactions} {incr j} {
set action [lindex $actions $j]
if {[llength $action] == 4} {
set action [lreplace $action $elide_action_elt $elide_action_elt]
lset armeabitests_common $i 5 $j $action
}
}
}
run_ld_link_tests $armeabitests_common
if { ![istarget "arm*-*-nacl*"] } {
if { !$is_nacl } {
run_ld_link_tests $armeabitests_nonacl
}

View file

@ -0,0 +1,20 @@
.*: file format .*
Disassembly of section \.text:
0+1000 <_start>:
\s*1000:\s+eb000002\s+bl\s+1010 <__bar_veneer>
#...
0+1010 <__bar_veneer>:
\s*1010:\s+e59fc00c\s+ldr\s+ip, \[pc, #12\]\s+; 1024 <__bar_veneer\+0x14>
\s*1014:\s+e08cc00f\s+add\s+ip, ip, pc
\s*1018:\s+e3ccc13f\s+bic\s+ip, ip, #-1073741809\s+; 0xc000000f
\s*101c:\s+e12fff1c\s+bx\s+ip
\s*1020:\s+e125be70\s+bkpt\s+0x5be0
\s*1024:\s+02000004\s+.word\s+0x02000004
#...
\s*Disassembly of section \.foo:
\s*02001020 <bar>:
\s*2001020:\s+e12fff1e\s+bx\s+lr

View file

@ -0,0 +1,20 @@
.*: file format .*
Disassembly of section \.text:
0+1000 <_start>:
\s*1000:\s+eb000002\s+bl\s+1010 <__bar_veneer>
#...
0+1010 <__bar_veneer>:
\s*1010:\s+e59fc00c\s+ldr\s+ip, \[pc, #12\]\s+; 1024 <__bar_veneer\+0x14>
\s*1014:\s+e3ccc13f\s+bic\s+ip, ip, #-1073741809\s+; 0xc000000f
\s*1018:\s+e12fff1c\s+bx\s+ip
\s*101c:\s+e320f000\s+nop\s+\{0\}
\s*1020:\s+e125be70\s+bkpt\s+0x5be0
\s*1024:\s+02001020\s+.word\s+0x02001020
#...
\s*Disassembly of section \.foo:
\s*02001020 <bar>:
\s*2001020:\s+e12fff1e\s+bx\s+lr

View file

@ -0,0 +1,24 @@
.*: file format .*
Disassembly of section .text:
0+8000 <_start>:
\s*8000:\s+ea000002\s+b\s+8010 <__far_veneer>
#...
0+8010 <__far_veneer>:
\s*8010:\s+e59fc00c\s+ldr\s+ip, \[pc, #12\]\s+; 8024 <__far_veneer\+0x14>
\s*8014:\s+e3ccc13f\s+bic\s+ip, ip, #-1073741809\s+; 0xc000000f
\s*8018:\s+e12fff1c\s+bx\s+ip
\s*801c:\s+e320f000\s+nop\s+\{0\}
\s*8020:\s+e125be70\s+bkpt\s+0x5be0
\s*8024:\s+12340000\s+.word\s+0x12340000
#...
0+8030 <after>:
\s*8030:\s+11111111\s+\.word\s+0x11111111
Disassembly of section \.far:
12340000 <far>:
12340000:\s+e12fff1e\s+bx\s+lr