diff options
| author | Armin Kuster <akuster808@gmail.com> | 2018-09-13 11:42:37 -0700 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-09-27 12:17:45 +0100 |
| commit | 8cdabe1f6fa908489e6daad912fadae69adf78c4 (patch) | |
| tree | 2b6a103405d49e1dce2f7a31b13cf9bce3f98760 /meta | |
| parent | 79083fcd0ddd9bf69b5068da9c503ae28a809aae (diff) | |
| download | poky-8cdabe1f6fa908489e6daad912fadae69adf78c4.tar.gz | |
binutils: Change the ARM assembler's ADR and ADRl pseudo-ops so that they will only set the bottom bit of imported thumb function symbols if the -mthumb-interwork option is active.
[Yocto 12865]
< 2.30
(From OE-Core rev: a1c0135e96bca684db0e3a7c6209c0cb2054f306)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
| -rw-r--r-- | meta/recipes-devtools/binutils/binutils-2.30.inc | 1 | ||||
| -rw-r--r-- | meta/recipes-devtools/binutils/binutils/0001-Change-the-ARM-assembler-s-ADR-and-ADRl-pseudo-ops-s.patch | 176 |
2 files changed, 177 insertions, 0 deletions
diff --git a/meta/recipes-devtools/binutils/binutils-2.30.inc b/meta/recipes-devtools/binutils/binutils-2.30.inc index 37243db1bc..35d7d9b93f 100644 --- a/meta/recipes-devtools/binutils/binutils-2.30.inc +++ b/meta/recipes-devtools/binutils/binutils-2.30.inc | |||
| @@ -47,6 +47,7 @@ SRC_URI = "\ | |||
| 47 | file://CVE-2018-10372.patch \ | 47 | file://CVE-2018-10372.patch \ |
| 48 | file://CVE-2018-10535.patch \ | 48 | file://CVE-2018-10535.patch \ |
| 49 | file://CVE-2018-10534.patch \ | 49 | file://CVE-2018-10534.patch \ |
| 50 | file://0001-Change-the-ARM-assembler-s-ADR-and-ADRl-pseudo-ops-s.patch \ | ||
| 50 | " | 51 | " |
| 51 | S = "${WORKDIR}/git" | 52 | S = "${WORKDIR}/git" |
| 52 | 53 | ||
diff --git a/meta/recipes-devtools/binutils/binutils/0001-Change-the-ARM-assembler-s-ADR-and-ADRl-pseudo-ops-s.patch b/meta/recipes-devtools/binutils/binutils/0001-Change-the-ARM-assembler-s-ADR-and-ADRl-pseudo-ops-s.patch new file mode 100644 index 0000000000..8604e678da --- /dev/null +++ b/meta/recipes-devtools/binutils/binutils/0001-Change-the-ARM-assembler-s-ADR-and-ADRl-pseudo-ops-s.patch | |||
| @@ -0,0 +1,176 @@ | |||
| 1 | From fc6141f097056f830a412afebed8d81a9d72b696 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Nick Clifton <nickc@redhat.com> | ||
| 3 | Date: Wed, 20 Jun 2018 12:38:10 +0100 | ||
| 4 | Subject: [PATCH] Change the ARM assembler's ADR and ADRl pseudo-ops so that | ||
| 5 | they will only set the bottom bit of imported thumb function symbols if the | ||
| 6 | -mthumb-interwork option is active. | ||
| 7 | |||
| 8 | For more information see the email thread starting here: | ||
| 9 | https://www.sourceware.org/ml/binutils/2018-05/msg00348.html | ||
| 10 | |||
| 11 | PR 21458 | ||
| 12 | * tc-arm.c (do_adr): Only set the bottom bit of an imported thumb | ||
| 13 | function symbol address if -mthumb-interwork is active. | ||
| 14 | (do_adrl): Likewise. | ||
| 15 | * doc/c-arm.texi: Update descriptions of the -mthumb-interwork | ||
| 16 | option and the ADR and ADRL pseudo-ops. | ||
| 17 | * NEWS: Mention the new behaviour of the ADR and ADRL pseudo-ops. | ||
| 18 | * testsuite/gas/arm/pr21458.d: Add -mthumb-interwork option to | ||
| 19 | assembler command line. | ||
| 20 | * testsuite/gas/arm/adr.d: Likewise. | ||
| 21 | * testsuite/gas/arm/adrl.d: Likewise. | ||
| 22 | --- | ||
| 23 | gas/ChangeLog | 14 ++++++++++++++ | ||
| 24 | gas/NEWS | 4 ++++ | ||
| 25 | gas/config/tc-arm.c | 10 ++++++---- | ||
| 26 | gas/doc/c-arm.texi | 17 ++++++++++++++++- | ||
| 27 | gas/testsuite/gas/arm/adr.d | 1 + | ||
| 28 | gas/testsuite/gas/arm/adrl.d | 1 + | ||
| 29 | gas/testsuite/gas/arm/pr21458.d | 3 ++- | ||
| 30 | 7 files changed, 44 insertions(+), 6 deletions(-) | ||
| 31 | |||
| 32 | Index: git/gas/config/tc-arm.c | ||
| 33 | =================================================================== | ||
| 34 | --- git.orig/gas/config/tc-arm.c | ||
| 35 | +++ git/gas/config/tc-arm.c | ||
| 36 | @@ -8410,11 +8410,12 @@ do_adr (void) | ||
| 37 | inst.reloc.pc_rel = 1; | ||
| 38 | inst.reloc.exp.X_add_number -= 8; | ||
| 39 | |||
| 40 | - if (inst.reloc.exp.X_op == O_symbol | ||
| 41 | + if (support_interwork | ||
| 42 | + && inst.reloc.exp.X_op == O_symbol | ||
| 43 | && inst.reloc.exp.X_add_symbol != NULL | ||
| 44 | && S_IS_DEFINED (inst.reloc.exp.X_add_symbol) | ||
| 45 | && THUMB_IS_FUNC (inst.reloc.exp.X_add_symbol)) | ||
| 46 | - inst.reloc.exp.X_add_number += 1; | ||
| 47 | + inst.reloc.exp.X_add_number |= 1; | ||
| 48 | } | ||
| 49 | |||
| 50 | /* This is a pseudo-op of the form "adrl rd, label" to be converted | ||
| 51 | @@ -8434,11 +8435,12 @@ do_adrl (void) | ||
| 52 | inst.size = INSN_SIZE * 2; | ||
| 53 | inst.reloc.exp.X_add_number -= 8; | ||
| 54 | |||
| 55 | - if (inst.reloc.exp.X_op == O_symbol | ||
| 56 | + if (support_interwork | ||
| 57 | + && inst.reloc.exp.X_op == O_symbol | ||
| 58 | && inst.reloc.exp.X_add_symbol != NULL | ||
| 59 | && S_IS_DEFINED (inst.reloc.exp.X_add_symbol) | ||
| 60 | && THUMB_IS_FUNC (inst.reloc.exp.X_add_symbol)) | ||
| 61 | - inst.reloc.exp.X_add_number += 1; | ||
| 62 | + inst.reloc.exp.X_add_number |= 1; | ||
| 63 | } | ||
| 64 | |||
| 65 | static void | ||
| 66 | Index: git/gas/doc/c-arm.texi | ||
| 67 | =================================================================== | ||
| 68 | --- git.orig/gas/doc/c-arm.texi | ||
| 69 | +++ git/gas/doc/c-arm.texi | ||
| 70 | @@ -317,7 +317,8 @@ instructions; that is, it should behave | ||
| 71 | @cindex @code{-mthumb-interwork} command line option, ARM | ||
| 72 | @item -mthumb-interwork | ||
| 73 | This option specifies that the output generated by the assembler should | ||
| 74 | -be marked as supporting interworking. | ||
| 75 | +be marked as supporting interworking. It also affects the behaviour | ||
| 76 | +of the @code{ADR} and @code{ADRL} pseudo opcodes. | ||
| 77 | |||
| 78 | @cindex @code{-mimplicit-it} command line option, ARM | ||
| 79 | @item -mimplicit-it=never | ||
| 80 | @@ -1060,6 +1061,16 @@ out of range, or if it is not defined in | ||
| 81 | the ADR instruction, then an error will be generated. This instruction | ||
| 82 | will not make use of the literal pool. | ||
| 83 | |||
| 84 | +If @var{label} is a thumb function symbol, and thumb interworking has | ||
| 85 | +been enabled via the @option{-mthumb-interwork} option then the bottom | ||
| 86 | +bit of the value stored into @var{register} will be set. This allows | ||
| 87 | +the following sequence to work as expected: | ||
| 88 | + | ||
| 89 | +@smallexample | ||
| 90 | + adr r0, thumb_function | ||
| 91 | + blx r0 | ||
| 92 | +@end smallexample | ||
| 93 | + | ||
| 94 | @cindex @code{ADRL reg,<label>} pseudo op, ARM | ||
| 95 | @item ADRL | ||
| 96 | @smallexample | ||
| 97 | @@ -1076,6 +1087,10 @@ If the label is out of range, or if it i | ||
| 98 | (and section) as the ADRL instruction, then an error will be generated. | ||
| 99 | This instruction will not make use of the literal pool. | ||
| 100 | |||
| 101 | +If @var{label} is a thumb function symbol, and thumb interworking has | ||
| 102 | +been enabled via the @option{-mthumb-interwork} option then the bottom | ||
| 103 | +bit of the value stored into @var{register} will be set. | ||
| 104 | + | ||
| 105 | @end table | ||
| 106 | |||
| 107 | For information on the ARM or Thumb instruction sets, see @cite{ARM | ||
| 108 | Index: git/gas/testsuite/gas/arm/adr.d | ||
| 109 | =================================================================== | ||
| 110 | --- git.orig/gas/testsuite/gas/arm/adr.d | ||
| 111 | +++ git/gas/testsuite/gas/arm/adr.d | ||
| 112 | @@ -1,3 +1,4 @@ | ||
| 113 | +#as: -mthumb-interwork | ||
| 114 | #objdump: -dr --prefix-addresses --show-raw-insn | ||
| 115 | #name: ADR | ||
| 116 | |||
| 117 | Index: git/gas/testsuite/gas/arm/adrl.d | ||
| 118 | =================================================================== | ||
| 119 | --- git.orig/gas/testsuite/gas/arm/adrl.d | ||
| 120 | +++ git/gas/testsuite/gas/arm/adrl.d | ||
| 121 | @@ -1,3 +1,4 @@ | ||
| 122 | +#as: -mthumb-interwork | ||
| 123 | #objdump: -dr --prefix-addresses --show-raw-insn | ||
| 124 | #name: ADRL | ||
| 125 | |||
| 126 | Index: git/gas/ChangeLog | ||
| 127 | =================================================================== | ||
| 128 | --- git.orig/gas/ChangeLog | ||
| 129 | +++ git/gas/ChangeLog | ||
| 130 | @@ -1,3 +1,17 @@ | ||
| 131 | +2018-06-20 Nick Clifton <nickc@redhat.com> | ||
| 132 | + | ||
| 133 | + PR 21458 | ||
| 134 | + * tc-arm.c (do_adr): Only set the bottom bit of an imported thumb | ||
| 135 | + function symbol address if -mthumb-interwork is active. | ||
| 136 | + (do_adrl): Likewise. | ||
| 137 | + * doc/c-arm.texi: Update descriptions of the -mthumb-interwork | ||
| 138 | + option and the ADR and ADRL pseudo-ops. | ||
| 139 | + * NEWS: Mention the new behaviour of the ADR and ADRL pseudo-ops. | ||
| 140 | + * testsuite/gas/arm/pr21458.d: Add -mthumb-interwork option to | ||
| 141 | + assembler command line. | ||
| 142 | + * testsuite/gas/arm/adr.d: Likewise. | ||
| 143 | + * testsuite/gas/arm/adrl.d: Likewise. | ||
| 144 | + | ||
| 145 | 2018-02-05 Nick Clifton <nickc@redhat.com> | ||
| 146 | |||
| 147 | * po/ru.po: Updated Russian translation. | ||
| 148 | Index: git/gas/NEWS | ||
| 149 | =================================================================== | ||
| 150 | --- git.orig/gas/NEWS | ||
| 151 | +++ git/gas/NEWS | ||
| 152 | @@ -1,5 +1,9 @@ | ||
| 153 | -*- text -*- | ||
| 154 | |||
| 155 | +* The ADR and ADRL pseudo-instructions supported by the ARM assembler | ||
| 156 | + now only set the bottom bit of the address of thumb function symbols | ||
| 157 | + if the -mthumb-interwork command line option is active. | ||
| 158 | + | ||
| 159 | Changes in 2.30: | ||
| 160 | |||
| 161 | * Add support for loaction views in DWARF debug line information. | ||
| 162 | Index: git/gas/testsuite/gas/arm/pr21458.d | ||
| 163 | =================================================================== | ||
| 164 | --- git.orig/gas/testsuite/gas/arm/pr21458.d | ||
| 165 | +++ git/gas/testsuite/gas/arm/pr21458.d | ||
| 166 | @@ -1,8 +1,9 @@ | ||
| 167 | +#as: -mthumb-interwork | ||
| 168 | #objdump: -d --prefix-addresses --show-raw-insn | ||
| 169 | #name: ADR(L) for Thumb functions | ||
| 170 | #skip: *-*-pe *-wince-* *-*-coff *-*-vxworks | ||
| 171 | |||
| 172 | -# Test that using ADR(L) on thumb function symbols sets the T bit. | ||
| 173 | +# Test that using ADR(L) on thumb function symbols sets the T bit when -mthumb-interwork is active. | ||
| 174 | |||
| 175 | .*: +file format .*arm.* | ||
| 176 | |||
