George Koehler [Tue, 17 Jan 2017 03:39:44 +0000 (22:39 -0500)]
Delay inclusion of <stdint.h> when compiling comm2.y
See issue #1 (https://github.com/davidgiven/ack/issues/1). The file
mach/proto/as/comm2.y goes through cpp twice. The _include macro,
defined in comm2.y and used in comm0.h, delays the inclusion of system
header files. The inclusion of <stdint.h> wasn't delayed. This
caused multiple inclusions of <sys/_types.h> in FreeBSD and
<machine/_types.h> in OpenBSD.
Use _include to delay <stdint.h>. Also use _include for "arch.h" and
"out.h", because h/out.h includes <stdint.h> and h/arch.h might
include it in the future.
Sort the system includes in comm0.h by moving them up to be with
<stdint.h>. Must include <stdint.h> before "mach0.c", because
mach/powerpc/as/mach0.c needs it. Must include "mach0.c" before
checking ASLD.
George Koehler [Mon, 16 Jan 2017 23:09:55 +0000 (18:09 -0500)]
Remove some obsolete code that causes a gcc warning.
In my OpenBSD/amd64 system, the code becomes
if (0)
outname.on_valu &= ~(((0xFFFFFFFF)<<32)<<32);
The 0xFFFFFFFF is a 32-bit int, so the left shift by 32 is out of
range and causes the gcc warning.
The intent might be to clear any sign-extended bits, if the assignment
outname.on_valu = valu did sign extension. Old C had no unsigned
long, so .on_valu would have been long. The code is obsolete because
h/out.h now declares .on_valu as uint32_t.
David Given [Mon, 16 Jan 2017 21:45:03 +0000 (22:45 +0100)]
Ensure that memory is zero-initialised.
David Given [Mon, 16 Jan 2017 21:44:37 +0000 (22:44 +0100)]
Fix a buffer overrun that was manifesting on OpenBSD; also fix a bounds check and some uninitialised variable problems.
David Given [Mon, 16 Jan 2017 20:16:33 +0000 (21:16 +0100)]
Run through clang-format.
David Given [Sun, 15 Jan 2017 22:00:17 +0000 (23:00 +0100)]
Fix cosmetic warning when compiling B.
David Given [Sun, 15 Jan 2017 21:56:06 +0000 (22:56 +0100)]
Merge pull request #40 from davidgiven/dtrg-pas
Make Pascal sets work on PowerPC (both ncg and mcg); make Pascal know about 8-bit bytes.
David Given [Sun, 15 Jan 2017 21:41:11 +0000 (22:41 +0100)]
Allow the full 8-bit byte range when reading program source.
David Given [Sun, 15 Jan 2017 21:33:41 +0000 (22:33 +0100)]
Rename the test to something more sensible.
David Given [Sun, 15 Jan 2017 21:30:25 +0000 (22:30 +0100)]
Increase the number of items in a char set from 128 to 256, to cover all
possible bytes (7-bit bytes are so 70s).
David Given [Sun, 15 Jan 2017 21:28:14 +0000 (22:28 +0100)]
Add a test (currently failing) to check that Pascal char sets can store all 256
possible values. Add the PowerPC ncg and mcg backend support to let the test
actually run, including modifying a bunch of PowrePC libem functions so that
they can be called from both ncg and mcg.
David Given [Sun, 15 Jan 2017 21:26:09 +0000 (22:26 +0100)]
Actually tell the user which tests failed.
David Given [Sun, 8 Jan 2017 17:53:59 +0000 (18:53 +0100)]
Fix typo.
David Given [Sun, 8 Jan 2017 10:25:57 +0000 (11:25 +0100)]
Improve confusing error message when calling function procedures from a
top-level statement.
Fixes: #30
David Given [Sun, 8 Jan 2017 10:23:56 +0000 (11:23 +0100)]
Run through clang-format.
David Given [Sat, 7 Jan 2017 23:16:35 +0000 (00:16 +0100)]
Don't print source file names during compilation (gcc stopped doing it years
ago).
David Given [Sat, 7 Jan 2017 23:15:23 +0000 (00:15 +0100)]
Run through clang-format.
David Given [Sat, 7 Jan 2017 23:15:10 +0000 (00:15 +0100)]
Don't sort inludes any more (breaks too many ACK files).
David Given [Sat, 7 Jan 2017 22:23:00 +0000 (23:23 +0100)]
Merge pull request #32 from dram/add-execve
Add execve() system call for Linux
David Given [Sat, 7 Jan 2017 22:00:52 +0000 (23:00 +0100)]
No longer truncate module names at 10 characters when constructing paths;
rename some library modules to their full names.
David Given [Sat, 7 Jan 2017 21:56:00 +0000 (22:56 +0100)]
Run through clang-format.
David Given [Sat, 7 Jan 2017 21:38:30 +0000 (22:38 +0100)]
Properly install man pages.
David Given [Sat, 7 Jan 2017 21:35:02 +0000 (22:35 +0100)]
Add a B man page.
David Given [Sat, 7 Jan 2017 19:11:01 +0000 (20:11 +0100)]
Update the README.
David Given [Sat, 7 Jan 2017 18:53:57 +0000 (19:53 +0100)]
Make sure that constant folding doesn't render our tests trivial.
David Given [Sat, 7 Jan 2017 17:47:46 +0000 (18:47 +0100)]
Sections are now aligned (required by the EM spec).
David Given [Sat, 7 Jan 2017 17:47:00 +0000 (18:47 +0100)]
Fix a bunch of issues with pushing and popping mismatched sizes, which the B
compiler does a lot; dup 8 for pairs of words is now optimised.
David Given [Sat, 7 Jan 2017 17:46:03 +0000 (18:46 +0100)]
Pre-and-post-modification operators now work substantially better (i.e.,
working).
David Given [Sat, 7 Jan 2017 17:38:43 +0000 (18:38 +0100)]
Moved the inc/dec operator tests into their own source file; more exhaustive
testing.
David Given [Sat, 7 Jan 2017 12:25:09 +0000 (13:25 +0100)]
ine and ste are now declared to modify memory (preventing cached values being
propagated across the modification).
David Given [Sat, 7 Jan 2017 12:17:39 +0000 (13:17 +0100)]
Introduce sequence points before store instructions to prevent loads from the
same address being delayed until after the store (at which point they'll return
the wrong value).
David Given [Sat, 7 Jan 2017 00:03:15 +0000 (01:03 +0100)]
Use a better NOT; and after remembering that PowerPC bit numbers are all
backwards in the documentation, rewrote IFEQ/IFLT/IFLE to actually work.
Probably. Thanks to the B test suite for spotting this.
David Given [Fri, 6 Jan 2017 22:24:05 +0000 (23:24 +0100)]
Extern variables can now be written to.
David Given [Fri, 6 Jan 2017 21:29:52 +0000 (22:29 +0100)]
Ensure that procedure labels are word-aligned.
Xin Wang [Fri, 6 Jan 2017 10:33:52 +0000 (18:33 +0800)]
Add execve() system call for Linux
David Given [Wed, 4 Jan 2017 13:28:40 +0000 (13:28 +0000)]
Fix typo in the descr file which was stopping -B from working. Add B
documentation to the ack man page.
David Given [Tue, 3 Jan 2017 18:54:13 +0000 (18:54 +0000)]
Added an abmodules tool which detects B modules and generates an initialiser
function for them (in C, unfortunately).
David Given [Sun, 1 Jan 2017 23:51:48 +0000 (23:51 +0000)]
Add a control flow test.
David Given [Sun, 1 Jan 2017 23:28:41 +0000 (23:28 +0000)]
Jump tables for switch now go in ROM (required by the EM spec). Forward gotos
now work.
David Given [Sun, 1 Jan 2017 17:56:53 +0000 (17:56 +0000)]
Add proper support for negative constants in external initialisers.
David Given [Sun, 1 Jan 2017 17:44:55 +0000 (17:44 +0000)]
Remove the negative-constant code from the compiler; I think it's going to
break a=-1 (with no spaces). Backed out changeset
dead3363ac7d.
David Given [Sun, 1 Jan 2017 17:44:03 +0000 (17:44 +0000)]
Add tests for more operators.
David Given [Sun, 1 Jan 2017 17:40:06 +0000 (17:40 +0000)]
Add support for the ~ operator.
David Given [Sat, 31 Dec 2016 19:43:03 +0000 (19:43 +0000)]
Add support for negative constants in external initialisers.
David Given [Sat, 31 Dec 2016 17:39:51 +0000 (17:39 +0000)]
Allow programs to override binit() (so they can register their own modules).
David Given [Sat, 31 Dec 2016 17:38:52 +0000 (17:38 +0000)]
Add support for B tests; add a test for the B operators (finding several
compiler bugs in the process).
David Given [Sat, 31 Dec 2016 17:36:12 +0000 (17:36 +0000)]
Add support for the xor operator.
David Given [Sat, 31 Dec 2016 00:14:28 +0000 (00:14 +0000)]
B patch table names shouldn't be in the B symbol namespace.
David Given [Sat, 31 Dec 2016 00:14:04 +0000 (00:14 +0000)]
Fix issue where !x was actually calculating !!x.
David Given [Thu, 29 Dec 2016 17:30:47 +0000 (17:30 +0000)]
Trying to install openbios-ppc causes Travis to error out now (not sure why).
David Given [Thu, 29 Dec 2016 17:20:51 +0000 (17:20 +0000)]
Add a B version of the hilo program.
David Given [Thu, 29 Dec 2016 17:12:40 +0000 (17:12 +0000)]
Add a declaration for the -Bxyz module name flag, used by the B compiler.
Rename some of the Basic flags to avoid confusion.
David Given [Thu, 29 Dec 2016 17:11:53 +0000 (17:11 +0000)]
Fix an issue throughout where B couldn't be built by ackprogram due to symbol
laziness.
David Given [Thu, 29 Dec 2016 17:11:07 +0000 (17:11 +0000)]
Build the B compiler and standard library (also the Basic one, which was
missing).
David Given [Thu, 29 Dec 2016 17:10:21 +0000 (17:10 +0000)]
First draft of the B module code; a module name can now be specified as a
compiler flag, which is used to set the name of the patch table. The compiler
now understands C preprocessor line directives. Extend the standard library
somewhat.
David Given [Thu, 29 Dec 2016 17:08:53 +0000 (17:08 +0000)]
Change the i80 assembler to be three-pass, which allows forward references;
required for assembling B.
David Given [Wed, 28 Dec 2016 23:49:55 +0000 (23:49 +0000)]
Don't crash when using the -u option to enter undefined symbols.
David Given [Wed, 28 Dec 2016 19:16:15 +0000 (19:16 +0000)]
Correctly export PREFIX to the Lua build system.
David Given [Wed, 28 Dec 2016 17:30:14 +0000 (17:30 +0000)]
Merge in B changes.
David Given [Mon, 26 Dec 2016 19:44:48 +0000 (19:44 +0000)]
Merge from default.
David Given [Wed, 14 Dec 2016 21:30:44 +0000 (22:30 +0100)]
Merge pull request #29 from kernigh/pr-elf-symbol
ELF symbol table from aelflod
George Koehler [Tue, 13 Dec 2016 22:22:45 +0000 (17:22 -0500)]
Update aelflod.1 to describe options, mention symbol table.
George Koehler [Tue, 13 Dec 2016 21:41:22 +0000 (16:41 -0500)]
Teach aelflod to write the ELF symbol table.
Convert each ack.out symbol to ELF, preserving its name and value, and
some but not all other symbol info. The ELF symbol table comes with
ELF section headers. If the input file has no symbols (ack -Rled-s),
then the output file has no ELF section headers.
Append the symbol table and section headers to the ELF file. Linux
ignores this appended info when it execs the file. The info might
pollute the last page of the ELF segment, but Linux clears this
pollution. Tools like nm and gdb can read the ELF symbol table.
I include code to translate debugger symbols to an ELF .stab section.
I did not test this code, because I did not find a platform that can
put S_STB symbols in the ack.out file.
George Koehler [Tue, 13 Dec 2016 21:02:38 +0000 (16:02 -0500)]
In aslod, remove some unused m68k2 stuff.
George Koehler [Tue, 13 Dec 2016 20:54:38 +0000 (15:54 -0500)]
Tweak man syntax in aelflod.1 and aslod.1
Put end of sentence at end of line. This is roff(7) syntax so the
formatter can make spacing between sentences.
Use the macro .PP to break paragraphs. Use bold for the command name
in SYNOPSIS, to match other ack manuals.
David Given [Sun, 11 Dec 2016 22:17:12 +0000 (23:17 +0100)]
Merge pull request #27 from kernigh/pr-qemu-doze
Teach qemuppc to halt the cpu on _exit().
David Given [Sun, 11 Dec 2016 22:06:37 +0000 (23:06 +0100)]
Convert the inn test to work with the test library and not import InOut; it now
runs on qemuppc again. Reenable qemuppc tests.
David Given [Sun, 11 Dec 2016 21:25:04 +0000 (22:25 +0100)]
Merge pull request #28 from kernigh/pr-set-ppc
add Modula-2 set operations to PowerPC ncg
George Koehler [Sat, 10 Dec 2016 17:23:07 +0000 (12:23 -0500)]
Add Modula-2 set operations to PowerPC ncg.
This provides and, ior, xor, com, zer, set, cms when defined($1) and
ior, set when !defined($1). I don't provide the other operations
!defined($1) because our Modula-2 compiler hasn't used them.
I wrote a Modula-2 example in
https://gist.github.com/kernigh/
add79662bb3c63ffb7c46d01dc8ae788
Put a dummy comment in mach/powerpc/libem/build.lua so git checkout
will touch that file. Without the touch, the build system doesn't see
the new *.s files.
George Koehler [Sat, 10 Dec 2016 00:49:50 +0000 (19:49 -0500)]
Add some missing clauses to los, sts, aar, inn, cmi, cmu.
We only implement 'los 4', 'sts 4', 'cmi 4', 'cmu 4', not for sizes
other than 4. Add clause $1==4.
We only implement inn when defined($1).
The rule for aar needs 'kills ALL' because it kills many registers,
like other rules that call libem.
George Koehler [Fri, 9 Dec 2016 23:40:14 +0000 (18:40 -0500)]
Add a move from CONST smalls(%val) to GPR.
This allows 'move {CONST, $1}, R3' with a small enough $1 to emit one
instruction (addi) instead of two instructions (addis, ori). The
CONST token confusingly isn't in the CONST_ALL set.
George Koehler [Fri, 9 Dec 2016 22:32:42 +0000 (17:32 -0500)]
Fix ass to match the EM spec.
The spec says, "ASS w: Adjust the stack pointer by w-byte integer".
The w argument "can either be given as argument or on top of the
stack." Therefore, 'ass 4' would pop the 4-byte integer from the
stack, but 'ass' would pop the size w from the stack, then pop the
w-byte integer.
PowerPC ncg wrongly implemented 'ass' as if it was 'ass 4'. Fix it to
accept only 'ass 4'.
George Koehler [Fri, 9 Dec 2016 22:00:56 +0000 (17:00 -0500)]
Remove the bogus rules for 'lor 2' and 'str 2'.
These instructions would load or store the EM heap pointer. They
don't work. Programs must use brk() or sbrk() in libsys.
The last file to use 'lor 2' and 'str 2' was lang/pc/libpc/sav.e in
the Pascal library. Commit
c084f9f deleted the file, so we no longer
need rules 'lor 2' or 'str 2' to build the ACK.
George Koehler [Fri, 9 Dec 2016 21:58:47 +0000 (16:58 -0500)]
Fill in a hint for enabling the COMMENT macro.
If you want to enable comments in the .s file, change
#define COMMENT(n) /* comment {LABEL, n} */
to
#define COMMENT(n) comment {LABEL, n}
George Koehler [Fri, 9 Dec 2016 21:36:42 +0000 (16:36 -0500)]
Remove trailing whitespace in mach/powerpc/ncg/table
George Koehler [Fri, 9 Dec 2016 21:04:21 +0000 (16:04 -0500)]
Fix typo: msr0 should be msr.
George Koehler [Wed, 7 Dec 2016 23:11:12 +0000 (18:11 -0500)]
Teach qemuppc to halt the cpu on _exit().
Without this, qemu-system-ppc spins the host cpu until I close its
window. I assume the default G3 emulation. The emulator yields the
host cpu if I set certain flags in hid0 then msr. The hid0 flag can
be any of DOZE, NAP, SLEEP, so I just set all 3. I encode mfmsr and
mtmsr with .data4, because our assembler doesn't know instructions for
supervisor mode.
Also move some common symbols from .rom to .bss. Our assembler puts
common symbols in any section.
Also clean up the file. Delete a comment about linuxppc that is wrong
here. Delete redundant .extern because .define is the same.
George Koehler [Wed, 7 Dec 2016 22:28:00 +0000 (17:28 -0500)]
Allow mfspr, mtspr with a register number.
PowerPC has a few hundred special-purpose registers. The assembler
had only accepted the names "xer", "lr", "ctr". Most programs use
only those three SPRs. If I add more names, they would almost never
get used, and they might conflict with labels.
I want to use "mfspr r3, 0x3f0" and "mtspr 0x3f0, r3" in
plat/qemu/boot.s to access register hid0 from supervisor mode.
David Given [Tue, 6 Dec 2016 21:24:31 +0000 (22:24 +0100)]
Merge pull request #25 from davidgiven/dtrg-inn
Fix endianess issue with inn.
David Given [Tue, 6 Dec 2016 21:07:22 +0000 (22:07 +0100)]
Add a test for #22.
David Given [Tue, 6 Dec 2016 21:06:17 +0000 (22:06 +0100)]
Disable qemuppc tests; turns out qemu-system-ppc won't load more than the first
4kB of a kernel...
David Given [Tue, 6 Dec 2016 21:05:14 +0000 (22:05 +0100)]
Fix redirection so stray stderr output from qemu doesn't cause mysterious test
failures.
David Given [Tue, 6 Dec 2016 20:45:20 +0000 (21:45 +0100)]
inn was assuming that bitfields were arrays of bytes, when actually they're
arrays of words (which makes the LSB move on big-endian systems).
David Given [Tue, 6 Dec 2016 15:28:24 +0000 (16:28 +0100)]
Merge pull request #23 from kernigh/pr-osx
new platforms osx386 and osxppc
George Koehler [Tue, 6 Dec 2016 01:13:29 +0000 (20:13 -0500)]
Don't share as, ncg, top between Linux and Mac OS X.
Telling osx386 and osxppc to build and run their own tools, not to
reuse the tools from linux386 and linuxppc. This wastes time to build
identical tools, but it removes some bogus dependencies. OS X tools
had wrongly depended on Linux descr files and aelflod; now they don't.
Discussion in https://github.com/davidgiven/ack/pull/23
David Given [Mon, 5 Dec 2016 20:06:38 +0000 (21:06 +0100)]
Fix some shell issues that would occasionally cause hangs if no tests failed.
David Given [Mon, 5 Dec 2016 20:05:24 +0000 (21:05 +0100)]
Clean up how the language libraries refer to plat headers; they should be using
the +pkg forms of the rules and getting the headers via the paths in descr,
rather than depending on the +headers version.
David Given [Mon, 5 Dec 2016 19:33:26 +0000 (20:33 +0100)]
Change dependency from simplerule{} with a dependency but no outputs to an
installable; otherwise, the dependency would be built, but the result wouldn't
get added to the header path and so wouldn't be seen.
David Given [Mon, 5 Dec 2016 19:14:54 +0000 (20:14 +0100)]
Merge branch 'pr-osx' of https://github.com/kernigh/ack into kernigh-pr-osx
George Koehler [Sat, 3 Dec 2016 22:52:24 +0000 (17:52 -0500)]
Create Mach-o files with mode 0777 to allow executing them.
Until now, I was always doing chmod +x before running my files on the
Mac. Now files get created +x. There's no change when overwriting
an existing file. I needed to gmake clean my build to remove the
example programs without +x, so cvmach can create them with +x.
George Koehler [Sat, 3 Dec 2016 22:17:44 +0000 (17:17 -0500)]
Write README files for osx386 and osxppc.
George Koehler [Sat, 3 Dec 2016 22:07:51 +0000 (17:07 -0500)]
Remove bad overflow check from plat/osx/libsys/brk.c
If I want to check for overflow, then I should check it before I do
base + incr, not after.
Now that I have no check, I am passing the overflowed base + incr to
brk1(), where it will probably fail the nbreak < segment check.
George Koehler [Fri, 2 Dec 2016 23:04:06 +0000 (18:04 -0500)]
Write a manual page for cvmach(6).
This manual is in the new mdoc(7) format. All existing ack manuals
use the old man(7) format. This might be a problem if someone can't
display mdoc(7) files.
The build system doesn't install the cvmach(6) manual; that might
happen later. The current build system installs manuals in two
different places, and doesn't install some manuals, so I don't know
what to do.
David Given [Thu, 1 Dec 2016 23:25:50 +0000 (00:25 +0100)]
Merge from default.
David Given [Thu, 1 Dec 2016 23:24:44 +0000 (00:24 +0100)]
Merge pull request #21 from davidgiven/dtrg-tests
Run all tests, even if some fail, and produce a test summary at the end of the build.
David Given [Thu, 1 Dec 2016 23:18:44 +0000 (00:18 +0100)]
Typo fix.
David Given [Thu, 1 Dec 2016 23:14:40 +0000 (00:14 +0100)]
Don't fail to build if all tests are skipped.
David Given [Thu, 1 Dec 2016 23:10:33 +0000 (00:10 +0100)]
UI tweaks to the test summary.
David Given [Thu, 1 Dec 2016 23:00:31 +0000 (00:00 +0100)]
Report skipped, failed and timed out tests.
David Given [Thu, 1 Dec 2016 22:14:29 +0000 (23:14 +0100)]
Mark skipped tests in the logs (so we can get stats on them later).