http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56114
--- Comment #3 from Alexander Kobets <akobets at mail dot ru> 2013-01-26
14:30:42 UTC ---
(In reply to comment #2)
> Proposed patch:
It is correcting this code, but break another. For example (-mcmodel=large):
--cut here--
long* p1;
long foo2 (void)
{
p1 = (long*)0x123;
return 5;
}
--cut here--
$ x86_64-linux-gnu-gcc -c -mcmodel=large -save-temps l.c -O1 -masm=intel
l.s: Assembler messages:
l.s:10: Error: operand type mismatch for `movabs'
$ cat l.s
.file "l.c"
.intel_syntax noprefix
.text
.globl foo2
.type foo2, @function
foo2:
.LFB0:
.cfi_startproc
mov eax, 291
movabs [OFFSET FLAT:p1], rax
mov ax, 5
ret
.cfi_endproc
.LFE0:
.size foo2, .-foo2
.comm p1,8,8
.ident "GCC: (GNU) 4.7.2"
.section .note.GNU-stack,"",@progbits
The instruction movabs [OFFSET FLAT:p1], rax
before patch was without square brackets and normal compiled.