Tostones3 SCORE ARM
General information about the development of SCORE ARM.
Description
Development of the SCORE ARM product. The desire is to match the functionality of the earlier Tostones SCORE PowerPC project but based on Durants.
Mulit-core kernel verification on ARM.
Useful Links
- Ada Root library specifics SCORE-ADAROOT (verified component)
- Ada RTS library specifics SCORE-ADARTS (verified component)
Milestones
High level description of the contents of the milestones.
D1
- Partial build of SCORE components (including ada_rootlib and rts; some other libraries might not be included).
- Compiler generating ARM code (ARM32 complying with EABI like GCC, ARMv7 or ARMv8). Some limitations may apply. No ARM specific optimizations.
- Rudimentary bare UCC/BSP for testing.
- Initial Deos UCC/BSP enabling user programs on Xilinx Ultrascale.
- Some testing using the usual SCORE test suites (e.g. PlumHall, Mktest)
D2
- Full build of all SCORE components.
- Improved code generation.
- Improved debug information (including DWARF sibling chains).
- Consider support for generating Thumb instructions (which are still supported in ARMv8 32 bit mode). The low number of available registers (compared to typical RISC) will likely stress register allocation. If Thumb specific optimizations (e.g. IT blocks) can be restricted to peephole optimizing then the two instruction sets can be tabulated like RS6000/PowerPC in power installer.
- General Deos UCC/BSP.
- Updated SCORE documentation.
- Tested using the usual SCORE test suites.
- Debugger support for SCORE Ada on ARM.
Project Complete
- Verified ARM versions of score-adaroot and score-adarts.
Status
Extend building to support ARM in general. Derive support from PowerPC.
Ada Producer
Test for "ARM" TARGET option in ada9x_options_b.ada. DONE
License check. DONE
PCR 3419 (async select regression).
Consider:
PCR 3589 (bit field related, reported by Tostones).
Only one object file per compilation units (will end ANDF-DE cross capsule references).
Ada Root Library
See SCORE-ADAROOT
Auxiliary
New set of ARM specific files. Check ppc/lib_support/asm_support/asm_macros.h - is this one or the one in rts active? DONE
Dera
PCR 4188 (general ARM installer).
Debug current regression (failure in ada_rootlib when building ppc603e, powerpc, etc). DONE
PCR 3707 (assertion in installer). Related to regression above?
Study ARM ABI details.
Generate DWARF abbreviations in each compilation/eliminate dwarf.o.
Add DWARF sibling chains. Some initial work demonstrated that this is remarkably difficult to add (as long as the DWARF contributions are generated directly to the assembler file). On the up side, GDB 10.1 is pretty happy to use SCORE's DWARF as-is.
Known outstanding:
- Accept unsigned 64 bit hex integers. Note: This also affects PowerPC; see PCR 4242.
- Implement PIC, primarily in arm's inst_fmt.c.
- Use separate register numbers for single and double float registers. With this, prologue/epilogue code can determine the set of doubles to save/restore and register allocation can track singles.
- Running out of temporary registers. Next intended fix: Make codehere.h interfaces such as reg_operand() return an indication whether the returned register (pair) is allocated to a variable - or just happens to hold the operand value and may be used also as destination.
Documentation
Update various lists of targets to include ARM (e.g. release notes).
Document ARM installer options in C/C++ User's Guide section 5.6.
Update PowerPC installer options in C/C++ User's Guide section 5.6 to list -mregnames.
Tool changes since Tostones (tool options, Ada pragmas for package System).
Unlikely that a a Configuration Guide will be created (since the UCCs will be generic Deos and a minimal bare, matching a simulator).
LibC
Incorporate some Deos ANSI code instead of print_fp.S
Add ARM specifics to src/generic/score/config.h.
ARM asm_macros.h (see Auxiliary)
PD_Tools
Building of binutils 2.30 (as used in Indie/Jupiter GNU tool chains) for ARM in place.
RTS
See SCORE-ADARTS
Adapt to Deos 9.2.3/10.x.y interfaces.
Populate a new arm_cross_bare subdirectory.
first_last/Makefile first_last/first.S first_last/last.S
hardware_exceptions/Makefile hardware_exceptions/register_offsets.c
interrupts/Makefile interrupts/pk_interrupt_handler.c
libc/longjmp TBD
machine/em_target.c based on powerpc machine/em_target.h based on powerpc machine context switch, other files TBD
Target Tools
Various small scripts to be created.
UCC
Minimal bare simulator UCC.
Generic Deos UCC.
TRAC
ARM emulator that handles ARM-v7 and possibly ARM-v8 instructions. May mean replacing SkyEye (which apparently is not maintained) with recent GDB.