1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun# Unified Makefile for i386 and x86_64 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun# select defconfig based on actual architecture 5*4882a593Smuzhiyunifeq ($(ARCH),x86) 6*4882a593Smuzhiyun ifeq ($(shell uname -m),x86_64) 7*4882a593Smuzhiyun KBUILD_DEFCONFIG := x86_64_defconfig 8*4882a593Smuzhiyun else 9*4882a593Smuzhiyun KBUILD_DEFCONFIG := i386_defconfig 10*4882a593Smuzhiyun endif 11*4882a593Smuzhiyunelse 12*4882a593Smuzhiyun KBUILD_DEFCONFIG := $(ARCH)_defconfig 13*4882a593Smuzhiyunendif 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun# For gcc stack alignment is specified with -mpreferred-stack-boundary, 16*4882a593Smuzhiyun# clang has the option -mstack-alignment for that purpose. 17*4882a593Smuzhiyunifneq ($(call cc-option, -mpreferred-stack-boundary=4),) 18*4882a593Smuzhiyun cc_stack_align4 := -mpreferred-stack-boundary=2 19*4882a593Smuzhiyun cc_stack_align8 := -mpreferred-stack-boundary=3 20*4882a593Smuzhiyunelse ifneq ($(call cc-option, -mstack-alignment=16),) 21*4882a593Smuzhiyun cc_stack_align4 := -mstack-alignment=4 22*4882a593Smuzhiyun cc_stack_align8 := -mstack-alignment=8 23*4882a593Smuzhiyunendif 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun# How to compile the 16-bit code. Note we always compile for -march=i386; 26*4882a593Smuzhiyun# that way we can complain to the user if the CPU is insufficient. 27*4882a593Smuzhiyun# 28*4882a593Smuzhiyun# The -m16 option is supported by GCC >= 4.9 and clang >= 3.5. For 29*4882a593Smuzhiyun# older versions of GCC, include an *assembly* header to make sure that 30*4882a593Smuzhiyun# gcc doesn't play any games behind our back. 31*4882a593SmuzhiyunCODE16GCC_CFLAGS := -m32 -Wa,$(srctree)/arch/x86/boot/code16gcc.h 32*4882a593SmuzhiyunM16_CFLAGS := $(call cc-option, -m16, $(CODE16GCC_CFLAGS)) 33*4882a593Smuzhiyun 34*4882a593SmuzhiyunREALMODE_CFLAGS := $(M16_CFLAGS) -g -Os -DDISABLE_BRANCH_PROFILING -D__DISABLE_EXPORTS \ 35*4882a593Smuzhiyun -Wall -Wstrict-prototypes -march=i386 -mregparm=3 \ 36*4882a593Smuzhiyun -fno-strict-aliasing -fomit-frame-pointer -fno-pic \ 37*4882a593Smuzhiyun -mno-mmx -mno-sse $(call cc-option,-fcf-protection=none) 38*4882a593Smuzhiyun 39*4882a593SmuzhiyunREALMODE_CFLAGS += -ffreestanding 40*4882a593SmuzhiyunREALMODE_CFLAGS += -fno-stack-protector 41*4882a593SmuzhiyunREALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -Wno-address-of-packed-member) 42*4882a593SmuzhiyunREALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), $(cc_stack_align4)) 43*4882a593SmuzhiyunREALMODE_CFLAGS += $(CLANG_FLAGS) 44*4882a593Smuzhiyunexport REALMODE_CFLAGS 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun# BITS is used as extension for files which are available in a 32 bit 47*4882a593Smuzhiyun# and a 64 bit version to simplify shared Makefiles. 48*4882a593Smuzhiyun# e.g.: obj-y += foo_$(BITS).o 49*4882a593Smuzhiyunexport BITS 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun# 52*4882a593Smuzhiyun# Prevent GCC from generating any FP code by mistake. 53*4882a593Smuzhiyun# 54*4882a593Smuzhiyun# This must happen before we try the -mpreferred-stack-boundary, see: 55*4882a593Smuzhiyun# 56*4882a593Smuzhiyun# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53383 57*4882a593Smuzhiyun# 58*4882a593SmuzhiyunKBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow 59*4882a593SmuzhiyunKBUILD_CFLAGS += $(call cc-option,-mno-avx,) 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun# Intel CET isn't enabled in the kernel 62*4882a593SmuzhiyunKBUILD_CFLAGS += $(call cc-option,-fcf-protection=none) 63*4882a593Smuzhiyun 64*4882a593Smuzhiyunifeq ($(CONFIG_X86_32),y) 65*4882a593Smuzhiyun BITS := 32 66*4882a593Smuzhiyun UTS_MACHINE := i386 67*4882a593Smuzhiyun CHECKFLAGS += -D__i386__ 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun biarch := $(call cc-option,-m32) 70*4882a593Smuzhiyun KBUILD_AFLAGS += $(biarch) 71*4882a593Smuzhiyun KBUILD_CFLAGS += $(biarch) 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun # Never want PIC in a 32-bit kernel, prevent breakage with GCC built 76*4882a593Smuzhiyun # with nonstandard options 77*4882a593Smuzhiyun KBUILD_CFLAGS += -fno-pic 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun # Align the stack to the register width instead of using the default 80*4882a593Smuzhiyun # alignment of 16 bytes. This reduces stack usage and the number of 81*4882a593Smuzhiyun # alignment instructions. 82*4882a593Smuzhiyun KBUILD_CFLAGS += $(call cc-option,$(cc_stack_align4)) 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun # CPU-specific tuning. Anything which can be shared with UML should go here. 85*4882a593Smuzhiyun include arch/x86/Makefile_32.cpu 86*4882a593Smuzhiyun KBUILD_CFLAGS += $(cflags-y) 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun # temporary until string.h is fixed 89*4882a593Smuzhiyun KBUILD_CFLAGS += -ffreestanding 90*4882a593Smuzhiyunelse 91*4882a593Smuzhiyun BITS := 64 92*4882a593Smuzhiyun UTS_MACHINE := x86_64 93*4882a593Smuzhiyun CHECKFLAGS += -D__x86_64__ 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun biarch := -m64 96*4882a593Smuzhiyun KBUILD_AFLAGS += -m64 97*4882a593Smuzhiyun KBUILD_CFLAGS += -m64 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun # Align jump targets to 1 byte, not the default 16 bytes: 100*4882a593Smuzhiyun KBUILD_CFLAGS += $(call cc-option,-falign-jumps=1) 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun # Pack loops tightly as well: 103*4882a593Smuzhiyun KBUILD_CFLAGS += $(call cc-option,-falign-loops=1) 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun # Don't autogenerate traditional x87 instructions 106*4882a593Smuzhiyun KBUILD_CFLAGS += $(call cc-option,-mno-80387) 107*4882a593Smuzhiyun KBUILD_CFLAGS += $(call cc-option,-mno-fp-ret-in-387) 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun # By default gcc and clang use a stack alignment of 16 bytes for x86. 110*4882a593Smuzhiyun # However the standard kernel entry on x86-64 leaves the stack on an 111*4882a593Smuzhiyun # 8-byte boundary. If the compiler isn't informed about the actual 112*4882a593Smuzhiyun # alignment it will generate extra alignment instructions for the 113*4882a593Smuzhiyun # default alignment which keep the stack *mis*aligned. 114*4882a593Smuzhiyun # Furthermore an alignment to the register width reduces stack usage 115*4882a593Smuzhiyun # and the number of alignment instructions. 116*4882a593Smuzhiyun KBUILD_CFLAGS += $(call cc-option,$(cc_stack_align8)) 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun # Use -mskip-rax-setup if supported. 119*4882a593Smuzhiyun KBUILD_CFLAGS += $(call cc-option,-mskip-rax-setup) 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun # FIXME - should be integrated in Makefile.cpu (Makefile_32.cpu) 122*4882a593Smuzhiyun cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8) 123*4882a593Smuzhiyun cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona) 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun cflags-$(CONFIG_MCORE2) += \ 126*4882a593Smuzhiyun $(call cc-option,-march=core2,$(call cc-option,-mtune=generic)) 127*4882a593Smuzhiyun cflags-$(CONFIG_MATOM) += $(call cc-option,-march=atom) \ 128*4882a593Smuzhiyun $(call cc-option,-mtune=atom,$(call cc-option,-mtune=generic)) 129*4882a593Smuzhiyun cflags-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=generic) 130*4882a593Smuzhiyun KBUILD_CFLAGS += $(cflags-y) 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun KBUILD_CFLAGS += -mno-red-zone 133*4882a593Smuzhiyun KBUILD_CFLAGS += -mcmodel=kernel 134*4882a593Smuzhiyunendif 135*4882a593Smuzhiyun 136*4882a593Smuzhiyunifdef CONFIG_X86_X32 137*4882a593Smuzhiyun x32_ld_ok := $(call try-run,\ 138*4882a593Smuzhiyun /bin/echo -e '1: .quad 1b' | \ 139*4882a593Smuzhiyun $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" - && \ 140*4882a593Smuzhiyun $(OBJCOPY) -O elf32-x86-64 "$$TMP" "$$TMPO" && \ 141*4882a593Smuzhiyun $(LD) -m elf32_x86_64 "$$TMPO" -o "$$TMP",y,n) 142*4882a593Smuzhiyun ifeq ($(x32_ld_ok),y) 143*4882a593Smuzhiyun CONFIG_X86_X32_ABI := y 144*4882a593Smuzhiyun KBUILD_AFLAGS += -DCONFIG_X86_X32_ABI 145*4882a593Smuzhiyun KBUILD_CFLAGS += -DCONFIG_X86_X32_ABI 146*4882a593Smuzhiyun else 147*4882a593Smuzhiyun $(warning CONFIG_X86_X32 enabled but no binutils support) 148*4882a593Smuzhiyun endif 149*4882a593Smuzhiyunendif 150*4882a593Smuzhiyunexport CONFIG_X86_X32_ABI 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun# 153*4882a593Smuzhiyun# If the function graph tracer is used with mcount instead of fentry, 154*4882a593Smuzhiyun# '-maccumulate-outgoing-args' is needed to prevent a GCC bug 155*4882a593Smuzhiyun# (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42109) 156*4882a593Smuzhiyun# 157*4882a593Smuzhiyunifdef CONFIG_FUNCTION_GRAPH_TRACER 158*4882a593Smuzhiyun ifndef CONFIG_HAVE_FENTRY 159*4882a593Smuzhiyun ACCUMULATE_OUTGOING_ARGS := 1 160*4882a593Smuzhiyun else 161*4882a593Smuzhiyun ifeq ($(call cc-option-yn, -mfentry), n) 162*4882a593Smuzhiyun ACCUMULATE_OUTGOING_ARGS := 1 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun # GCC ignores '-maccumulate-outgoing-args' when used with '-Os'. 165*4882a593Smuzhiyun # If '-Os' is enabled, disable it and print a warning. 166*4882a593Smuzhiyun ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE 167*4882a593Smuzhiyun undefine CONFIG_CC_OPTIMIZE_FOR_SIZE 168*4882a593Smuzhiyun $(warning Disabling CONFIG_CC_OPTIMIZE_FOR_SIZE. Your compiler does not have -mfentry so you cannot optimize for size with CONFIG_FUNCTION_GRAPH_TRACER.) 169*4882a593Smuzhiyun endif 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun endif 172*4882a593Smuzhiyun endif 173*4882a593Smuzhiyunendif 174*4882a593Smuzhiyun 175*4882a593Smuzhiyunifeq ($(ACCUMULATE_OUTGOING_ARGS), 1) 176*4882a593Smuzhiyun # This compiler flag is not supported by Clang: 177*4882a593Smuzhiyun KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args,) 178*4882a593Smuzhiyunendif 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun# Workaround for a gcc prelease that unfortunately was shipped in a suse release 181*4882a593SmuzhiyunKBUILD_CFLAGS += -Wno-sign-compare 182*4882a593Smuzhiyun# 183*4882a593SmuzhiyunKBUILD_CFLAGS += -fno-asynchronous-unwind-tables 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun# Avoid indirect branches in kernel to deal with Spectre 186*4882a593Smuzhiyunifdef CONFIG_RETPOLINE 187*4882a593Smuzhiyun KBUILD_CFLAGS += $(RETPOLINE_CFLAGS) 188*4882a593Smuzhiyun # Additionally, avoid generating expensive indirect jumps which 189*4882a593Smuzhiyun # are subject to retpolines for small number of switch cases. 190*4882a593Smuzhiyun # clang turns off jump table generation by default when under 191*4882a593Smuzhiyun # retpoline builds, however, gcc does not for x86. This has 192*4882a593Smuzhiyun # only been fixed starting from gcc stable version 8.4.0 and 193*4882a593Smuzhiyun # onwards, but not for older ones. See gcc bug #86952. 194*4882a593Smuzhiyun ifndef CONFIG_CC_IS_CLANG 195*4882a593Smuzhiyun KBUILD_CFLAGS += $(call cc-option,-fno-jump-tables) 196*4882a593Smuzhiyun endif 197*4882a593Smuzhiyunendif 198*4882a593Smuzhiyun 199*4882a593Smuzhiyunifdef CONFIG_SLS 200*4882a593Smuzhiyun KBUILD_CFLAGS += -mharden-sls=all 201*4882a593Smuzhiyunendif 202*4882a593Smuzhiyun 203*4882a593SmuzhiyunKBUILD_LDFLAGS += -m elf_$(UTS_MACHINE) 204*4882a593Smuzhiyun 205*4882a593Smuzhiyunifdef CONFIG_LTO_CLANG 206*4882a593Smuzhiyunifeq ($(shell test $(CONFIG_LLD_VERSION) -lt 130000; echo $$?),0) 207*4882a593SmuzhiyunKBUILD_LDFLAGS += -plugin-opt=-stack-alignment=$(if $(CONFIG_X86_32),4,8) 208*4882a593Smuzhiyunendif 209*4882a593Smuzhiyunendif 210*4882a593Smuzhiyun 211*4882a593Smuzhiyunifdef CONFIG_X86_NEED_RELOCS 212*4882a593SmuzhiyunLDFLAGS_vmlinux := --emit-relocs --discard-none 213*4882a593Smuzhiyunelse 214*4882a593SmuzhiyunLDFLAGS_vmlinux := 215*4882a593Smuzhiyunendif 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun# 218*4882a593Smuzhiyun# The 64-bit kernel must be aligned to 2MB. Pass -z max-page-size=0x200000 to 219*4882a593Smuzhiyun# the linker to force 2MB page size regardless of the default page size used 220*4882a593Smuzhiyun# by the linker. 221*4882a593Smuzhiyun# 222*4882a593Smuzhiyunifdef CONFIG_X86_64 223*4882a593SmuzhiyunLDFLAGS_vmlinux += -z max-page-size=0x200000 224*4882a593Smuzhiyunendif 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun 227*4882a593Smuzhiyunarchscripts: scripts_basic 228*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=arch/x86/tools relocs 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun### 231*4882a593Smuzhiyun# Syscall table generation 232*4882a593Smuzhiyun 233*4882a593Smuzhiyunarchheaders: 234*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=arch/x86/entry/syscalls all 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun### 237*4882a593Smuzhiyun# Kernel objects 238*4882a593Smuzhiyun 239*4882a593Smuzhiyunhead-y := arch/x86/kernel/head_$(BITS).o 240*4882a593Smuzhiyunhead-y += arch/x86/kernel/head$(BITS).o 241*4882a593Smuzhiyunhead-y += arch/x86/kernel/ebda.o 242*4882a593Smuzhiyunhead-y += arch/x86/kernel/platform-quirks.o 243*4882a593Smuzhiyun 244*4882a593Smuzhiyunlibs-y += arch/x86/lib/ 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun# See arch/x86/Kbuild for content of core part of the kernel 247*4882a593Smuzhiyuncore-y += arch/x86/ 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun# drivers-y are linked after core-y 250*4882a593Smuzhiyundrivers-$(CONFIG_MATH_EMULATION) += arch/x86/math-emu/ 251*4882a593Smuzhiyundrivers-$(CONFIG_PCI) += arch/x86/pci/ 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun# must be linked after kernel/ 254*4882a593Smuzhiyundrivers-$(CONFIG_OPROFILE) += arch/x86/oprofile/ 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun# suspend and hibernation support 257*4882a593Smuzhiyundrivers-$(CONFIG_PM) += arch/x86/power/ 258*4882a593Smuzhiyun 259*4882a593Smuzhiyundrivers-$(CONFIG_FB) += arch/x86/video/ 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun#### 262*4882a593Smuzhiyun# boot loader support. Several targets are kept for legacy purposes 263*4882a593Smuzhiyun 264*4882a593Smuzhiyunboot := arch/x86/boot 265*4882a593Smuzhiyun 266*4882a593SmuzhiyunBOOT_TARGETS = bzdisk fdimage fdimage144 fdimage288 isoimage 267*4882a593Smuzhiyun 268*4882a593SmuzhiyunPHONY += bzImage $(BOOT_TARGETS) 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun# Don't compile Image in mixed build with "all" target 271*4882a593Smuzhiyunifndef KBUILD_MIXED_TREE 272*4882a593Smuzhiyun# Default kernel to build 273*4882a593Smuzhiyunall: bzImage 274*4882a593Smuzhiyunendif 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun# KBUILD_IMAGE specify target image being built 277*4882a593SmuzhiyunKBUILD_IMAGE := $(boot)/bzImage 278*4882a593Smuzhiyun 279*4882a593SmuzhiyunbzImage: vmlinux 280*4882a593Smuzhiyunifeq ($(CONFIG_X86_DECODER_SELFTEST),y) 281*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=arch/x86/tools posttest 282*4882a593Smuzhiyunendif 283*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=$(boot) $(KBUILD_IMAGE) 284*4882a593Smuzhiyun $(Q)mkdir -p $(objtree)/arch/$(UTS_MACHINE)/boot 285*4882a593Smuzhiyun $(Q)ln -fsn ../../x86/boot/bzImage $(objtree)/arch/$(UTS_MACHINE)/boot/$@ 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun$(BOOT_TARGETS): vmlinux 288*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=$(boot) $@ 289*4882a593Smuzhiyun 290*4882a593SmuzhiyunPHONY += install bzlilo 291*4882a593Smuzhiyuninstall bzlilo: 292*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=$(boot) $@ 293*4882a593Smuzhiyun 294*4882a593SmuzhiyunPHONY += vdso_install 295*4882a593Smuzhiyunvdso_install: 296*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=arch/x86/entry/vdso $@ 297*4882a593Smuzhiyun 298*4882a593Smuzhiyunarchprepare: checkbin 299*4882a593Smuzhiyuncheckbin: 300*4882a593Smuzhiyunifndef CONFIG_CC_HAS_ASM_GOTO 301*4882a593Smuzhiyun @echo Compiler lacks asm-goto support. 302*4882a593Smuzhiyun @exit 1 303*4882a593Smuzhiyunendif 304*4882a593Smuzhiyunifdef CONFIG_RETPOLINE 305*4882a593Smuzhiyunifeq ($(RETPOLINE_CFLAGS),) 306*4882a593Smuzhiyun @echo "You are building kernel with non-retpoline compiler." >&2 307*4882a593Smuzhiyun @echo "Please update your compiler." >&2 308*4882a593Smuzhiyun @false 309*4882a593Smuzhiyunendif 310*4882a593Smuzhiyunendif 311*4882a593Smuzhiyun 312*4882a593Smuzhiyunarchclean: 313*4882a593Smuzhiyun $(Q)rm -rf $(objtree)/arch/i386 314*4882a593Smuzhiyun $(Q)rm -rf $(objtree)/arch/x86_64 315*4882a593Smuzhiyun $(Q)$(MAKE) $(clean)=$(boot) 316*4882a593Smuzhiyun $(Q)$(MAKE) $(clean)=arch/x86/tools 317*4882a593Smuzhiyun 318*4882a593Smuzhiyundefine archhelp 319*4882a593Smuzhiyun echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)' 320*4882a593Smuzhiyun echo ' install - Install kernel using' 321*4882a593Smuzhiyun echo ' (your) ~/bin/$(INSTALLKERNEL) or' 322*4882a593Smuzhiyun echo ' (distribution) /sbin/$(INSTALLKERNEL) or' 323*4882a593Smuzhiyun echo ' install to $$(INSTALL_PATH) and run lilo' 324*4882a593Smuzhiyun echo ' fdimage - Create 1.4MB boot floppy image (arch/x86/boot/fdimage)' 325*4882a593Smuzhiyun echo ' fdimage144 - Create 1.4MB boot floppy image (arch/x86/boot/fdimage)' 326*4882a593Smuzhiyun echo ' fdimage288 - Create 2.8MB boot floppy image (arch/x86/boot/fdimage)' 327*4882a593Smuzhiyun echo ' isoimage - Create a boot CD-ROM image (arch/x86/boot/image.iso)' 328*4882a593Smuzhiyun echo ' bzdisk/fdimage*/isoimage also accept:' 329*4882a593Smuzhiyun echo ' FDARGS="..." arguments for the booted kernel' 330*4882a593Smuzhiyun echo ' FDINITRD=file initrd for the booted kernel' 331*4882a593Smuzhiyunendef 332