Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

51
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ๆœ€ไฝŽ้™ใฎใ‚ฏใƒญใ‚นใ‚ณใƒณใƒ‘ใ‚คใƒฉใฎไฝœใ‚Šๆ–น

51
Last updated at Posted at 2015-01-30

่ˆˆๅ‘ณใ‚’ๆŒใฃใŸใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใฎๆฉŸๆขฐ่ชžใ‚’็œบใ‚ใ‚‹ใŸใ‚ใฎใ€ๆœ€ไฝŽ้™ใฎใ‚ฏใƒญใ‚นใ‚ณใƒณใƒ‘ใ‚คใƒฉใฎไฝœใ‚Šๆ–นใ‚’่ชฌๆ˜Žใ—ใพใ™ใ€‚ๅ…จ้ƒจๅ…ฅใ‚Šbinutilsใ‚‚็ดนไป‹ใ—ใพใ™ใ€‚

โ€ป ๅฎŸ็”จ็š„ใช้–‹็™บใฏ็›ฎ็š„ใจใ—ใฆใ„ใพใ›ใ‚“ใ€‚ๆŒ‡ๅฎšใ™ใ‚‹ใ‚ชใƒ—ใ‚ทใƒงใƒณใ‚‚ๆœ€ๅฐ้™ใซๆŠ‘ใˆใฆใ„ใพใ™ใ€‚

็†ฑ่ก€๏ผใ‚ขใ‚ปใƒณใƒ–ใƒฉๅ…ฅ้–€ใฎๆœ€ๅˆใซ็™ปๅ ดใ™ใ‚‹PowerPCใ‚’ไพ‹ใซ่ชฌๆ˜Žใ—ใพใ™ใŒใ€gccใงใ‚ตใƒใƒผใƒˆใ•ใ‚Œใฆใ„ใ‚‹ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใงใ‚ใ‚ŒใฐๅŒใ˜ๆ–นๆณ•ใŒไฝฟใˆใพใ™ใ€‚

โ€ป ๅŒๆ›ธใ‚ˆใ‚Šใ‚‚ๆ–ฐใ—ใ„gccใ‚’ๆ‰ฑใ†ใŸใ‚ใ€ใ„ใใคใ‹ๆ–ฐใ—ใ„ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใŒไฝฟใˆใพใ™ใ€‚ๅทฎๅˆ†ใฏๆœ€ๅพŒใฎๆ–นใซใพใจใ‚ใฆใ„ใพใ™ใ€‚

ใƒ“ใƒซใƒ‰ๅฏพ่ฑก

  1. binutils: ใ‚ขใ‚ปใƒณใƒ–ใƒฉใ€้€†ใ‚ขใ‚ปใƒณใƒ–ใƒฉใ€ใƒชใƒณใ‚ซใชใฉ
  2. 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

ใใฎๅ ดๅˆใฏๆฌกใฎๆ–นๆณ•ใงๅฏพๅ‡ฆใ—ใฆใใ ใ•ใ„ใ€‚

  1. MSYS2ใฎใ‚ฟใƒผใƒŸใƒŠใƒซใ‚’ใ™ในใฆ้–‰ใ˜ใพใ™ใ€‚
  2. MSYS2ใŒใ‚คใƒณใ‚นใƒˆใƒผใƒซใ•ใ‚ŒใŸใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใ‚ใ‚‹autorebase.batใ‚’ๅฎŸ่กŒใ—ใพใ™ใ€‚
  3. ใ‚ณใƒžใƒณใƒ‰ใƒ—ใƒญใƒณใƒ—ใƒˆใฎใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใŒๅ‡บใฆใ€ๆ•ฐๅˆ†ๅพŒใซ่‡ชๅ‹•็š„ใซ้–‰ใ˜ใพใ™ใ€‚ๆ–‡ๅญ—ใฏไฝ•ใ‚‚่กจ็คบใ•ใ‚Œใพใ›ใ‚“ใ€‚
  4. 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 ใชใฉใซ่จ˜่ผ‰ใ—ใฆใŠใใจ่‰ฏใ„ใงใ—ใ‚‡ใ†ใ€‚

ใƒ†ใ‚นใƒˆ

ใฉใ‚“ใชใ‚ณใƒผใƒ‰ใŒ็”Ÿๆˆใ•ใ‚Œใ‚‹ใฎใ‹ใƒ†ใ‚นใƒˆใ—ใพใ™ใ€‚

โ€ป ใƒ“ใƒซใƒ‰ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‹ใ‚‰ๅ‡บใฆใ€้ฉๅฝ“ใชใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚’ไฝœใฃใฆใใ“ใงไฝœๆฅญใ—ใฆใใ ใ•ใ„ใ€‚

add.c
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

ใƒชใƒณใ‚ฏใ‚’ๅˆ†ใ‘ใชใ„ใจใ‚จใƒฉใƒผใซใชใ‚Šใพใ™ใ€‚

NG
$ 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 ใง็ต‚ไบ†ใ—ใพใ—ใŸ
OK
$ ia64-elf-gcc -c add.c
$ ia64-elf-ld add.o
ia64-elf-ld: ่ญฆๅ‘Š: ใ‚จใƒณใƒˆใƒชใ‚ทใƒณใƒœใƒซ _start ใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใจใ—ใฆ 40000000000000b0 ใ‚’ไฝฟ็”จใ—ใพใ™

SH64

ใƒชใƒณใ‚ฏใ‚’ๅˆ†ใ‘ใ‚‹ใจใ‚จใƒฉใƒผใซใชใ‚Šใพใ™ใ€‚

OK
$ sh64-elf-gcc -nostdlib add.c
/opt/cross/lib/gcc/sh64-elf/4.6.4/../../../../sh64-elf/bin/ld: ่ญฆๅ‘Š: ใ‚จใƒณใƒˆใƒชใ‚ทใƒณใƒœใƒซ start ใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใจใ—ใฆ 0000000000001000 ใ‚’ไฝฟ็”จใ—ใพใ™
NG
$ 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: ๆœ€็ต‚ใƒชใƒณใ‚ฏใซๅคฑๆ•—ใ—ใพใ—ใŸ: ไธๆญฃใชๅ€คใงใ™

ใ‚ชใƒ—ใ‚ทใƒงใƒณใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚

OK
$ sh64-elf-gcc -c add.c
$ sh64-elf-ld -mshelf32 add.o
sh64-elf-ld: ่ญฆๅ‘Š: ใ‚จใƒณใƒˆใƒชใ‚ทใƒณใƒœใƒซ start ใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใจใ—ใฆ 0000000000001000 ใ‚’ไฝฟ็”จใ—ใพใ™

ใƒ†ใ‚นใƒˆใ‚นใ‚ฏใƒชใƒ—ใƒˆ

ๅ‚่€ƒใพใงใซใ‚ณใƒณใƒ‘ใ‚คใƒซใƒปใƒชใƒณใ‚ฏใƒป้€†ใ‚ขใ‚ปใƒณใƒ–ใƒซใ‚’ไธ€็™บใงใ‚„ใ‚‹ใ‚นใ‚ฏใƒชใƒ—ใƒˆใฎไพ‹ใ‚’็คบใ—ใพใ™ใ€‚

โ€ป ๅ‰่ฟฐใฎ็†็”ฑใงSH64ใซใฏไฝฟใˆใพใ›ใ‚“ใ€‚

/opt/cross/bin/testgcc
# !/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้ขจ่กจ่จ˜ใŒ่ฆ‹ใˆใฆใ„ใพใ™ใ€‚

51
49
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

@7shi's pickup articles

Today's trending articles

ใŠ้กŒใฏไธๅ•๏ผQiita Tech Festa 2026ใง่จ˜ไบ‹ๆŠ•็จฟ๏ผ
sei_official

ๆ”ปๆ’ƒ่€…ใฏใƒ–ใƒฉใ‚ฆใ‚ถใ‚’้–‹ใ„ใฆๆœ€ๅˆใฎ5ๅˆ†ใงไฝ•ใ‚’่ฆ‹ใ‚‹ใฎใ‹ใ€œใƒใ‚ฐใƒใ‚ฆใƒณใƒ†ใ‚ฃใง่ชๅฏไธๅ‚™๏ผˆP1/P2๏ผ‰ใ‚’ๅ ฑๅ‘Šใ—ใฆใใŸ่ฆ–็‚นใงๆ›ธใใ€ใƒ•ใƒญใƒณใƒˆใ‚จใƒณใƒ‰ใฎๅฎŸ่ฃ…้˜ฒๅพกใ‚ฌใ‚คใƒ‰ใ€œ

Linked from these articles

Comments

No comments

Let's comment your feelings that are more than good

Being held Article posting campaign

51
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address