summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/binutils/binutils-2.23.2/backport/0002-config-tc-ppc.c-md_apply_fix-Sign-extend-fieldval-un.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/binutils/binutils-2.23.2/backport/0002-config-tc-ppc.c-md_apply_fix-Sign-extend-fieldval-un.patch')
-rw-r--r--meta/recipes-devtools/binutils/binutils-2.23.2/backport/0002-config-tc-ppc.c-md_apply_fix-Sign-extend-fieldval-un.patch85
1 files changed, 85 insertions, 0 deletions
diff --git a/meta/recipes-devtools/binutils/binutils-2.23.2/backport/0002-config-tc-ppc.c-md_apply_fix-Sign-extend-fieldval-un.patch b/meta/recipes-devtools/binutils/binutils-2.23.2/backport/0002-config-tc-ppc.c-md_apply_fix-Sign-extend-fieldval-un.patch
new file mode 100644
index 0000000000..a62ca4704a
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils-2.23.2/backport/0002-config-tc-ppc.c-md_apply_fix-Sign-extend-fieldval-un.patch
@@ -0,0 +1,85 @@
1config/tc-ppc.c (md_apply_fix): Sign extend fieldval under control of operand flag bits.
2
3Upstream-Status: Backport
4
5Signed-off-by: Zhenhua Luo <zhenhua.luo@freescale.com>
6
7commit cf5434698882f41ddfcc469488e8a68c674aae03
8Author: Alan Modra <amodra@bigpond.net.au>
9Date: Thu May 9 04:01:53 2013 +0000
10
11--- binutils-2.23.2/gas/config/tc-ppc.c.orig 2013-06-02 21:53:24.000000000 -0500
12+++ binutils-2.23.2/gas/config/tc-ppc.c 2013-06-02 22:03:00.000000000 -0500
13@@ -6355,7 +6355,10 @@
14 case BFD_RELOC_LO16_PCREL:
15 case BFD_RELOC_PPC_VLE_LO16A:
16 case BFD_RELOC_PPC_VLE_LO16D:
17- fieldval = SEX16 (value);
18+ fieldval = value & 0xffff;
19+ sign_extend_16:
20+ if ((operand->flags & PPC_OPERAND_SIGNED) != 0)
21+ fieldval = (fieldval ^ 0x8000) - 0x8000;
22 fixP->fx_no_overflow = 1;
23 break;
24
25@@ -6366,9 +6369,8 @@
26 case BFD_RELOC_HI16_PCREL:
27 case BFD_RELOC_PPC_VLE_HI16A:
28 case BFD_RELOC_PPC_VLE_HI16D:
29- fieldval = SEX16 (PPC_HI (value));
30- fixP->fx_no_overflow = 1;
31- break;
32+ fieldval = PPC_HI (value);
33+ goto sign_extend_16;
34
35 case BFD_RELOC_HI16_S:
36 if (fixP->fx_pcrel)
37@@ -6377,38 +6379,33 @@
38 case BFD_RELOC_HI16_S_PCREL:
39 case BFD_RELOC_PPC_VLE_HA16A:
40 case BFD_RELOC_PPC_VLE_HA16D:
41- fieldval = SEX16 (PPC_HA (value));
42- fixP->fx_no_overflow = 1;
43- break;
44+ fieldval = PPC_HA (value);
45+ goto sign_extend_16;
46
47 #ifdef OBJ_ELF
48 case BFD_RELOC_PPC64_HIGHER:
49 if (fixP->fx_pcrel)
50 goto bad_pcrel;
51- fieldval = SEX16 (PPC_HIGHER (value));
52- fixP->fx_no_overflow = 1;
53- break;
54+ fieldval = PPC_HIGHER (value);
55+ goto sign_extend_16;
56
57 case BFD_RELOC_PPC64_HIGHER_S:
58 if (fixP->fx_pcrel)
59 goto bad_pcrel;
60- fieldval = SEX16 (PPC_HIGHERA (value));
61- fixP->fx_no_overflow = 1;
62- break;
63+ fieldval = PPC_HIGHERA (value);
64+ goto sign_extend_16;
65
66 case BFD_RELOC_PPC64_HIGHEST:
67 if (fixP->fx_pcrel)
68 goto bad_pcrel;
69- fieldval = SEX16 (PPC_HIGHEST (value));
70- fixP->fx_no_overflow = 1;
71- break;
72+ fieldval = PPC_HIGHEST (value);
73+ goto sign_extend_16;
74
75 case BFD_RELOC_PPC64_HIGHEST_S:
76 if (fixP->fx_pcrel)
77 goto bad_pcrel;
78- fieldval = SEX16 (PPC_HIGHESTA (value));
79- fixP->fx_no_overflow = 1;
80- break;
81+ fieldval = PPC_HIGHESTA (value);
82+ goto sign_extend_16;
83
84 /* The following relocs can't be calculated by the assembler.
85 Leave the field zero. */