aboutsummaryrefslogtreecommitdiff
path: root/ld/ld.texinfo
diff options
context:
space:
mode:
authorJulian Brown <julian@codesourcery.com>2007-01-29 16:28:40 +0000
committerJulian Brown <julian@codesourcery.com>2007-01-29 16:28:40 +0000
commitc6dd86c69582aa64a638c2ddef7cd6a6ae769a71 (patch)
tree98f878eeede475506c4cbaa03c4ed2223d1d5296 /ld/ld.texinfo
parentb785d0e12194800df53b5efca6b6dc47c73e975e (diff)
downloadgdb-c6dd86c69582aa64a638c2ddef7cd6a6ae769a71.zip
gdb-c6dd86c69582aa64a638c2ddef7cd6a6ae769a71.tar.gz
gdb-c6dd86c69582aa64a638c2ddef7cd6a6ae769a71.tar.bz2
* NEWS: Mention --vfp11-denorm-fix option.
* ld.texinfo: Document above. * emulparams/armelf_linux.sh (OTHER_TEXT_SECTIONS): Add .vfp11_veneer section. * emulparams/armelf.sh (OTHER_TEXT_SECTIONS): Likewise. * emultempl/armelf.em (vfp11_denorm_fix): New static variable. (arm_elf_before_allocation): Call bfd_elf32_arm_set_vfp11_fix, bfd_elf32_arm_init_maps and bfd_elf32_arm_vfp11_erratum_scan. (arm_elf_after_allocation): New function. Call bfd_elf32_arm_vfp11_fix_veneer_locations for all input statements. (arm_elf_create_output_section_statements): Pass vfp11 fix command line option to BFD. (OPTION_VFP11_DENORM_FIX): New option. (PARSE_AND_LIST_LONGOPTS): Handle new option. (PARSE_AND_LIST_OPTIONS): Likewise. (PARSE_AND_LIST_ARGS_CASES): Likewise. (LDEMUL_AFTER_ALLOCATION): Define.
Diffstat (limited to 'ld/ld.texinfo')
-rw-r--r--ld/ld.texinfo30
1 files changed, 30 insertions, 0 deletions
diff --git a/ld/ld.texinfo b/ld/ld.texinfo
index 47e3e9a..e4cb6be 100644
--- a/ld/ld.texinfo
+++ b/ld/ld.texinfo
@@ -5489,6 +5489,36 @@ each PLT entry. This should lead to such calls executing slightly faster.
This option is enabled implicitly for SymbianOS, so there is no need to
specify it if you are using that target.
+@cindex VFP11_DENORM_FIX
+@kindex --vfp11-denorm-fix
+The @samp{--vfp11-denorm-fix} switch enables a link-time workaround for a
+bug in certain VFP11 coprocessor hardware, which sometimes allows
+instructions with denorm operands (which must be handled by support code)
+to have those operands overwritten by subsequent instructions before
+the support code can read the intended values.
+
+The bug may be avoided in scalar mode if you allow at least one
+intervening instruction between a VFP11 instruction which uses a register
+and another instruction which writes to the same register, or at least two
+intervening instructions if vector mode is in use. The bug only affects
+full-compliance floating-point mode: you do not need this workaround if
+you are using "runfast" mode. Please contact ARM for further details.
+
+If you know you are using buggy VFP11 hardware, you can
+enable this workaround by specifying the linker option
+@samp{--vfp-denorm-fix=scalar} if you are using the VFP11 scalar
+mode only, or @samp{--vfp-denorm-fix=vector} if you are using
+vector mode (the latter also works for scalar code). The default is
+@samp{--vfp-denorm-fix=none}.
+
+If the workaround is enabled, instructions are scanned for
+potentially-troublesome sequences, and a veneer is created for each
+such sequence which may trigger the erratum. The veneer consists of the
+first instruction of the sequence and a branch back to the subsequent
+instruction. The original instruction is then replaced with a branch to
+the veneer. The extra cycles required to call and return from the veneer
+are sufficient to avoid the erratum in both the scalar and vector cases.
+
@ifclear GENERIC
@lowersections
@end ifclear