Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
ns32ktoolchain [2020/07/05 21:57] – [Building GCC] adminns32ktoolchain [2023/04/12 07:56] (current) – [Standalone binaries] admin
Line 59: Line 59:
 ==== 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.
Line 91: Line 91:
 ==== GNU as ==== ==== GNU as ====
  
-GNU ''as'' (gas) has a slightly different syntax than the so-called TDS (Tiny Development System) and [[http://wiki.sensi.org/download/ns32k/as_refman.pdf|GENIX assembler]]. Be careful when porting your ns32k assembler files to gas. As an example, all hex constants should be written as 0x123456 not x'123456. Immediate values should not be prepended with ''$''. To access a variable as PC-relative use ''movd var(pc),r0'' istruction. Many assembler directives are different too. Consult a documentation :+GNU ''as'' (gas) has a slightly different syntax than so-called TDS (Tiny Development System) assembler and [[http://wiki.sensi.org/download/ns32k/as_refman.pdf|GENIX assembler]]. Be careful when porting your ns32k assembler files to gas. As an example, all hex constants should be written as 0x123456 not x'123456. Immediate values should not be prepended with ''$''. To access a variable as PC-relative use ''movd var(pc),r0'' istruction template. Many assembler directives are different too. Consult a documentation :
  
 https://sourceware.org/binutils/docs/as/index.html https://sourceware.org/binutils/docs/as/index.html
  
-On the other hand, GNU ''as'' is just a "backend" for the GCC compiler and rarely used standalone.+On the other hand, GNU ''as'' is just a "backend" for the GCC compiler and rarely used standalone. An examples of the GNU ''as'' usage may be found in the NetBSD ns32k for the pc532 port: in the bootloader, kernel ans some libraries call optimized for speed.
  
 GCC compiler has an interesting option ''-S'' to produce an assembly ''.s'' file from the ''.c''. Resulting files are fully compatible with ''gas''. Also GCC may pass an options to ''as'' with ''-Wa'' option. To produce an assembler listing with source code lines: GCC compiler has an interesting option ''-S'' to produce an assembly ''.s'' file from the ''.c''. Resulting files are fully compatible with ''gas''. Also GCC may pass an options to ''as'' with ''-Wa'' option. To produce an assembler listing with source code lines:
Line 109: Line 109:
 You have to extract NetBSD "include" directory before GCC building. You have to extract NetBSD "include" directory before GCC building.
  
-Download:\\ +Download NetBSD 1.5.3 includes and libraries:\\ 
-ftp://ftp.netbsd.org/pub/NetBSD-archive/NetBSD-1.5.3/pc532/binary/sets/base.tgz\\ +https://archive.netbsd.org/pub/NetBSD-archive/NetBSD-1.5.3/pc532/binary/sets/base.tgz\\ 
-ftp://ftp.netbsd.org/pub/NetBSD-archive/NetBSD-1.5.3/pc532/binary/sets/comp.tgz\\+https://archive.netbsd.org/pub/NetBSD-archive/NetBSD-1.5.3/pc532/binary/sets/comp.tgz\\
 <code> <code>
 mkdir /tmp/NetBSD-1.5.3 mkdir /tmp/NetBSD-1.5.3
Line 137: Line 137:
  
 Precompiled binaries: http://wiki.sensi.org/download/ns32k/ns32k-netbsd-cross-i686-linux.tgz \\ Precompiled binaries: http://wiki.sensi.org/download/ns32k/ns32k-netbsd-cross-i686-linux.tgz \\
-Includes binutils-2.27, gcc-3.4.6, NetBSD-1.5.3 headers \\ +Includes binutils-2.27, gcc-3.4.6, NetBSD-1.5.3 headers. Prefix: ''/opt/cross'' \\ 
-Binaris are compiled with GCC-3 for the i686 arhitecture and tested on the modern Centos 7 (RHEL 7) \\ +Binaris are compiled with GCC-3 for the i686 arhitecture and tested on the modern 64-bit Centos 7 (RHEL 7) \\ 
-Since this is 32-bit -i686 binaries, add a ''glibc.i686'' package \\ +Since these are 32-bit -i686 binaries, install a ''glibc.i686'' package \\ 
-Just copy this TAR file to the root /  and extract it with ''tar zxf'' \\+Just copy this TAR file to the root ''/''  and extract it with ''tar zxf'' \\
 Add an ''export PATH=/opt/cross/bin:$PATH'' Add an ''export PATH=/opt/cross/bin:$PATH''
  
Line 177: Line 177:
 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.+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:
Line 238: Line 238:
  -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>
Line 243: Line 245:
 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
Line 261: Line 263:
 ...Work in progress ...Work in progress
  
-ftp://sourceware.org/pub/gdb/old-releases/+Sources: ftp://sourceware.org/pub/gdb/old-releases/ 
  
 GDB 2.5.1: no ns32k support. parsing ns32k COFF coffread.c \\ GDB 2.5.1: no ns32k support. parsing ns32k COFF coffread.c \\
Line 269: Line 272:
 ... \\ ... \\
 GDB 4.0.1: uses [[wp>Binary_File_Descriptor_library|BFD]] \\ GDB 4.0.1: uses [[wp>Binary_File_Descriptor_library|BFD]] \\
 +...\\
 +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-*-*
  
Navigation