Enable to link ARM object file that hasn't attribute section.

bfd/ChangeLog

2014-11-20  Terry Guo  <terry.guo@arm.com>

	* elf32-arm.c (elf32_arm_merge_eabi_attributes): Skip if input bfd
	hasn't attribute section.

ld/testsuite/ChangeLog:

2014-11-20  Terry Guo  <terry.guo@arm.com>

	* ld-arm/attr-merge-nosection-1.d: New file.
	* ld-arm/attr-merge-nosection-1a.s: Likewise.
	* ld-arm/attr-merge-nosection-1b.s: Likewise.
	* ld-arm/arm-elf.exp: Include the new test.
This commit is contained in:
Terry Guo 2014-11-20 13:54:27 +08:00
parent 430ce64f28
commit 9274e9de16
7 changed files with 58 additions and 0 deletions

View file

@ -1,3 +1,8 @@
2014-11-20 Terry Guo <terry.guo@arm.com>
* elf32-arm.c (elf32_arm_merge_eabi_attributes): Skip if input bfd
hasn't attribute section.
2014-11-20 Alan Modra <amodra@gmail.com>
* elf64-ppc.c (ppc64_elf_size_stubs): Add __go_go to thread_starters.

View file

@ -11700,6 +11700,7 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
static const int order_021[3] = {0, 2, 1};
int i;
bfd_boolean result = TRUE;
const char *sec_name = get_elf_backend_data (ibfd)->obj_attrs_section;
/* Skip the linker stubs file. This preserves previous behavior
of accepting unknown attributes in the first input file - but
@ -11707,6 +11708,12 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
if (ibfd->flags & BFD_LINKER_CREATED)
return TRUE;
/* Skip any input that hasn't attribute section.
This enables to link object files without attribute section with
any others. */
if (bfd_get_section_by_name (ibfd, sec_name) == NULL)
return TRUE;
if (!elf_known_obj_attributes_proc (obfd)[0].i)
{
/* This is the first object. Copy the attributes. */

View file

@ -1,3 +1,10 @@
2014-11-20 Terry Guo <terry.guo@arm.com>
* ld-arm/attr-merge-nosection-1.d: New file.
* ld-arm/attr-merge-nosection-1a.s: Likewise.
* ld-arm/attr-merge-nosection-1b.s: Likewise.
* ld-arm/arm-elf.exp: Include the new test.
2014-11-18 H.J. Lu <hongjiu.lu@intel.com>
PR ld/17618

View file

@ -879,6 +879,7 @@ run_dump_test "attr-merge-vfp-7"
run_dump_test "attr-merge-vfp-7r"
run_dump_test "attr-merge-incompatible"
run_dump_test "attr-merge-arch-2"
run_dump_test "attr-merge-nosection-1"
run_dump_test "unresolved-1"
if { ![istarget "arm*-*-nacl*"] } {
run_dump_test "unresolved-1-dyn"

View file

@ -0,0 +1,18 @@
#source: attr-merge-nosection-1a.s RUN_OBJCOPY
#source: attr-merge-nosection-1b.s
#as:
#objcopy_objects: -R '.ARM.attributes'
#ld:
#readelf: -A
# This test is only valid on ELF based ports.
# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "Cortex-M4"
Tag_CPU_arch: v7E-M
Tag_CPU_arch_profile: Microcontroller
Tag_THUMB_ISA_use: Thumb-2
Tag_FP_arch: VFPv4-D16
Tag_ABI_HardFP_use: SP only

View file

@ -0,0 +1,10 @@
.cpu cortex-m0
.fpu softvfp
.syntax unified
.thumb
.text
.global foo
.thumb_func
.type foo, %function
foo:
bx lr

View file

@ -0,0 +1,10 @@
.syntax unified
.cpu cortex-m4
.fpu fpv4-sp-d16
.thumb
.text
.global _start
.thumb_func
.type _start, %function
_start:
bl foo