> -----Original Message----- > From: Jie Zhang [mailto:jie@xxxxxxxxxxxxxxxx] > Sent: Tuesday, July 06, 2010 01:53 > To: Pavel Pavlov > Cc: gcc-help@xxxxxxxxxxx > Subject: Re: ARM GCC: MOVT/MOVW reloacations error > > On 07/06/2010 08:50 AM, Pavel Pavlov wrote: > > I'm compiling for armv7 windows mobile (coff-pe). The problem I have is > that my build of gcc tries to use MOVT/MOVW in the following case: > > > > static void test_func(){} > > > > void test(struct teststruct * ts) > > { > > ts->func = test_func; > > } > > > > The generated asm will be: > > ... > > movw r4, #:lower16:test_func > > movt r4, #:upper16:test_func > > > > When compiling I get this error: > > GNU assembler version 2.20.51 (arm-mingw32ce) using BFD version (GNU > > Binutils) 2.20.51.20091016 > > test.s: Assembler messages: > > ... > > test.s:10: Error: cannot represent BFD_RELOC_ARM_MOVW relocation in > > this object file format > > test.s:11: Error: cannot represent BFD_RELOC_ARM_MOVT relocation in > > this object file format ... > > > > > > basically, it simply fails in my case because such asm cannot work on > windows, and I'm not sure if such thing can work anywhere else. > > ARM ELF targets use movw/movt. But apparently binutils for ARM COFF > targets cannot handle such relocations. So I think it might be a good to > disable it for ARM COFF targets. > > > Can somebody maybe recommend where I need to look for in gcc code to > make gcc not generate movw/movt sequences for functions (or anything > else that isn't a real constant at compile time)? > > > You could try this draft patch. > > Hi, I tried that patch and it fixes the issue. However, I have a question related to the original error. Assembler cries than that it cannot represent that sequence in coff object file, but technically that kind of relocs are supported by windows loader: Winnt.h contains flags for relocs and the flags for MOVW/MOVT sequence should be IMAGE_REL_BASED_HIGH and IMAGE_REL_BASED_LOW. Probably it's more related to binutils than to gcc, hopefully somebody from binutils can comment on that. Thanks