[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 2/2] x86: split .fixup section with new enough gas
GNU as, as of version 2.26, allows deriving the name of a section to switch to from the present section's name. For the replacement to occur --sectname-subst needs to be passed to the assembler. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> --- Similarly (and perhaps of more interest) we could split .ex_table, allowing to reduce the number of entries to search through post-init. --- a/Config.mk +++ b/Config.mk @@ -98,7 +98,7 @@ cc-option = $(shell if test -z "`echo 'v # Usage: $(call cc-option-add CFLAGS,CC,-march=winchip-c6) cc-option-add = $(eval $(call cc-option-add-closure,$(1),$(2),$(3))) define cc-option-add-closure - ifneq ($$(call cc-option,$$($(2)),$(3),n),n) + ifneq ($$(call cc-option,$$($(2)),$(firstword $(3)),n),n) $(1) += $(3) endif endef --- a/xen/arch/x86/arch.mk +++ b/xen/arch/x86/arch.mk @@ -34,6 +34,9 @@ $(call as-option-add,CFLAGS,CC,\ $(call as-option-add,CFLAGS,CC,\ ".L1: .L2: .nops (.L2 - .L1)$$(comma)9",-DHAVE_AS_NOPS_DIRECTIVE) +# Check to see whether the assmbler supports the --sectname-subst option. +$(call cc-option-add,CFLAGS,CC,-Wa$$(comma)--sectname-subst -DHAVE_AS_SECTNAME_SUBST) + CFLAGS += -mno-red-zone -fpic # Xen doesn't use MMX or SSE interally. If the compiler supports it, also skip --- a/xen/arch/x86/include/asm/asm_defns.h +++ b/xen/arch/x86/include/asm/asm_defns.h @@ -81,10 +81,18 @@ register unsigned long current_stack_poi /* Exception recovery code section */ #ifdef __ASSEMBLY__ -# define _ASM_FIXUP .pushsection .fixup, "ax", @progbits +# ifdef HAVE_AS_SECTNAME_SUBST +# define _ASM_FIXUP .pushsection .fixup%S, "ax", @progbits +# else +# define _ASM_FIXUP .pushsection .fixup, "ax", @progbits +# endif # define _ASM_FIXUP_END .popsection #else -# define _ASM_FIXUP " .pushsection .fixup, \"ax\", @progbits" +# ifdef HAVE_AS_SECTNAME_SUBST +# define _ASM_FIXUP " .pushsection .fixup%%S, \"ax\", @progbits" +# else +# define _ASM_FIXUP " .pushsection .fixup, \"ax\", @progbits" +# endif # define _ASM_FIXUP_END " .popsection" #endif --- a/xen/arch/x86/xen.lds.S +++ b/xen/arch/x86/xen.lds.S @@ -103,6 +103,12 @@ SECTIONS *(.text.__x86_indirect_thunk_*) *(.fixup) + *(.fixup.text) + *(.fixup.text.cold) + *(.fixup.text.unlikely .fixup.text.*_unlikely .fixup.text.unlikely.*) +#ifdef CONFIG_CC_SPLIT_SECTIONS + *(.fixup.text.*) +#endif *(.gnu.warning) _etext = .; /* End of text section */ } PHDR(text) = 0x9090 @@ -215,6 +221,8 @@ SECTIONS _sinittext = .; *(.init.text) *(.text.startup) + *(.fixup.init.text) + *(.fixup.text.startup) _einittext = .; /* * Here are the replacement instructions. The linker sticks them --- a/xen/include/xen/xen.lds.h +++ b/xen/include/xen/xen.lds.h @@ -89,7 +89,9 @@ #define DISCARD_SECTIONS \ /DISCARD/ : { \ *(.text.exit) \ + *(.fixup.text.exit) \ *(.exit.text) \ + *(.fixup.exit.text) \ *(.exit.data) \ *(.exitcall.exit) \ *(.discard) \
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |