summaryrefslogtreecommitdiffstats
path: root/patches/binutils-2.17/generic/tc-arm.diff
blob: c3d51ef16aa4e2ccb20118e1e8d7ee6173322361 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#
# Submitted-By: Robert Schwebel, 2006-12-03
# Committed-By: Robert Schwebel
#
# Error:
#
# rsc@isonoe:/media/rscusb1_plain/svn/oselas/toolchain/trunks/OSELAS.Toolchain-trunk/build-target/glibc-2.5/elf$
# PATH=/media/rscusb1_plain/tmp//armeb-xscale-linux-gnueabi/gcc-4.1.1-glibc-2.5-kernel-2.6.18/bin:/media/rscusb1_plain/tmp//armeb-xscale
# -linux-gnueabi/gcc-4.1.1-glibc-2.5-kernel-2.6.18/usr/bin:$PATH armeb-xscale-linux-gnueabi-gcc dl-lookup.c -c -std=gnu99 -O2 -Wall
# -Winline -Wwrite-strings -fmerge-all-constants -g -Wstrict-prototypes  -pg -fexceptions -fasynchronous-unwind-tables   -I../include
# -I/media/rscusb1_plain/svn/oselas/toolchain/trunks/OSELAS.Toolchain-trunk/build-target/glibc-2.5-build/elf
# -I/media/rscusb1_plain/svn/oselas/toolchain/trunks/OSELAS.Toolchain-trunk/build-target/glibc-2.5-build -I../ports/sysdeps/arm/elf
# -I../ports/sysdeps/unix/sysv/linux/arm/eabi/nptl -I../ports/sysdeps/unix/sysv/linux/arm/eabi
# -I../ports/sysdeps/unix/sysv/linux/arm/nptl -I../ports/sysdeps/unix/sysv/linux/arm -I../ports/sysdeps/unix/sysv/linux
# -I../nptl/sysdeps/unix/sysv/linux -I../nptl/sysdeps/pthread -I../sysdeps/pthread -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu
# -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../ports/sysdeps/unix/sysv -I../nptl/sysdeps/unix/sysv
# -I../sysdeps/unix/sysv -I../ports/sysdeps/unix/arm -I../ports/sysdeps/unix -I../nptl/sysdeps/unix -I../sysdeps/unix -I../sysdeps/posix
# -I../ports/sysdeps/arm/eabi -I../ports/sysdeps/arm/nptl -I../ports/sysdeps/arm -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32
# -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -I../ports -I../nptl  -I.. -I../libio
# -I. -nostdinc -isystem
# /media/rscusb1_plain/tmp/armeb-xscale-linux-gnueabi/gcc-4.1.1-glibc-2.5-kernel-2.6.18/bin/../lib/gcc/armeb-xscale-linux-gnueabi/4.1.1/
# include -isystem
# /media/rscusb1_plain/tmp//armeb-xscale-linux-gnueabi/gcc-4.1.1-glibc-2.5-kernel-2.6.18/sysroot-armeb-xscale-linux-gnueabi/usr/include
# -D_LIBC_REENTRANT -include ../include/libc-symbols.h  -DPROF      -o
# /media/rscusb1_plain/svn/oselas/toolchain/trunks/OSELAS.Toolchain-trunk/build-target/glibc-2.5-build/elf/dl-lookup.op -MD -MP -MF
# /media/rscusb1_plain/svn/oselas/toolchain/trunks/OSELAS.Toolchain-trunk/build-target/glibc-2.5-build/elf/dl-lookup.op.dt -MT
# /media/rscusb1_plain/svn/oselas/toolchain/trunks/OSELAS.Toolchain-trunk/build-target/glibc-2.5-build/elf/dl-lookup.op
# /tmp/ccuNAGqV.s: Assembler messages:
# /tmp/ccuNAGqV.s:169: Error: junk at end of line, first unrecognized character is `,'
#
# Here's where the assember barfs (the second line):
#
# check_match.7984:
#         .fnstart
# .LFB69:
#         .file 2 "do-lookup.h"
#         .loc 2 76 0
#         @ Nested: function declared inside another function.
#         @ args = 0, pretend = 0, frame = 0
#         @ frame_needed = 1, uses_anonymous_args = 0
# .LVL19:
#         .pad #4
#         str     ip, [sp, #-4]!
#
# .LCFI4:
#         .movsp ip, #4      <---------------------------------------
#         add ip, sp, #4
#
# The ", #4" seems to be bogus. This is built with binutils 2.17.
#
#
# Description:
#
# http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-arm.c.diff?r1=1.292&r2=1.293&cvsroot=src
#
# State:
#
# fixed in upstream cvs
#

---
 gas/config/tc-arm.c |   13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

Index: binutils-2.17/gas/config/tc-arm.c
===================================================================
--- binutils-2.17.orig/gas/config/tc-arm.c
+++ binutils-2.17/gas/config/tc-arm.c
@@ -2710,6 +2710,7 @@ s_arm_unwind_movsp (int ignored ATTRIBUT
 {
   int reg;
   valueT op;
+  int offset;
 
   reg = arm_reg_parse (&input_line_pointer, REG_TYPE_RN);
   if (reg == FAIL)
@@ -2718,6 +2719,16 @@ s_arm_unwind_movsp (int ignored ATTRIBUT
       ignore_rest_of_line ();
       return;
     }
+
+  /* Optional constant.	 */
+  if (skip_past_comma (&input_line_pointer) != FAIL)
+    {
+      if (immediate_for_directive (&offset) == FAIL)
+	return;
+    }
+  else
+    offset = 0;
+
   demand_empty_rest_of_line ();
 
   if (reg == REG_SP || reg == REG_PC)
@@ -2735,7 +2746,7 @@ s_arm_unwind_movsp (int ignored ATTRIBUT
 
   /* Record the information for later.	*/
   unwind.fp_reg = reg;
-  unwind.fp_offset = unwind.frame_size;
+  unwind.fp_offset = unwind.frame_size - offset;
   unwind.sp_restored = 1;
 }