xref: /OK3568_Linux_fs/buildroot/package/elf2flt/0003-elf2flt-handle-binutils-2.34.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunFrom 26165906f85d82f0a4456f34b5c60fcaaef48535 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Romain Naour <romain.naour@smile.fr>
3*4882a593SmuzhiyunDate: Wed, 5 Feb 2020 10:31:32 +0100
4*4882a593SmuzhiyunSubject: [PATCH] elf2flt: handle binutils >= 2.34
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunThe latest Binutils release (2.34) is not compatible with elf2flt due
7*4882a593Smuzhiyunto a change in bfd_section_* macros [1]. The issue has been reported
8*4882a593Smuzhiyunto the Binutils mailing list but Alan Modra recommend to bundle
9*4882a593Smuzhiyunlibbfd library sources into each projects using it [2]. That's
10*4882a593Smuzhiyunbecause the API is not stable over the time without any backward
11*4882a593Smuzhiyuncompatibility guaranties.
12*4882a593Smuzhiyun
13*4882a593SmuzhiyunOn the other hand, the elf2flt tools needs to support modified
14*4882a593Smuzhiyunversion of binutils for specific arch/target [3].
15*4882a593Smuzhiyun
16*4882a593SmuzhiyunAdd two tests in the configure script to detect this API change
17*4882a593Smuzhiyunin order to support binutils < 2.34 and binutils >= 2.34.
18*4882a593Smuzhiyun
19*4882a593SmuzhiyunUpstream status: [4]
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun[1] https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=fd3619828e94a24a92cddec42cbc0ab33352eeb4
22*4882a593Smuzhiyun[2] https://sourceware.org/ml/binutils/2020-02/msg00044.html
23*4882a593Smuzhiyun[3] https://github.com/uclinux-dev/elf2flt/issues/14
24*4882a593Smuzhiyun[4] https://github.com/uclinux-dev/elf2flt/pull/15
25*4882a593Smuzhiyun
26*4882a593SmuzhiyunSigned-off-by: Romain Naour <romain.naour@smile.fr>
27*4882a593Smuzhiyun---
28*4882a593Smuzhiyun configure.ac | 16 +++++++++++
29*4882a593Smuzhiyun elf2flt.c    | 81 +++++++++++++++++++++++++++++-----------------------
30*4882a593Smuzhiyun 2 files changed, 61 insertions(+), 36 deletions(-)
31*4882a593Smuzhiyun
32*4882a593Smuzhiyundiff --git a/configure.ac b/configure.ac
33*4882a593Smuzhiyunindex e82eb1d..cf7dea8 100644
34*4882a593Smuzhiyun--- a/configure.ac
35*4882a593Smuzhiyun+++ b/configure.ac
36*4882a593Smuzhiyun@@ -229,6 +229,22 @@ AC_CHECK_FUNCS([ \
37*4882a593Smuzhiyun 	strsignal \
38*4882a593Smuzhiyun ])
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun+dnl Various bfd section macros and functions like bfd_section_size() have been
41*4882a593Smuzhiyun+dnl modified starting with binutils >= 2.34.
42*4882a593Smuzhiyun+dnl Check if the prototypes take a bfd argument.
43*4882a593Smuzhiyun+if test "$binutils_build_dir" != "NONE"; then
44*4882a593Smuzhiyun+    CFLAGS="-I$binutils_include_dir -I$bfd_include_dir $CFLAGS"
45*4882a593Smuzhiyun+fi
46*4882a593Smuzhiyun+
47*4882a593Smuzhiyun+AC_TRY_COMPILE([#include <bfd.h>],
48*4882a593Smuzhiyun+ [const asection *sec; bfd_section_size(sec);],
49*4882a593Smuzhiyun+ bfd_section_api_takes_bfd=no,
50*4882a593Smuzhiyun+ bfd_section_api_takes_bfd=yes)
51*4882a593Smuzhiyun+if test "$bfd_section_api_takes_bfd" = "yes" ; then
52*4882a593Smuzhiyun+  AC_DEFINE(HAVE_BFD_SECTION_API_TAKES_BFD, 1,
53*4882a593Smuzhiyun+   [define to 1 for binutils < 2.34])
54*4882a593Smuzhiyun+fi
55*4882a593Smuzhiyun+
56*4882a593Smuzhiyun if test "$GCC" = yes ; then
57*4882a593Smuzhiyun 	CFLAGS="-Wall $CFLAGS"
58*4882a593Smuzhiyun 	if test "$werror" = 1 ; then
59*4882a593Smuzhiyundiff --git a/elf2flt.c b/elf2flt.c
60*4882a593Smuzhiyunindex b93aecd..3bcf4fe 100644
61*4882a593Smuzhiyun--- a/elf2flt.c
62*4882a593Smuzhiyun+++ b/elf2flt.c
63*4882a593Smuzhiyun@@ -149,6 +149,17 @@ const char *elf2flt_progname;
64*4882a593Smuzhiyun #define O_BINARY 0
65*4882a593Smuzhiyun #endif
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun+/*
68*4882a593Smuzhiyun+ * The bfd parameter isn't actually used by any of the bfd_section funcs and
69*4882a593Smuzhiyun+ * have been removed since binutils 2.34.
70*4882a593Smuzhiyun+ */
71*4882a593Smuzhiyun+#ifdef HAVE_BFD_SECTION_API_TAKES_BFD
72*4882a593Smuzhiyun+#define elf2flt_bfd_section_size(s) bfd_section_size(NULL, s)
73*4882a593Smuzhiyun+#define elf2flt_bfd_section_vma(s)  bfd_section_vma(NULL, s)
74*4882a593Smuzhiyun+#else
75*4882a593Smuzhiyun+#define elf2flt_bfd_section_size(s) bfd_section_size(s)
76*4882a593Smuzhiyun+#define elf2flt_bfd_section_vma(s)  bfd_section_vma(s)
77*4882a593Smuzhiyun+#endif
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun /* Extra output when running.  */
80*4882a593Smuzhiyun static int verbose = 0;
81*4882a593Smuzhiyun@@ -323,10 +334,8 @@ compare_relocs (const void *pa, const void *pb)
82*4882a593Smuzhiyun 	else if (!rb->sym_ptr_ptr || !*rb->sym_ptr_ptr)
83*4882a593Smuzhiyun 		return 1;
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun-	a_vma = bfd_section_vma(compare_relocs_bfd,
86*4882a593Smuzhiyun-				(*(ra->sym_ptr_ptr))->section);
87*4882a593Smuzhiyun-	b_vma = bfd_section_vma(compare_relocs_bfd,
88*4882a593Smuzhiyun-				(*(rb->sym_ptr_ptr))->section);
89*4882a593Smuzhiyun+	a_vma = elf2flt_bfd_section_vma((*(ra->sym_ptr_ptr))->section);
90*4882a593Smuzhiyun+	b_vma = elf2flt_bfd_section_vma((*(rb->sym_ptr_ptr))->section);
91*4882a593Smuzhiyun 	va = (*(ra->sym_ptr_ptr))->value + a_vma + ra->addend;
92*4882a593Smuzhiyun 	vb = (*(rb->sym_ptr_ptr))->value + b_vma + rb->addend;
93*4882a593Smuzhiyun 	return va - vb;
94*4882a593Smuzhiyun@@ -403,7 +412,7 @@ output_relocs (
95*4882a593Smuzhiyun   }
96*4882a593Smuzhiyun
97*4882a593Smuzhiyun   for (a = abs_bfd->sections; (a != (asection *) NULL); a = a->next) {
98*4882a593Smuzhiyun-  	section_vma = bfd_section_vma(abs_bfd, a);
99*4882a593Smuzhiyun+	section_vma = elf2flt_bfd_section_vma(a);
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun 	if (verbose)
102*4882a593Smuzhiyun 		printf("SECTION: %s [%p]: flags=0x%x vma=0x%"PRIx32"\n",
103*4882a593Smuzhiyun@@ -442,7 +451,7 @@ output_relocs (
104*4882a593Smuzhiyun 	  continue;
105*4882a593Smuzhiyun 	if (verbose)
106*4882a593Smuzhiyun 	  printf(" RELOCS: %s [%p]: flags=0x%x vma=0x%"BFD_VMA_FMT"x\n",
107*4882a593Smuzhiyun-			r->name, r, r->flags, bfd_section_vma(abs_bfd, r));
108*4882a593Smuzhiyun+			r->name, r, r->flags, elf2flt_bfd_section_vma(r));
109*4882a593Smuzhiyun   	if ((r->flags & SEC_RELOC) == 0)
110*4882a593Smuzhiyun   	  continue;
111*4882a593Smuzhiyun 	relsize = bfd_get_reloc_upper_bound(rel_bfd, r);
112*4882a593Smuzhiyun@@ -694,7 +703,7 @@ output_relocs (
113*4882a593Smuzhiyun 				case R_BFIN_RIMM16:
114*4882a593Smuzhiyun 				case R_BFIN_LUIMM16:
115*4882a593Smuzhiyun 				case R_BFIN_HUIMM16:
116*4882a593Smuzhiyun-				    sym_vma = bfd_section_vma(abs_bfd, sym_section);
117*4882a593Smuzhiyun+				    sym_vma = elf2flt_bfd_section_vma(sym_section);
118*4882a593Smuzhiyun 				    sym_addr += sym_vma + q->addend;
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun 				    if (weak_und_symbol(sym_section->name, (*(q->sym_ptr_ptr))))
121*4882a593Smuzhiyun@@ -727,7 +736,7 @@ output_relocs (
122*4882a593Smuzhiyun 				    break;
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun 				case R_BFIN_BYTE4_DATA:
125*4882a593Smuzhiyun-				    sym_vma = bfd_section_vma(abs_bfd, sym_section);
126*4882a593Smuzhiyun+				    sym_vma = elf2flt_bfd_section_vma(sym_section);
127*4882a593Smuzhiyun 				    sym_addr += sym_vma + q->addend;
128*4882a593Smuzhiyun
129*4882a593Smuzhiyun 				    if (weak_und_symbol (sym_section->name, (*(q->sym_ptr_ptr))))
130*4882a593Smuzhiyun@@ -885,7 +894,7 @@ output_relocs (
131*4882a593Smuzhiyun #if defined(TARGET_m68k)
132*4882a593Smuzhiyun 				case R_68K_32:
133*4882a593Smuzhiyun 					relocation_needed = 1;
134*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
135*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
136*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
137*4882a593Smuzhiyun 					break;
138*4882a593Smuzhiyun 				case R_68K_PC16:
139*4882a593Smuzhiyun@@ -910,7 +919,7 @@ output_relocs (
140*4882a593Smuzhiyun 							q->address, sym_addr,
141*4882a593Smuzhiyun 							(*p)->howto->rightshift,
142*4882a593Smuzhiyun 							*(uint32_t *)r_mem);
143*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
144*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
145*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
146*4882a593Smuzhiyun 					break;
147*4882a593Smuzhiyun 				case R_ARM_GOT32:
148*4882a593Smuzhiyun@@ -938,7 +947,7 @@ output_relocs (
149*4882a593Smuzhiyun #ifdef TARGET_v850
150*4882a593Smuzhiyun 				case R_V850_ABS32:
151*4882a593Smuzhiyun 					relocation_needed = 1;
152*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
153*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
154*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
155*4882a593Smuzhiyun 					break;
156*4882a593Smuzhiyun 				case R_V850_ZDA_16_16_OFFSET:
157*4882a593Smuzhiyun@@ -960,7 +969,7 @@ output_relocs (
158*4882a593Smuzhiyun 					sym_addr = (*(q->sym_ptr_ptr))->value;
159*4882a593Smuzhiyun 					q->address -= 1;
160*4882a593Smuzhiyun 					r_mem -= 1; /* tracks q->address */
161*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
162*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
163*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
164*4882a593Smuzhiyun 					sym_addr |= (*(unsigned char *)r_mem<<24);
165*4882a593Smuzhiyun 					break;
166*4882a593Smuzhiyun@@ -973,7 +982,7 @@ output_relocs (
167*4882a593Smuzhiyun 					/* Absolute symbol done not relocation */
168*4882a593Smuzhiyun 					relocation_needed = !bfd_is_abs_section(sym_section);
169*4882a593Smuzhiyun 					sym_addr = (*(q->sym_ptr_ptr))->value;
170*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
171*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
172*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
173*4882a593Smuzhiyun 					break;
174*4882a593Smuzhiyun 				case R_H8_DIR32:
175*4882a593Smuzhiyun@@ -986,7 +995,7 @@ output_relocs (
176*4882a593Smuzhiyun 					}
177*4882a593Smuzhiyun 					relocation_needed = 1;
178*4882a593Smuzhiyun 					sym_addr = (*(q->sym_ptr_ptr))->value;
179*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
180*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
181*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
182*4882a593Smuzhiyun 					break;
183*4882a593Smuzhiyun 				case R_H8_PCREL16:
184*4882a593Smuzhiyun@@ -1012,7 +1021,7 @@ output_relocs (
185*4882a593Smuzhiyun #ifdef TARGET_microblaze
186*4882a593Smuzhiyun 				case R_MICROBLAZE_64:
187*4882a593Smuzhiyun 					/* work out the relocation */
188*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
189*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
190*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
191*4882a593Smuzhiyun 					/* Write relocated pointer back */
192*4882a593Smuzhiyun 					r_mem[2] = (sym_addr >> 24) & 0xff;
193*4882a593Smuzhiyun@@ -1026,7 +1035,7 @@ output_relocs (
194*4882a593Smuzhiyun 					pflags = 0x80000000;
195*4882a593Smuzhiyun 					break;
196*4882a593Smuzhiyun 				case R_MICROBLAZE_32:
197*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
198*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
199*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
200*4882a593Smuzhiyun 					relocation_needed = 1;
201*4882a593Smuzhiyun 					break;
202*4882a593Smuzhiyun@@ -1058,7 +1067,7 @@ output_relocs (
203*4882a593Smuzhiyun 				case R_NIOS2_BFD_RELOC_32:
204*4882a593Smuzhiyun 					relocation_needed = 1;
205*4882a593Smuzhiyun 					pflags = (FLAT_NIOS2_R_32 << 28);
206*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
207*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
208*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
209*4882a593Smuzhiyun 					/* modify target, in target order */
210*4882a593Smuzhiyun 					*(unsigned long *)r_mem = htoniosl(sym_addr);
211*4882a593Smuzhiyun@@ -1068,7 +1077,7 @@ output_relocs (
212*4882a593Smuzhiyun 					unsigned long exist_val;
213*4882a593Smuzhiyun 					relocation_needed = 1;
214*4882a593Smuzhiyun 					pflags = (FLAT_NIOS2_R_CALL26 << 28);
215*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
216*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
217*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
218*4882a593Smuzhiyun
219*4882a593Smuzhiyun 					/* modify target, in target order */
220*4882a593Smuzhiyun@@ -1099,7 +1108,7 @@ output_relocs (
221*4882a593Smuzhiyun 								? FLAT_NIOS2_R_HIADJ_LO : FLAT_NIOS2_R_HI_LO;
222*4882a593Smuzhiyun 							pflags <<= 28;
223*4882a593Smuzhiyun
224*4882a593Smuzhiyun-							sym_vma = bfd_section_vma(abs_bfd, sym_section);
225*4882a593Smuzhiyun+							sym_vma = elf2flt_bfd_section_vma(sym_section);
226*4882a593Smuzhiyun 							sym_addr += sym_vma + q->addend;
227*4882a593Smuzhiyun
228*4882a593Smuzhiyun 							/* modify high 16 bits, in target order */
229*4882a593Smuzhiyun@@ -1132,7 +1141,7 @@ output_relocs (
230*4882a593Smuzhiyun 						goto NIOS2_RELOC_ERR;
231*4882a593Smuzhiyun 					}
232*4882a593Smuzhiyun 					/* _gp holds a absolute value, otherwise the ld cannot generate correct code */
233*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
234*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
235*4882a593Smuzhiyun 					//printf("sym=%x, %d, _gp=%x, %d\n", sym_addr+sym_vma, sym_addr+sym_vma, gp, gp);
236*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
237*4882a593Smuzhiyun 					sym_addr -= gp;
238*4882a593Smuzhiyun@@ -1213,7 +1222,7 @@ NIOS2_RELOC_ERR:
239*4882a593Smuzhiyun 				case R_SPARC_32:
240*4882a593Smuzhiyun 				case R_SPARC_UA32:
241*4882a593Smuzhiyun 					relocation_needed = 1;
242*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
243*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
244*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
245*4882a593Smuzhiyun 					break;
246*4882a593Smuzhiyun 				case R_SPARC_PC22:
247*4882a593Smuzhiyun@@ -1232,7 +1241,7 @@ NIOS2_RELOC_ERR:
248*4882a593Smuzhiyun 				case R_SPARC_HI22:
249*4882a593Smuzhiyun 					relocation_needed = 1;
250*4882a593Smuzhiyun 					pflags = 0x80000000;
251*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
252*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
253*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
254*4882a593Smuzhiyun 					sym_addr |= (
255*4882a593Smuzhiyun 						htonl(*(uint32_t *)r_mem)
256*4882a593Smuzhiyun@@ -1242,7 +1251,7 @@ NIOS2_RELOC_ERR:
257*4882a593Smuzhiyun 				case R_SPARC_LO10:
258*4882a593Smuzhiyun 					relocation_needed = 1;
259*4882a593Smuzhiyun 					pflags = 0x40000000;
260*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
261*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
262*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
263*4882a593Smuzhiyun 					sym_addr &= 0x000003ff;
264*4882a593Smuzhiyun 					sym_addr |= (
265*4882a593Smuzhiyun@@ -1256,7 +1265,7 @@ NIOS2_RELOC_ERR:
266*4882a593Smuzhiyun #ifdef TARGET_sh
267*4882a593Smuzhiyun 				case R_SH_DIR32:
268*4882a593Smuzhiyun 					relocation_needed = 1;
269*4882a593Smuzhiyun-					sym_vma = bfd_section_vma(abs_bfd, sym_section);
270*4882a593Smuzhiyun+					sym_vma = elf2flt_bfd_section_vma(sym_section);
271*4882a593Smuzhiyun 					sym_addr += sym_vma + q->addend;
272*4882a593Smuzhiyun 					break;
273*4882a593Smuzhiyun 				case R_SH_REL32:
274*4882a593Smuzhiyun@@ -1288,7 +1297,7 @@ NIOS2_RELOC_ERR:
275*4882a593Smuzhiyun 				case R_E1_CONST31:
276*4882a593Smuzhiyun 						relocation_needed = 1;
277*4882a593Smuzhiyun 						DBG_E1("Handling Reloc <CONST31>\n");
278*4882a593Smuzhiyun-						sec_vma = bfd_section_vma(abs_bfd, sym_section);
279*4882a593Smuzhiyun+						sec_vma = elf2flt_bfd_section_vma(sym_section);
280*4882a593Smuzhiyun 						DBG_E1("sec_vma : [0x%x], sym_addr : [0x%x], q->address : [0x%x]\n",
281*4882a593Smuzhiyun 										sec_vma, sym_addr, q->address);
282*4882a593Smuzhiyun 						sym_addr = sec_vma + sym_addr;
283*4882a593Smuzhiyun@@ -1303,7 +1312,7 @@ NIOS2_RELOC_ERR:
284*4882a593Smuzhiyun 						relocation_needed = 0;
285*4882a593Smuzhiyun 						DBG_E1("Handling Reloc <CONST31_PCREL>\n");
286*4882a593Smuzhiyun 						DBG_E1("DONT RELOCATE AT LOADING\n");
287*4882a593Smuzhiyun-						sec_vma = bfd_section_vma(abs_bfd, sym_section);
288*4882a593Smuzhiyun+						sec_vma = elf2flt_bfd_section_vma(sym_section);
289*4882a593Smuzhiyun 						DBG_E1("sec_vma : [0x%x], sym_addr : [0x%x], q->address : [0x%x]\n",
290*4882a593Smuzhiyun 										sec_vma, sym_addr, q->address);
291*4882a593Smuzhiyun 						sym_addr =  sec_vma + sym_addr;
292*4882a593Smuzhiyun@@ -1330,7 +1339,7 @@ NIOS2_RELOC_ERR:
293*4882a593Smuzhiyun 						relocation_needed = 0;
294*4882a593Smuzhiyun 						DBG_E1("Handling Reloc <DIS29W_PCREL>\n");
295*4882a593Smuzhiyun 						DBG_E1("DONT RELOCATE AT LOADING\n");
296*4882a593Smuzhiyun-						sec_vma = bfd_section_vma(abs_bfd, sym_section);
297*4882a593Smuzhiyun+						sec_vma = elf2flt_bfd_section_vma(sym_section);
298*4882a593Smuzhiyun 						DBG_E1("sec_vma : [0x%x], sym_addr : [0x%x], q->address : [0x%x]\n",
299*4882a593Smuzhiyun 										sec_vma, sym_addr, q->address);
300*4882a593Smuzhiyun 						sym_addr =  sec_vma + sym_addr;
301*4882a593Smuzhiyun@@ -1363,7 +1372,7 @@ NIOS2_RELOC_ERR:
302*4882a593Smuzhiyun 						DBG_E1("Handling Reloc <DIS29B>\n");
303*4882a593Smuzhiyun DIS29_RELOCATION:
304*4882a593Smuzhiyun 						relocation_needed = 1;
305*4882a593Smuzhiyun-						sec_vma = bfd_section_vma(abs_bfd, sym_section);
306*4882a593Smuzhiyun+						sec_vma = elf2flt_bfd_section_vma(sym_section);
307*4882a593Smuzhiyun 						DBG_E1("sec_vma : [0x%x], sym_addr : [0x%08x]\n",
308*4882a593Smuzhiyun 										sec_vma, sym_addr);
309*4882a593Smuzhiyun 						sym_addr =  sec_vma + sym_addr;
310*4882a593Smuzhiyun@@ -1380,7 +1389,7 @@ DIS29_RELOCATION:
311*4882a593Smuzhiyun 						relocation_needed = 0;
312*4882a593Smuzhiyun 						DBG_E1("Handling Reloc <IMM32_PCREL>\n");
313*4882a593Smuzhiyun 						DBG_E1("DONT RELOCATE AT LOADING\n");
314*4882a593Smuzhiyun-						sec_vma = bfd_section_vma(abs_bfd, sym_section);
315*4882a593Smuzhiyun+						sec_vma = elf2flt_bfd_section_vma(sym_section);
316*4882a593Smuzhiyun 						DBG_E1("sec_vma : [0x%x], sym_addr : [0x%x]\n",
317*4882a593Smuzhiyun 										sec_vma, sym_addr);
318*4882a593Smuzhiyun 						sym_addr =  sec_vma + sym_addr;
319*4882a593Smuzhiyun@@ -1406,7 +1415,7 @@ DIS29_RELOCATION:
320*4882a593Smuzhiyun 				case R_E1_IMM32:
321*4882a593Smuzhiyun 						relocation_needed = 1;
322*4882a593Smuzhiyun 						DBG_E1("Handling Reloc <IMM32>\n");
323*4882a593Smuzhiyun-						sec_vma = bfd_section_vma(abs_bfd, sym_section);
324*4882a593Smuzhiyun+						sec_vma = elf2flt_bfd_section_vma(sym_section);
325*4882a593Smuzhiyun 						DBG_E1("sec_vma : [0x%x], sym_addr : [0x%x]\n",
326*4882a593Smuzhiyun 										sec_vma, sym_addr);
327*4882a593Smuzhiyun 						sym_addr =  sec_vma + sym_addr;
328*4882a593Smuzhiyun@@ -1422,7 +1431,7 @@ DIS29_RELOCATION:
329*4882a593Smuzhiyun 				case R_E1_WORD:
330*4882a593Smuzhiyun 						relocation_needed = 1;
331*4882a593Smuzhiyun 						DBG_E1("Handling Reloc <WORD>\n");
332*4882a593Smuzhiyun-						sec_vma = bfd_section_vma(abs_bfd, sym_section);
333*4882a593Smuzhiyun+						sec_vma = elf2flt_bfd_section_vma(sym_section);
334*4882a593Smuzhiyun 						DBG_E1("sec_vma : [0x%x], sym_addr : [0x%x]\n",
335*4882a593Smuzhiyun 										sec_vma, sym_addr);
336*4882a593Smuzhiyun 						sym_addr =  sec_vma + sym_addr;
337*4882a593Smuzhiyun@@ -1449,7 +1458,7 @@ DIS29_RELOCATION:
338*4882a593Smuzhiyun 			}
339*4882a593Smuzhiyun
340*4882a593Smuzhiyun 			sprintf(&addstr[0], "+0x%lx", sym_addr - (*(q->sym_ptr_ptr))->value -
341*4882a593Smuzhiyun-					 bfd_section_vma(abs_bfd, sym_section));
342*4882a593Smuzhiyun+					 elf2flt_bfd_section_vma(sym_section));
343*4882a593Smuzhiyun
344*4882a593Smuzhiyun
345*4882a593Smuzhiyun 			/*
346*4882a593Smuzhiyun@@ -1887,8 +1896,8 @@ int main(int argc, char *argv[])
347*4882a593Smuzhiyun     } else
348*4882a593Smuzhiyun       continue;
349*4882a593Smuzhiyun
350*4882a593Smuzhiyun-    sec_size = bfd_section_size(abs_bfd, s);
351*4882a593Smuzhiyun-    sec_vma  = bfd_section_vma(abs_bfd, s);
352*4882a593Smuzhiyun+    sec_size = elf2flt_bfd_section_size(s);
353*4882a593Smuzhiyun+    sec_vma  = elf2flt_bfd_section_vma(s);
354*4882a593Smuzhiyun
355*4882a593Smuzhiyun     if (sec_vma < *vma) {
356*4882a593Smuzhiyun       if (*len > 0)
357*4882a593Smuzhiyun@@ -1913,7 +1922,7 @@ int main(int argc, char *argv[])
358*4882a593Smuzhiyun     if (s->flags & SEC_CODE)
359*4882a593Smuzhiyun       if (!bfd_get_section_contents(abs_bfd, s,
360*4882a593Smuzhiyun 				   text + (s->vma - text_vma), 0,
361*4882a593Smuzhiyun-				   bfd_section_size(abs_bfd, s)))
362*4882a593Smuzhiyun+				   elf2flt_bfd_section_size(s)))
363*4882a593Smuzhiyun       {
364*4882a593Smuzhiyun 	fatal("read error section %s", s->name);
365*4882a593Smuzhiyun       }
366*4882a593Smuzhiyun@@ -1939,7 +1948,7 @@ int main(int argc, char *argv[])
367*4882a593Smuzhiyun     if (s->flags & SEC_DATA)
368*4882a593Smuzhiyun       if (!bfd_get_section_contents(abs_bfd, s,
369*4882a593Smuzhiyun 				   data + (s->vma - data_vma), 0,
370*4882a593Smuzhiyun-				   bfd_section_size(abs_bfd, s)))
371*4882a593Smuzhiyun+				   elf2flt_bfd_section_size(s)))
372*4882a593Smuzhiyun       {
373*4882a593Smuzhiyun 	fatal("read error section %s", s->name);
374*4882a593Smuzhiyun       }
375*4882a593Smuzhiyun--
376*4882a593Smuzhiyun2.25.4
377*4882a593Smuzhiyun
378