我找到了解决方案。所需的指令是 .balgin。
.balign[wl] abs-expr, abs-expr, abs-expr
将位置计数器(在当前小节中)填充到特定的
存储边界。第一个表达式(必须是绝对的)是
以字节为单位的对齐请求。例如 `.balign 8' 推进
位置计数器,直到它是 8 的倍数。如果位置计数器
已经是 8 的倍数,无需更改。
第二个表达式(也是绝对的)给出的填充值为
存储在填充字节中。它(和逗号)可以省略。如果它
被省略,填充字节通常为零。然而,在一些
系统,如果该部分被标记为包含代码和填充
value 被省略,空格由 no-op 指令填充。
第三个表达式也是绝对的,也是可选的。如果是
目前,它是应该跳过的最大字节数
这个对齐指令。如果进行对齐需要
跳过比指定最大值更多的字节,那么对齐是
根本没有做。您可以省略填充值(第二个参数)
完全通过在所需对齐后使用两个逗号来完成;这
如果您希望对齐填充无操作,这可能会很有用
适当时的说明。
.balignw 和 .balignl 指令是 .balign 的变体
指示。 .balignw 指令将填充模式视为两个
字节字值。 .balignl 指令将填充模式视为
四字节长字值。例如,.balignw 4,0x368d 将对齐到
4的倍数。如果跳过两个字节,它们将被填充
值 0x368d(字节的确切位置取决于
处理器的字节序)。如果跳过 1 或 3 个字节,则填充值
未定义。
引用GAS manual
以下工作除外:
_vec_tbl_s:
_vec_tbl_cur_sp0:
_vec_tbl_cur_sp0_syn:
mov x0, #0x0
bl _vec_handler_syn
eret
.balign 128
_vec_tbl_cur_sp0_irq:
mov x0, #0x0
bl _vec_handler_irq
eret
.balign 128
_vec_tbl_cur_sp0_fiq:
mov x0, #0x0
bl _vec_handler_fiq
eret
.balign 128
_vec_tbl_cur_sp0_err:
mov x0, #0x0
bl _vec_handler_err
eret
.balign 128
反汇编的二进制文件:
$ aarch64-none-elf-objdump -d vector.o
vector.o: file format elf64-littleaarch64
Disassembly of section .text:
0000000000000000 <_vec_tbl_cur_sp0>:
0: d2800000 mov x0, #0x0 // #0
4: 940001ff bl 800 <_vec_handler_syn>
8: d69f03e0 eret
c: d503201f nop
10: d503201f nop
14: d503201f nop
18: d503201f nop
1c: d503201f nop
20: d503201f nop
24: d503201f nop
28: d503201f nop
2c: d503201f nop
30: d503201f nop
34: d503201f nop
38: d503201f nop
3c: d503201f nop
40: d503201f nop
44: d503201f nop
48: d503201f nop
4c: d503201f nop
50: d503201f nop
54: d503201f nop
58: d503201f nop
5c: d503201f nop
60: d503201f nop
64: d503201f nop
68: d503201f nop
6c: d503201f nop
70: d503201f nop
74: d503201f nop
78: d503201f nop
7c: d503201f nop
0000000000000080 <_vec_tbl_cur_sp0_irq>:
80: d2800000 mov x0, #0x0 // #0
84: 940001e1 bl 808 <_vec_handler_irq>
88: d69f03e0 eret
8c: d503201f nop
90: d503201f nop
94: d503201f nop
98: d503201f nop
9c: d503201f nop
a0: d503201f nop
a4: d503201f nop
a8: d503201f nop
ac: d503201f nop
b0: d503201f nop
b4: d503201f nop
b8: d503201f nop
bc: d503201f nop
c0: d503201f nop
c4: d503201f nop
c8: d503201f nop
cc: d503201f nop
d0: d503201f nop
d4: d503201f nop
d8: d503201f nop
dc: d503201f nop
e0: d503201f nop
e4: d503201f nop
e8: d503201f nop
ec: d503201f nop
f0: d503201f nop
f4: d503201f nop
f8: d503201f nop
fc: d503201f nop
0000000000000100 <_vec_tbl_cur_sp0_fiq>:
100: d2800000 mov x0, #0x0 // #0
104: 940001c3 bl 810 <_vec_handler_fiq>
108: d69f03e0 eret
10c: d503201f nop
110: d503201f nop
114: d503201f nop
118: d503201f nop
11c: d503201f nop
120: d503201f nop
124: d503201f nop
128: d503201f nop
12c: d503201f nop
130: d503201f nop
134: d503201f nop
138: d503201f nop
13c: d503201f nop
140: d503201f nop
144: d503201f nop
148: d503201f nop
14c: d503201f nop
150: d503201f nop
154: d503201f nop
158: d503201f nop
15c: d503201f nop
160: d503201f nop
164: d503201f nop
168: d503201f nop
16c: d503201f nop
170: d503201f nop
174: d503201f nop
178: d503201f nop
17c: d503201f nop
0000000000000180 <_vec_tbl_cur_sp0_err>:
180: d2800000 mov x0, #0x0 // #0
184: 940001a5 bl 818 <_vec_handler_err>
188: d69f03e0 eret
18c: d503201f nop
190: d503201f nop
194: d503201f nop
198: d503201f nop
19c: d503201f nop
1a0: d503201f nop
1a4: d503201f nop
1a8: d503201f nop
1ac: d503201f nop
1b0: d503201f nop
1b4: d503201f nop
1b8: d503201f nop
1bc: d503201f nop
1c0: d503201f nop
1c4: d503201f nop
1c8: d503201f nop
1cc: d503201f nop
1d0: d503201f nop
1d4: d503201f nop
1d8: d503201f nop
1dc: d503201f nop
1e0: d503201f nop
1e4: d503201f nop
1e8: d503201f nop
1ec: d503201f nop
1f0: d503201f nop
1f4: d503201f nop
1f8: d503201f nop
1fc: d503201f nop
抱歉,问得太快了。