diff options
author | Matthew Wahab <matthew.wahab@arm.com> | 2015-06-02 12:30:38 +0100 |
---|---|---|
committer | Jiong Wang <jiong.wang@arm.com> | 2015-06-02 12:30:38 +0100 |
commit | ddfded2f7bba485d6c967b502337a72310f24913 (patch) | |
tree | df248162b8426a8e6d86559f1ac1cc4287cf4fea | |
parent | 1af1dd51db991700c0e66b35d777a44e6953bbd2 (diff) | |
download | gdb-ddfded2f7bba485d6c967b502337a72310f24913.zip gdb-ddfded2f7bba485d6c967b502337a72310f24913.tar.gz gdb-ddfded2f7bba485d6c967b502337a72310f24913.tar.bz2 |
[ARM] Add support for ARMv8.1 PAN extension
-rw-r--r-- | gas/ChangeLog | 10 | ||||
-rw-r--r-- | gas/config/tc-arm.c | 29 | ||||
-rw-r--r-- | gas/doc/c-arm.texi | 1 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 23 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/armv8-a+pan.d | 11 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/armv8-a+pan.s | 14 | ||||
-rw-r--r-- | include/opcode/ChangeLog | 5 | ||||
-rw-r--r-- | include/opcode/arm.h | 3 | ||||
-rw-r--r-- | opcodes/ChangeLog | 5 | ||||
-rw-r--r-- | opcodes/arm-dis.c | 5 |
10 files changed, 97 insertions, 9 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index aa7195e..eb3fcca 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,15 @@ 2015-06-02 Matthew Wahab <matthew.wahab@arm.com> + * config/tc-arm.c (arm_ext_pan): New. + (do_setpan): New, encode an ARM SETPAN instruction. + (do_t_setpan): New, encode a Thumb SETPAN instruction. + (insns): Add "setpan". + (arm_extensions): Add "pan". + * doc/c-arm.texi (ARM Options): Add "pan" to list of -mcpu processor + extensions. + +2015-06-02 Matthew Wahab <matthew.wahab@arm.com> + * config/tc-aarch64.c (aarch64_features): Add "rdma". * doc/c-aarch64.texi (AArch64 Extensions): Add "rdma". diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 683774f..ece5ebc 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -207,6 +207,7 @@ static const arm_feature_set arm_ext_sec = ARM_FEATURE_CORE_LOW (ARM_EXT_SEC); static const arm_feature_set arm_ext_os = ARM_FEATURE_CORE_LOW (ARM_EXT_OS); static const arm_feature_set arm_ext_adiv = ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV); static const arm_feature_set arm_ext_virt = ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT); +static const arm_feature_set arm_ext_pan = ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN); static const arm_feature_set arm_arch_any = ARM_ANY; static const arm_feature_set arm_arch_full = ARM_FEATURE (-1, -1, -1); @@ -9181,6 +9182,24 @@ do_swi (void) inst.reloc.pc_rel = 0; } +static void +do_setpan (void) +{ + constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_pan), + _("selected processor does not support SETPAN instruction")); + + inst.instruction |= ((inst.operands[0].imm & 1) << 9); +} + +static void +do_t_setpan (void) +{ + constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_pan), + _("selected processor does not support SETPAN instruction")); + + inst.instruction |= (inst.operands[0].imm << 3); +} + /* ARM V5E (El Segundo) signed-multiply-accumulate (argument parse) SMLAxy{cond} Rd,Rm,Rs,Rn SMLAWy{cond} Rd,Rm,Rs,Rn @@ -18884,6 +18903,13 @@ static const struct asm_opcode insns[] = TCE("hvc", 1400070, f7e08000, 1, (EXPi), hvc, t_hvc), TCE("eret", 160006e, f3de8f00, 0, (), noargs, noargs), +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_pan +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_pan + + TUF("setpan", 1100000, b610, 1, (I7), setpan, t_setpan), + #undef ARM_VARIANT #define ARM_VARIANT & arm_ext_v6t2 #undef THUMB_VARIANT @@ -24662,6 +24688,9 @@ static const struct arm_option_extension_value_table arm_extensions[] = ARM_EXT_OPT ("os", ARM_FEATURE_CORE_LOW (ARM_EXT_OS), ARM_FEATURE_CORE_LOW (ARM_EXT_OS), ARM_FEATURE_CORE_LOW (ARM_EXT_V6M)), + ARM_EXT_OPT ("pan", ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN), + ARM_FEATURE (ARM_EXT_V8, ARM_EXT2_PAN, 0), + ARM_FEATURE_CORE_LOW (ARM_EXT_V8)), ARM_EXT_OPT ("sec", ARM_FEATURE_CORE_LOW (ARM_EXT_SEC), ARM_FEATURE_CORE_LOW (ARM_EXT_SEC), ARM_FEATURE_CORE_LOW (ARM_EXT_V6K | ARM_EXT_V7A)), diff --git a/gas/doc/c-arm.texi b/gas/doc/c-arm.texi index d31ba02..85ff20d 100644 --- a/gas/doc/c-arm.texi +++ b/gas/doc/c-arm.texi @@ -179,6 +179,7 @@ architectures), @code{simd} (Advanced SIMD Extensions for v8-A architecture, implies @code{fp}), @code{virt} (Virtualization Extensions for v7-A architecture, implies @code{idiv}), +@code{pan} (Priviliged Access Never Extensions for v8-A architecture) and @code{xscale}. diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 2e45237..60d9126 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,20 +1,25 @@ 2015-06-02 Matthew Wahab <matthew.wahab@arm.com> - * rdma-directive.d: New. - * rdma.d: New. - * rdma.s: New. + * gas/arm/armv8-a+pan.d: New. + * gas/arm/armv8-a+pan.s: New. 2015-06-02 Matthew Wahab <matthew.wahab@arm.com> - * lor-directive.d: New. - * lor.d: New. - * lor.s: New + * gas/aarch64/rdma-directive.d: New. + * gas/aarch64/rdma.d: New. + * gas/aarch64/rdma.s: New. + +2015-06-02 Matthew Wahab <matthew.wahab@arm.com> + + * gas/aarch64/lor-directive.d: New. + * gas/aarch64/lor.d: New. + * gas/aarch64/lor.s: New 2015-06-01 Matthew Wahab <matthew.wahab@arm.com> - * pan-directive.d: New. - * pan.d: New. - * pan.s: New + * gas/aarch64/pan-directive.d: New. + * gas/aarch64/pan.d: New. + * gas/aarch64/pan.s: New 2015-06-01 Jiong Wang <jiong.wang@arm.com> diff --git a/gas/testsuite/gas/arm/armv8-a+pan.d b/gas/testsuite/gas/arm/armv8-a+pan.d new file mode 100644 index 0000000..2005260 --- /dev/null +++ b/gas/testsuite/gas/arm/armv8-a+pan.d @@ -0,0 +1,11 @@ +#name: Valid v8-a+pan +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format .*arm.* + + +Disassembly of section .text: +0[0-9a-f]+ <.*> f1100000 setpan #0 +0[0-9a-f]+ <.*> f1100200 setpan #1 +0[0-9a-f]+ <.*> b610 setpan #0 +0[0-9a-f]+ <.*> b618 setpan #1
\ No newline at end of file diff --git a/gas/testsuite/gas/arm/armv8-a+pan.s b/gas/testsuite/gas/arm/armv8-a+pan.s new file mode 100644 index 0000000..f2ed60b --- /dev/null +++ b/gas/testsuite/gas/arm/armv8-a+pan.s @@ -0,0 +1,14 @@ + .syntax unified + .arch armv8-a + .arch_extension pan + +A1: + .arm + setpan #0 + setpan #1 + +T1: + .thumb + setpan #0 + setpan #1 + diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog index 5b9eb5d..969ac70 100644 --- a/include/opcode/ChangeLog +++ b/include/opcode/ChangeLog @@ -1,5 +1,10 @@ 2015-06-02 Matthew Wahab <matthew.wahab@arm.com> + * arm.h (ARM_EXT2_PAN): New. + (ARM_FEATURE_CORE_HIGH): New. + +2015-06-02 Matthew Wahab <matthew.wahab@arm.com> + * arm.h (ARM_FEATURE_ALL): New. 2015-06-02 Matthew Wahab <matthew.wahab@arm.com> diff --git a/include/opcode/arm.h b/include/opcode/arm.h index cbe9e7d..9736943 100644 --- a/include/opcode/arm.h +++ b/include/opcode/arm.h @@ -57,6 +57,8 @@ state. */ #define ARM_EXT_VIRT 0x80000000 /* Virtualization extensions. */ +#define ARM_EXT2_PAN 0x00000001 /* PAN extension. */ + /* Co-processor space extensions. */ #define ARM_CEXT_XSCALE 0x00000001 /* Allow MIA etc. */ #define ARM_CEXT_MAVERICK 0x00000002 /* Use Cirrus/DSP coprocessor. */ @@ -321,5 +323,6 @@ typedef struct #define ARM_FEATURE_LOW(core, coproc) {{(core), 0}, (coproc)} #define ARM_FEATURE_CORE_LOW(core) {{(core), 0}, 0} +#define ARM_FEATURE_CORE_HIGH(core) {{0, (core)}, 0} #define ARM_FEATURE_COPROC(coproc) {{0, 0}, (coproc)} #define ARM_FEATURE(core1, core2, coproc) {{(core1), (core2)}, (coproc)} diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 05fc116..417e05d 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,5 +1,10 @@ 2015-06-02 Matthew Wahab <matthew.wahab@arm.com> + * arm-dis.c (arm_opcodes): Add "setpan". + (thumb_opcodes): Add "setpan". + +2015-06-02 Matthew Wahab <matthew.wahab@arm.com> + * arm-dis.c (select_arm_features): Rework to avoid used of redefined macros. diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c index 9c2665d..3e1315f 100644 --- a/opcodes/arm-dis.c +++ b/opcodes/arm-dis.c @@ -1602,6 +1602,10 @@ static const struct opcode32 arm_opcodes[] = {ARM_FEATURE_COPROC (CRC_EXT_ARMV8), 0xe1400240, 0xfff00ff0, "crc32cw\t%12-15R, %16-19R, %0-3R"}, + /* Privileged Access Never extension instructions. */ + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN), + 0xf1100000, 0xfffffdff, "setpan\t#%9-9d"}, + /* Virtualization Extension instructions. */ {ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT), 0x0160006e, 0x0fffffff, "eret%c"}, {ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT), 0x01400070, 0x0ff000f0, "hvc%c\t%e"}, @@ -2293,6 +2297,7 @@ static const struct opcode16 thumb_opcodes[] = /* ARM V8 instructions. */ {ARM_FEATURE_CORE_LOW (ARM_EXT_V8), 0xbf50, 0xffff, "sevl%c"}, {ARM_FEATURE_CORE_LOW (ARM_EXT_V8), 0xba80, 0xffc0, "hlt\t%0-5x"}, + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN), 0xb610, 0xfff7, "setpan\t#%3-3d"}, /* ARM V6K no-argument instructions. */ {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K), 0xbf00, 0xffff, "nop%c"}, |