diff --git a/additional-lib-functions.diff b/additional-lib-functions.diff deleted file mode 100644 index bb9fa13..0000000 --- a/additional-lib-functions.diff +++ /dev/null @@ -1,101 +0,0 @@ -This adds several standard C functions to lib.c: -strncmp, toupper, isdigit, isxdigit - -simple_strtoul is a limited implementation of strtoul, taken from Linux. - -They will be needed for command line parsing. - -Index: memtest86+-1.70/lib.c -=================================================================== ---- memtest86+-1.70.orig/lib.c -+++ memtest86+-1.70/lib.c -@@ -69,6 +69,21 @@ int memcmp(const void *s1, const void *s - return 0; - } - -+int strncmp(const char *s1, const char *s2, ulong n) -+{ -+ signed char res = 0; -+ while (n) { -+ res = *s1 - *s2; -+ if (res != 0) -+ return res; -+ if (*s1 == '\0') -+ return 0; -+ ++s1, ++s2; -+ --n; -+ } -+ return res; -+} -+ - void *memmove(void *dest, const void *src, ulong n) - { - long i; -@@ -87,6 +102,53 @@ void *memmove(void *dest, const void *sr - } - return dest; - } -+ -+char toupper(char c) -+{ -+ if (c >= 'a' && c <= 'z') -+ return c + 'A' -'a'; -+ else -+ return c; -+} -+ -+int isdigit(char c) -+{ -+ return c >= '0' && c <= '9'; -+} -+ -+int isxdigit(char c) -+{ -+ return isdigit(c) || (toupper(c) >= 'A' && toupper(c) <= 'F'); -+} -+ -+unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base) -+{ -+ unsigned long result = 0, value; -+ -+ if (!base) { -+ base = 10; -+ if (*cp == '0') { -+ base = 8; -+ cp++; -+ if (toupper(*cp) == 'X' && isxdigit(cp[1])) { -+ cp++; -+ base = 16; -+ } -+ } -+ } else if (base == 16) { -+ if (cp[0] == '0' && toupper(cp[1]) == 'X') -+ cp += 2; -+ } -+ while (isxdigit(*cp) && -+ (value = isdigit(*cp) ? *cp-'0' : toupper(*cp)-'A'+10) < base) { -+ result = result*base + value; -+ cp++; -+ } -+ if (endp) -+ *endp = (char *)cp; -+ return result; -+} -+ - /* - * Scroll the error message area of the screen as needed - * Starts at line LINE_SCROLL and ends at line 23 -Index: memtest86+-1.70/test.h -=================================================================== ---- memtest86+-1.70.orig/test.h -+++ memtest86+-1.70/test.h -@@ -95,6 +95,7 @@ typedef unsigned long ulong; - #define getCx86(reg) ({ outb((reg), 0x22); inb(0x23); }) - int memcmp(const void *s1, const void *s2, ulong count); - void *memmove(void *dest, const void *src, ulong n); -+int strncmp(const char *s1, const char *s2, ulong n); - int query_linuxbios(void); - int query_pcbios(void); - int insertaddress(ulong); - --- diff --git a/console-boot-parameter.diff b/console-boot-parameter.diff deleted file mode 100644 index 1e6c04d..0000000 --- a/console-boot-parameter.diff +++ /dev/null @@ -1,239 +0,0 @@ -Make the serial console port and its baudrate configurable on the bootloader -(e.g GRUB) command line. - -The parameter format is similar to Linux's. Examples: -console=ttyS0 # to enable serial console on the first serial port -console=ttyS1 # second serial port -console=ttyS0,38400 # with the given baudrate - -Selectable parity, bits, flow control not implemented yet. - -Index: memtest86+-1.70/config.h -=================================================================== ---- memtest86+-1.70.orig/config.h -+++ memtest86+-1.70/config.h -@@ -15,6 +15,9 @@ - /* to enable. */ - #define SERIAL_CONSOLE_DEFAULT 0 - -+/* SERIAL_TTY - The default serial port to use. 0=ttyS0, 1=ttyS1 */ -+#define SERIAL_TTY 0 -+ - /* SERIAL_BAUD_RATE - Baud rate for the serial console */ - #define SERIAL_BAUD_RATE 9600 - -Index: memtest86+-1.70/lib.c -=================================================================== ---- memtest86+-1.70.orig/lib.c -+++ memtest86+-1.70/lib.c -@@ -11,6 +11,18 @@ - - int slock = 0, lsr = 0; - short serial_cons = SERIAL_CONSOLE_DEFAULT; -+ -+#if SERIAL_TTY != 0 && SERIAL_TTY != 1 -+#error Bad SERIAL_TTY. Only ttyS0 and ttyS1 are supported. -+#endif -+short serial_tty = SERIAL_TTY; -+const short serial_base_ports[] = {0x3f8, 0x2f8}; -+ -+#if ((115200%SERIAL_BAUD_RATE) != 0) -+#error Bad default baud rate -+#endif -+int serial_baud_rate = SERIAL_BAUD_RATE; -+ - char buf[18]; - - struct ascii_map_str { -@@ -721,19 +733,9 @@ void ttyprint(int y, int x, const char * - serial_echo_print(p); - } - --#if defined(SERIAL_BAUD_RATE) -- --#if ((115200%SERIAL_BAUD_RATE) != 0) --#error Bad ttys0 baud rate --#endif -- --#define SERIAL_DIV (115200/SERIAL_BAUD_RATE) -- --#endif /* SERIAL_BAUD_RATE */ -- - void serial_echo_init(void) - { -- int comstat, hi, lo; -+ int comstat, hi, lo, serial_div; - - /* read the Divisor Latch */ - comstat = serial_echo_inb(UART_LCR); -@@ -744,12 +746,11 @@ void serial_echo_init(void) - - /* now do hardwired init */ - serial_echo_outb(0x03, UART_LCR); /* No parity, 8 data bits, 1 stop */ --#if defined(SERIAL_BAUD_RATE) -+ serial_div = 115200 / serial_baud_rate; - serial_echo_outb(0x83, UART_LCR); /* Access divisor latch */ -- serial_echo_outb(SERIAL_DIV & 0xff, UART_DLL); /* baud rate divisor */ -- serial_echo_outb((SERIAL_DIV>> 8) & 0xff, UART_DLM); -+ serial_echo_outb(serial_div & 0xff, UART_DLL); /* baud rate divisor */ -+ serial_echo_outb((serial_div >> 8) & 0xff, UART_DLM); - serial_echo_outb(0x03, UART_LCR); /* Done with divisor */ --#endif - - /* Prior to disabling interrupts, read the LSR and RBR - * registers */ -@@ -974,6 +975,59 @@ void wait_keyup( void ) { - } - } - } -+ -+/* -+ * Handles "console=" command line option -+ * -+ * Examples of accepted params: -+ * ttyS0 -+ * ttyS1 -+ * ttyS0,115200 -+ */ -+void serial_console_setup(char *param) -+{ -+ char *option, *end; -+ unsigned long tty; -+ unsigned long baud_rate; -+ -+ if (strncmp(param, "ttyS", 4)) -+ return; /* not a serial port */ -+ -+ param += 4; -+ -+ tty = simple_strtoul(param, &option, 10); -+ -+ if (option == param) -+ return; /* there were no digits */ -+ -+ if (tty > 1) -+ return; /* only ttyS0 and ttyS1 supported */ -+ -+ if (*option == '\0') -+ goto save_tty; /* no options given, just ttyS? */ -+ -+ if (*option != ',') -+ return; /* missing the comma separator */ -+ -+ /* baud rate must follow */ -+ option++; -+ baud_rate = simple_strtoul(option, &end, 10); -+ -+ if (end == option) -+ return; /* no baudrate after comma */ -+ -+ if (baud_rate == 0 || (115200 % baud_rate) != 0) -+ return; /* wrong baud rate */ -+ -+ if (*end != '\0') -+ return; /* garbage at the end */ -+ -+ serial_baud_rate = (int) baud_rate; -+save_tty: -+ serial_tty = (short) tty; -+ serial_cons = 1; -+} -+ - #ifdef LP - #define DATA 0x00 - #define STATUS 0x01 -Index: memtest86+-1.70/main.c -=================================================================== ---- memtest86+-1.70.orig/main.c -+++ memtest86+-1.70/main.c -@@ -31,6 +31,7 @@ const struct tseq tseq[] = { - }; - - char firsttime = 0; -+char cmdline_parsed = 0; - - struct vars variables = {}; - struct vars * const v = &variables; -@@ -135,12 +136,53 @@ static void run_at(unsigned long addr) - __run_at(run_at_addr); - } - -+/* command line passing using the 'old' boot protocol */ -+#define MK_PTR(seg,off) ((void*)(((unsigned long)(seg) << 4) + (off))) -+#define OLD_CL_MAGIC_ADDR ((unsigned short*) MK_PTR(INITSEG,0x20)) -+#define OLD_CL_MAGIC 0xA33F -+#define OLD_CL_OFFSET_ADDR ((unsigned short*) MK_PTR(INITSEG,0x22)) -+ -+static void parse_command_line(void) -+{ -+ char *cmdline; -+ -+ if (cmdline_parsed) -+ return; -+ -+ if (*OLD_CL_MAGIC_ADDR != OLD_CL_MAGIC) -+ return; -+ -+ unsigned short offset = *OLD_CL_OFFSET_ADDR; -+ cmdline = MK_PTR(INITSEG, offset); -+ -+ /* skip leading spaces */ -+ while (*cmdline == ' ') -+ cmdline++; -+ -+ while (*cmdline) { -+ if (!strncmp(cmdline, "console=", 8)) { -+ cmdline += 8; -+ serial_console_setup(cmdline); -+ } -+ -+ /* go to the next parameter */ -+ while (*cmdline && *cmdline != ' ') -+ cmdline++; -+ while (*cmdline == ' ') -+ cmdline++; -+ } -+ -+ cmdline_parsed = 1; -+} -+ - void do_test(void) - { - int i = 0; - unsigned long chunks; - unsigned long lo, hi; - -+ parse_command_line(); -+ - /* If we have a partial relocation finish it */ - if (run_at_addr == (unsigned long)&_start) { - run_at_addr = 0xffffffff; -Index: memtest86+-1.70/serial.h -=================================================================== ---- memtest86+-1.70.orig/serial.h -+++ memtest86+-1.70/serial.h -@@ -136,8 +136,8 @@ - */ - - #include "io.h" --#define serial_echo_outb(v,a) outb((v),(a)+0x3f8) --#define serial_echo_inb(a) inb((a)+0x3f8) -+#define serial_echo_outb(v,a) outb((v),(a)+serial_base_ports[serial_tty]) -+#define serial_echo_inb(a) inb((a)+serial_base_ports[serial_tty]) - #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE) - /* Wait for transmitter & holding register to empty */ - #define WAIT_FOR_XMITR \ -Index: memtest86+-1.70/test.h -=================================================================== ---- memtest86+-1.70.orig/test.h -+++ memtest86+-1.70/test.h -@@ -103,6 +103,7 @@ void printpatn(void); - void printpatn(void); - void itoa(char s[], int n); - void reverse(char *p); -+void serial_console_setup(char *param); - void serial_echo_init(void); - void serial_echo_print(const char *s); - void ttyprint(int y, int x, const char *s); - --- diff --git a/memtest-fix-makefile-for-x86_64.diff b/memtest-fix-makefile-for-x86_64.diff new file mode 100644 index 0000000..7e12e4b --- /dev/null +++ b/memtest-fix-makefile-for-x86_64.diff @@ -0,0 +1,41 @@ +Fix Makefile for x86_64 + +Tell as to generate 32-bit code. +*.s files are generated from *.S, so clean them too. + +diff -up memtest86+-2.00/Makefile.orig memtest86+-2.00/Makefile +--- memtest86+-2.00/Makefile.orig 2008-02-11 14:10:25.000000000 +0100 ++++ memtest86+-2.00/Makefile 2008-02-11 14:32:35.000000000 +0100 +@@ -8,6 +8,7 @@ + # + FDISK=/dev/fd0 + ++AS=as -32 + CC=gcc + + CFLAGS=-Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin -ffreestanding -fPIC +@@ -32,6 +33,15 @@ memtest_shared.bin: memtest_shared + memtest: memtest_shared.bin memtest.lds + $(LD) -s -T memtest.lds -b binary memtest_shared.bin -o $@ + ++head.s: head.S config.h defs.h test.h ++ $(CC) -E -traditional $< -o $@ ++ ++bootsect.s: bootsect.S config.h defs.h ++ $(CC) -E -traditional $< -o $@ ++ ++setup.s: setup.S config.h defs.h ++ $(CC) -E -traditional $< -o $@ ++ + memtest.bin: memtest_shared.bin bootsect.o setup.o memtest.bin.lds + $(LD) -T memtest.bin.lds bootsect.o setup.o -b binary \ + memtest_shared.bin -o memtest.bin +@@ -43,7 +53,7 @@ test.o: test.c + $(CC) -c -Wall -march=i486 -m32 -Os -fomit-frame-pointer -fno-builtin -ffreestanding test.c + + clean: +- rm -f *.o memtest.bin memtest memtest_shared memtest_shared.bin ++ rm -f *.o *.s memtest.bin memtest memtest_shared memtest_shared.bin + + install: all + dd $(FDISK) bs=8192 diff --git a/memtest86+.spec b/memtest86+.spec index c8db0cc..3b0ec5b 100644 --- a/memtest86+.spec +++ b/memtest86+.spec @@ -6,7 +6,7 @@ Summary: Stand-alone memory tester for x86 and x86-64 computers Name: memtest86+ Version: 2.00 -Release: 1%{?dist} +Release: 2%{?dist} License: GPLv2 ExclusiveArch: %{ix86} x86_64 Group: System Environment/Base @@ -69,6 +69,9 @@ rm -rf $RPM_BUILD_ROOT /sbin/new-memtest-pkg --remove %{version} %changelog +* Mon Feb 11 2008 Michal Schmidt - 2.00-2 +- forgot to cvs add the compilation patch. + * Mon Feb 11 2008 Michal Schmidt - 2.00-1 - New upstream release: 2.00. - Dropped boot time console configuration patches (already upstream). diff --git a/parity-bits.diff b/parity-bits.diff deleted file mode 100644 index 1bfe4d8..0000000 --- a/parity-bits.diff +++ /dev/null @@ -1,97 +0,0 @@ -Index: memtest86+-1.70/lib.c -=================================================================== ---- memtest86+-1.70.orig/lib.c -+++ memtest86+-1.70/lib.c -@@ -23,6 +23,9 @@ const short serial_base_ports[] = {0x3f8 - #endif - int serial_baud_rate = SERIAL_BAUD_RATE; - -+unsigned char serial_parity = 0; -+unsigned char serial_bits = 8; -+ - char buf[18]; - - struct ascii_map_str { -@@ -722,6 +725,7 @@ void ttyprint(int y, int x, const char * - void serial_echo_init(void) - { - int comstat, hi, lo, serial_div; -+ unsigned char lcr; - - /* read the Divisor Latch */ - comstat = serial_echo_inb(UART_LCR); -@@ -731,12 +735,13 @@ void serial_echo_init(void) - serial_echo_outb(comstat, UART_LCR); - - /* now do hardwired init */ -- serial_echo_outb(0x03, UART_LCR); /* No parity, 8 data bits, 1 stop */ -+ lcr = serial_parity | (serial_bits - 5); -+ serial_echo_outb(lcr, UART_LCR); /* No parity, 8 data bits, 1 stop */ - serial_div = 115200 / serial_baud_rate; -- serial_echo_outb(0x83, UART_LCR); /* Access divisor latch */ -+ serial_echo_outb(0x80|lcr, UART_LCR); /* Access divisor latch */ - serial_echo_outb(serial_div & 0xff, UART_DLL); /* baud rate divisor */ - serial_echo_outb((serial_div >> 8) & 0xff, UART_DLM); -- serial_echo_outb(0x03, UART_LCR); /* Done with divisor */ -+ serial_echo_outb(lcr, UART_LCR); /* Done with divisor */ - - /* Prior to disabling interrupts, read the LSR and RBR - * registers */ -@@ -969,12 +974,14 @@ void wait_keyup( void ) { - * ttyS0 - * ttyS1 - * ttyS0,115200 -+ * ttyS0,9600e8 - */ - void serial_console_setup(char *param) - { - char *option, *end; - unsigned long tty; - unsigned long baud_rate; -+ unsigned char parity, bits; - - if (strncmp(param, "ttyS", 4)) - return; /* not a serial port */ -@@ -1005,9 +1012,42 @@ void serial_console_setup(char *param) - if (baud_rate == 0 || (115200 % baud_rate) != 0) - return; /* wrong baud rate */ - -+ if (*end == '\0') -+ goto save_baud_rate; /* no more options given */ -+ -+ switch (toupper(*end)) { -+ case 'N': -+ parity = 0; -+ break; -+ case 'O': -+ parity = UART_LCR_PARITY; -+ break; -+ case 'E': -+ parity = UART_LCR_PARITY | UART_LCR_EPAR; -+ break; -+ default: -+ /* Unknown parity */ -+ return; -+ } -+ -+ end++; -+ if (*end == '\0') -+ goto save_parity; -+ -+ /* word length (bits) */ -+ if (*end < '7' || *end > '8') -+ return; /* invalid number of bits */ -+ -+ bits = *end - '0'; -+ -+ end++; - if (*end != '\0') - return; /* garbage at the end */ - -+ serial_bits = bits; -+save_parity: -+ serial_parity = parity; -+save_baud_rate: - serial_baud_rate = (int) baud_rate; - save_tty: - serial_tty = (short) tty; diff --git a/use-strtoul-in-getval.diff b/use-strtoul-in-getval.diff deleted file mode 100644 index e3ee57d..0000000 --- a/use-strtoul-in-getval.diff +++ /dev/null @@ -1,31 +0,0 @@ -Now that we have simple_strtoul() we can use it in getval(). - -Index: memtest86+-1.70/lib.c -=================================================================== ---- memtest86+-1.70.orig/lib.c -+++ memtest86+-1.70/lib.c -@@ -683,21 +683,7 @@ ulong getval(int x, int y, int result_sh - shift -= result_shift; - - /* Compute our current value */ -- val = 0; -- for(i = (base == 16)? 2: 0; i < n; i++) { -- unsigned long digit = 0; -- if ((buf[i] >= '0') && (buf[i] <= '9')) { -- digit = buf[i] - '0'; -- } -- else if ((buf[i] >= 'a') && (buf[i] <= 'f')) { -- digit = buf[i] - 'a' + 10; -- } -- else { -- /* It must be a suffix byte */ -- break; -- } -- val = (val * base) + digit; -- } -+ val = simple_strtoul(buf, NULL, base); - if (shift > 0) { - if (shift >= 32) { - val = 0xffffffff; - ---