emaste 930481b8f6 lld: [ELF][ARM] Implement support for Tag_ABI_VFP_args
The Tag_ABI_VFP_args build attribute controls the procedure call
standard used for floating point parameters on ARM. The values are:

0 - Base AAPCS (FP Parameters passed in Core (Integer) registers
1 - VFP AAPCS (FP Parameters passed in FP registers)
2 - Toolchain specific (Neither Base or VFP)
3 - Compatible with all (No use of floating point parameters)

If the Tag_ABI_VFP_args build attribute is missing it has an implicit
value of 0.

We use the attribute in two ways:

* Detect a clash in calling convention between Base, VFP and Toolchain.

we follow ld.bfd's lead and do not error if there is a clash between an
implicit Base AAPCS caused by a missing attribute. Many projects
including the hard-float (VFP AAPCS) version of glibc contain assembler
files that do not use floating point but do not have Tag_ABI_VFP_args.

* Set the EF_ARM_ABI_FLOAT_SOFT or EF_ARM_ABI_FLOAT_HARD ELF header flag

for Base or VFP AAPCS respectively. This flag is used by some ELF
loaders.

References:
* Addenda to, and Errata in, the ABI for the ARM Architecture for
  Tag_ABI_VFP_args
* Elf for the ARM Architecture for ELF header flags

Fixes LLVM PR36009

PR:		229050
Obtained from:	llvm r338377 by Peter Smith
2018-07-31 15:25:03 +00:00
..
2018-05-19 00:26:00 +00:00
2017-05-31 19:37:23 +00:00
2018-05-12 12:00:18 +00:00
2018-02-19 05:10:22 +00:00
2018-07-29 00:12:16 +00:00
2018-05-31 09:11:21 +00:00
2018-05-23 01:20:31 +00:00
2017-05-05 13:31:25 +00:00
2018-01-28 03:16:54 +00:00
2018-05-31 09:11:21 +00:00
2017-06-28 09:22:45 +00:00
2018-05-08 04:52:52 +00:00
2018-05-29 10:29:04 +00:00
2018-05-04 10:17:27 +00:00
2018-07-20 02:25:39 +00:00
2018-05-18 06:10:16 +00:00
2017-09-10 01:25:15 +00:00