On Thu, 22 Oct 2009 19:28:36 +0200, King InuYasha wrote: > I just saw this article about an effort to create Universal binary style ELF > binaries for Linux, and I thought that this would be something to watch, so > that Fedora could integrate both x86-32 and x86-64 into single DVD sets.
While I do not find useful "fat-elf" I did post an implementation of auto-biarch Fedora LiveDVD but it was ignored. Still keep it around personally myself. Attached the post, former followups to it at: https://www.redhat.com/archives/fedora-livecd-list/2009-June/msg00018.html Regards, Jan
--- Begin Message ---Hi, finally created a LiveDVD ISO automatically booting x86_64 OS on x86_64 (and i686 otherwise). Regular users will not notice there exists any new arch while they will benefit from the full performance of their PC: http://people.redhat.com/jkratoch/x86bilive-2009062000.tar.gz (71KB) It uses live_dir=LiveOS-x86_64 vs. live_dir=LiveOS-i686 to boot the image. The syslinux patch provides "default-{x86_64,i386}" keywords in isolinux.cfg. livecd-iso-to-disk is not patched/compatible with such image. livecd-creator should create such ISO on a single run, not by merging the output of two livecd-creator runs by a 3rd party app. Regards, Jan Reasons: * I still did not understand why I have to carry with me two media - both x86_64 and i386 - when all the data perfectly fit on a single media. * Why I have to try to boot x86_64 first to find out if the specific machine is x86_64? Even common programmers do not know it, "Windows XP works here". * The OS must "just work", it must be fun and easy. Requiring a special technical decision before even starting the OS download is a showstopper. * Checked that a regular user will on http://fedoraproject.org/get-fedora still download terrible performance degradation of 32-bit OS although her hadware is in 70%-95%(?) of cases x86_64. x86_64 is here for 6 years now. * Arguing x86 may be faster than x86_64... I did not find any such case, x86_64 is a more modern arch (more registers, PIC for free, better ABI). We already hit the 2GB address space limitations. x86_64 is the future. * All the friends of mine have 8Mbit+ ADSL and TB disks downloading many DVD disks so some several more hundreds of MB are not something to notice.mkisofs -f -J -r -hide-rr-moved -hide-joliet-trans-tbl -V Fedora-11-x86bi-Live -o ../x86bilive.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-info-table -boot-load-size 4 . mount -r -o loop Fedora-11-x86_64-Live.iso x86_64/ mount -r -o loop Fedora-11-i686-Live.iso i686/ x86bilive: total 4 lrwxrwxrwx 1 root root 13 2009-06-18 21:10 GPL -> ../x86_64/GPL lrwxrwxrwx 1 root root 14 2009-06-18 21:11 LiveOS-i686 -> ../i686/LiveOS/ lrwxrwxrwx 1 root root 16 2009-06-18 21:10 LiveOS-x86_64 -> ../x86_64/LiveOS/ lrwxrwxrwx 1 root root 16 2009-06-18 21:10 README -> ../x86_64/README drwxr-xr-x 2 root root 4096 2009-06-20 21:44 isolinux/ x86bilive/isolinux: total 184 lrwxrwxrwx 1 root root 30 2009-06-18 21:13 boot.cat -> ../../x86_64/isolinux/boot.cat lrwxrwxrwx 1 root root 31 2009-06-18 21:17 ii686 -> ../../i686/isolinux/initrd0.img -rw-r--r-- 1 root root 14336 2009-06-20 21:45 isolinux.bin -r--r--r-- 1 root root 1411 2009-06-20 21:44 isolinux.cfg lrwxrwxrwx 1 root root 33 2009-06-18 21:13 ix8664 -> ../../x86_64/isolinux/initrd0.img lrwxrwxrwx 1 root root 28 2009-06-18 21:17 ki686 -> ../../i686/isolinux/vmlinuz0 lrwxrwxrwx 1 root root 30 2009-06-18 21:13 kx8664 -> ../../x86_64/isolinux/vmlinuz0 lrwxrwxrwx 1 root root 29 2009-06-18 21:13 memtest -> ../../x86_64/isolinux/memtest lrwxrwxrwx 1 root root 32 2009-06-18 21:13 splash.jpg -> ../../x86_64/isolinux/splash.jpg -r--r--r-- 1 root root 159888 2009-06-20 20:48 vesamenu.c32 isolinux.cfg: default vesamenu.c32 timeout 100 menu background splash.jpg menu title Welcome to Fedora-11-x86bi-Live! menu color border 0 #ffffffff #00000000 menu color sel 7 #ffffffff #ff000000 menu color title 0 #ffffffff #00000000 menu color tabmsg 0 #ffffffff #00000000 menu color unsel 0 #ffffffff #00000000 menu color hotsel 0 #ff000000 #ffffffff menu color hotkey 7 #ffffffff #ff000000 menu color timeout_msg 0 #ffffffff #00000000 menu color timeout 0 #ffffffff #00000000 menu color cmdline 0 #ffffffff #00000000 menu hidden menu hiddenrow 5 label linux0 menu label x86_64 Boot kernel kx8664 append initrd=ix8664 root=CDLABEL=Fedora-11-x86bi-Live rootfstype=auto live_dir=LiveOS-x86_64 ro liveimg quiet rhgb menu default-x86_64 label check0 menu label x86_64 Verify and Boot kernel kx8664 append initrd=ix8664 root=CDLABEL=Fedora-11-x86bi-Live rootfstype=auto live_dir=LiveOS-x86_64 ro liveimg quiet rhgb check label linux1 menu label i686 Boot kernel ki686 append initrd=ii686 root=CDLABEL=Fedora-11-x86bi-Live rootfstype=auto live_dir=LiveOS-i686 ro liveimg quiet rhgb menu default-i386 label check1 menu label i686 Verify and Boot kernel ki686 append initrd=ii686 root=CDLABEL=Fedora-11-x86bi-Live rootfstype=auto live_dir=LiveOS-i686 ro liveimg quiet rhgb check label memtest menu label Memory Test kernel memtest label local menu label Boot from local drive localboot 0xffff--- /dev/null 1 Jan 1970 00:00:00 -0000 +++ defaults.patch 20 Jun 2009 20:10:46 -0000 @@ -0,0 +1,175 @@ +--- syslinux-3.75-orig/com32/menu/Makefile 2009-04-16 06:42:14.000000000 +0200 ++++ syslinux-3.75-defaults/com32/menu/Makefile 2009-06-20 19:21:32.000000000 +0200 +@@ -24,7 +24,7 @@ MODULES = menu.c32 vesamenu.c32 + TESTFILES = + + COMMONOBJS = menumain.o readconfig.o passwd.o drain.o printmsg.o colors.o \ +- background.o refstr.o execute.o ++ background.o refstr.o execute.o verify_cpu.o + + all: $(MODULES) $(TESTFILES) + +--- syslinux-3.75-orig/com32/menu/menu.h 2009-04-16 06:42:14.000000000 +0200 ++++ syslinux-3.75-defaults/com32/menu/menu.h 2009-06-20 19:21:32.000000000 +0200 +@@ -224,4 +224,9 @@ void execute(const char *cmdline, enum k + /* drain.c */ + void drain_keyboard(void); + ++/* verify_cpu.S */ ++#if defined(__i386__) || defined(__x86_64__) ++int verify_cpu(void); ++#endif ++ + #endif /* MENU_H */ +--- syslinux-3.75-orig/com32/menu/readconfig.c 2009-04-16 06:42:14.000000000 +0200 ++++ syslinux-3.75-defaults/com32/menu/readconfig.c 2009-06-20 20:23:24.000000000 +0200 +@@ -656,11 +656,22 @@ static void parse_config_file(FILE *f) + m->parent_entry->displayname = refstr_get(m->title); + } + } +- } else if ( looking_at(p, "default") ) { +- if (ld.label) { +- ld.menudefault = 1; +- } else if (m->parent_entry) { +- m->parent->defentry = m->parent_entry->entry; ++ } else if ( looking_at(p, "default") ++#if defined(__i386__) || defined(__x86_64__) ++ || looking_at(p, "default-i386") ++ || looking_at(p, "default-x86_64") ++#endif ++ ) { ++#if defined(__i386__) || defined(__x86_64__) ++ if (! ( ( looking_at(p, "default-i386") && verify_cpu () == 0 ) || ++ ( looking_at(p, "default-x86_64") && verify_cpu () != 0 ) ) ) ++#endif ++ { ++ if (ld.label) { ++ ld.menudefault = 1; ++ } else if (m->parent_entry) { ++ m->parent->defentry = m->parent_entry->entry; ++ } + } + } else if ( looking_at(p, "hide") ) { + ld.menuhide = 1; +--- syslinux-3.75-orig/com32/menu/verify_cpu.S 1970-01-01 01:00:00.000000000 +0100 ++++ syslinux-3.75-defaults/com32/menu/verify_cpu.S 2009-06-20 20:30:27.000000000 +0200 +@@ -0,0 +1,119 @@ ++/* https://lists.linux-foundation.org/pipermail/fastboot/2006-November/011885.html */ ++#if defined(__i386__) || defined(__x86_64__) ++ .globl verify_cpu ++verify_cpu: ++ push %ebx ++ push %esi ++ push %edi ++ push %ebp ++ call Xverify_cpu ++ pop %ebp ++ pop %edi ++ pop %esi ++ pop %ebx ++ ret ++ ++/* ++ * ++ * verify_cpu.S ++ * ++ * 14 Nov 2006 Vivek Goyal: Created the file ++ * ++ * This is a common code for verification whether CPU supports ++ * long mode and SSE or not. It is not called directly instead this ++ * file is included at various places and compiled in that context. ++ * Following are the current usage. ++ * ++ * This file is included by both 16bit and 32bit code. ++ * ++ * arch/x86_64/boot/setup.S : Boot cpu verification (16bit) ++ * arch/x86_64/boot/compressed/head.S: Boot cpu verification (32bit) ++ * arch/x86_64/kernel/trampoline.S: secondary processor verfication (16bit) ++ * arch/x86_64/kernel/acpi/wakeup.S:Verfication at resume (16bit) ++ * ++ * verify_cpu, returns the status of cpu check in register %eax. ++ * 0: Success 1: Failure ++ * ++ * The caller needs to check for the error code and take the action ++ * appropriately. Either display a message or halt. ++ */ ++ ++Xverify_cpu: ++ ++ pushfl # Save caller passed flags ++ pushl $0 # Kill any dangerous flags ++ popfl ++ ++ /* minimum CPUID flags for x86-64 */ ++ /* see http://www.x86-64.org/lists/discuss/msg02971.html */ ++#define SSE_MASK ((1<<25)|(1<<26)) ++#define REQUIRED_MASK1 ((1<<0)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<8)|\ ++ (1<<13)|(1<<15)|(1<<24)) ++#define REQUIRED_MASK2 (1<<29) ++ pushfl # standard way to check for cpuid ++ popl %eax ++ movl %eax,%ebx ++ xorl $0x200000,%eax ++ pushl %eax ++ popfl ++ pushfl ++ popl %eax ++ cmpl %eax,%ebx ++ jz verify_cpu_no_longmode # cpu has no cpuid ++ ++ movl $0x0,%eax # See if cpuid 1 is implemented ++ cpuid ++ cmpl $0x1,%eax ++ jb verify_cpu_no_longmode # no cpuid 1 ++ ++ xor %di,%di ++ cmpl $0x68747541,%ebx # AuthenticAMD ++ jnz verify_cpu_noamd ++ cmpl $0x69746e65,%edx ++ jnz verify_cpu_noamd ++ cmpl $0x444d4163,%ecx ++ jnz verify_cpu_noamd ++ mov $1,%di # cpu is from AMD ++ ++verify_cpu_noamd: ++ movl $0x1,%eax # Does the cpu have what it takes ++ cpuid ++ andl $REQUIRED_MASK1,%edx ++ xorl $REQUIRED_MASK1,%edx ++ jnz verify_cpu_no_longmode ++ ++ movl $0x80000000,%eax # See if extended cpuid is implemented ++ cpuid ++ cmpl $0x80000001,%eax ++ jb verify_cpu_no_longmode # no extended cpuid ++ ++ movl $0x80000001,%eax # Does the cpu have what it takes ++ cpuid ++ andl $REQUIRED_MASK2,%edx ++ xorl $REQUIRED_MASK2,%edx ++ jnz verify_cpu_no_longmode ++ ++verify_cpu_sse_test: ++ movl $1,%eax ++ cpuid ++ andl $SSE_MASK,%edx ++ cmpl $SSE_MASK,%edx ++ je verify_cpu_sse_ok ++ test %di,%di ++ jz verify_cpu_no_longmode # only try to force SSE on AMD ++ movl $0xc0010015,%ecx # HWCR ++ rdmsr ++ btr $15,%eax # enable SSE ++ wrmsr ++ xor %di,%di # don't loop ++ jmp verify_cpu_sse_test # try again ++ ++verify_cpu_no_longmode: ++ popfl # Restore caller passed flags ++ movl $1,%eax ++ ret ++verify_cpu_sse_ok: ++ popfl # Restore caller passed flags ++ xorl %eax, %eax ++ ret ++#endif --- syslinux.spec 16 Apr 2009 18:11:30 -0000 1.59 +++ syslinux.spec 20 Jun 2009 20:10:46 -0000 @@ -7,6 +7,7 @@ License: GPLv2+ Group: Applications/System URL: http://syslinux.zytor.com/ Source0: ftp://ftp.kernel.org/pub/linux/utils/boot/syslinux/%{name}-%{tarball_version}.tar.bz2 +Patch9: defaults.patch ExclusiveArch: %{ix86} x86_64 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: nasm >= 0.98.38-1, perl, netpbm-progs @@ -33,12 +34,18 @@ MEMDISK, which loads legacy operating sy %prep %setup -q -n syslinux-%{tarball_version} +%patch9 -p1 %build CFLAGS="-Werror -Wno-unused -finline-limit=2000" export CFLAGS # If you make clean here, we lose the provided syslinux.exe #make clean +rm -f com32/menu/vesamenu.c32 +make -C com32/lib libcom32.a +make -C com32/gpllib libcom32gpl.a +make -C com32/menu vesamenu.c32 +test -f com32/menu/vesamenu.c32 make installer make -C sample tidy-- Fedora-livecd-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/fedora-livecd-list
--- End Message ---
-- fedora-devel-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/fedora-devel-list
