mirror of
https://github.com/Ponce/slackbuilds
synced 2024-11-16 19:50:19 +01:00
system/memtest86: Updated for version 4.3.7.
Signed-off-by: Kyle Guinn <elyk03@gmail.com>
This commit is contained in:
parent
898d490968
commit
9a5d4a1321
6 changed files with 292 additions and 23 deletions
|
@ -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
|
||||
|
|
|
@ -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=""
|
||||
|
|
142
system/memtest86/patches/bug_629506_message_15.mbox
Normal file
142
system/memtest86/patches/bug_629506_message_15.mbox
Normal file
|
@ -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"
|
||||
|
||||
|
52
system/memtest86/patches/makefile.diff
Normal file
52
system/memtest86/patches/makefile.diff
Normal file
|
@ -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 \
|
|
@ -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)); }
|
15
system/memtest86/patches/memtest86+-5.01-reboot-def.patch
Normal file
15
system/memtest86/patches/memtest86+-5.01-reboot-def.patch
Normal file
|
@ -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 */
|
Loading…
Reference in a new issue