Both sides previous revisionPrevious revisionNext revision | Previous revision |
ns32ktoolchain [2020/07/09 21:19] – [GDB] admin | ns32ktoolchain [2023/04/12 07:56] (current) – [Standalone binaries] admin |
---|
==== Building binutils ==== | ==== Building binutils ==== |
| |
As it was noted above, the latest binutils still supports **ns32k** target. Early binutils versions (i.e. < ''binutils-2.13'' required for NetBSD compatibility) considered as "mature" and requires **GCC 3** to build. Something is broken in the **ns32k** binutils sources and it can't be built with **GCC 4** and above. | As noted above, the latest binutils still support **ns32k** target. Early binutils versions (i.e. < ''binutils-2.13'' required for NetBSD compatibility) considered as "mature" and requires **GCC 3** to build. Something is broken in the **ns32k** binutils sources and it can't be built with **GCC 4** and above. |
| |
Not-so-old (i.e. > ''binutils-2.20'' (correct me)) may be successfully compiled under **GCC 4**. | Not-so-old (i.e. > ''binutils-2.20'' (correct me)) may be successfully compiled under **GCC 4**. |
| |
Source download: http://ftp.gnu.org/gnu/binutils/binutils-2.27.tar.gz | Binutils 2.27 source download link: http://ftp.gnu.org/gnu/binutils/binutils-2.27.tar.gz |
| |
If you have to build early ''binutils-2.13'', you have to use **GCC 3**, but this version deprecated and disappeared from the most of modern systems. You have to find or build a local **GCC 3** for your system (not covered by this document) or use a "compatibility" compiler pre-built for some systems. As an example, Redhat RHEL 5 and CENTOS 5 provide a "compat-gcc-34" package, MinGW provides "mingw32-gcc-v3-core" (correct me). FreeBSD 6 uses GCC 3 as system compiler and FreeBSD 7 provides gcc-3.4 (lang/gcc34) in the port collection. The latest Cygwin with system GCC 3 compiler was a Gygwin-1.5.25 and it may be obtained from the [[http://www.crouchingtigerhiddenfruitbat.org/Cygwin/timemachine.html|Cygwin Time Machine]] (see a cygwin-legacy). | If you need to build early ''binutils-2.13'', you have to use **GCC 3**, but this version deprecated and disappeared from the most of modern systems. You have to find or build a local **GCC 3** for your system (not covered by this document) or use a "compatibility" compiler pre-built for some systems. As an example, Redhat RHEL 5 and CENTOS 5 provide a "compat-gcc-34" package, MinGW provides "mingw32-gcc-v3-core" (correct me). FreeBSD 6 uses GCC 3 as system compiler and FreeBSD 7 provides gcc-3.4 (lang/gcc34) in the port collection. The latest Cygwin with system GCC 3 compiler was a Gygwin-1.5.25 and it may be obtained from the [[http://www.crouchingtigerhiddenfruitbat.org/Cygwin/timemachine.html|Cygwin Time Machine]] (see a cygwin-legacy). |
| |
Build results for various platforms: [[toolchain-build]] (not complete). | I've made a test build for various platforms: [[toolchain-build]] (not complete). |
| |
Like many other GNU software **GNU Toolchain** uses **GNU Autotools** scripts (./configure) to produce a correct ''Makefile'' for user's platform. | Like many other GNU software **GNU Toolchain** uses **GNU Autotools** scripts (./configure) to produce a correct ''Makefile'' for user's platform. |
The option ''-ffreestanding'' disables "hosted" environment where ''main()'' is the first "user" function in the programm called by **crt0.o**. | The option ''-ffreestanding'' disables "hosted" environment where ''main()'' is the first "user" function in the programm called by **crt0.o**. |
| |
NOTE! GCC sometimes emits "built-in" functions like ''__udivdi3'' and requres "compiler runtime" library [[https://gcc.gnu.org/onlinedocs/gccint/Libgcc.html|libgcc]] for target processor. Smplify arithmetic expressions. | NOTE! GCC sometimes emits "built-in" functions like ''__udivdi3'' and requres "compiler runtime" library [[https://gcc.gnu.org/onlinedocs/gccint/Libgcc.html|libgcc]] for target processor. Just smplify your arithmetic expressions to avoid this. |
| |
Another useful GCC option is ''-fomit-frame-pointer'' - it disables usage of the ''fp'' register (frame pointer) and use ''sp''-related (stack pointer) addressing for local variables like "old" compilers. GCC also supports ''-fpic'' option to compile PIC (Position-Independent Code) with ''sb''-related addressing ''0(_glblvar(sb))''. | Another useful GCC option is: ''-fomit-frame-pointer'' - it disables usage of the ''fp'' register (frame pointer) and use ''sp''-related (stack pointer) addressing for local variables like "old" compilers. GCC also supports ''-fpic'' option to compile PIC (Position-Independent Code) with ''sb''-related addressing ''0(_glblvar(sb))''. |
| |
Test object file with disassembler: | Test object file with disassembler: |
-Ttext 0x0 -M -Map emutest.map -o emutest.bin emutest.o | -Ttext 0x0 -M -Map emutest.map -o emutest.bin emutest.o |
</code> | </code> |
| GNU ld [[https://sourceware.org/binutils/docs/ld.pdf|documentation]] . |
| |
To check binary file: | To check binary file: |
<code> | <code> |
ns32k-pc532-netbsd-objdump.exe -D -x --target=binary -m ns32k emutest.bin | ns32k-pc532-netbsd-objdump.exe -D -x --target=binary -m ns32k emutest.bin |
</code> | </code> |
Run ''emul32k'' emulator: | Run ''emul32k'' emulator and binary file: |
<code> | <code> |
./emul32k emutest.bin | ./emul32k emutest.bin |
NetBSD 1.5.3 uses GDB 4.17\\ | NetBSD 1.5.3 uses GDB 4.17\\ |
... \\ | ... \\ |
| GDB 5.1: Most ns32k hosts and targets have been marked as obsolete: ns32k-*-mach3* ns32k-umax-* ns32k-utek-sysv* ns32k-utek-*\\ |
GDB 6.4 dropped support for ns32k-*-* | GDB 6.4 dropped support for ns32k-*-* |
| |