x86, build: Change code16gcc.h from a C header to an assembly header

By changing code16gcc.h from a C header to an assembly header and use
the -Wa,... option to gcc to force it to be added to the assembly
input, we can avoid the problems with gcc reordering code bits on us.

If we have -m16, we still use it, of course.

Suggested-by: Kevin O'Connor <kevin@koconnor.net>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Link: http://lkml.kernel.org/n/tip-xw8ibgdemucl9fz3i1bymu6w@git.kernel.org
This commit is contained in:
H. Peter Anvin
2014-06-04 13:16:48 -07:00
parent a9358bc353
commit a9cfccee66
2 changed files with 13 additions and 20 deletions

View File

@@ -1,15 +1,11 @@
/*
* code16gcc.h
*
* This file is -include'd when compiling 16-bit C code.
* Note: this asm() needs to be emitted before gcc emits any code.
* Depending on gcc version, this requires -fno-unit-at-a-time or
* -fno-toplevel-reorder.
*
* Hopefully gcc will eventually have a real -m16 option so we can
* drop this hack long term.
*/
#
# code16gcc.h
#
# This file is added to the assembler via -Wa when compiling 16-bit C code.
# This is done this way instead via asm() to make sure gcc does not reorder
# things around us.
#
# gcc 4.9+ has a real -m16 option so we can drop this hack long term.
#
#ifndef __ASSEMBLY__
asm(".code16gcc");
#endif
.code16gcc