This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFA/ARM] Fix handling of Tag_DIV_use


Hi,

The attached patch fixes how we use Tag_DIV_use in binutils to be in
line with the meaning of the ARM ABI.

Tag_DIV_use has three values, 0, 1, or 2, which we have historically
treated as:
 0: Divide instruction permitted in Thumb state.  Emitted for v7M and
    v7R.
 1: Divide instruction not permitted.  Emitted for all architectures
    which don't have a divide instruction (all v6 and before, v7A).
 2: Divide instruction permitted in ARM state (emitted for v7A+idiv).

The value of 1 is actually meant to be read that the user did not intend
for divide instructions to be used in the image (even if present in the
architecture).  Similarly the value of 0 should be interpreted as the
divide instruction was permitted as allowed by the architecture (see
Tag_CPU_arch and Tag_CPU_arch_profile) - value 0 also maps to 'no info
available'.

The attached patch changes the behaviour of binutils to match these
clarified interpretations.

Gas currently does not provide any way on the command line to indicate
the user intention that divide instructions should not be used.

Thanks,

Matt

bfd/ChangeLog:

2012-03-15  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>

	* elf32-arm.c (elf32_arm_attributes_accept_div): New function.
	(elf32_arm_attributes_forbid_div): Likewise.
	(elf32_arm_merge_eabi_attributes): Correct handling of
	Tag_DIV_use.

gas/ChangeLog:

2012-03-15  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>

	* config/tc-arm.c (aeabi_set_public_attributes): Correct
	handling of Tag_DIV_use.

gas/testsuite/ChangeLog:

2012-03-15  Matthew Gretton-Dann  <matther.gretton-dann@arm.com>

	* gas/testsuite/gas/arm/any-idiv.d: New testcase.
	* gas/testsuite/gas/arm/any-idiv.s: Likewise.
	* gas/arm/attr-any-armv4t.d: Update expected output.
	* gas/arm/attr-any-thumbv6.d: Likewise.
	* gas/arm/attr-cpu-directive.d: Likewise.
	* gas/arm/attr-default.d: Likewise.
	* gas/arm/attr-march-armv1.d: Likewise.
	* gas/arm/attr-march-armv2.d: Likewise.
	* gas/arm/attr-march-armv2a.d: Likewise.
	* gas/arm/attr-march-armv2s.d: Likewise.
	* gas/arm/attr-march-armv3.d: Likewise.
	* gas/arm/attr-march-armv3m.d: Likewise.
	* gas/arm/attr-march-armv4.d: Likewise.
	* gas/arm/attr-march-armv4t.d: Likewise.
	* gas/arm/attr-march-armv4txm.d: Likewise.
	* gas/arm/attr-march-armv4xm.d: Likewise.
	* gas/arm/attr-march-armv5.d: Likewise.
	* gas/arm/attr-march-armv5t.d: Likewise.
	* gas/arm/attr-march-armv5te.d: Likewise.
	* gas/arm/attr-march-armv5tej.d: Likewise.
	* gas/arm/attr-march-armv5texp.d: Likewise.
	* gas/arm/attr-march-armv5txm.d: Likewise.
	* gas/arm/attr-march-armv6-m+os.d: Likewise.
	* gas/arm/attr-march-armv6-m.d: Likewise.
	* gas/arm/attr-march-armv6.d: Likewise.
	* gas/arm/attr-march-armv6j.d: Likewise.
	* gas/arm/attr-march-armv6k+sec.d: Likewise.
	* gas/arm/attr-march-armv6k.d: Likewise.
	* gas/arm/attr-march-armv6kt2.d: Likewise.
	* gas/arm/attr-march-armv6s-m.d: Likewise.
	* gas/arm/attr-march-armv6t2.d: Likewise.
	* gas/arm/attr-march-armv6z.d: Likewise.
	* gas/arm/attr-march-armv6zk.d: Likewise.
	* gas/arm/attr-march-armv6zkt2.d: Likewise.
	* gas/arm/attr-march-armv6zt2.d: Likewise.
	* gas/arm/attr-march-armv7-a+mp.d: Likewise.
	* gas/arm/attr-march-armv7-a+sec.d: Likewise.
	* gas/arm/attr-march-armv7-a.d: Likewise.
	* gas/arm/attr-march-armv7.d: Likewise.
	* gas/arm/attr-march-armv7a.d: Likewise.
	* gas/arm/attr-march-iwmmxt.d: Likewise.
	* gas/arm/attr-march-iwmmxt2.d: Likewise.
	* gas/arm/attr-march-xscale.d: Likewise.
	* gas/arm/attr-mcpu.d: Likewise.
	* gas/arm/attr-mfpu-arm1020e.d: Likewise.
	* gas/arm/attr-mfpu-arm1020t.d: Likewise.
	* gas/arm/attr-mfpu-arm1136jf-s.d: Likewise.
	* gas/arm/attr-mfpu-arm1136jfs.d: Likewise.
	* gas/arm/attr-mfpu-arm7500fe.d: Likewise.
	* gas/arm/attr-mfpu-fpa.d: Likewise.
	* gas/arm/attr-mfpu-fpa10.d: Likewise.
	* gas/arm/attr-mfpu-fpa11.d: Likewise.
	* gas/arm/attr-mfpu-fpe.d: Likewise.
	* gas/arm/attr-mfpu-fpe2.d: Likewise.
	* gas/arm/attr-mfpu-fpe3.d: Likewise.
	* gas/arm/attr-mfpu-maverick.d: Likewise.
	* gas/arm/attr-mfpu-neon-fp16.d: Likewise.
	* gas/arm/attr-mfpu-neon.d: Likewise.
	* gas/arm/attr-mfpu-softfpa.d: Likewise.
	* gas/arm/attr-mfpu-softvfp+vfp.d: Likewise.
	* gas/arm/attr-mfpu-softvfp.d: Likewise.
	* gas/arm/attr-mfpu-vfp.d: Likewise.
	* gas/arm/attr-mfpu-vfp10-r0.d: Likewise.
	* gas/arm/attr-mfpu-vfp10.d: Likewise.
	* gas/arm/attr-mfpu-vfp3.d: Likewise.
	* gas/arm/attr-mfpu-vfp9.d: Likewise.
	* gas/arm/attr-mfpu-vfpv2.d: Likewise.
	* gas/arm/attr-mfpu-vfpv3-d16.d: Likewise.
	* gas/arm/attr-mfpu-vfpv3.d: Likewise.
	* gas/arm/attr-mfpu-vfpv4-d16.d: Likewise.
	* gas/arm/attr-mfpu-vfpv4.d: Likewise.
	* gas/arm/attr-mfpu-vfpxd.d: Likewise.
	* gas/arm/attr-order.d: Likewise.
	* gas/arm/attr-override-cpu-directive.d: Likewise.
	* gas/arm/attr-override-mcpu.d: Likewise.
	* gas/arm/eabi_attr_1.d: Likewise.
	* gas/arm/mov-highregs-any.d: Likewise.
	* gas/arm/mov-lowregs-any.d: Likewise.
	* gas/arm/pr12198-1.d: Likewise.
	* gas/arm/pr12198-2.d: Likewise.

ld/testsuite/ChangeLog:

2012-03-15  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>

	* ld-arm/arm-elf.exp: Add new testcases.
	* ld-arm/attr-merge-2.attr: Update ouput.
	* ld-arm/attr-merge-2a.s: Remove Tag_DIV_use test.
	* ld-arm/attr-merge-2b.s: Likewise.
	* ld-arm/attr-merge-3.attr: Updated expected output.
	* ld-arm/attr-merge-4.attr: Likewise.
	* ld-arm/attr-merge-5.attr: Likewise.
	* ld-arm/attr-merge-6.attr: Likewise.
	* ld-arm/attr-merge-7.attr: Likewise.
	* ld-arm/attr-merge-arch-1.attr: Likewise.
	* ld-arm/attr-merge-arch-2.attr: Likewise.
	* ld-arm/attr-merge-unknown-2.d: Likewise.
	* ld-arm/attr-merge-unknown-2r.d: Likewise.
	* ld-arm/attr-merge-unknown-3.d: Likewise.
	* ld-arm/attr-merge-vfp-1.d: Likewise.
	* ld-arm/attr-merge-vfp-1r.d: Likewise.
	* ld-arm/attr-merge-vfp-2.d: Likewise.
	* ld-arm/attr-merge-vfp-2r.d: Likewise.
	* ld-arm/attr-merge-vfp-3.d: Likewise.
	* ld-arm/attr-merge-vfp-3r.d: Likewise.
	* ld-arm/attr-merge-vfp-4.d: Likewise.
	* ld-arm/attr-merge-vfp-4r.d: Likewise.
	* ld-arm/attr-merge-vfp-5.d: Likewise.
	* ld-arm/attr-merge-vfp-5r.d: Likewise.
	* ld-arm/attr-merge-vfp-6.d: Likewise.
	* ld-arm/attr-merge-vfp-6r.d: Likewise.
	* ld-arm/attr-merge-wchar-00-nowarn.d: Likewise.
	* ld-arm/attr-merge-wchar-00.d: Likewise.
	* ld-arm/attr-merge-wchar-02-nowarn.d: Likewise.
	* ld-arm/attr-merge-wchar-02.d: Likewise.
	* ld-arm/attr-merge-wchar-04-nowarn.d: Likewise.
	* ld-arm/attr-merge-wchar-04.d: Likewise.
	* ld-arm/attr-merge-wchar-20-nowarn.d: Likewise.
	* ld-arm/attr-merge-wchar-20.d: Likewise.
	* ld-arm/attr-merge-wchar-22-nowarn.d: Likewise.
	* ld-arm/attr-merge-wchar-22.d: Likewise.
	* ld-arm/attr-merge-wchar-24-nowarn.d: Likewise.
	* ld-arm/attr-merge-wchar-40-nowarn.d: Likewise.
	* ld-arm/attr-merge-wchar-40.d: Likewise.
	* ld-arm/attr-merge-wchar-42-nowarn.d: Likewise.
	* ld-arm/attr-merge-wchar-44-nowarn.d: Likewise.
	* ld-arm/attr-merge-wchar-44.d: Likewise.
	* ld-arm/attr-merge.attr: Likewise.
	* ld-arm/attr-merge-div-0.s: New testcase.
	* ld-arm/attr-merge-div-00.d: Likewise.
	* ld-arm/attr-merge-div-01-m3.d: Likewise.
	* ld-arm/attr-merge-div-01.d: Likewise.
	* ld-arm/attr-merge-div-02.d: Likewise.
	* ld-arm/attr-merge-div-1.s: Likewise.
	* ld-arm/attr-merge-div-10-m3.d: Likewise.
	* ld-arm/attr-merge-div-10.d: Likewise.
	* ld-arm/attr-merge-div-11.d: Likewise.
	* ld-arm/attr-merge-div-12.d: Likewise.
	* ld-arm/attr-merge-div-120.d: Likewise.
	* ld-arm/attr-merge-div-2.s: Likewise.
	* ld-arm/attr-merge-div-20.d: Likewise.
	* ld-arm/attr-merge-div-21.d: Likewise.
	* ld-arm/attr-merge-div-22.d: Likewise.

-- 
Matthew Gretton-Dann
Principal Engineer, PD Software, ARM Ltd.

Attachment: 1-RFA-ARM-Fix-handling-of-Tag_DIV_use.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]