diff --git a/SOURCES/0001-Don-t-use-strict-aliasing-because-not-everything-her.patch b/SOURCES/0001-Don-t-use-strict-aliasing-because-not-everything-her.patch new file mode 100644 index 0000000..2fbe561 --- /dev/null +++ b/SOURCES/0001-Don-t-use-strict-aliasing-because-not-everything-her.patch @@ -0,0 +1,43 @@ +From 942cc3fcfb310754009dbd36c7c9c059c3f3f24b Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Tue, 23 Sep 2014 13:31:46 -0400 +Subject: [PATCH] Don't use strict aliasing, because not everything here is + ready for it. + +Related: rhbz#1085434 + +Signed-off-by: Peter Jones +--- + gpxe/src/Makefile | 2 +- + mk/build.mk | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/gpxe/src/Makefile b/gpxe/src/Makefile +index cc91d78..2e8ff1e 100644 +--- a/gpxe/src/Makefile ++++ b/gpxe/src/Makefile +@@ -4,7 +4,7 @@ + # + + CLEANUP := +-CFLAGS := ++CFLAGS := -fno-strict-aliasing + ASFLAGS := + LDFLAGS := + MAKEDEPS := Makefile +diff --git a/mk/build.mk b/mk/build.mk +index 0ca82be..15c5ee5 100644 +--- a/mk/build.mk ++++ b/mk/build.mk +@@ -19,7 +19,7 @@ include $(MAKEDIR)/syslinux.mk + OPTFLAGS = -g -Os + INCLUDES = + CFLAGS = -W -Wall -Wno-sign-compare -D_FILE_OFFSET_BITS=64 \ +- $(OPTFLAGS) $(INCLUDES) ++ $(OPTFLAGS) $(INCLUDES) -fno-strict-aliasing + LDFLAGS = + LIBS = + +-- +1.9.3 + diff --git a/SOURCES/0001-relocs-Move-stop-to-the-end.patch b/SOURCES/0001-relocs-Move-stop-to-the-end.patch new file mode 100644 index 0000000..951a47f --- /dev/null +++ b/SOURCES/0001-relocs-Move-stop-to-the-end.patch @@ -0,0 +1,768 @@ +From 08278452325454027c6d42bc2d687dc8dd518006 Mon Sep 17 00:00:00 2001 +From: "H. Peter Anvin" +Date: Tue, 29 May 2012 14:08:11 -0700 +Subject: [PATCH] relocs: Move stop to the end + +The Linux kernel puts the stop word at the beginning of the relocation +list (the list is processed backwards); Syslinux puts the stop word at +the beginning of the relocation list (the list is processed forwards.) + +Missed that change when syncing with the kernel version. + +(plus everything to actually make this get built... -- pjones) + +Signed-off-by: H. Peter Anvin +--- +diff --git a/com32/Makefile b/com32/Makefile +index da632a1..b59fd3f 100644 +--- a/com32/Makefile ++++ b/com32/Makefile +@@ -1,5 +1,5 @@ + SUBDIRS = libupload tools lib gpllib libutil modules mboot menu samples rosh cmenu \ +- hdt gfxboot sysdump lua/src ++ hdt gfxboot sysdump lua/src chain + + all tidy dist clean spotless install: + set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d $@; done +diff --git a/com32/chain/Makefile b/com32/chain/Makefile +new file mode 100644 +index 0000000..9d398a8 +--- /dev/null ++++ b/com32/chain/Makefile +@@ -0,0 +1,39 @@ ++## ----------------------------------------------------------------------- ++## ++## Copyright 2001-2010 H. Peter Anvin - All Rights Reserved ++## Copyright 2010 Michal Soltys ++## ++## This program is free software; you can redistribute it and/or modify ++## it under the terms of the GNU General Public License as published by ++## the Free Software Foundation, Inc., 53 Temple Place Ste 330, ++## Boston MA 02111-1307, USA; either version 2 of the License, or ++## (at your option) any later version; incorporated herein by reference. ++## ++## ----------------------------------------------------------------------- ++ ++ ++topdir = ../.. ++MAKEDIR = $(topdir)/mk ++include $(MAKEDIR)/com32.mk ++ ++OBJS = chain.o partiter.o utility.o options.o mangle.o ++ ++all: ++ ++%.o: %.c ++ $(CC) $(MAKEDEPS) $(CFLAGS) $(CHAINEXTOPT) -c -o $@ $< ++ ++tidy dist: ++ rm -f *.o *.lo *.a *.lst .*.d *.tmp ++ ++clean: tidy ++ rm -f *.lnx ++ ++spotless: clean ++ rm -f *.lss *.c32 *.com ++ rm -f *~ \#* ++ ++install: ++ ++ ++-include .*.d +diff --git a/com32/hdt/Makefile b/com32/hdt/Makefile +index f187346..ea9ddfe 100644 +--- a/com32/hdt/Makefile ++++ b/com32/hdt/Makefile +@@ -45,7 +45,7 @@ FLOPPY_DIR ?= floppy + PCI_IDS_FILE ?= $(PWD)/$(FLOPPY_DIR)/pci.ids + GZ_PCI_IDS_FILE ?= $(PCI_IDS_FILE).gz + MENU_COM32 ?= $(com32)/menu/menu.c32 +-CHAIN_COM32 ?= $(com32)/modules/chain.c32 ++CHAIN_COM32 ?= $(com32)/modules/chain.c32 + ART_DIR ?= art/ + QEMU ?= qemu-kvm + +@@ -110,10 +110,16 @@ hdt.iso: hdt.c32 $(topdir)/core/isolinux.bin $(FLOPPY_DIR)/hdt.cfg memtest + mv hdt.iso hdt-$(VERSION).iso + ln -sf hdt-$(VERSION).iso hdt.iso + +-release: spotless hdt.c32 hdt.img hdt.img.gz hdt.iso ++hdt-hybrid.iso: hdt.iso ../../utils/isohybrid ++ cp hdt-$(VERSION).iso hdt-hybrid-$(VERSION).iso ++ ../../utils/isohybrid --partok hdt-hybrid-$(VERSION).iso ++ ln -sf hdt-hybrid-$(VERSION).iso hdt-hybrid.iso ++ ++release: spotless hdt.c32 hdt.img hdt.img.gz hdt.iso hdt-hybrid.iso + mv hdt.c32 hdt_$(NODASH_VERSION).c32 + md5sum hdt_$(NODASH_VERSION).c32 >$(SUM_FILE) + md5sum hdt-$(VERSION).iso >>$(SUM_FILE) ++ md5sum hdt-hybrid-$(VERSION).iso >>$(SUM_FILE) + md5sum hdt-$(VERSION).img >>$(SUM_FILE) + md5sum hdt-$(VERSION).img.gz >>$(SUM_FILE) + +diff --git a/com32/lib/com32.ld b/com32/lib/com32.ld +index 37ee46c..008e4ce 100644 +--- a/com32/lib/com32.ld ++++ b/com32/lib/com32.ld +@@ -36,36 +36,23 @@ SECTIONS + .rodata1 : { *(.rodata1) } + __rodata_end = .; + +- /* Ensure the __preinit_array_start label is properly aligned. We +- could instead move the label definition inside the section, but +- the linker would then create the section even if it turns out to +- be empty, which isn't pretty. */ ++ /* ++ * The difference betwee .ctors/.dtors and .init_array/.fini_array ++ * is the ordering, but we don't use prioritization for libcom32, so ++ * just lump them all together and hope that's okay. ++ */ + . = ALIGN(4); +- .preinit_array : { +- PROVIDE (__preinit_array_start = .); +- *(.preinit_array) +- PROVIDE (__preinit_array_end = .); +- } +- .init_array : { +- PROVIDE (__init_array_start = .); +- *(.init_array) +- PROVIDE (__init_array_end = .); +- } +- .fini_array : { +- PROVIDE (__fini_array_start = .); +- *(.fini_array) +- PROVIDE (__fini_array_end = .); +- } + .ctors : { + PROVIDE (__ctors_start = .); +- KEEP (*(SORT(.ctors.*))) +- KEEP (*(.ctors)) ++ KEEP (*(SORT(.preinit_array*))) ++ KEEP (*(SORT(.init_array*))) ++ KEEP (*(SORT(.ctors*))) + PROVIDE (__ctors_end = .); + } + .dtors : { + PROVIDE (__dtors_start = .); +- KEEP (*(SORT(.dtors.*))) +- KEEP (*(.dtors)) ++ KEEP (*(SORT(.fini_array*))) ++ KEEP (*(SORT(.dtors*))) + PROVIDE (__dtors_end = .); + } + +diff --git a/com32/modules/Makefile b/com32/modules/Makefile +index e9ce1d1..d8861c4 100644 +--- a/com32/modules/Makefile ++++ b/com32/modules/Makefile +@@ -19,11 +19,12 @@ topdir = ../.. + MAKEDIR = $(topdir)/mk + include $(MAKEDIR)/com32.mk + +-MODULES = chain.c32 config.c32 ethersel.c32 dmitest.c32 cpuidtest.c32 \ ++MODULES = chain.c32 config.c32 ethersel.c32 dmitest.c32 cpuidtest.c32 \ + disk.c32 pcitest.c32 elf.c32 linux.c32 reboot.c32 pmload.c32 \ + meminfo.c32 sdi.c32 sanboot.c32 ifcpu64.c32 vesainfo.c32 \ + kbdmap.c32 cmd.c32 vpdtest.c32 host.c32 ls.c32 gpxecmd.c32 \ +- ifcpu.c32 cpuid.c32 cat.c32 pwd.c32 ifplop.c32 zzjson.c32 whichsys.c32 ++ ifcpu.c32 cpuid.c32 cat.c32 pwd.c32 ifplop.c32 zzjson.c32 \ ++ whichsys.c32 + + TESTFILES = + +diff --git a/com32/tools/Makefile b/com32/tools/Makefile +index 7badabd..0161baf 100644 +--- a/com32/tools/Makefile ++++ b/com32/tools/Makefile +@@ -15,6 +15,8 @@ include $(MAKEDIR)/build.mk + + BINS = relocs + ++INCLUDES += -I./include ++ + all : $(BINS) + + relocs : relocs.o +diff --git a/com32/tools/include/tools/le_byteshift.h b/com32/tools/include/tools/le_byteshift.h +new file mode 100644 +index 0000000..c99d45a +--- /dev/null ++++ b/com32/tools/include/tools/le_byteshift.h +@@ -0,0 +1,70 @@ ++#ifndef _TOOLS_LE_BYTESHIFT_H ++#define _TOOLS_LE_BYTESHIFT_H ++ ++#include ++ ++static inline __u16 __get_unaligned_le16(const __u8 *p) ++{ ++ return p[0] | p[1] << 8; ++} ++ ++static inline __u32 __get_unaligned_le32(const __u8 *p) ++{ ++ return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24; ++} ++ ++static inline __u64 __get_unaligned_le64(const __u8 *p) ++{ ++ return (__u64)__get_unaligned_le32(p + 4) << 32 | ++ __get_unaligned_le32(p); ++} ++ ++static inline void __put_unaligned_le16(__u16 val, __u8 *p) ++{ ++ *p++ = val; ++ *p++ = val >> 8; ++} ++ ++static inline void __put_unaligned_le32(__u32 val, __u8 *p) ++{ ++ __put_unaligned_le16(val >> 16, p + 2); ++ __put_unaligned_le16(val, p); ++} ++ ++static inline void __put_unaligned_le64(__u64 val, __u8 *p) ++{ ++ __put_unaligned_le32(val >> 32, p + 4); ++ __put_unaligned_le32(val, p); ++} ++ ++static inline __u16 get_unaligned_le16(const void *p) ++{ ++ return __get_unaligned_le16((const __u8 *)p); ++} ++ ++static inline __u32 get_unaligned_le32(const void *p) ++{ ++ return __get_unaligned_le32((const __u8 *)p); ++} ++ ++static inline __u64 get_unaligned_le64(const void *p) ++{ ++ return __get_unaligned_le64((const __u8 *)p); ++} ++ ++static inline void put_unaligned_le16(__u16 val, void *p) ++{ ++ __put_unaligned_le16(val, p); ++} ++ ++static inline void put_unaligned_le32(__u32 val, void *p) ++{ ++ __put_unaligned_le32(val, p); ++} ++ ++static inline void put_unaligned_le64(__u64 val, void *p) ++{ ++ __put_unaligned_le64(val, p); ++} ++ ++#endif /* _TOOLS_LE_BYTESHIFT_H */ +diff --git a/com32/tools/relocs.c b/com32/tools/relocs.c +index 2474206..86fc7c5 100644 +--- a/com32/tools/relocs.c ++++ b/com32/tools/relocs.c +@@ -13,12 +13,16 @@ + #define USE_BSD + #include + #include +-#include ++#include ++ ++static void die(char *fmt, ...); + + #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + static Elf32_Ehdr ehdr; + static unsigned long reloc_count, reloc_idx; + static unsigned long *relocs; ++static unsigned long reloc16_count, reloc16_idx; ++static unsigned long *relocs16; + + struct section { + Elf32_Shdr shdr; +@@ -29,60 +33,87 @@ struct section { + }; + static struct section *secs; + +-static void die(char *fmt, ...) +-{ +- va_list ap; +- va_start(ap, fmt); +- vfprintf(stderr, fmt, ap); +- va_end(ap); +- exit(1); +-} ++enum symtype { ++ S_ABS, ++ S_REL, ++ S_SEG, ++ S_LIN, ++ S_NSYMTYPES ++}; + ++static const char * const sym_regex_kernel[S_NSYMTYPES] = { + /* + * Following symbols have been audited. Don't warn user about + * absolute relocations present w.r.t these symbols. + */ ++ [S_ABS] = ++ "^(__.*_len|__.*_dwords)$", + +-/* True absolute relocations */ ++/* ++ * These symbols are known to be relative, even if the linker marks them ++ * as absolute (typically defined outside any section in the linker script.) ++ */ ++ [S_REL] = ++ "^(__.*_start|__.*_end|_end|_[se](text|data))$", ++}; + +-static const char safe_abs_regex[] = +-"^(__.*_len|__.*_dwords)$"; +-static regex_t safe_abs_regex_c; + +-static int is_safe_abs_reloc(const char *sym_name) +-{ +- return !regexec(&safe_abs_regex_c, sym_name, 0, NULL, 0); +-} ++static const char * const sym_regex_realmode[S_NSYMTYPES] = { ++/* ++ * These are 16-bit segment symbols when compiling 16-bit code. ++ */ ++ [S_SEG] = ++ "^real_mode_seg$", + +-/* These are relative even though the linker marks them absolute */ ++/* ++ * These are offsets belonging to segments, as opposed to linear addresses, ++ * when compiling 16-bit code. ++ */ ++ [S_LIN] = ++ "^pa_", ++}; + +-static const char safe_rel_regex[] = +-"^(__.*_start|__.*_end|_end|_[se](text|data))$"; +-static regex_t safe_rel_regex_c; ++static const char * const *sym_regex; + +-static int is_safe_rel_reloc(const char *sym_name) ++static regex_t sym_regex_c[S_NSYMTYPES]; ++static int is_reloc(enum symtype type, const char *sym_name) + { +- return !regexec(&safe_rel_regex_c, sym_name, 0, NULL, 0); ++ return sym_regex[type] && ++ !regexec(&sym_regex_c[type], sym_name, 0, NULL, 0); + } + +-static void regex_init(void) ++static void regex_init(int use_real_mode) + { +- char errbuf[128]; +- int err; ++ char errbuf[128]; ++ int err; ++ int i; + +- err = regcomp(&safe_abs_regex_c, safe_abs_regex, +- REG_EXTENDED|REG_NOSUB); +- if (err) { +- regerror(err, &safe_abs_regex_c, errbuf, sizeof errbuf); +- die("%s", errbuf); +- } ++ if (use_real_mode) ++ sym_regex = sym_regex_realmode; ++ else ++ sym_regex = sym_regex_kernel; + +- err = regcomp(&safe_rel_regex_c, safe_rel_regex, +- REG_EXTENDED|REG_NOSUB); +- if (err) { +- regerror(err, &safe_rel_regex_c, errbuf, sizeof errbuf); +- die("%s", errbuf); +- } ++ for (i = 0; i < S_NSYMTYPES; i++) { ++ if (!sym_regex[i]) ++ continue; ++ ++ err = regcomp(&sym_regex_c[i], sym_regex[i], ++ REG_EXTENDED|REG_NOSUB); ++ ++ if (err) { ++ regerror(err, &sym_regex_c[i], errbuf, sizeof errbuf); ++ die("%s", errbuf); ++ } ++ } ++} ++ ++static void die(char *fmt, ...) ++{ ++ va_list ap; ++ va_start(ap, fmt); ++ vfprintf(stderr, fmt, ap); ++ va_end(ap); ++ exit(1); + } + + static const char *sym_type(unsigned type) +@@ -153,13 +184,16 @@ static const char *rel_type(unsigned type) + REL_TYPE(R_386_RELATIVE), + REL_TYPE(R_386_GOTOFF), + REL_TYPE(R_386_GOTPC), ++ REL_TYPE(R_386_8), ++ REL_TYPE(R_386_PC8), ++ REL_TYPE(R_386_16), ++ REL_TYPE(R_386_PC16), + #undef REL_TYPE + }; +- const char *name = NULL; +- if (type < ARRAY_SIZE(type_name)) ++ const char *name = "unknown type rel type name"; ++ if (type < ARRAY_SIZE(type_name) && type_name[type]) { + name = type_name[type]; +- if (!name) +- name = "unknown"; ++ } + return name; + } + +@@ -189,7 +223,7 @@ static const char *sym_name(const char *sym_strtab, Elf32_Sym *sym) + name = sym_strtab + sym->st_name; + } + else { +- name = sec_name(secs[sym->st_shndx].shdr.sh_name); ++ name = sec_name(sym->st_shndx); + } + return name; + } +@@ -428,7 +462,7 @@ static void print_absolute_symbols(void) + printf("\n"); + } + +-static int print_absolute_relocs(FILE *f) ++static void print_absolute_relocs(void) + { + int i, printed = 0; + +@@ -472,17 +506,18 @@ static int print_absolute_relocs(FILE *f) + * Before warning check if this absolute symbol + * relocation is harmless. + */ +- if (is_safe_abs_reloc(name) || +- is_safe_rel_reloc(name)) ++ if (is_reloc(S_ABS, name) || is_reloc(S_REL, name)) + continue; + + if (!printed) { +- fprintf(f, "Unknown absolute relocations present\n"); +- fprintf(f, "Offset Info Type Sym.Value Sym.Name\n"); ++ printf("WARNING: Absolute relocations" ++ " present\n"); ++ printf("Offset Info Type Sym.Value " ++ "Sym.Name\n"); + printed = 1; + } + +- fprintf(f, "%08x %08x %10s %08x %s\n", ++ printf("%08x %08x %10s %08x %s\n", + rel->r_offset, + rel->r_info, + rel_type(ELF32_R_TYPE(rel->r_info)), +@@ -492,12 +527,11 @@ static int print_absolute_relocs(FILE *f) + } + + if (printed) +- fputc('\n', f); +- +- return printed; ++ printf("\n"); + } + +-static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym)) ++static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym), ++ int use_real_mode) + { + int i; + /* Walk through the relocations */ +@@ -522,31 +556,71 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym)) + Elf32_Rel *rel; + Elf32_Sym *sym; + unsigned r_type; ++ const char *symname; ++ int shn_abs; ++ + rel = &sec->reltab[j]; + sym = &sh_symtab[ELF32_R_SYM(rel->r_info)]; + r_type = ELF32_R_TYPE(rel->r_info); +- /* Don't visit relocations to absolute symbols */ +- if (sym->st_shndx == SHN_ABS && +- !is_safe_rel_reloc(sym_name(sym_strtab, sym))) +- continue; ++ ++ shn_abs = sym->st_shndx == SHN_ABS; + + switch (r_type) { + case R_386_NONE: + case R_386_PC32: ++ case R_386_PC16: ++ case R_386_PC8: + case R_386_GOTPC: + case R_386_GOTOFF: + case R_386_GOT32: + case R_386_PLT32: +- /* Relative relocations don't need to +- be adjusted */ ++ /* ++ * NONE can be ignored and and PC relative ++ * relocations don't need to be adjusted. ++ */ + break; ++ ++ case R_386_16: ++ symname = sym_name(sym_strtab, sym); ++ if (!use_real_mode) ++ goto bad; ++ if (shn_abs) { ++ if (is_reloc(S_ABS, symname)) ++ break; ++ else if (!is_reloc(S_SEG, symname)) ++ goto bad; ++ } else { ++ if (is_reloc(S_LIN, symname)) ++ goto bad; ++ else ++ break; ++ } ++ visit(rel, sym); ++ break; ++ + case R_386_32: +- /* Visit relocations that need adjustment */ ++ symname = sym_name(sym_strtab, sym); ++ if (shn_abs) { ++ if (is_reloc(S_ABS, symname)) ++ break; ++ else if (!is_reloc(S_REL, symname)) ++ goto bad; ++ } else { ++ if (use_real_mode && ++ !is_reloc(S_LIN, symname)) ++ break; ++ } + visit(rel, sym); + break; + default: + die("Unsupported relocation type: %s (%d)\n", + rel_type(r_type), r_type); ++ break; ++ bad: ++ symname = sym_name(sym_strtab, sym); ++ die("Invalid %s %s relocation: %s\n", ++ shn_abs ? "absolute" : "relative", ++ rel_type(r_type), symname); + } + } + } +@@ -554,8 +628,12 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym)) + + static void count_reloc(Elf32_Rel *rel, Elf32_Sym *sym) + { +- (void)rel; (void)sym; +- reloc_count += 1; ++ (void)sym; ++ ++ if (ELF32_R_TYPE(rel->r_info) == R_386_16) ++ reloc16_count++; ++ else ++ reloc_count++; + } + + static void collect_reloc(Elf32_Rel *rel, Elf32_Sym *sym) +@@ -563,7 +641,10 @@ static void collect_reloc(Elf32_Rel *rel, Elf32_Sym *sym) + (void)sym; + + /* Remember the address that needs to be adjusted. */ +- relocs[reloc_idx++] = rel->r_offset; ++ if (ELF32_R_TYPE(rel->r_info) == R_386_16) ++ relocs16[reloc16_idx++] = rel->r_offset; ++ else ++ relocs[reloc_idx++] = rel->r_offset; + } + + static int cmp_relocs(const void *va, const void *vb) +@@ -573,23 +654,41 @@ static int cmp_relocs(const void *va, const void *vb) + return (*a == *b)? 0 : (*a > *b)? 1 : -1; + } + +-static void emit_relocs(int as_text) ++static int write32(unsigned int v, FILE *f) ++{ ++ unsigned char buf[4]; ++ ++ put_unaligned_le32(v, buf); ++ return fwrite(buf, 1, 4, f) == 4 ? 0 : -1; ++} ++ ++static void emit_relocs(int as_text, int use_real_mode) + { + int i; + /* Count how many relocations I have and allocate space for them. */ + reloc_count = 0; +- walk_relocs(count_reloc); ++ walk_relocs(count_reloc, use_real_mode); + relocs = malloc(reloc_count * sizeof(relocs[0])); + if (!relocs) { + die("malloc of %d entries for relocs failed\n", + reloc_count); + } ++ ++ relocs16 = malloc(reloc16_count * sizeof(relocs[0])); ++ if (!relocs16) { ++ die("malloc of %d entries for relocs16 failed\n", ++ reloc16_count); ++ } + /* Collect up the relocations */ + reloc_idx = 0; +- walk_relocs(collect_reloc); ++ walk_relocs(collect_reloc, use_real_mode); ++ ++ if (reloc16_count && !use_real_mode) ++ die("Segment relocations found but --realmode not specified\n"); + + /* Order the relocations for more efficient processing */ + qsort(relocs, reloc_count, sizeof(relocs[0]), cmp_relocs); ++ qsort(relocs16, reloc16_count, sizeof(relocs16[0]), cmp_relocs); + + /* Print the relocations */ + if (as_text) { +@@ -598,61 +697,83 @@ static void emit_relocs(int as_text) + */ + printf(".section \".data.reloc\",\"a\"\n"); + printf(".balign 4\n"); +- for (i = 0; i < reloc_count; i++) { +- printf("\t .long 0x%08lx\n", relocs[i]); ++ if (use_real_mode) { ++ printf("\t.long %lu\n", reloc16_count); ++ for (i = 0; i < reloc16_count; i++) ++ printf("\t.long 0x%08lx\n", relocs16[i]); ++ printf("\t.long %lu\n", reloc_count); ++ for (i = 0; i < reloc_count; i++) { ++ printf("\t.long 0x%08lx\n", relocs[i]); ++ } ++ } else { ++ for (i = 0; i < reloc_count; i++) { ++ printf("\t.long 0x%08lx\n", relocs[i]); ++ } ++ /* Print a stop */ ++ printf("\t.long 0x%08lx\n", (unsigned long)0); + } ++ + printf("\n"); + } + else { +- unsigned char buf[4]; +- /* Now print each relocation */ +- for (i = 0; i < reloc_count; i++) { +- buf[0] = (relocs[i] >> 0) & 0xff; +- buf[1] = (relocs[i] >> 8) & 0xff; +- buf[2] = (relocs[i] >> 16) & 0xff; +- buf[3] = (relocs[i] >> 24) & 0xff; +- fwrite(buf, 4, 1, stdout); ++ if (use_real_mode) { ++ write32(reloc16_count, stdout); ++ for (i = 0; i < reloc16_count; i++) ++ write32(relocs16[i], stdout); ++ write32(reloc_count, stdout); ++ ++ /* Now print each relocation */ ++ for (i = 0; i < reloc_count; i++) ++ write32(relocs[i], stdout); ++ } else { ++ /* Now print each relocation */ ++ for (i = 0; i < reloc_count; i++) { ++ write32(relocs[i], stdout); ++ } ++ ++ /* Print a stop */ ++ write32(0, stdout); + } +- /* Print a stop */ +- memset(buf, 0, sizeof buf); +- fwrite(buf, 4, 1, stdout); + } + } + + static void usage(void) + { +- die("relocs [--abs-syms |--abs-relocs | --text] vmlinux\n"); ++ die("relocs [--abs-syms|--abs-relocs|--text|--realmode] vmlinux\n"); + } + + int main(int argc, char **argv) + { + int show_absolute_syms, show_absolute_relocs; +- int as_text; ++ int as_text, use_real_mode; + const char *fname; + FILE *fp; + int i; +- int err = 0; + + show_absolute_syms = 0; + show_absolute_relocs = 0; + as_text = 0; ++ use_real_mode = 0; + fname = NULL; + for (i = 1; i < argc; i++) { + char *arg = argv[i]; + if (*arg == '-') { +- if (strcmp(argv[1], "--abs-syms") == 0) { ++ if (strcmp(arg, "--abs-syms") == 0) { + show_absolute_syms = 1; + continue; + } +- +- if (strcmp(argv[1], "--abs-relocs") == 0) { ++ if (strcmp(arg, "--abs-relocs") == 0) { + show_absolute_relocs = 1; + continue; + } +- else if (strcmp(argv[1], "--text") == 0) { ++ if (strcmp(arg, "--text") == 0) { + as_text = 1; + continue; + } ++ if (strcmp(arg, "--realmode") == 0) { ++ use_real_mode = 1; ++ continue; ++ } + } + else if (!fname) { + fname = arg; +@@ -663,10 +784,7 @@ int main(int argc, char **argv) + if (!fname) { + usage(); + } +- +- +- regex_init(); +- ++ regex_init(use_real_mode); + fp = fopen(fname, "r"); + if (!fp) { + die("Cannot open %s: %s\n", +@@ -682,10 +800,9 @@ int main(int argc, char **argv) + return 0; + } + if (show_absolute_relocs) { +- print_absolute_relocs(stdout); ++ print_absolute_relocs(); + return 0; + } +- err = print_absolute_relocs(stderr); +- emit_relocs(as_text); +- return err; ++ emit_relocs(as_text, use_real_mode); ++ return 0; + } diff --git a/SOURCES/0003-Fixes-for-problems-discovered-by-coverity-scan.-8120.patch b/SOURCES/0003-Fixes-for-problems-discovered-by-coverity-scan.-8120.patch new file mode 100644 index 0000000..38ad1f4 --- /dev/null +++ b/SOURCES/0003-Fixes-for-problems-discovered-by-coverity-scan.-8120.patch @@ -0,0 +1,265 @@ +From a3655b7bf64b7e016602d0b2bec450d27575816e Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 15 Oct 2012 13:12:53 -0400 +Subject: [PATCH 3/4] Fixes for problems discovered by coverity scan. + +Related: rhbz#1085434 + +Signed-off-by: Peter Jones +--- + extlinux/main.c | 9 ++++++++- + libfat/fat.h | 9 +++++++-- + libinstaller/advio.c | 17 +++++++++-------- + libinstaller/syslxcom.c | 8 ++++++++ + libinstaller/syslxint.h | 10 +++++++--- + linux/syslinux.c | 3 --- + mtools/syslinux.c | 1 + + utils/Makefile | 2 +- + utils/isohybrid.c | 20 ++++++++++++++------ + 9 files changed, 55 insertions(+), 24 deletions(-) + +diff --git a/extlinux/main.c b/extlinux/main.c +index e574051..a461533 100755 +--- a/extlinux/main.c ++++ b/extlinux/main.c +@@ -292,7 +292,12 @@ int patch_file_and_bootblock(int fd, const char *dir, int devfd) + nsect = (boot_image_len + SECTOR_SIZE - 1) >> SECTOR_SHIFT; + nsect += 2; /* Two sectors for the ADV */ + sectp = alloca(sizeof(sector_t) * nsect); +- if (fs_type == EXT2 || fs_type == VFAT) { ++ if (sectp == NULL) { ++ perror("alloca"); ++ exit(1); ++ } ++ memset(sectp, '\0', sizeof(sector_t) * nsect); ++ if (fd >= 0 && (fs_type == EXT2 || fs_type == VFAT)) { + if (sectmap(fd, sectp, nsect)) { + perror("bmap"); + exit(1); +@@ -423,6 +428,8 @@ int ext2_fat_install_file(const char *path, int devfd, struct stat *rst) + + /* Map the file, and patch the initial sector accordingly */ + modbytes = patch_file_and_bootblock(fd, path, devfd); ++ if (modbytes < 0) ++ goto bail; + + /* Write the patch area again - this relies on the file being + overwritten in place! */ +diff --git a/libfat/fat.h b/libfat/fat.h +index b4e32f7..acafdb6 100644 +--- a/libfat/fat.h ++++ b/libfat/fat.h +@@ -23,8 +23,13 @@ + + /* The poor excuse FAT has for a superblock -- in the boot sector */ + struct fat_bootsect { +- le8_t bsJump[3]; /* Jump to code */ +- char bsOemName[8]; /* Formatting program */ ++ union { ++ struct { ++ uint8_t bsJump[3]; /* Jump to code */ ++ char bsOemName[8]; /* Formatting program */ ++ }; ++ uint8_t bsHead[11]; ++ }; + le16_t bsBytesPerSec; /* Bytes/sector */ + le8_t bsSecPerClust; /* Sectors/cluster */ + le16_t bsResSectors; /* Reserved sectors */ +diff --git a/libinstaller/advio.c b/libinstaller/advio.c +index 56f607d..01894f2 100644 +--- a/libinstaller/advio.c ++++ b/libinstaller/advio.c +@@ -135,15 +135,16 @@ int write_adv(const char *path, const char *cfg) + xst.st_dev != st.st_dev || xst.st_size != st.st_size) { + fprintf(stderr, "%s: race condition on write\n", file); + err = -2; ++ } else { ++ /* Write our own version ... */ ++ if (xpwrite(fd, syslinux_adv, 2 * ADV_SIZE, ++ st.st_size - 2 * ADV_SIZE) != 2 * ADV_SIZE) { ++ err = -1; ++ } ++ ++ sync(); ++ set_attributes(fd); + } +- /* Write our own version ... */ +- if (xpwrite(fd, syslinux_adv, 2 * ADV_SIZE, +- st.st_size - 2 * ADV_SIZE) != 2 * ADV_SIZE) { +- err = -1; +- } +- +- sync(); +- set_attributes(fd); + } + } + +diff --git a/libinstaller/syslxcom.c b/libinstaller/syslxcom.c +index a6a8339..dae81bc 100644 +--- a/libinstaller/syslxcom.c ++++ b/libinstaller/syslxcom.c +@@ -87,6 +87,9 @@ ssize_t xpwrite(int fd, const void *buf, size_t count, off_t offset) + ssize_t rv; + ssize_t done = 0; + ++ if (fd < 0) ++ die(strerror(EBADF)); ++ + while (count) { + rv = pwrite(fd, bufp, count, offset); + if (rv == 0) { +@@ -279,6 +282,11 @@ static int sectmap_fib(int fd, sector_t *sectors, int nsectors) + */ + int sectmap(int fd, sector_t *sectors, int nsectors) + { ++ if (fd < 0) { ++ errno = EBADF; ++ return -1; ++ } ++ + if (!sectmap_fie(fd, sectors, nsectors)) + return 0; + +diff --git a/libinstaller/syslxint.h b/libinstaller/syslxint.h +index 7c9da51..8d39f74 100644 +--- a/libinstaller/syslxint.h ++++ b/libinstaller/syslxint.h +@@ -193,8 +193,13 @@ struct syslinux_extent { + + /* FAT bootsector format, also used by other disk-based derivatives */ + struct boot_sector { +- uint8_t bsJump[3]; +- char bsOemName[8]; ++ union { ++ struct { ++ uint8_t bsJump[3]; ++ char bsOemName[8]; ++ }; ++ uint8_t bsHead[11]; ++ }; + uint16_t bsBytesPerSec; + uint8_t bsSecPerClust; + uint16_t bsResSectors; +@@ -241,7 +246,6 @@ struct boot_sector { + uint16_t bsSignature; + } __attribute__ ((packed)); + +-#define bsHead bsJump + #define bsHeadLen offsetof(struct boot_sector, bsBytesPerSec) + #define bsCode bs32.Code /* The common safe choice */ + #define bsCodeLen (offsetof(struct boot_sector, bsSignature) - \ +diff --git a/linux/syslinux.c b/linux/syslinux.c +index c7a9ecc..6e23a7a 100755 +--- a/linux/syslinux.c ++++ b/linux/syslinux.c +@@ -335,9 +335,6 @@ int main(int argc, char *argv[]) + snprintf(mntname, sizeof mntname, "syslinux.mnt.%lu.%d", + (unsigned long)mypid, i); + +- if (lstat(mntname, &dst) != -1 || errno != ENOENT) +- continue; +- + rv = mkdir(mntname, 0000); + + if (rv == -1) { +diff --git a/mtools/syslinux.c b/mtools/syslinux.c +index ac189c6..4bec0e3 100755 +--- a/mtools/syslinux.c ++++ b/mtools/syslinux.c +@@ -208,6 +208,7 @@ int main(int argc, char *argv[]) + !mtools_conf) + die_err(tmpdir); + ++ umask(077); + mtc_fd = mkstemp(mtools_conf); + if (mtc_fd < 0 || !(mtc = fdopen(mtc_fd, "w"))) + die_err(mtools_conf); +diff --git a/utils/Makefile b/utils/Makefile +index 44cb54f..4fabe04 100644 +--- a/utils/Makefile ++++ b/utils/Makefile +@@ -51,7 +51,7 @@ isohdpfx.c: $(ISOHDPFX) isohdpfxarray.pl + $(PERL) isohdpfxarray.pl $(ISOHDPFX) > $@ + + isohybrid: isohybrid.o isohdpfx.o +- $(CC) $(LDFLAGS) -luuid -o $@ $^ ++ $(CC) $(LDFLAGS) -fshort-wchar -luuid -o $@ $^ + + gethostip: gethostip.o + $(CC) $(LDFLAGS) -o $@ $^ +diff --git a/utils/isohybrid.c b/utils/isohybrid.c +index ac04bfd..865c114 100644 +--- a/utils/isohybrid.c ++++ b/utils/isohybrid.c +@@ -357,6 +357,8 @@ check_option(int argc, char *argv[]) + case ':': + errx(1, "option `-%c' takes an argument", optopt); + ++ printh(); ++ exit(0); + default: + case '?': + if (optopt) +@@ -618,7 +620,7 @@ initialise_mbr(uint8_t *mbr) + bsect = (offset % sector) + 1; + bcyle = offset / (head * sector); + +- bsect += (bcyle & 0x300) >> 2; ++ bsect += bcyle >> 2; + bcyle &= 0xFF; + + ehead = head - 1; +@@ -792,7 +794,7 @@ initialise_gpt(uint8_t *gpt, uint32_t current, uint32_t alternate, int primary) + memcpy(part->partTypeGUID, basic_partition, sizeof(uuid_t)); + part->firstLBA = lendian_64(0); + part->lastLBA = lendian_64(psize); +- memcpy(part->name, "ISOHybrid ISO", 28); ++ memcpy(part->name, L"ISOHybrid ISO", 28); + + gpt += sizeof(struct gpt_part_header); + part++; +@@ -801,7 +803,7 @@ initialise_gpt(uint8_t *gpt, uint32_t current, uint32_t alternate, int primary) + memcpy(part->partTypeGUID, basic_partition, sizeof(uuid_t)); + part->firstLBA = lendian_64(efi_lba * 4); + part->lastLBA = lendian_64(part->firstLBA + efi_count - 1); +- memcpy(part->name, "ISOHybrid", 20); ++ memcpy(part->name, L"ISOHybrid", 20); + + gpt += sizeof(struct gpt_part_header); + +@@ -814,7 +816,7 @@ initialise_gpt(uint8_t *gpt, uint32_t current, uint32_t alternate, int primary) + memcpy(part->partTypeGUID, hfs_partition, sizeof(uuid_t)); + part->firstLBA = lendian_64(mac_lba * 4); + part->lastLBA = lendian_64(part->firstLBA + mac_count - 1); +- memcpy(part->name, "ISOHybrid", 20); ++ memcpy(part->name, L"ISOHybrid", 20); + + part--; + } +@@ -891,7 +893,11 @@ main(int argc, char *argv[]) + size_t orig_gpt_size, free_space, gpt_size; + struct iso_primary_descriptor descriptor; + +- prog = strcpy(alloca(strlen(argv[0]) + 1), argv[0]); ++ prog = alloca(strlen(argv[0]) + 1); ++ if (!prog) ++ err(1, ""); ++ strcpy(prog, argv[0]); ++ + i = check_option(argc, argv); + argc -= i; + argv += i; +@@ -1097,7 +1103,9 @@ main(int argc, char *argv[]) + + initialise_apm(buf, APM_OFFSET); + +- fseek(fp, APM_OFFSET, SEEK_SET); ++ if (fseek(fp, APM_OFFSET, SEEK_SET)) ++ err(1, "%s: seek error - 7", argv[0]); ++ + fwrite(buf, sizeof(char), apm_size, fp); + } + +-- +1.9.3 + diff --git a/SOURCES/0004-Make-some-more-mingw-paths-work.patch b/SOURCES/0004-Make-some-more-mingw-paths-work.patch new file mode 100644 index 0000000..5cde519 --- /dev/null +++ b/SOURCES/0004-Make-some-more-mingw-paths-work.patch @@ -0,0 +1,42 @@ +From 9336f2aff579aa591b75bb4be59451d4b3dd283f Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 7 Apr 2014 09:57:17 -0400 +Subject: [PATCH 4/4] Make some more mingw paths work. + +Related: rhbz#1085434 + +--- + win32/find-mingw32.sh | 4 +++- + win64/find-mingw64.sh | 1 + + 2 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/win32/find-mingw32.sh b/win32/find-mingw32.sh +index f79949c..ed8408f 100755 +--- a/win32/find-mingw32.sh ++++ b/win32/find-mingw32.sh +@@ -20,7 +20,9 @@ for prefix in \ + i386-mingw32msvc- \ + i486-mingw32msvc- \ + i586-mingw32msvc- \ +- i686-mingw32msvc-; do ++ i686-mingw32msvc- \ ++ i686-w64-mingw32- \ ++ ; do + if "${prefix}${cc}" -v > /dev/null 2>&1; then + echo "$prefix" + exit 0 +diff --git a/win64/find-mingw64.sh b/win64/find-mingw64.sh +index c45db56..4c2cce2 100755 +--- a/win64/find-mingw64.sh ++++ b/win64/find-mingw64.sh +@@ -20,6 +20,7 @@ for prefix in \ + amd64-mingw64msvc- \ + amd64-mingw32- \ + amd64-mingw32msvc- \ ++ x86_64-w64-mingw32- \ + ; do + if "${prefix}${cc}" -v > /dev/null 2>&1; then + echo "$prefix" +-- +1.9.0 + diff --git a/SOURCES/syslinux-4.05-man-pages.patch b/SOURCES/syslinux-4.05-man-pages.patch index 77427cc..d150258 100644 --- a/SOURCES/syslinux-4.05-man-pages.patch +++ b/SOURCES/syslinux-4.05-man-pages.patch @@ -1,3 +1,9 @@ +From: Peter Jones +Subject: Improve documentation +Date: Mon Jan 20 14:12:34 2014 -0500 + +Resolves: rhbz#948852 + diff -urpN syslinux-4.05/libinstaller/syslxopt.c.options syslinux-4.05/libinstaller/syslxopt.c --- syslinux-4.05/libinstaller/syslxopt.c.options 2014-01-20 14:02:01.634201156 -0500 +++ syslinux-4.05/libinstaller/syslxopt.c 2014-01-20 14:09:39.303778826 -0500 diff --git a/SOURCES/syslinux-isohybrid-fix-mbr.patch b/SOURCES/syslinux-isohybrid-fix-mbr.patch index 7271c4c..974c70c 100644 --- a/SOURCES/syslinux-isohybrid-fix-mbr.patch +++ b/SOURCES/syslinux-isohybrid-fix-mbr.patch @@ -1,15 +1,13 @@ -commit 4816be5c3bf49ae235baa71c512b4a1705a980f8 -Author: Matthew Garrett +From: Matthew Garrett Date: Wed Feb 15 12:05:29 2012 -0500 +Subject: isohybrid: Generate MBR even when in EFI mode - isohybrid: Generate MBR even when in EFI mode - - Various EFI systems insist that there be no active flag in the pMBR in - order to parse the GPT. The only way around this is to also generate a - valid MBR - the firmware will then pick that up and use the system - partition provided there. In order to deal with other EFI "sanity" checks, - the partition type for the non-EFI partitions is set to 0 to skip the - firmware bailing because of overlapping partitions. +Various EFI systems insist that there be no active flag in the pMBR in +order to parse the GPT. The only way around this is to also generate a +valid MBR - the firmware will then pick that up and use the system +partition provided there. In order to deal with other EFI "sanity" checks, +the partition type for the non-EFI partitions is set to 0 to skip the +firmware bailing because of overlapping partitions. diff --git a/utils/isohybrid.c b/utils/isohybrid.c index 1dcbaa1..ac04bfd 100644 diff --git a/SPECS/syslinux.spec b/SPECS/syslinux.spec index c73de5a..70f591d 100644 --- a/SPECS/syslinux.spec +++ b/SPECS/syslinux.spec @@ -2,36 +2,33 @@ Summary: Simple kernel loader which boots from a FAT filesystem Name: syslinux Version: 4.05 %define tarball_version 4.05 -Release: 8%{?dist} +Release: 12%{?dist} License: GPLv2+ Group: Applications/System URL: http://syslinux.zytor.com/wiki/index.php/The_Syslinux_Project Source0: http://www.kernel.org/pub/linux/utils/boot/syslinux/%{name}-%{tarball_version}.tar.bz2 ExclusiveArch: x86_64 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -BuildRequires: nasm >= 0.98.38-1, perl, netpbm-progs -BuildRequires: /usr/include/gnu/stubs-32.h +BuildRequires: nasm >= 0.98.38-1, perl, netpbm-progs, git BuildRequires: libuuid-devel -%ifarch %{ix86} -Requires: mtools, libc.so.6 -%endif +BuildRequires: /usr/include/gnu/stubs-32.h +BuildRequires: cpio, findutils %ifarch x86_64 -Requires: mtools, libc.so.6()(64bit) +Requires: mtools, libc.so.6()(64bit), libuuid %endif -Patch1: syslinux-isohybrid-fix-mbr.patch -Patch2: syslinux-4.05-avoid-ext2_fs.h.patch -Patch3: syslinux-4.05-man-pages.patch - -# NOTE: extlinux belongs in /sbin, not in /usr/sbin, since it is typically -# a system bootloader, and may be necessary for system recovery. -%define _sbindir /sbin +Patch0001: syslinux-isohybrid-fix-mbr.patch +Patch0002: syslinux-4.05-avoid-ext2_fs.h.patch +Patch0003: syslinux-4.05-man-pages.patch +Patch0006: 0003-Fixes-for-problems-discovered-by-coverity-scan.-8120.patch +Patch0007: 0004-Make-some-more-mingw-paths-work.patch +Patch0008: 0001-Don-t-use-strict-aliasing-because-not-everything-her.patch +Patch0009: 0001-relocs-Move-stop-to-the-end.patch %description SYSLINUX is a suite of bootloaders, currently supporting DOS FAT filesystems, Linux ext2/ext3 filesystems (EXTLINUX), PXE network boots -(PXELINUX), or ISO 9660 CD-ROMs (ISOLINUX). It also includes a tool, -MEMDISK, which loads legacy operating systems from these media. +(PXELINUX), or ISO 9660 CD-ROMs (ISOLINUX). %package perl Summary: Syslinux tools written in perl @@ -40,13 +37,6 @@ Group: Applications/System %description perl Syslinux tools written in perl -%package devel -Summary: Headers and libraries for syslinux development. -Group: Development/Libraries - -%description devel -Headers and libraries for syslinux development. - %package extlinux Summary: The EXTLINUX bootloader, for booting the local system. Group: System/Boot @@ -56,27 +46,42 @@ Requires: syslinux The EXTLINUX bootloader, for booting the local system, as well as all the SYSLINUX/PXELINUX modules in /boot. +%package devel +Summary: Headers and libraries for syslinux development. +Group: Development/Libraries + +%description devel +Headers and libraries for syslinux development. + %package tftpboot -Summary: SYSLINUX modules in /tftpboot, available for network booting +Summary: SYSLINUX modules in /var/lib/tftpboot, available for network booting Group: Applications/Internet +ExclusiveArch: x86_64 Requires: syslinux %description tftpboot All the SYSLINUX/PXELINUX modules directly available for network -booting in the /tftpboot directory. +booting in the /var/lib/tftpboot directory. %prep %setup -q -n syslinux-%{tarball_version} - -%patch1 -p1 -b .isohyb -%patch2 -p1 -b .ext2 -%patch3 -p1 -b .man-pages +git init +git config user.email "nobody@example.com" +git config user.name "RHEL Ninjas" +git add . +git commit -a -q -m "%{version} baseline." +git am %{patches} - 4.05-12 +- Toolchain changes between when this originally got built and 4.05-9 means + 4.05-9 - 4.05-11 don't actually work. + Related: rhbz#1085434 + +* Tue Sep 23 2014 Peter Jones - 4.05-11 +- Fix some rpmdiff problems. + Related: rhbz#1085434 + +* Tue Sep 23 2014 Peter Jones - 4.05-10 +- Fix some aliasing errors rpmdiff complains about. + Related: rhbz#1085434 + +* Tue Sep 02 2014 Peter Jones - 4.05-9 +- Try harder to build everything correctly. + Resolves: rhbz#1085434 + * Thu Feb 27 2014 David Cantrell - 4.05-8 - Only build for x86_64 Resolves: rhbz#1070659 @@ -217,268 +248,3 @@ fi * Thu Aug 05 2010 Peter Jones - 4.02-1 - Update to 4.02 - -* Mon Jan 11 2010 Peter Jones - 3.84-1 -- Update to 3.84 - -* Thu Dec 17 2009 Peter Jones - 3.83-2 -- Split out -devel - -* Thu Oct 29 2009 Peter Jones - 3.83-1 -- update to 3.83 - -* Sun Jul 26 2009 Fedora Release Engineering - 3.75-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild - -* Tue Apr 28 2009 Jeremy Katz - 3.75-3 -- Stop suppressing requirements of the package (#465299) - -* Tue Apr 28 2009 Jeremy Katz - 3.75-2 -- Don't strip binaries to fix debuginfo (#249970) - -* Thu Apr 16 2009 Jeremy Katz - 3.75-1 -- update to 3.75 - -* Fri Apr 10 2009 Jeremy Katz - 3.74-1 -- update to 3.74 - -* Fri Feb 27 2009 Tom "spot" Callaway - 3.73-2 -- fix arch issues - -* Fri Feb 27 2009 Jeremy Katz - 3.73-1 -- Update to 3.73 - -* Wed Feb 25 2009 Fedora Release Engineering - 3.61-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild - -* Sat Sep 6 2008 Tom "spot" Callaway - 3.61-3 -- fix license tag - -* Mon Feb 25 2008 Peter Jones - 3.61-2 -- Remove 16bpp patch, hpa says that's there to cover a bug that's fixed. -- Remove x86_64 patch; building without it works now. - -* Tue Feb 21 2008 Peter Jones - 3.61-1 -- Update to 3.61 . - -* Tue Feb 19 2008 Fedora Release Engineering - 3.36-9 -- Autorebuild for GCC 4.3 - -* Wed Jan 09 2008 Florian La Roche - 3.36-8 -- spec in utf-8 -- add URL tag -- own /usr/share/syslinux (rhbz#427816) - -* Wed Oct 17 2007 Peter Jones - 3.36-7 -- Add necessary files for makebootfat to make usb images (patch from - Joel Granados ) - -* Wed Oct 3 2007 Jeremy Katz - 3.36-6 -- fix menu system memory corruption (#239585) - -* Tue Aug 14 2007 Jeremy Katz - 3.36-5 -- backport "menu hidden" support from upstream git - -* Fri May 4 2007 Jeremy Katz - 3.36-4 -- switch to preferring 16bpp for graphical menu; this fixes the display for - qemu, kvm, etc - -* Tue May 1 2007 Jeremy Katz - 3.36-3 -- fix countdown on boot images (#229491) - -* Tue Apr 03 2007 Florian La Roche - 3.36-2 -- add upstream patch from 3.3x branch - -* Mon Feb 12 2007 Florian La Roche - 3.36-1 -- update to 3.36 - -* Thu Feb 08 2007 Florian La Roche - 3.35-1 -- update to 3.35 - -* Thu Jan 18 2007 Jesse Keating - 3.31-2 -- Make syslinux own /usr/lib/syslinux. - -* Wed Jan 17 2007 Jeremy Katz - 3.31-1 -- update to 3.31 - -* Tue Aug 22 2006 Jesse Keating - 3.11-4 -- Obsolete syslinux-devel. -- Couple cleanups for packaging guidelines - -* Fri Jul 14 2006 David Cantrell - 3.11-3 -- Remove com32/include/time.h and com32/include/sys/times.h -- Replace CLK_TCK macros with CLOCKS_PER_SEC - -* Wed Jul 12 2006 Jesse Keating - 3.11-2.1 -- rebuild - -* Mon Jun 12 2006 Peter Jones - 3.11-2 -- Fold -devel subpackage into "syslinux" - -* Mon Jun 05 2006 Jesse Keating - 3.10-5 -- Use the actual file as a BuildRequire - -* Mon Jun 05 2006 Jesse Keating - 3.10-4 -- Changed glibc-devel to glibc32 to get the 32bit package in - -* Mon Jun 05 2006 Jesse Keating - 3.10-3 -- Added missing glibc-devel BuildRequires - -* Tue Feb 07 2006 Jesse Keating - 3.10-2.2 -- rebuilt for new gcc4.1 snapshot and glibc changes - -* Fri Dec 09 2005 Jesse Keating -- rebuilt - -* Mon Aug 22 2005 Peter Jones - 3.10-2 -- Update to 3.10 -- Don't do "make clean", so we actually ship the bins hpa gives us - -* Sat Jul 9 2005 Peter Jones - 3.09-2 -- Update to 3.09 - -* Thu Jun 16 2005 Peter Jones - 3.08.92-1 -- Update to 3.09-pre2, to fix the i915 .bss overflow bug - -* Thu May 19 2005 Peter Jones - 3.08-3 -- Fix filespec for samples in -devel - -* Thu May 19 2005 Peter Jones - 3.08-2 -- update to 3.08 - -* Wed Mar 16 2005 Peter Jones - 3.07-2 -- gcc4 update - -* Thu Jan 13 2005 Peter Jones - 3.07-1 -- update to 3.07 - -* Tue Jan 11 2005 Peter Jones - 3.06-1 -- update to 3.06 , which should fix the directory parsing bug that wedges it - with diskboot.img -- change README to README* in doc, to include README.menu and README.usbkey - -* Tue Jan 4 2005 Peter Jones - 3.02-2 -- Beehive doesn't let you build in scratch and then build someplace else, - arrrrgh. - -* Tue Jan 4 2005 Peter Jones - 3.02-1 -- 3.02 -- Make the spec a little closer to hpa's. - -* Mon Jan 3 2005 Peter Jones - 3.00-2 -- make tag says the tag is there, make build says it's not. - Bump release, try again. - -* Mon Jan 3 2005 Peter Jones - 3.00-1 -- 3.00 - -* Mon Aug 16 2004 Jeremy Katz - 2.11-1 -- 2.11 - -* Fri Jul 30 2004 Jeremy Katz - 2.10-1 -- update to 2.10 - -* Tue Jun 15 2004 Elliot Lee -- rebuilt - -* Sat Apr 17 2004 Jeremy Katz 2.0.8-3 -- add syslinux-nomtools binary to be used for creating some installer images - -* Tue Feb 17 2004 Jeremy Katz -- add netpbm-progs BuildRequires (#110255) - -* Fri Feb 13 2004 Elliot Lee -- rebuilt - -* Sun Dec 14 2003 Jeremy Katz 2.08-1 -- 2.08 - -* Fri Aug 22 2003 Jeremy Katz 2.06-1 -- 2.06 - -* Thu Aug 14 2003 Jeremy Katz 2.05-1 -- update to 2.05 - -* Mon Apr 21 2003 Jeremy Katz 2.04-2 -- add patch for samples to build on x86_64 -- integrate some changes from upstream specfile (#88593) - -* Fri Apr 18 2003 Jeremy Katz 2.04-1 -- update to 2.04 - -* Mon Feb 3 2003 Jeremy Katz 2.01-1 -- update to 2.01 - -* Wed Jan 22 2003 Tim Powers -- rebuilt - -* Tue Jan 14 2003 Jeremy Katz 2.00-3 -- fix deps for x86_64 - -* Wed Nov 27 2002 Tim Powers 2.00-2 -- build on both x86_64 and i386 - -* Fri Nov 1 2002 Jeremy Katz -- update to 2.00 -- add additional files as requested by hpa (#68073) - -* Fri Jun 21 2002 Tim Powers -- automated rebuild - -* Tue Jun 18 2002 Jeremy Katz -- lss16toppm and ppmtolss16 are both perl scripts... turn off find-requires - so we don't suck in perl as a dependency for syslinux - -* Mon Jun 17 2002 Jeremy Katz -- update to 1.75 -- include tools to create graphical image format needed by syslinux -- include isolinux -- include pxelinux (#64942) - -* Fri Jun 14 2002 Preston Brown -- upgrade to latest version w/graphical screen support - -* Thu May 23 2002 Tim Powers -- automated rebuild - -* Wed Jan 09 2002 Tim Powers -- automated rebuild - -* Sun Jun 24 2001 Elliot Lee -- Bump release + rebuild. - -* Sat Feb 10 2001 Matt Wilson -- 1.52 - -* Wed Jan 24 2001 Matt Wilson -- 1.51pre7 - -* Mon Jan 22 2001 Matt Wilson -- 1.51pre5 - -* Fri Jan 19 2001 Matt Wilson -- 1.51pre3, with e820 detection - -* Tue Dec 12 2000 Than Ngo -- rebuilt with fixed fileutils - -* Thu Nov 9 2000 Than Ngo -- update to 1.49 -- update ftp site -- clean up specfile -- add some useful documents - -* Tue Jul 18 2000 Nalin Dahyabhai -- add %%defattr (release 4) - -* Wed Jul 12 2000 Prospector -- automatic rebuild - -* Thu Jul 06 2000 Trond Eivind Glomsrød -- use %%{_tmppath} -- change application group (Applications/Internet doesn't seem - right to me) -- added BuildRequires - -* Tue Apr 04 2000 Erik Troan -- initial packaging