Re: ARM GCC: MOVT/MOVW reloacations error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.


Regards,
--
Jie Zhang
CodeSourcery
Index: config/arm/coff.h
===================================================================
--- config/arm/coff.h	(revision 161820)
+++ config/arm/coff.h	(working copy)
@@ -35,6 +35,9 @@
 #undef  TARGET_DEFAULT
 #define TARGET_DEFAULT (MASK_APCS_FRAME)
 
+/* COFF targets use constant pool instead of MOVW/MOVT.  */
+#define TARGET_USE_MOVT 0
+
 #ifndef MULTILIB_DEFAULTS
 #define MULTILIB_DEFAULTS \
   { "marm", "mlittle-endian", "msoft-float", "mno-thumb-interwork" }

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux