On Tue, Jul 05, 2016 at 10:32:15AM -0400, Kevin O'Connor wrote:
On Tue, Jul 05, 2016 at 03:49:34PM +0200, Roger Pau Monné wrote:
Hello,
I'm seeing the following issue when building SeaBIOS with gcc > 4.8:
Compiling whole program out/ccode32flat.o Compiling whole program out/code32seg.o Compiling whole program out/ccode16.o /tmp//ccecsJuF.s: Assembler messages: /tmp//ccecsJuF.s:539: Error: register save offset not a multiple of 8
[...]
/tmp//ccecsJuF.s:27692: Error: register save offset not a multiple of 8 Makefile:154: recipe for target 'out/ccode16.o' failed gmake: *** [out/ccode16.o] Error 1
This works fine when using gcc 4.8, but fails in the same way with gcc 5.4. The assembler version used is:
GNU assembler version 2.25.1 (x86_64-portbld-freebsd11.0) using BFD version (GNU Binutils) 2.25.1
What causes this issue seems to be the usage of the "-m16" gcc flag, which was introduced in gcc 4.9 AFAICT. The following workaround solves the issue, but I would like to know if anyone else has seen this with newer gcc versions, or if the gcc version from FreeBSD ports is broken.
I normally compile with gcc v5.3.1. SeaBIOS is known to compile on gcc v6 also. I guess this is something strange in FreeBSD.
Turns out gcc > 4.8 have a bug in FreeBSD when -m16 is used, sorry for the noise, I've already sent a patch upstream to try to address this.
Roger.