guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Stage0 Release 0.4.0, M2-Planet Release 1.5.0 and mescc-tools-seed R


From: Orians, Jeremiah (DTMB)
Subject: RE: Stage0 Release 0.4.0, M2-Planet Release 1.5.0 and mescc-tools-seed Release 1.2
Date: Tue, 4 Feb 2020 13:42:41 +0000

> WOW! That is an impressive list. And in 4 hours.
Really ends the debate about how to bootstrap C compilers in my book

> Is there something I can play with on my 32-bit ppc machine to add to the 
> list?

Well if you are willing to do some testing it is really trivial to get a new 
architecture into mescc-tools and M2-Planet (I can handle the conversion to 
cc_* rather quickly)

First you'll want to figure out how the architecture expresses immediates and 
offsets; hex2 is the place where those architecture specific details are 
leveraged (https://github.com/oriansj/mescc-tools/blob/master/hex2_linker.c) 
(rasm2 and gdb are extremely handy here)

This will give you the answers to hex2 --architecture powerpc32 (or what ever 
name you want really) --{Big/Little}Endian -f elf-header.hex2 -f test.hex2 -- 
exec_enable -o binary
Which will generate working binaries for that architecture from hex2 sources

Next you'll want to figure out how the bits of the instructions are actually 
laid out and M1 definitions are a quick way to get to that quickly 
(https://github.com/oriansj/mescc-tools/blob/master/M1-macro.c)

This will give you the answers to M1 --architecture powerpc32 (or what ever 
name you want really) --{Big/Little}Endian -f defs.M1 -f test.M1 -o test.hex2
Which can be passed to hex2 (with the previously created elf-header) and 
generate a working binary for that architecture.

After that one needs to figure out what M1 defs would be required (This should 
give you a simple example of what would be required 
https://github.com/oriansj/stage0/blob/master/stage2/High_level_prototypes/cc_x86/cc_core.c
 ) 

Which will convert C code into M1 output which you at this point know what to 
do with it to get a working binary.

After all of that, one simply takes the M1 strings that are in M2-Planet which 
we know generate working C code and taking a copy of cc_x86.s, replace the 
strings, fix the local and argument offsets (change a few type sizes for 64bit 
targets) and you are done. With a working C compiler for powerpc32 written in 
assembly.

One trick is after you get the architecture into M2-Planet Is have it build 
itself for your target instruction set and put that into a file (I used foo1)
Then cat all of the inputs used into another file (I used foo.c)

Here is the instruction I used with knight-native:
M1 --architecture knight-native --BigEndian -f High_level_prototypes/defs -f 
stage2/cc_knight-native.s -o scratch/cc_knight-native.hex2 && hex2 
--architecture knight-native --BigEndian -f scratch/cc_knight-native.hex2 -o 
scratch/cc_knight-native && ./bin/vm --rom scratch/cc_knight-native --tape_01 
foo.c --memory 10M && meld foo1 tape_02

If you need further clarification, I am more than happy to help
Plus there are some wonderful people on #bootstrappable who are able to help 
you work through ugly details

-Jeremiah


reply via email to

[Prev in Thread] Current Thread [Next in Thread]