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