forked from Imagelibrary/binutils-gdb
gas: support for the BPF pseudo-c assembly syntax
This patch adds support to the GNU assembler for an alternative assembly syntax used in BPF. This syntax is C-like and very unconventional for an assembly language, but it is generated by clang/llvm and is also used in inline asm templates in kernel code, so we ought to support it. After this patch, the assembler is able to parse instructions in both supported syntax: the normal assembly-like syntax and the pseudo-C syntax. Instruction formats can be mixed in the source program: the assembler recognizes the right syntax to use. gas/ChangeLog: 2023-04-20 Guillermo E. Martinez <guillermo.e.martinez@oracle.com> PR gas/29728 * config/tc-bpf.h (TC_EQUAL_IN_INSN): Define. * config/tc-bpf.c (LEX_IS_SYMBOL_COMPONENT): Define. (LEX_IS_WHITESPACE): Likewise. (LEX_IS_NEWLINE): Likewise. (LEX_IS_ARITHM_OP): Likewise. (LEX_IS_STAR): Likewise. (LEX_IS_CLSE_BR): Likewise. (LEX_IS_OPEN_BR): Likewise. (LEX_IS_EQUAL): Likewise. (LEX_IS_EXCLA): Likewise. (ST_EOI): Likewise. (MAX_TOKEN_SZ): Likewise. (init_pseudoc_lex): New function. (md_begin): Call init_pseudoc_lex. (valid_expr): New function. (build_bpf_non_generic_load): Likewise. (build_bpf_atomic_insn): Likewise. (build_bpf_jmp_insn): Likewise. (build_bpf_arithm_insn): Likewise. (build_bpf_endianness): Likewise. (build_bpf_load_store_insn): Likewise. (look_for_reserved_word): Likewise. (is_register): Likewise. (is_cast): Likewise. (get_token): Likewise. (bpf_pseudoc_to_normal_syntax): Likewise. (md_assemble): Try pseudo-C syntax if an instruction cannot be parsed.
This commit is contained in:
committed by
Jose E. Marchesi
parent
873a1ec405
commit
ff5a51b377
@@ -1,3 +1,35 @@
|
||||
2023-04-20 Guillermo E. Martinez <guillermo.e.martinez@oracle.com>
|
||||
|
||||
PR gas/29728
|
||||
* config/tc-bpf.h (TC_EQUAL_IN_INSN): Define.
|
||||
* config/tc-bpf.c (LEX_IS_SYMBOL_COMPONENT): Define.
|
||||
(LEX_IS_WHITESPACE): Likewise.
|
||||
(LEX_IS_NEWLINE): Likewise.
|
||||
(LEX_IS_ARITHM_OP): Likewise.
|
||||
(LEX_IS_STAR): Likewise.
|
||||
(LEX_IS_CLSE_BR): Likewise.
|
||||
(LEX_IS_OPEN_BR): Likewise.
|
||||
(LEX_IS_EQUAL): Likewise.
|
||||
(LEX_IS_EXCLA): Likewise.
|
||||
(ST_EOI): Likewise.
|
||||
(MAX_TOKEN_SZ): Likewise.
|
||||
(init_pseudoc_lex): New function.
|
||||
(md_begin): Call init_pseudoc_lex.
|
||||
(valid_expr): New function.
|
||||
(build_bpf_non_generic_load): Likewise.
|
||||
(build_bpf_atomic_insn): Likewise.
|
||||
(build_bpf_jmp_insn): Likewise.
|
||||
(build_bpf_arithm_insn): Likewise.
|
||||
(build_bpf_endianness): Likewise.
|
||||
(build_bpf_load_store_insn): Likewise.
|
||||
(look_for_reserved_word): Likewise.
|
||||
(is_register): Likewise.
|
||||
(is_cast): Likewise.
|
||||
(get_token): Likewise.
|
||||
(bpf_pseudoc_to_normal_syntax): Likewise.
|
||||
(md_assemble): Try pseudo-C syntax if an instruction cannot be
|
||||
parsed.
|
||||
|
||||
2023-04-18 mengqinggang <mengqinggang@loongson.cn>
|
||||
|
||||
* config/tc-loongarch.c (loongarch_fix_adjustable): Symbols with
|
||||
|
||||
1521
gas/config/tc-bpf.c
1521
gas/config/tc-bpf.c
File diff suppressed because it is too large
Load Diff
@@ -51,3 +51,5 @@
|
||||
/* The Linux kernel verifier expects NOPs to be encoded in this way;
|
||||
a jump to offset 0 means jump to the next instruction. */
|
||||
#define md_single_noop_insn "ja 0"
|
||||
|
||||
#define TC_EQUAL_IN_INSN(c, s) 1
|
||||
|
||||
Reference in New Issue
Block a user