gas: support .half, .word and .dword directives in eBPF

This little patch adds support to the eBPF port of GAS for a few data
directives.  The names for the directives have been chosen to be
coherent with the suffixes used in eBPF instructions: b, h, w and dw
for 8, 16, 32 and 64-bit values respectively.

Documentation and tests included.
Tested in a x86_64 host.

gas/ChangeLog:

2019-07-17  Jose E. Marchesi  <jose.marchesi@oracle.com>

	* config/tc-bpf.c (md_pseudo_table): .half, .word and .dword.
	* testsuite/gas/bpf/data.s: New file.
	* testsuite/gas/bpf/data.d: Likewise.
	* testsuite/gas/bpf/data-be.d: Likewise.
	* testsuite/gas/bpf/bpf.exp: Run data and data-be.
	* doc/c-bpf.texi (BPF Directives): New section.
This commit is contained in:
Jose E. Marchesi 2019-07-17 22:57:23 +02:00
parent d8f68fcb93
commit e0b989a6d7
7 changed files with 58 additions and 0 deletions

View File

@ -1,3 +1,12 @@
2019-07-17 Jose E. Marchesi <jose.marchesi@oracle.com>
* config/tc-bpf.c (md_pseudo_table): .half, .word and .dword.
* testsuite/gas/bpf/data.s: New file.
* testsuite/gas/bpf/data.d: Likewise.
* testsuite/gas/bpf/data-be.d: Likewise.
* testsuite/gas/bpf/bpf.exp: Run data and data-be.
* doc/c-bpf.texi (BPF Directives): New section.
2019-07-17 Jan Beulich <jbeulich@suse.com>
* config/tc-i386.c (check_hle, md_assemble, check_VecOperands,

View File

@ -38,6 +38,9 @@ const char FLT_CHARS[] = "fFdD";
/* The target specific pseudo-ops which we support. */
const pseudo_typeS md_pseudo_table[] =
{
{ "half", cons, 2 },
{ "word", cons, 4 },
{ "dword", cons, 8 },
{ NULL, NULL, 0 }
};

View File

@ -17,6 +17,7 @@
@menu
* BPF Options:: Options
* BPF Syntax:: Syntax
* BPF Directives:: Machine Directives
* BPF Opcodes:: Opcodes
@end menu
@ -104,6 +105,28 @@ descriptor @samp{2} in register @samp{r1} we would do:
lddw %r1, %map_fd(2)
@end smallexample
@node BPF Directives
@section Machine Directives
@cindex machine directives, BPF
The BPF version of @code{@value{AS}} supports the following additional
machine directives:
@table @code
@cindex @code{half} directive, BPF
@item .word
The @code{.half} directive produces a 16 bit value.
@cindex @code{word} directive, BPF
@item .word
The @code{.word} directive produces a 32 bit value.
@cindex @code{dword} directive, BPF
@item .dword
The @code{.dword} directive produces a 64 bit value.
@end table
@node BPF Opcodes
@section Opcodes

View File

@ -26,6 +26,7 @@ if {[istarget bpf*-*-*]} {
run_dump_test call
run_dump_test exit
run_dump_test atomic
run_dump_test data
run_dump_test lddw-be
run_dump_test alu-be
@ -35,4 +36,5 @@ if {[istarget bpf*-*-*]} {
run_dump_test call-be
run_dump_test exit-be
run_dump_test atomic-be
run_dump_test data-be
}

View File

@ -0,0 +1,9 @@
#as: --EB
#source: data.s
#objdump: -s -j .data
#name: eBPF data directives, big endian
.*: +file format .*bpf.*
Contents of section \.data:
0000 f00fdead beef1122 33445566 7788 .*

View File

@ -0,0 +1,8 @@
#as: --EL
#objdump: -s -j .data
#name: eBPF data directives
.*: +file format .*bpf.*
Contents of section \.data:
0000 0ff0efbe adde8877 66554433 2211 .*

View File

@ -0,0 +1,4 @@
.section .data
.half 0xf00f
.word 0xdeadbeef
.dword 0x1122334455667788