aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Guinn <elyk03@gmail.com>2019-03-31 19:06:49 -0500
committerWilly Sudiarto Raharjo <willysr@slackbuilds.org>2019-04-06 07:03:01 +0700
commit9a5d4a13214e842fc85090828ed58492d80eb5ce (patch)
tree2dccf572b3ad8d85b3d61d49c80281841aa6b8d1
parent898d490968ea47fba3f3576073be37c21c85490d (diff)
system/memtest86: Updated for version 4.3.7.
Signed-off-by: Kyle Guinn <elyk03@gmail.com>
-rw-r--r--system/memtest86/memtest86.SlackBuild69
-rw-r--r--system/memtest86/memtest86.info6
-rw-r--r--system/memtest86/patches/bug_629506_message_15.mbox142
-rw-r--r--system/memtest86/patches/makefile.diff52
-rw-r--r--system/memtest86/patches/memtest86+-5.01-io-extern-inline.patch31
-rw-r--r--system/memtest86/patches/memtest86+-5.01-reboot-def.patch15
6 files changed, 292 insertions, 23 deletions
diff --git a/system/memtest86/memtest86.SlackBuild b/system/memtest86/memtest86.SlackBuild
index 303fd0eba948..84d09445d6fa 100644
--- a/system/memtest86/memtest86.SlackBuild
+++ b/system/memtest86/memtest86.SlackBuild
@@ -2,29 +2,29 @@
# Slackware build script for memtest86
-# Copyright 2012-2016 Kyle Guinn <elyk03@gmail.com>, USA
+# Copyright 2012-2019 Kyle Guinn <elyk03@gmail.com>
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
+# notice, this list of conditions and the following disclaimer.
#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=memtest86
-VERSION=${VERSION:-4.1.0}
-BUILD=${BUILD:-2}
+VERSION=${VERSION:-4.3.7}
+BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
# i486 only. Modify the Makefile at your own risk :-)
@@ -32,7 +32,7 @@ ARCH=i486
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
-PKG=$TMP/package-$PRGNAM
+PKG=$TMP/package-$PRGNAM-$VERSION
OUTPUT=${OUTPUT:-/tmp}
DOCS="README*"
@@ -42,19 +42,48 @@ set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
-rm -rf $PRGNAM-$VERSION
+rm -rf src
tar xvf $CWD/$PRGNAM-$VERSION-src.tar.gz
-cd $PRGNAM-$VERSION
+cd src
chown -R root:root .
chmod -R u+w,go-w,a+rX-st .
-make CC="gcc -fgnu89-inline"
-install -D -m 0644 memtest.bin $PKG/boot/memtest86.bin
+# Permissions and line endings need to be sanitized.
+# Required so that memtest86+ backported patches will apply cleanly.
+find . -type f -exec chmod -x {} +
+find . -name precomp.bin -prune -o \
+ -type f -exec sed -i 's/\x0d$//' {} \;
+
+# https://gitweb.gentoo.org/repo/gentoo.git/tree/sys-apps/memtest86+/files
+patch -p1 < $CWD/patches/memtest86+-5.01-io-extern-inline.patch
+patch -p1 < $CWD/patches/memtest86+-5.01-reboot-def.patch
+
+# The following patches from Gentoo don't apply cleanly and/or have a few
+# unnecessary additions or omissions. This combines and fixes them.
+#patch -p1 < $CWD/patches/memtest86+-5.01-hardcoded_cc.patch
+#patch -p1 < $CWD/patches/memtest86+-5.01-no-clean.patch
+#patch -p1 < $CWD/patches/memtest86+-5.01-test-random-cflags.patch
+patch -p1 < $CWD/patches/makefile.diff
+
+# https://bugs.debian.org/779504 -> https://bugs.debian.org/629506
+patch -p1 < $CWD/patches/bug_629506_message_15.mbox
+
+# TBD whether these memtest86+ patches should be backported:
+# https://sources.debian.org/patches/memtest86+/5.01-3/
+# https://bugs.debian.org/250864 suggests that it could be backported.
+#patch -p1 < $CWD/patches/multiboot
+# https://bugs.debian.org/795421
+#patch -p1 < $CWD/patches/memtest86+-test-7-smp.patch
+
+make
+install -D -m 0755 memtest $PKG/boot/$PRGNAM-$VERSION
+install -D -m 0644 memtest.bin $PKG/boot/$PRGNAM-$VERSION.bin
+ln -s $PRGNAM-$VERSION $PKG/boot/$PRGNAM
+ln -s $PRGNAM-$VERSION.bin $PKG/boot/$PRGNAM.bin
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
-cat $CWD/README.SLACKWARE > $PKG/usr/doc/$PRGNAM-$VERSION/README.SLACKWARE
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
diff --git a/system/memtest86/memtest86.info b/system/memtest86/memtest86.info
index 65170ce52d94..9eae7f74daee 100644
--- a/system/memtest86/memtest86.info
+++ b/system/memtest86/memtest86.info
@@ -1,8 +1,8 @@
PRGNAM="memtest86"
-VERSION="4.1.0"
+VERSION="4.3.7"
HOMEPAGE="https://www.memtest86.com/"
-DOWNLOAD="https://www.memtest86.com/downloads/memtest86-4.1.0-src.tar.gz"
-MD5SUM="8d6f6590d1bbcfa333bef53f568a09d5"
+DOWNLOAD="https://www.memtest86.com/downloads/memtest86-4.3.7-src.tar.gz"
+MD5SUM="784f3adf148079b63f925b478dee7c85"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
diff --git a/system/memtest86/patches/bug_629506_message_15.mbox b/system/memtest86/patches/bug_629506_message_15.mbox
new file mode 100644
index 000000000000..0b9362728f1b
--- /dev/null
+++ b/system/memtest86/patches/bug_629506_message_15.mbox
@@ -0,0 +1,142 @@
+From viro@ftp.linux.org.uk Fri Feb 27 20:21:34 2015
+Received: (at 629506) by bugs.debian.org; 27 Feb 2015 20:21:34 +0000
+X-Spam-Checker-Version: SpamAssassin 3.4.0-bugs.debian.org_2005_01_02
+ (2014-02-07) on buxtehude.debian.org
+X-Spam-Level:
+X-Spam-Status: No, score=-2.3 required=4.0 tests=BAYES_00,FOURLA,MONEY,
+ MURPHY_DRUGS_REL8,RCVD_IN_DNSWL_MED,STOCKLIKE,T_RP_MATCHES_RCVD autolearn=no
+ autolearn_force=no version=3.4.0-bugs.debian.org_2005_01_02
+X-Spam-Bayes: score:0.0000 Tokens: new, 43; hammy, 150; neutral, 234; spammy,
+ 0. spammytokens: hammytokens:0.000-+--UD:patch, 0.000-+--H*u:1.5.21,
+ 0.000-+--H*UA:1.5.21, 0.000-+--H*u:2010-09-15, 0.000-+--H*UA:2010-09-15
+Return-path: <viro@ftp.linux.org.uk>
+Received: from zeniv.linux.org.uk ([195.92.253.2])
+ by buxtehude.debian.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:256)
+ (Exim 4.80)
+ (envelope-from <viro@ftp.linux.org.uk>)
+ id 1YRRPi-0007QW-72
+ for 629506@bugs.debian.org; Fri, 27 Feb 2015 20:21:34 +0000
+Received: from viro by ZenIV.linux.org.uk with local (Exim 4.76 #1 (Red Hat Linux))
+ id 1YRQyr-0000Hl-OS
+ for 629506@bugs.debian.org; Fri, 27 Feb 2015 19:53:49 +0000
+Date: Fri, 27 Feb 2015 19:53:49 +0000
+From: Al Viro <viro@ZenIV.linux.org.uk>
+To: 629506@bugs.debian.org
+Subject: memtest86+.bin crashes if loader ends up putting it not at 9000:0000
+Message-ID: <20150227195349.GN29656@ZenIV.linux.org.uk>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+User-Agent: Mutt/1.5.21 (2010-09-15)
+Sender: Al Viro <viro@ftp.linux.org.uk>
+X-Greylist: delayed 1658 seconds by postgrey-1.34 at buxtehude; Fri, 27 Feb 2015 20:21:33 UTC
+
+ FWIW, the effects described in this bug report are 100% reproducible
+on any version, as long as the loader (lilo, grub, whatever) ends up putting
+the bootsect+setup in any location below 9000:0000.
+
+ zImage-type images consist of 3 parts - bootsect, setup and
+payload. Payload is loaded at 1000:0, bootsect and setup - n:0 and
+n+2:0 resp., near the top of lowmem. Payload is protected mode code,
+setup - real mode one. Bootsect isn't executed at all; when the
+same image is booted directly it would've been the only part loaded
+by BIOS and it would copy itself and read the rest of the image to
+expected locations and pass control to setup. Values in it can be
+used by setup, though, so it must be present even when the image had been
+brought in by a loader.
+
+ The thing is, we can't be guaranteed n == 0x9000. E.g. ACPI and
+SMM have every right to use _anything_ in range 512K..1M for their
+state, declaring it reserved. That's what BIOS int 0x12 is for - it
+reports how high (in kilobytes) can you go in lowmem without running into
+reserved areas. And while having it report 512K is rare, something like
+20K reserved just below the VRAM (i.e. report 620K) is nothing unusual.
+
+ I hadn't looked into details of GRUB behaviour, but LILO puts its
+secondary loader as high in lowmem as it can, then puts the bootsect and
+setup parts of image below that. It tries to load at 9000:0 if possible,
+but if there's no space, it'll go lower. With the sizes it uses 20K reserved
+below 640K is enough to push bootsect + setup combination (just) below 9000:0.
+And memtest86+ setup has that 0x9000 hardwired - this
+gdt_48:
+ .word 0x800 # gdt limit=2048, 256 GDT entries
+ .word 512+gdt - start,0x9 # gdt base = 0X9xxxx
+in setup.S really depends on 'start' (entry to setup) loaded at
+0x90200 physical. Have it loaded at any other address and you'll trigger
+an exception as soon as you try to assign any segment register after you switch
+to protected mode. Which will escalate to triple-fault and reboot the
+damn thing immediately.
+
+ GRUB might be better or worse in triggering that "load not at
+9000:0" situation, but it can't possibly avoid it in all cases. If nothing
+else, 9000:0 might be within one of the reserved areas. It simply isn't
+guaranteed to be available, period.
+
+ Another issue is that setup of memtest86+ expects to see in %dx
+the value left there by the bootsect of memtest86+. Fortunately, it's
+not critical - in
+ movw $INITSEG, %ax
+ movw %ax, %ds
+ movw %ax, %es
+ movw %ax, %fs
+ movw %ax, %ss # reset the stack to INITSEG:0x4000-12.
+ movw %dx, %sp
+ push %cs
+ pop %ds
+we really need only the last two instructions. The stack footprint
+of what follows is fairly low *and* these values are not used past the
+reload of segment registers immediately after protected mode switch.
+
+It's not the only problem in there - the bits after
+# start from grub-a20.patch
+are clearly cargo-culted from grub, badly. There it was a part of a function
+that expects an argument on stack (it can turn A20 both on and off) and that
+got blindly copied, nevermind that the value on stack is random or that
+we follow it with (unconditional) use of 8042-based method anyway. I'd rather
+see upstream opinion on that particular piece of code first, though.
+
+Anyway, the patch below fixes dependency on being loaded at 9000:0 and it
+seems to work here without regressions. Have fun...
+
+--- memtest86+-5.01/setup.S 2013-08-09 22:01:58.000000000 -0400
++++ fixed/setup.S 2015-02-27 14:18:47.000000000 -0500
+@@ -26,14 +26,13 @@
+ # APs also execute this code
+ #ljmp $INITSEG, $(reload - start + 0x200)
+ reload:
+- movw $INITSEG, %ax
+- movw %ax, %ds
+- movw %ax, %es
+- movw %ax, %fs
+- movw %ax, %ss # reset the stack to INITSEG:0x4000-12.
+- movw %dx, %sp
++ xorl %eax, %eax
+ push %cs
+- pop %ds
++ pop %ax
++ movw %ax, %ds
++ shll $4, %eax
++ addl %eax, (gdt_48 - start + 2)
++
+ lidt idt_48 - start # load idt with 0,0
+ lgdt gdt_48 - start # load gdt with whatever appropriate
+
+@@ -88,6 +87,7 @@
+ movw %ax, %ds
+ movw %ax, %es
+ movw %ax, %ss
++ xorl %esp, %esp # 32bit code will set it then
+ movw %ax, %fs
+ movw %ax, %gs
+
+@@ -144,7 +144,7 @@
+
+ gdt_48:
+ .word 0x800 # gdt limit=2048, 256 GDT entries
+- .word 512+gdt - start,0x9 # gdt base = 0X9xxxx
++ .word gdt - start,0 # gdt base, needs to be adjusted
+
+ msg1:
+ .asciz "Setup.S\r\n"
+
+
diff --git a/system/memtest86/patches/makefile.diff b/system/memtest86/patches/makefile.diff
new file mode 100644
index 000000000000..d899435942fd
--- /dev/null
+++ b/system/memtest86/patches/makefile.diff
@@ -0,0 +1,52 @@
+diff --git a/Makefile b/Makefile
+--- a/Makefile
++++ b/Makefile
+@@ -8,8 +8,7 @@
+ #
+ FDISK=/dev/fd0
+
+-AS=as -32
+-CC=gcc
++ASFLAGS=-32
+
+ CFLAGS= -Wall -march=i486 -m32 -O1 -fomit-frame-pointer -fno-builtin \
+ -ffreestanding -fPIC $(SMP_FL) -fno-stack-protector
+@@ -17,7 +16,7 @@
+ OBJS= head.o reloc.o main.o test.o init.o lib.o patn.o screen_buffer.o \
+ config.o memsize.o error.o smp.o cpuid.o vmem.o random.o
+
+-all: clean memtest.bin memtest
++all: memtest.bin memtest
+
+ # Link it statically once so I know I don't have undefined
+ # symbols and then link it dynamically so I have full
+@@ -28,7 +27,7 @@
+ $(LD) -shared -Bsymbolic -T memtest_shared.lds -o $@ $(OBJS)
+
+ memtest_shared.bin: memtest_shared
+- objcopy -O binary $< memtest_shared.bin
++ objcopy -O binary $< $@
+
+ memtest: memtest_shared.bin memtest.lds
+ $(LD) -s -T memtest.lds -b binary memtest_shared.bin -o $@
+@@ -44,16 +43,16 @@
+
+ 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
++ memtest_shared.bin -o $@
+
+ reloc.o: reloc.c
+- $(CC) -c $(CFLAGS) -fno-strict-aliasing reloc.c
++reloc.o: CFLAGS += -fno-strict-aliasing
+
+ test.o: test.c
+- $(CC) -c -Wall -march=i486 -m32 -O0 -fomit-frame-pointer -fno-builtin -ffreestanding test.c
++test.o: CFLAGS += -O0 -fno-PIC
+
+ random.o: random.c
+- $(CC) -c -Wall -march=i486 -m32 -O3 -fomit-frame-pointer -fno-builtin -ffreestanding random.c
++random.o: CFLAGS += -O3 -fno-PIC
+
+ clean:
+ rm -f *.o *.s *.iso memtest.bin memtest memtest_shared \
diff --git a/system/memtest86/patches/memtest86+-5.01-io-extern-inline.patch b/system/memtest86/patches/memtest86+-5.01-io-extern-inline.patch
new file mode 100644
index 000000000000..682dd5d01a1e
--- /dev/null
+++ b/system/memtest86/patches/memtest86+-5.01-io-extern-inline.patch
@@ -0,0 +1,31 @@
+http://forum.canardpc.com/threads/110951-fix-build-with-newer-gcc-versions
+
+the meaning of extern inline changed between standards. use static inline
+for these tiny I/O functions everywhere to keep things simple.
+
+--- a/io.h
++++ b/io.h
+@@ -31,6 +31,6 @@
+ */
+
+ #define __OUT1(s,x) \
+-extern inline void __out##s(unsigned x value, unsigned short port) {
++static inline void __out##s(unsigned x value, unsigned short port) {
+
+ #define __OUT2(s,s1,s2) \
+@@ -43,6 +43,6 @@
+ __OUT1(s##c_p,x) __OUT2(s,s1,"") : : "a" (value), "id" (port)); SLOW_DOWN_IO; }
+
+ #define __IN1(s) \
+-extern inline RETURN_TYPE __in##s(unsigned short port) { RETURN_TYPE _v;
++static inline RETURN_TYPE __in##s(unsigned short port) { RETURN_TYPE _v;
+
+ #define __IN2(s,s1,s2) \
+@@ -55,6 +55,6 @@
+ __IN1(s##c_p) __IN2(s,s1,"") : "=a" (_v) : "id" (port) ,##i ); SLOW_DOWN_IO; return _v; }
+
+ #define __OUTS(s) \
+-extern inline void outs##s(unsigned short port, const void * addr, unsigned long count) \
++static inline void outs##s(unsigned short port, const void * addr, unsigned long count) \
+ { __asm__ __volatile__ ("cld ; rep ; outs" #s \
+ : "=S" (addr), "=c" (count) : "d" (port),"0" (addr),"1" (count)); }
diff --git a/system/memtest86/patches/memtest86+-5.01-reboot-def.patch b/system/memtest86/patches/memtest86+-5.01-reboot-def.patch
new file mode 100644
index 000000000000..f4b42feb5fb3
--- /dev/null
+++ b/system/memtest86/patches/memtest86+-5.01-reboot-def.patch
@@ -0,0 +1,15 @@
+http://forum.canardpc.com/threads/110952-fix-build-due-to-missing-reboot-symbol
+
+the reboot func is used elsewhere, so don't mark it inline
+
+--- a/lib.c
++++ b/lib.c
+@@ -33,7 +33,7 @@ struct ascii_map_str {
+ int keycode;
+ };
+
+-inline void reboot(void)
++void reboot(void)
+ {
+
+ /* tell the BIOS to do a cold start */