gas: support .half, .word and .dword directives in eBPF
authorJose E. Marchesi <jose.marchesi@oracle.com>
Wed, 17 Jul 2019 20:57:23 +0000 (22:57 +0200)
committerJose E. Marchesi <jose.marchesi@oracle.com>
Wed, 17 Jul 2019 20:57:23 +0000 (22:57 +0200)
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.

gas/ChangeLog
gas/config/tc-bpf.c
gas/doc/c-bpf.texi
gas/testsuite/gas/bpf/bpf.exp
gas/testsuite/gas/bpf/data-be.d [new file with mode: 0644]
gas/testsuite/gas/bpf/data.d [new file with mode: 0644]
gas/testsuite/gas/bpf/data.s [new file with mode: 0644]

index 0376e0d361ab6eda6679fd71ec1cef393b1ace77..5d3bb61731c86bd4363e7bb8328ff756a0a9e353 100644 (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,
index 9318c3563be8813b279c8b72ee3ee74b21c50b19..3ebe81f3652f71b1cf5cd9b15c7822c6bf63ed58 100644 (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 }
 };
 
index 13f41441caa9137ca7d300563f8922a25e28283e..9496359f242bb874dcf9987e767d8ab0ec9cfcba 100644 (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
 
index e228fd4d1b87f0b52dd29b635a32282be1a444f7..f0b24ea034abdccc071baf9ff33386de5e3700d8 100644 (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
 }
diff --git a/gas/testsuite/gas/bpf/data-be.d b/gas/testsuite/gas/bpf/data-be.d
new file mode 100644 (file)
index 0000000..010f08f
--- /dev/null
@@ -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 .*
diff --git a/gas/testsuite/gas/bpf/data.d b/gas/testsuite/gas/bpf/data.d
new file mode 100644 (file)
index 0000000..6824e8b
--- /dev/null
@@ -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 .*
diff --git a/gas/testsuite/gas/bpf/data.s b/gas/testsuite/gas/bpf/data.s
new file mode 100644 (file)
index 0000000..b6e5528
--- /dev/null
@@ -0,0 +1,4 @@
+        .section .data
+        .half 0xf00f
+        .word 0xdeadbeef
+        .dword 0x1122334455667788