Skip to content

Commit 45336fa

Browse files
committed
riscv64-unknown-elf-gcc => riscv64-linux-gnu-gcc
1 parent f8efd37 commit 45336fa

File tree

4 files changed

+17
-15
lines changed

4 files changed

+17
-15
lines changed

book/雜項/精五組語除錯器介紹.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
要想在除錯時保留原本組語檔案的資訊(如行號、原偽指令),需要在編譯時加上額外參數 `-g`
1313

1414
```sh
15-
riscv64-unknown-elf-gcc -g 範例.音界
15+
riscv64-linux-gnu-gcc -static -g 範例.音界.S
1616
```
1717

1818
若一份精五真言檔已經以交叉編譯器編譯出執行檔 `a.out`,可以用
@@ -41,7 +41,7 @@ target remote localhost:1234
4141
就能連上 qemu 的 gdb 伺服器,開始除錯了。若對 gdb 不熟悉,可以在網路上搜尋相關介紹。
4242

4343

44-
`gdb-multiarch` 可以自動偵測架構,用起來比較方便,若道友日常使用的系統中無此程式,需要找出交叉編譯工具鏈裡的 gdb ,可能是 `riscv64-unknown-elf-gdb`
44+
`gdb-multiarch` 可以自動偵測架構,用起來比較方便,若道友日常使用的系統中無此程式,需要找出交叉編譯工具鏈裡的 gdb ,可能是 `riscv64-linux-gnu-gdb`
4545

4646
## 圖形介面:gdbgui
4747
[gdbgui](https://www.gdbgui.com/) 是一個用 Web 技術製作的 gdb 圖形介面,它良好包裝了 gdb 客戶端的互動式指令,十分簡單易用。

book/零.一版/精五真言生成.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@ _start:
2727

2828
同樣交叉編譯並以 qemu 模擬
2929
```
30-
riscv64-unknown-elf-gcc -nostdlib 數據段.S # 編譯後應得 a.out 檔案
31-
qemu-riscv64 a.out # qemu-riscv64 並非單單模擬裸機,還實作了部分系統呼叫
32-
echo $? # 可以看到上一個程序的結束碼是 50
30+
riscv64-linux-gnu-gcc -nostdlib -static 數據段.S
31+
# 編譯後應得 a.out 檔案
32+
33+
qemu-riscv64 a.out # qemu-riscv64 並非模擬裸機,它實作了部分系統呼叫
34+
echo $? # 可以看到上一個程序的結束碼是 50
3335
```
3436

3537
`數據段.S` 首先在數據段 `.section .data``.word` 開闢 32 位元的空間,前方的``是一個標籤,在後續程式段的真言中會被代換為該空間的位址。
@@ -119,7 +121,7 @@ add t0, t1, t1
119121
[11] # 遇運算 +,計算 6 + 5 = 11,將結果壓入棧
120122
```
121123

122-
把所有運算都存到棧裡是很慢的,畢竟一次記憶體存取可能比是存取暫存器要慢上幾十乃至上百倍,即使快取命中也要好幾個 cycle 才拿得回來,但堆疊機實現起來容易。就先暫且把暫存器分配問題丟到一邊,來看看在精五真言中如何模擬堆疊機。
124+
把所有運算都存到棧裡會很慢,畢竟存取記憶體比存取暫存器要慢上幾十乃至上百倍,即使快取命中也要好幾個 cycle 才拿得回來。不過,堆疊機實現起來容易。咱就暫且把暫存器分配問題丟到一邊,來看看在精五真言中如何模擬堆疊機。
123125

124126
## 精五真言棧操作
125127

@@ -216,7 +218,7 @@ fn 生成變數標籤(&mut self) -> io::Result<()> {
216218

217219
### (代碼段)運算
218220

219-
代碼段就相對複雜許多,原理已在前文解釋,道友們可閱讀註解來幫助理解。
221+
代碼段相對複雜許多,原理已在前文解釋,道友們可閱讀註解來幫助理解。
220222

221223
這裡並沒有真的先轉換到後序表示法再生成代碼,而是對算術樹做後序遍歷的同時就把代碼給生成了。
222224

@@ -310,6 +312,6 @@ fn 二元運算(真言檔: &mut File, 運算子: &O運算子) -> io::Result<()
310312
### 組譯執行
311313

312314
```
313-
riscv64-unknown-elf-gcc {{target}}.S # 不加 -nostdlib 參數
315+
riscv64-linux-gnu-gcc -static {{target}}.S # 不加 -nostdlib 參數
314316
qemu-riscv64 a.out
315317
```

book/零.一版/編譯目標:精五門(RISC-V)真言極簡子集.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
以下是 ubuntu 的安裝指令。
1818
```
19-
sudo apt install gcc-riscv64-unknown-elf # 安裝編譯目標為 riscv64 的工具鏈
19+
sudo apt install gcc-riscv64-linux-gnu # 安裝編譯目標為 riscv64 的工具鏈
2020
sudo apt install qemu-user # 安裝可執行 linux 執行檔的 qemu
2121
```
2222

@@ -37,8 +37,8 @@ _start:
3737

3838
### 編譯、執行
3939
```
40-
riscv64-unknown-elf-gcc -nostdlib 100.S # 編譯後應得 a.out 檔案
41-
qemu-riscv64 a.out # qemu-riscv64 並非單單模擬裸機,還實作了部分系統呼叫
40+
riscv64-linux-gnu-gcc -nostdlib -static 100.S # 編譯後應得 a.out 檔案
41+
qemu-riscv64 a.out # qemu-riscv64 並非單單模擬裸機,還實作了部分系統呼叫
4242
echo $? # 可以看到上一個程序的結束碼是 100
4343
```
4444

@@ -93,7 +93,7 @@ _start:
9393
add t0, t0, t1 # t0 = t0 + t1
9494
9595
li t1, 4 # t1 = 4
96-
mul t0, t0, t1 # t0 = t0 * t1
96+
mul t0, t0, t1 # t0 = t0 * t1
9797
addi t0, t0, 1 # t0 = t0 + 1
9898
9999
li a7, 93 # RISCV Linux 中 exit 系統呼叫編號是 93

book/零.二版/精五真言生成(二)術的施展.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ int64_t print_int(int64_t number) {
2727
2828
執行以下指令來編譯該檔案
2929
```sh
30-
riscv64-unknown-elf-gcc -c 曰.c -o 曰.o
31-
riscv64-unknown-elf-objcopy --redefine-sym print_int=曰 曰.o
30+
riscv64-linux-gnu-gcc -c 曰.c -o 曰.o
31+
riscv64-linux-gnu-objcopy --redefine-sym print_int=曰 曰.o
3232
```
3333

3434
C 語言不支援非 ASCII 的字符,得先編譯出目的檔 `曰.o` 之後,再將其符號從 `print_int` 抽換成 ``
@@ -54,7 +54,7 @@ main:
5454

5555
用以下指令組譯 `施展.S` 並鏈結`曰.o`
5656
```
57-
riscv64-unknown-elf-gcc 施展.S 曰.o
57+
riscv64-linux-gnu-gcc -static 施展.S 曰.o
5858
```
5959
再以 qemu 執行生成的執行檔 `a.out`
6060

0 commit comments

Comments
 (0)