aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-bpf.c44
2 files changed, 49 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index fa19030..e33802b 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2019-07-19 Jose E. Marchesi <jose.marchesi@oracle.com>
+
+ * config/tc-bpf.c (pe_lcomm_internal): Adapted from tc-i386.c.
+ (pe_lcomm): Likewise.
+ (md_pseudo_table): Use pe_lcomm to implement .lcomm.
+
2019-07-19 Richard Sandiford <richard.sandiford@arm.com>
* doc/c-aarch64.texi: Remame the +bitperm extension to +sve2-bitperm.
diff --git a/gas/config/tc-bpf.c b/gas/config/tc-bpf.c
index 4b92b77..d2da2fe 100644
--- a/gas/config/tc-bpf.c
+++ b/gas/config/tc-bpf.c
@@ -35,16 +35,58 @@ const char line_separator_chars[] = "`";
const char EXP_CHARS[] = "eE";
const char FLT_CHARS[] = "fFdD";
+/* Like s_lcomm_internal in gas/read.c but the alignment string
+ is allowed to be optional. */
+
+static symbolS *
+pe_lcomm_internal (int needs_align, symbolS *symbolP, addressT size)
+{
+ addressT align = 0;
+
+ SKIP_WHITESPACE ();
+
+ if (needs_align
+ && *input_line_pointer == ',')
+ {
+ align = parse_align (needs_align - 1);
+
+ if (align == (addressT) -1)
+ return NULL;
+ }
+ else
+ {
+ if (size >= 8)
+ align = 3;
+ else if (size >= 4)
+ align = 2;
+ else if (size >= 2)
+ align = 1;
+ else
+ align = 0;
+ }
+
+ bss_alloc (symbolP, size, align);
+ return symbolP;
+}
+
+static void
+pe_lcomm (int needs_align)
+{
+ s_comm_internal (needs_align * 2, pe_lcomm_internal);
+}
+
/* The target specific pseudo-ops which we support. */
const pseudo_typeS md_pseudo_table[] =
{
{ "half", cons, 2 },
{ "word", cons, 4 },
{ "dword", cons, 8 },
- { "lcomm", s_lcomm, 1 },
+ { "lcomm", pe_lcomm, 1 },
{ NULL, NULL, 0 }
};
+
+
/* ISA handling. */
static CGEN_BITSET *bpf_isa;