5 Commits

Author SHA1 Message Date
422c160db1 works better, but weird failures 2017-10-06 11:48:51 +02:00
b74ac99bbb Create README.md 2017-10-06 11:48:50 +02:00
d86a290588 Remove unncessary variable definitions 2017-10-06 11:48:50 +02:00
fddf1f133e ARM: Compile whole tree with clang.
Note: GCC is still the default compiler, to use clang do the following:

 $ BUILDVARS="" ./releasetools/arm_sdimage.sh
2017-10-06 11:28:10 +02:00
ae34580f0c ARM: Remove linker script for VM.
The linker script has been replaced by small adaptations to make sure
the required structures are aligned at runtime per hardware
requirements.

In some cases, the linker script failed to guarantee proper physical
addresses alignement.

This is important for page entries descriptors which are required to be
aligned as the MMU doesn't support unaligned accesses to those.

Change-Id: I3e22d3da102230be2534b4261e2c6c937e367de6
2017-10-06 11:28:02 +02:00
16 changed files with 14 additions and 116 deletions

View File

@@ -1,9 +0,0 @@
#
# Sorted using sort_set.pl in releasetools.
# to add an entry simply add it at the end of the
# file and run
# ../../../../releasetools/sort_set.pl < mi > out
# mv out mi
#
./usr/tests/minix-posix/test_arm_segfault minix-tests
./usr/tests/minix-posix/test_arm_unaligned minix-tests

View File

@@ -53,7 +53,7 @@
K(GRAVE_ACCENT) = { '\'', '"', A('\''),A('\''),A('"'), C('@') },
K(COMMA) = { ',', '<', A(','), A(','), A('<'), C('@') },
K(PERIOD) = { '.', '>', A('.'), A('.'), A('>'), C('@') },
K(SLASH) = { ';', ':', A(';'), A(';'), A(':'), C('@') },
K(SLASH) = { 59, 58, A(59), A(58), A(59), C('@') },
K(CAPS_LOCK) = { CALOCK, CALOCK, CALOCK, CALOCK, CALOCK, CALOCK },
K(F1) = { F1, SF1, AF1, AF1, ASF1, CF1 },
K(F2) = { F2, SF2, AF2, AF2, ASF2, CF2 },
@@ -94,11 +94,10 @@
K(KP_8) = { NUP, '8', AUP, AUP, A('8'), CUP },
K(KP_9) = { NPGUP, '9', APGUP, APGUP, A('9'), CPGUP },
K(KP_0) = { NINSRT, '0', AINSRT, AINSRT, A('0'), CINSRT },
K(KP_PERIOD) = { NDEL, ',', A(DEL), A(DEL), A(','), DEL },
K(KP_PERIOD) = { NDEL, '.', A(DEL), A(DEL), A('.'), DEL },
K(EUROPE_2) = { '\\', '|', A('\\'),A('|'), A('\\'),C('@') },
K(APPLICATION) = { C('M'), C('M'), CA('M'),CA('M'),CA('M'),C('J') },
K(I10L_1) = { '/', '?', A('/'), A('/'), A('?'), C('@') },
K(EQUAL_SIGN) = { '.', '.', 0, 0, 0, 0 },
K(KP_EQUAL) = { '?', 0, 0, 0, 0, 0 },
K(SYSREQ) = { C('M'), C('M'), CA('M'),CA('M'),CA('M'),C('J') },
K(LEFT_CTRL) = { LCTRL, LCTRL, LCTRL, LCTRL, LCTRL, LCTRL },
K(LEFT_SHIFT) = { LSHIFT, LSHIFT, LSHIFT, LSHIFT, LSHIFT, LSHIFT },

View File

@@ -1,6 +1,7 @@
#include "fs.h"
#include "inode.h"
#include "clean.h"
#include <assert.h>
/*===========================================================================*
* fs_sync *

View File

@@ -1,5 +1,6 @@
#include "fs.h"
#include <string.h>
#include <assert.h>
#include <sys/stat.h>
#include <sys/statvfs.h>
#include "inode.h"

View File

@@ -109,36 +109,6 @@ static void pagefault( struct proc *pr,
return;
}
static void
data_abort(int is_nested, struct proc *pr, reg_t *saved_lr,
struct ex_s *ep, u32_t dfar, u32_t dfsr)
{
/* Extract fault status bit [0:3, 10] from DFSR */
u32_t fs = dfsr & 0x0F;
fs |= ((dfsr >> 6) & 0x10);
/* Translation and permission faults are handled as pagefaults. */
if (is_trans_fault(fs) || is_perm_fault(fs)) {
pagefault(pr, saved_lr, is_nested, dfar, dfsr);
} else if (!is_nested) {
/* A user process caused some other kind of data abort. */
int signum = SIGSEGV;
if (is_align_fault(fs)) {
signum = SIGBUS;
} else {
printf("KERNEL: unknown data abort by proc %d sending "
"SIGSEGV (dfar=0x%lx dfsr=0x%lx fs=0x%lx)\n",
proc_nr(pr), dfar, dfsr, fs);
}
cause_sig(proc_nr(pr), signum);
} else { /* is_nested */
printf("KERNEL: inkernel data abort - disaster (dfar=0x%lx "
"dfsr=0x%lx fs=0x%lx)\n", dfar, dfsr, fs);
inkernel_disaster(pr, saved_lr, ep, is_nested);
}
}
static void inkernel_disaster(struct proc *saved_proc,
reg_t *saved_lr, struct ex_s *ep,
int is_nested)
@@ -201,7 +171,7 @@ void exception_handler(int is_nested, reg_t *saved_lr, int vector)
}
if (vector == DATA_ABORT_VECTOR) {
data_abort(is_nested, saved_proc, saved_lr, ep, read_dfar(), read_dfsr());
pagefault(saved_proc, saved_lr, is_nested, read_dfar(), read_dfsr());
return;
}

View File

@@ -21,16 +21,6 @@
#define INTERRUPT_VECTOR 6
#define FAST_INTERRUPT_VECTOR 7
/* Data abort helper */
#define is_align_fault(fault_status) \
((fault_status) == FAULT_ALIGN_0)
#define is_trans_fault(fault_status) \
(((fault_status) == FAULT_TRANS_S) || ((fault_status) == FAULT_TRANS_P))
#define is_perm_fault(fault_status) \
(((fault_status) == FAULT_PERM_S) || ((fault_status) == FAULT_PERM_P))
/*
* defines how many bytes are reserved at the top of the kernel stack for global
* information like currently scheduled process or current cpu id

View File

@@ -876,6 +876,11 @@ When exiting MINIX running under DOS the Boot Monitor's
.B exit
command will return you to the DOS prompt. The Boot Monitor and MINIX
are together just a pretty big DOS program as far DOS is concerned.
.SH FILES
.TP 12
.B /usr/ast
Honorary home directory of Andrew S. Tanenbaum. Doubles as the place where
the default setup for a new user is found.
.SH "SEE ALSO"
.BR dosminix (8),
.BR monitor (8),

View File

@@ -13,6 +13,7 @@
#include <minix/callnr.h>
#include <minix/com.h>
#include <minix/ds.h>
#include <minix/type.h>
#include <minix/endpoint.h>
#include <minix/minlib.h>
#include <minix/type.h>

View File

@@ -126,8 +126,6 @@ PROGS+= test63 mod
OBJS.${o} += common.o
.endfor
.include "./arch/${MACHINE_ARCH}/Makefile.inc"
# LSC Make sure there is not leftover after a failed testrun
clean: .PHONY .MAKE
@rm -rf DIR*

View File

@@ -1,7 +0,0 @@
PROGS+= test_arm_segfault
PROGS+= test_arm_unaligned
.PATH: ${.CURDIR}/arch/${MACHINE_ARCH}
test_arm_segfault.o : test_arm_segfault.S
test_arm_unaligned.o : test_arm_unaligned.S

View File

@@ -1,16 +0,0 @@
.text
.global main
main:
push {lr}
ldr r0, =0xDEADBEE0 /* Hopefully this is not mapped... */
ldr r1, [r0]
ldr r0, =0x01010100 /* In case we survived, try something else */
ldr r1, [r0]
ldr r0, =msg
bl puts
mov r0, #0 /* test should check for non-zero exit code / signal */
pop {pc}
msg:
.ascii "ERROR - caused no segfault\n"

View File

@@ -1,26 +0,0 @@
.text
.global main
main:
push {lr}
mov r0, sp
/* This should work */
ldr r0, [sp]
/* Unalign it */
add r0, #2
/* Try a non-word aligned word-load, this may work if SCTRL.A == 0 */
ldr r1, [r0]
/* Load non-word aligned dword, should die even with SCTRL.A == 0 */
ldrd r2, r3, [r0]
ldr r0, =msg
bl puts
mov r0, #0 /* test should check for non-zero exit code / signal */
pop {pc}
msg:
.ascii "ERROR - caused no sigbus\n"

View File

@@ -264,7 +264,7 @@ main(int argc, char *argv[])
/* Determine the size of the device if not specified as -b or proto. */
maxblocks = sizeup(argv[optind]);
if (bblocks != 0 && bblocks + fs_offset_blocks > maxblocks && !insertmode) {
errx(4, "Given size -b %d exceeds device capacity(%d)\n", bblocks, maxblocks);
errx(4, "Given size -b %d exeeds device capacity(%d)\n", bblocks, maxblocks);
}
if (argc - optind == 1 && bblocks == 0) {

View File

@@ -82,11 +82,6 @@ SMP_FLAGS += -DCONFIG_MAX_CPUS=${CONFIG_MAX_CPUS}
CPPFLAGS+= ${SMP_FLAGS}
# Disabled unaligned accesses on ARM
.if !empty(MACHINE_ARCH:Mearm*)
CFLAGS+= -mno-unaligned-access
.endif
__uname_s!= uname -s
.if ${__uname_s:Uunknown} == "Minix"
USETOOLS?= never

View File

@@ -617,11 +617,7 @@ pci_subclass_name(pcireg_t reg)
subclassp++;
}
if (subclassp) {
return subclassp->name;
} else {
return NULL;
}
return subclassp->name;
}
#endif /* defined(__minix) && defined(_PCI_SERVER) */