forked from mirrors/linux
		
	x32: Warn and disable rather than error if binutils too old
If X32 is enabled in .config, but the binutils can't build it, issue a warning and disable the feature rather than erroring out. In order to support this, have CONFIG_X86_X32 be the option set in Kconfig, and CONFIG_X86_X32_ABI be the option set by the Makefile when it is enabled and binutils has been found to be functional. Requested-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> Cc: H. J. Lu <hjl.tools@gmail.com> Link: http://lkml.kernel.org/r/1329696488-16970-1-git-send-email-hpa@zytor.com
This commit is contained in:
		
							parent
							
								
									e0a449cab5
								
							
						
					
					
						commit
						0bf6276392
					
				
					 2 changed files with 18 additions and 2 deletions
				
			
		| 
						 | 
					@ -2175,7 +2175,7 @@ config IA32_AOUT
 | 
				
			||||||
	---help---
 | 
						---help---
 | 
				
			||||||
	  Support old a.out binaries in the 32bit emulation.
 | 
						  Support old a.out binaries in the 32bit emulation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config X86_X32_ABI
 | 
					config X86_X32
 | 
				
			||||||
	bool "x32 ABI for 64-bit mode (EXPERIMENTAL)"
 | 
						bool "x32 ABI for 64-bit mode (EXPERIMENTAL)"
 | 
				
			||||||
	depends on X86_64 && IA32_EMULATION && EXPERIMENTAL
 | 
						depends on X86_64 && IA32_EMULATION && EXPERIMENTAL
 | 
				
			||||||
	---help---
 | 
						---help---
 | 
				
			||||||
| 
						 | 
					@ -2190,7 +2190,7 @@ config X86_X32_ABI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config COMPAT
 | 
					config COMPAT
 | 
				
			||||||
	def_bool y
 | 
						def_bool y
 | 
				
			||||||
	depends on IA32_EMULATION || X86_X32_ABI
 | 
						depends on IA32_EMULATION || X86_X32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config COMPAT_FOR_U64_ALIGNMENT
 | 
					config COMPAT_FOR_U64_ALIGNMENT
 | 
				
			||||||
	def_bool COMPAT
 | 
						def_bool COMPAT
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -82,6 +82,22 @@ ifdef CONFIG_CC_STACKPROTECTOR
 | 
				
			||||||
        endif
 | 
					        endif
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifdef CONFIG_X86_X32
 | 
				
			||||||
 | 
						x32_ld_ok := $(call try-run,\
 | 
				
			||||||
 | 
								/bin/echo -e '1: .quad 1b' | \
 | 
				
			||||||
 | 
								$(CC) $(KBUILD_AFLAGS) -c -xassembler -o "$$TMP" - && \
 | 
				
			||||||
 | 
								$(OBJCOPY) -O elf32-x86-64 "$$TMP" "$$TMPO" && \
 | 
				
			||||||
 | 
								$(LD) -m elf32_x86_64 "$$TMPO" -o "$$TMP",y,n)
 | 
				
			||||||
 | 
						ifeq ($(x32_ld_ok),y)
 | 
				
			||||||
 | 
							CONFIG_X86_X32_ABI := y
 | 
				
			||||||
 | 
							KBUILD_AFLAGS += -DCONFIG_X86_X32_ABI
 | 
				
			||||||
 | 
							KBUILD_CFLAGS += -DCONFIG_X86_X32_ABI
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							$(warning CONFIG_X86_X32 enabled but no binutils support)
 | 
				
			||||||
 | 
						endif
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					export CONFIG_X86_X32_ABI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Don't unroll struct assignments with kmemcheck enabled
 | 
					# Don't unroll struct assignments with kmemcheck enabled
 | 
				
			||||||
ifeq ($(CONFIG_KMEMCHECK),y)
 | 
					ifeq ($(CONFIG_KMEMCHECK),y)
 | 
				
			||||||
	KBUILD_CFLAGS += $(call cc-option,-fno-builtin-memcpy)
 | 
						KBUILD_CFLAGS += $(call cc-option,-fno-builtin-memcpy)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue