่ๅณใๆใฃใใขใผใญใใฏใใฃใฎๆฉๆขฐ่ชใ็บใใใใใฎใๆไฝ้ใฎใฏใญในใณใณใใคใฉใฎไฝใๆนใ่ชฌๆใใพใใๅ จ้จๅ ฅใbinutilsใ็ดนไปใใพใใ
โป ๅฎ็จ็ใช้็บใฏ็ฎ็ใจใใฆใใพใใใๆๅฎใใใชใใทใงใณใๆๅฐ้ใซๆใใฆใใพใใ
็ฑ่ก๏ผใขใปใณใใฉๅ ฅ้ใฎๆๅใซ็ปๅ ดใใPowerPCใไพใซ่ชฌๆใใพใใใgccใงใตใใผใใใใฆใใใขใผใญใใฏใใฃใงใใใฐๅใๆนๆณใไฝฟใใพใใ
โป ๅๆธใใใๆฐใใgccใๆฑใใใใใใใคใๆฐใใใขใผใญใใฏใใฃใไฝฟใใพใใๅทฎๅใฏๆๅพใฎๆนใซใพใจใใฆใใพใใ
ใใซใๅฏพ่ฑก
- binutils: ใขใปใณใใฉใ้ใขใปใณใใฉใใชใณใซใชใฉ
- gcc: ใณใณใใคใฉ
ๆบๅ
gccใไฝฟใใ็ฐๅขใๅฟ ่ฆใงใใ
WindowsใงใฏMSYS2ใไฝฟใๅๆใง่ชฌๆใใพใใ
ไพๅญใฉใคใใฉใช
gcc-4.3ไปฅ้ใฏๆฌกใฎใฉใคใใฉใชใซไพๅญใใฆใใพใใ
ไฝฟ็จใใฆใใใใใฑใผใธ็ฎก็ใทในใใ ใชใฉใใใคใณในใใผใซใใฆใใ ใใใ
MSYS2ใงใฎไพใ็คบใใพใใ
$ pacman -S mpc-devel
โป mpc-develใ ใใคใณในใใผใซใใใฐไปใไพๅญ้ขไฟใงๅ ฅใใพใใ
่ชๅใงใใซใใใใจใใฏๆฌกใฎใใใซใใใฐ่ฏใใงใใใใ
$ export CPPFLAGS=-I/opt/cross/include LDFLAGS=-L/opt/cross/lib
$ ./configure --prefix=/opt/cross
ใใซใ
ใใซใๆ้ ใ็คบใใพใใ้ใใใทใณใ ใจ10ๅ็จๅบฆใง็ตใใใพใใ
ใใฆใณใญใผใ
binutilsใฏๅท็ญๆใฎๆๆฐ็ใgccใฏ4.6.4ใไฝฟใใพใใ
$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.25.tar.bz2
$ wget http://ftp.gnu.org/gnu/gcc/gcc-4.6.4/gcc-core-4.6.4.tar.bz2
gcc-4.6ใไฝฟใฃใฆใใใฎใฏไปฅไธใฎ็็ฑใซใใใพใใ
- gcc-4.5ไปฅๅใฏๆฐใใmakeinfoใงใจใฉใผใๅบใ
- gcc-4.7ไปฅ้ใฏ้ ๅธ็ฉใๅ จ้จๅ ฅใใจใชใๅทจๅคง
ๅฑ้
้ฉๅฝใชใใฃใฌใฏใใชใงใฝใผในใๅฑ้ใใพใใ
$ tar xvf binutils-2.25.tar.bz2
$ tar xvf gcc-core-4.6.4.tar.bz2
ใใใ (MSYS2)
MSYS2ใงใฏ็ฐๅขใ่ช่ญใใใใใซไฟฎๆญฃใๅฟ ่ฆใงใใ
$ cp /usr/share/automake-1.15/config.* gcc-4.6.4
โป ใใฎๆใฎไฟฎๆญฃใฏๆฐใใ็ฐๅขใงใฏ่ฏใใใใใจใชใฎใงใ็ฅใฃใฆใใใฐๅฝน็ซใคใใใใใพใใใ
ใใซใใใฃใฌใฏใใช
ใใซใใฏใฝใผในใฎๅคใง่กใใฎใๆตๅใงใใใใซใ็จใฎใใฃใฌใฏใใชใไฝๆใใพใใใใฃใฌใฏใใชๅใฏไปปๆใงใใใใใใงใฏgccใงๆๅฎใใใฟใผใฒใใๅใซๅใใใพใใ
โป ๅ ใปใฉใฎใณใใณใใซ็ถใใฆๅ ฅๅใใใใจใๆณๅฎใใฆใใพใใไปฅ้ใๅๆงใงใใ
$ mkdir powerpc-elf
$ cd powerpc-elf
- powerpc: CPUๅ
- elf: ใใคใใชๅฝขๅผ๏ผELFใใกใคใซ๏ผ
binutils
ใใซใใใฃใฌใฏใใชใไฝใฃใฆๅ ฅใใ็ธๅฏพใในใงconfigureใๅผใณใพใใ
$ mkdir binutils
$ cd binutils
$ ../../binutils-2.25/configure --prefix=/opt/cross --target=powerpc-elf
configureใฎใชใใทใงใณใฏๆฌกใฎ้ใใงใใ
-
--prefix: ใคใณในใใผใซๅ -
--target: ๅฏพ่ฑกใจใใใขใผใญใใฏใใฃ
ใใซใใใพใใ-j2ใฎ2ใฏCPUใฎใณใขๆฐใซๅใใใฆ่ชฟๆดใใใจ๏ผไพ๏ผ4ใณใขใชใ-j4๏ผใใใซใๆ้ใ็ญ็ธฎใงใใพใใ
$ make -j2
ใใซใใๅฎไบใใใใคใณในใใผใซใใพใใ
$ sudo make install
โป MSYS2ใงใฏsudoใฏไธ่ฆใงใใ
ใใฃใฌใฏใใชใๆใใพใใ
$ cd ..
ใจใฉใผๅฏพ็ญ
MSYS2ใงmakeไธญใซๆฌกใฎใใใชใจใฉใผใงๆญขใพใใใจใใใใพใใ
39 [main] make 7628 child_info_fork::abort:๏ผ็ฅ๏ผ: Loaded to different address: parent(0x440000) != child(0x630000)
make: fork: Resource temporarily unavailable
ใใฎๅ ดๅใฏๆฌกใฎๆนๆณใงๅฏพๅฆใใฆใใ ใใใ
- MSYS2ใฎใฟใผใใใซใใในใฆ้ใใพใใ
- MSYS2ใใคใณในใใผใซใใใใใฃใฌใฏใใชใซใใ
autorebase.batใๅฎ่กใใพใใ - ใณใใณใใใญใณใใใฎใฆใฃใณใใฆใๅบใฆใๆฐๅๅพใซ่ชๅ็ใซ้ใใพใใๆๅญใฏไฝใ่กจ็คบใใใพใใใ
- MSYS2ใฎใฟใผใใใซใ้ใใฆๅ ใปใฉใฎใใฃใฌใฏใใชใซ็งปๅใใฆใใใไธๅบฆmakeใ่ฉฆใใฆใใ ใใใ
ๆฌกใฎๆ ๅ ฑใๅ่ใซใใพใใใ
gcc
binutilsใจๅๆงใฎๆ้ ใงใใใmakeใฎใฟใผใฒใใใซ-gccใไปใใฆใใใฎใซๆณจๆใใฆใใ ใใใ
โป ใใใไปใใชใใจใฉใคใใฉใชใใใซใใใใฆใจใฉใผใซใชใใพใใ
$ mkdir gcc
$ cd gcc
$ ../../gcc-4.6.4/configure --prefix=/opt/cross --target=powerpc-elf
$ make -j2 all-gcc
$ sudo make install-gcc
โป MSYS2ใงใฏsudoใฏไธ่ฆใงใใ
ใใซใๆ้
ๅ่ใจใใฆbinutilsใจgccใฎใใซใใซใฉใใใใๆ้ใๆใใใใ็คบใใพใใ
| OS | CPU | ใฏใญใใฏ | ใธใงใ | ๆ้ | ใฆใฃใซในๅฏพ็ญ |
|---|---|---|---|---|---|
| Windows 8.1 (MSYS) | Athlon 64 X2 4600+ | 2.40GHz | -j2 | 57m14.069s | Windows Defender |
| Windows 8.1 (MSYS2) | Athlon 64 X2 4600+ | 2.40GHz | -j2 | 27m13.587s | ๏ผใชใ๏ผ |
| Windows 8.1 (MSYS2) | Athlon 64 X2 4600+ | 2.40GHz | -j2 | 30m08.217s | Windows Defender |
| Windows 8.1 (MSYS2) | Celeron N2830 | 2.16GHz | -j2 | 38m26.803s | Windows Defender |
| Windows 7 (MSYS2) | Core i5-3320M | 2.60GHz | -j2 | 15m37.006s | ๏ผใชใ๏ผ |
| Windows 7 (MSYS2) | Core i5-3320M | 2.60GHz | -j4 | 12m32.296s | ๏ผใชใ๏ผ |
| Windows 7 (MSYS2) | Core i5-3320M | 2.60GHz | -j4 | 21m37.818s | Virus Buster |
- ๅใใใทใณใงใ็กๅฐMSYSใใMSYS2ใ้ซ้
- HTใฎๅนๆใฏ็ด1.25ๅ
- ใฆใฃใซในๅฏพ็ญใฏใใชใ่ถณใๅผใฃๅผตใ
ไฝฟ็จๆนๆณ
ใใซใใใPowerPC็จใฏใญในใณใณใใคใฉใไฝฟใฃใฆใฟใพใใ
ใใน
ๆจๆบใงใในใฎ้ใฃใฆใใชใ /opt/cross ใซใคใณในใใผใซใใใใใไฝฟ็จๅใซใในใ้ใใพใใ
$ export PATH="/opt/cross/bin:$PATH"
ๆฏๅใใใจ้ขๅใชใฎใง ~/.bashrc ใชใฉใซ่จ่ผใใฆใใใจ่ฏใใงใใใใ
ใในใ
ใฉใใชใณใผใใ็ๆใใใใฎใใในใใใพใใ
โป ใใซใใใฃใฌใฏใใชใใๅบใฆใ้ฉๅฝใชใใฃใฌใฏใใชใไฝใฃใฆใใใงไฝๆฅญใใฆใใ ใใใ
int add(int a, int b) {
return a + b;
}
ใณใณใใคใซใใพใใ
-
-nostdlib: Cใฎใฉใคใใฉใช๏ผlibc๏ผใชใฉใใชใณใฏใใพใใใๅญๅจใใชใใใๆๅฎใใชใใจใจใฉใผใจใชใใพใใ -
-g: ้ใขใปใณใใซๆใซC่จ่ชใฎ่ฉฒๅฝ็ฎๆใ่กจ็คบใใใใใใใใฐๆ ๅ ฑใๆๅนๅใใพใใ -
-O: ๆ้ฉๅใใพใใๅบๅใใใๆฉๆขฐ่ชใๅ็ดใซใใใใใซๅฉ็จใใฆใใพใใๅคใใใใฎใจๅฏพๆฏใใฆใฟใใจ่ฏใใงใใใใ
$ powerpc-elf-gcc -nostdlib -g -O add.c
/opt/cross/lib/gcc/powerpc-elf/4.6.4/../../../../powerpc-elf/bin/ld: ่ญฆๅ: ใจใณใใชใทใณใใซ _start ใ่ฆใคใใใพใใใใใใฉใซใใจใใฆ 0000000001800054 ใไฝฟ็จใใพใ
โป ่ญฆๅใฏ็ก่ฆใใพใใ
ๅบๅใใใใใคใใช๏ผa.out๏ผใ้ใขใปใณใใซใใฆใใฉใใชๆฉๆขฐ่ชใๅบๅใใใฆใใใใ็ขบ่ชใใพใใ
-
-S: C่จ่ชใฎใฝใผในใจๅฏพๆฏใใชใใ้ใขใปใณใใซใใพใใๅฏพ่ฑกใฏ-gไปใใงใณใณใใคใซใใใฆใใๅฟ ่ฆใใใใพใใ
$ powerpc-elf-objdump -S a.out
a.out: ใใกใคใซๅฝขๅผ elf32-powerpc
ใปใฏใทใงใณ .text ใฎ้ใขใปใณใใซ:
01800054 <add>:
int add(int a, int b) {
return a + b;
}
1800054: 7c 63 22 14 add r3,r3,r4
1800058: 4e 80 00 20 blr
ๅผๆฐใr3ใจr4ใงๆธกใใใฆใๆปใๅคใฏr3ใง่ฟใใใๆงๅญใ่ชญใฟๅใใพใใ
ไปใฎใขใผใญใใฏใใฃ
targetใๅคใใใฐ่ฒใ ใชใขใผใญใใฏใใฃใใใซใใงใใพใใ
ใฉใใชใขใผใญใใฏใใฃใใใใใฏๆฌกใฎ่จไบใๅ่ใซใใฆใใ ใใใ
IA-64
ใชใณใฏใๅใใชใใจใจใฉใผใซใชใใพใใ
$ ia64-elf-gcc -nostdlib add.c
/tmp/ccYFwywB.s: Assembler messages:
/tmp/ccYFwywB.s:14: Warning: Explicit stops are ignored in auto mode
/opt/cross/lib/gcc/ia64-elf/4.6.4/../../../../ia64-elf/bin/ld: so ใ่ฆใคใใใพใใ: No such file or directory
collect2: ld ใฏในใใผใฟใน 1 ใง็ตไบใใพใใ
$ ia64-elf-gcc -c add.c
$ ia64-elf-ld add.o
ia64-elf-ld: ่ญฆๅ: ใจใณใใชใทใณใใซ _start ใ่ฆใคใใใพใใใใใใฉใซใใจใใฆ 40000000000000b0 ใไฝฟ็จใใพใ
SH64
ใชใณใฏใๅใใใจใจใฉใผใซใชใใพใใ
$ sh64-elf-gcc -nostdlib add.c
/opt/cross/lib/gcc/sh64-elf/4.6.4/../../../../sh64-elf/bin/ld: ่ญฆๅ: ใจใณใใชใทใณใใซ start ใ่ฆใคใใใพใใใใใใฉใซใใจใใฆ 0000000000001000 ใไฝฟ็จใใพใ
$ sh64-elf-gcc -c add.c
$ sh64-elf-ld add.o
sh64-elf-ld: sh5 ใขใผใญใใฏใใฃ (ๅ
ฅๅใใกใคใซ`add.o') ใฏ sh ๅบๅใจไบๆๆงใใใใพใใ
sh64-elf-ld: ่ญฆๅ: ใจใณใใชใทใณใใซ start ใ่ฆใคใใใพใใใใใใฉใซใใจใใฆ 0000000000001000 ใไฝฟ็จใใพใ
sh64-elf-ld: ๆ็ตใชใณใฏใซๅคฑๆใใพใใ: ไธๆญฃใชๅคใงใ
ใชใใทใงใณใๆๅฎใใๅฟ ่ฆใใใใพใใ
$ sh64-elf-gcc -c add.c
$ sh64-elf-ld -mshelf32 add.o
sh64-elf-ld: ่ญฆๅ: ใจใณใใชใทใณใใซ start ใ่ฆใคใใใพใใใใใใฉใซใใจใใฆ 0000000000001000 ใไฝฟ็จใใพใ
ใในใในใฏใชใใ
ๅ่ใพใงใซใณใณใใคใซใปใชใณใฏใป้ใขใปใณใใซใไธ็บใงใใในใฏใชใใใฎไพใ็คบใใพใใ
โป ๅ่ฟฐใฎ็็ฑใงSH64ใซใฏไฝฟใใพใใใ
# !/usr/bin/env bash
arch=$1
tmp=`mktemp`
shift
$arch-gcc -o $tmp -c -O -g -fomit-frame-pointer $@ &&
$arch-ld $tmp &&
$arch-objdump -S a.out
rm -f $tmp
$ testgcc ia64-elf add.c
ๅ จ้จๅ ฅใbinutils
binutilsใฏๅ จ้จๅ ฅใใซใงใใพใใใใใใใใใฐๆงใ ใชCPUใฎใใคใใชใ้ใขใปใณใใซใงใใพใใ
ใใใคใๆณจๆ็นใใใใพใใ
- gccใฏๅ จ้จๅ ฅใใซใงใใพใใใๅๅฅใซๆๅฎใใฆใใซใใใใใใใใพใใใ
- ใขใปใณใใฉใใใพใๆฉ่ฝใใชใใใใใปใผ้ใขใปใณใใฉๅฐ็จใจใชใใพใใgccใจใปใใใงใใซใใใbinutilsใซใฏใขใปใณใใฉใไธๅฏๆฌ ใชใใใๅ จ้จๅ ฅใใใใฃใฆใไพ็ถใจใใฆbinutilsใฎใใซใใฏๅฟ ่ฆใงใใ
ใใใ (MSYS2)
MSYS2ใงใฏใใฎใใใใๅฟ ่ฆใงใใ
$ wget https://raw.githubusercontent.com/Alexpux/MSYS2-packages/1ec8aa42e0892f04400039ea1e5ede51ffc4d35e/binutils/binutils-trunk-msys2.patch
$ patch -p1 -d binutils-2.25 < binutils-trunk-msys2.patch
ใใซใ
$ mkdir all
$ cd all
$ ../binutils-2.25/configure --prefix=/opt/cross --enable-targets=all --enable-64-bit-bfd --program-prefix=all-
$ make -j2
$ sudo make install
โป MSYS2ใงใฏsudoใฏไธ่ฆใงใใ
ไฝฟใๆน
ใณใใณใใซall-ใฎๆฅ้ ญ่พใไปใใพใใ
$ all-objdump -S a.out
่ชๅใใซใในใฏใชใใ
ๅ่ใจใใฆ่ชๅๅใใในใฏใชใใใ็ฝฎใใฆใใใพใใใใใพใงๅ่ใฎใใ็กไฟ่จผใงใใ
MSYS2็จใใใฑใผใธ
pacmanใใใคใณในใใผใซใงใใใใใฑใผใธใ็จๆใใพใใใ
็ฑ่ก๏ผใขใปใณใใฉๅ ฅ้ใฎใตใณใใซ
ๆฌกใฎใตใคใใงๅ ฌ้ใใใฆใใพใใ
- ็ฑ่ก๏ผใขใปใณใใฉๅ ฅ้ ใตใใผใใใผใธ โ ใขใปใณใใฉๅบๅ็ฐๅข
Makefileใใไธ่ฆใชใขใผใญใใฏใใฃใใณใกใณใใขใฆใใใฆใPREFIXใไฟฎๆญฃใใใฐใจใใใใไฝฟใใพใใ
ใใใ
ใใใง็ดนไปใใฆใใๆนๆณใงไฝใฃใๅ จใขใผใญใใฏใใฃใซๅฏพๅฟใใใใใใงใใ
ๅทฎๅใฏๆฌกใฎ้ใใงใใ
- ้คๅป: m6811-elf, strongarm-elf, xscale-elf
- ่ฟฝๅ : bfin-elf, m32c-elf, microblaze-elf, moxie-elf, rx-elf, score-elf, sparc64-elf, spu-elf
ๅ ทไฝ็ใซใฏๆฌกใๅ็ งใใฆใใ ใใใ
ARC
64ใใใ็ฐๅขใงใฏarc-elfใใจใฉใผใซใชใใใใใณใกใณใใขใฆใใใๆนใ่ฏใใงใใใใ
---- compile (arc-elf.c => arc-elf.s)
/usr/bin/arc-elf-gcc \
-fno-builtin -nostdinc -nostdlib -static -O -Wall -g \
-fverbose-asm -fomit-frame-pointer -o arc-elf.s -S arc-elf.c
arc-elf.c: ้ขๆฐ โreturn_short_upperโ ๅ
:
arc-elf.c:49:1: ใจใฉใผ: ่ช่ญใงใใชใๅฝไปค:
(insn 5 4 6 3 (set (reg:HI 68 [ <retval> ])
(const_int -18 [0xffffffffffffffee])) arc-elf.c:48 -1
(nil))
arc-elf.c:49:1: ใณใณใใคใฉๅ
้จใจใฉใผ: extract_insn ๅ
ใไฝ็ฝฎ recog.c:2109
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
gccๅ ใฎไธญ้่จ่ชRTLใฎLISP้ขจ่กจ่จใ่ฆใใฆใใพใใ
Comments
Let's comment your feelings that are more than good