aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Longo <matthieu.longo@arm.com>2024-12-02 09:46:21 +0000
committerMatthieu Longo <matthieu.longo@arm.com>2024-12-02 15:18:41 +0000
commit83c22eb44e4b9c594e7d7590d1a9f1a509ae7b0a (patch)
tree0c938c1e15e98473f71bfcc7e1ddff40e06bb3bf
parent82061f8093f1ddd5bb26708de6be220315460ff9 (diff)
downloadbinutils-83c22eb44e4b9c594e7d7590d1a9f1a509ae7b0a.zip
binutils-83c22eb44e4b9c594e7d7590d1a9f1a509ae7b0a.tar.gz
binutils-83c22eb44e4b9c594e7d7590d1a9f1a509ae7b0a.tar.bz2
aarch64: improve test coverage for combination of BTI options
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-1-a.d32
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-1-b.d32
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-1-c.d33
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-2-a-i.d17
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-2-a-ii.d8
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-2-a-iii.d17
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-2-a-iv.d12
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-2-a-v.d17
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-2-b.d12
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-2-c.d12
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-3.d4
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-4-a-i.d15
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-4-a-ii.d6
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-4-a-iii.d15
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-4-a-iv.d11
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-4-a-v.d15
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-4-b.d11
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-4-c.d11
-rw-r--r--ld/testsuite/ld-aarch64/protections/bti-plt-6.d6
19 files changed, 281 insertions, 5 deletions
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-1-a.d b/ld/testsuite/ld-aarch64/protections/bti-plt-1-a.d
new file mode 100644
index 0000000..2dc3864
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-1-a.d
@@ -0,0 +1,32 @@
+#name: Specifying '-z force-bti' along feature properties (BTI) forces the generation of BTI PLT (shared)
+#source: bti-plt-1.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64 -defsym __property_bti__=1
+#ld: -shared -z force-bti -T bti-plt.ld -L./tmpdir -lbti-plt-so
+#objdump: -dr -j .plt
+
+[^:]*: *file format elf64-.*aarch64
+
+Disassembly of section \.plt:
+
+[0-9]+ <\.plt>:
+.*: d503245f bti c
+.*: a9bf7bf0 stp x16, x30, \[sp, #-16\]!
+.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_>
+.*: f9400e11 ldr x17, \[x16, #24\]
+.*: 91006210 add x16, x16, #0x18
+.*: d61f0220 br x17
+.*: d503201f nop
+.*: d503201f nop
+
+[0-9]+ <.*>:
+.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_>
+.*: f9401211 ldr x17, \[x16, #32\]
+.*: 91008210 add x16, x16, #0x20
+.*: d61f0220 br x17
+
+[0-9]+ <.*>:
+.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_>
+.*: f9401611 ldr x17, \[x16, #40\]
+.*: 9100a210 add x16, x16, #0x28
+.*: d61f0220 br x17
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-1-b.d b/ld/testsuite/ld-aarch64/protections/bti-plt-1-b.d
new file mode 100644
index 0000000..1bf956c
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-1-b.d
@@ -0,0 +1,32 @@
+#name: No '-z force-bti' with feature properties (BTI) forces the generation of BTI PLT (shared)
+#source: bti-plt-1.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64 -defsym __property_bti__=1
+#ld: -shared -z force-bti -T bti-plt.ld -L./tmpdir -lbti-plt-so
+#objdump: -dr -j .plt
+
+[^:]*: *file format elf64-.*aarch64
+
+Disassembly of section \.plt:
+
+[0-9]+ <\.plt>:
+.*: d503245f bti c
+.*: a9bf7bf0 stp x16, x30, \[sp, #-16\]!
+.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_>
+.*: f9400e11 ldr x17, \[x16, #24\]
+.*: 91006210 add x16, x16, #0x18
+.*: d61f0220 br x17
+.*: d503201f nop
+.*: d503201f nop
+
+[0-9]+ <.*>:
+.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_>
+.*: f9401211 ldr x17, \[x16, #32\]
+.*: 91008210 add x16, x16, #0x20
+.*: d61f0220 br x17
+
+[0-9]+ <.*>:
+.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_>
+.*: f9401611 ldr x17, \[x16, #40\]
+.*: 9100a210 add x16, x16, #0x28
+.*: d61f0220 br x17
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-1-c.d b/ld/testsuite/ld-aarch64/protections/bti-plt-1-c.d
new file mode 100644
index 0000000..2eba994
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-1-c.d
@@ -0,0 +1,33 @@
+#name: Specifying '-z force-bti' without feature properties forces the generation of BTI PLT (shared)
+#source: bti-plt-1.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64
+#ld: -shared -z force-bti -T bti-plt.ld -L./tmpdir -lbti-plt-so
+#warning: .*bti-plt-1\.o: warning: BTI turned on by -z force-bti.*
+#objdump: -dr -j .plt
+
+[^:]*: *file format elf64-.*aarch64
+
+Disassembly of section \.plt:
+
+[0-9]+ <\.plt>:
+.*: d503245f bti c
+.*: a9bf7bf0 stp x16, x30, \[sp, #-16\]!
+.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_>
+.*: f9400e11 ldr x17, \[x16, #24\]
+.*: 91006210 add x16, x16, #0x18
+.*: d61f0220 br x17
+.*: d503201f nop
+.*: d503201f nop
+
+[0-9]+ <.*>:
+.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_>
+.*: f9401211 ldr x17, \[x16, #32\]
+.*: 91008210 add x16, x16, #0x20
+.*: d61f0220 br x17
+
+[0-9]+ <.*>:
+.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_>
+.*: f9401611 ldr x17, \[x16, #40\]
+.*: 9100a210 add x16, x16, #0x28
+.*: d61f0220 br x17
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-i.d b/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-i.d
new file mode 100644
index 0000000..52fa96c
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-i.d
@@ -0,0 +1,17 @@
+#name: Specifying only '-z force-bti' emits BTI feature and reports warnings (shared)
+#source: bti-plt-1.s
+#source: bti-plt-2.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64
+#ld: -shared -z force-bti -T bti-plt.ld
+#warning: .*bti-plt-2\.o: warning: BTI turned on by -z force-bti.*
+#warning: .*bti-plt-1\.o: warning: BTI turned on by -z force-bti.*
+#readelf: -n
+
+# Should warn about the missing input BTI NOTE but should still mark
+# output as BTI.
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: BTI
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-ii.d b/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-ii.d
new file mode 100644
index 0000000..c1c6db6
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-ii.d
@@ -0,0 +1,8 @@
+#name: Specifying '-z force-bti -z bti-report=error' reports errors (shared)
+#source: bti-plt-1.s
+#source: bti-plt-2.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64
+#ld: -shared -z force-bti -z bti-report=error -T bti-plt.ld
+#error: .*bti-plt-2\.o: error: BTI turned on by -z force-bti.*
+#error: .*bti-plt-1\.o: error: BTI turned on by -z force-bti.*
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-iii.d b/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-iii.d
new file mode 100644
index 0000000..1bf038d
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-iii.d
@@ -0,0 +1,17 @@
+#name: Specifying '-z force-bti -z bti-report=warning' emits BTI feature and reports warnings (shared)
+#source: bti-plt-1.s
+#source: bti-plt-2.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64
+#ld: -shared -z force-bti -z bti-report=warning -T bti-plt.ld
+#warning: .*bti-plt-2\.o: warning: BTI turned on by -z force-bti.*
+#warning: .*bti-plt-1\.o: warning: BTI turned on by -z force-bti.*
+#readelf: -n
+
+# Should warn about the missing input BTI NOTE but should still mark
+# output as BTI.
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: BTI
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-iv.d b/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-iv.d
new file mode 100644
index 0000000..02a6a3c
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-iv.d
@@ -0,0 +1,12 @@
+#name: Specifying '-z force-bti -z bti-report=none' emits BTI feature and reports nothing (shared)
+#source: bti-plt-1.s
+#source: bti-plt-2.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64
+#ld: -shared -z force-bti -z bti-report=none -T bti-plt.ld
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: BTI
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-v.d b/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-v.d
new file mode 100644
index 0000000..895d64e
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-2-a-v.d
@@ -0,0 +1,17 @@
+#name: Specifying '-z force-bti -z bti-report' emits BTI feature and reports warnings (shared)
+#source: bti-plt-1.s
+#source: bti-plt-2.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64
+#ld: -shared -z force-bti -z bti-report -T bti-plt.ld
+#warning: .*bti-plt-2\.o: warning: BTI turned on by -z force-bti.*
+#warning: .*bti-plt-1\.o: warning: BTI turned on by -z force-bti.*
+#readelf: -n
+
+# Should warn about the missing input BTI NOTE but should still mark
+# output as BTI.
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: BTI
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-2-b.d b/ld/testsuite/ld-aarch64/protections/bti-plt-2-b.d
new file mode 100644
index 0000000..2873918
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-2-b.d
@@ -0,0 +1,12 @@
+#name: No '-z force-bti' and all input objects with BTI feature emits BTI feature (shared)
+#source: bti-plt-1.s
+#source: bti-plt-2.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64 -defsym __property_bti__=1
+#ld: -shared -T bti-plt.ld
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: BTI
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-2-c.d b/ld/testsuite/ld-aarch64/protections/bti-plt-2-c.d
new file mode 100644
index 0000000..1f3df04
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-2-c.d
@@ -0,0 +1,12 @@
+#name: Specifying '-z force-bti' and all input objects with BTI feature emits BTI feature and reports no warning (shared)
+#source: bti-plt-1.s
+#source: bti-plt-2.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64 -defsym __property_bti__=1
+#ld: -shared -z force-bti -T bti-plt.ld
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: BTI
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-3.d b/ld/testsuite/ld-aarch64/protections/bti-plt-3.d
index 80dbcec..e457bab 100644
--- a/ld/testsuite/ld-aarch64/protections/bti-plt-3.d
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-3.d
@@ -1,4 +1,4 @@
-#name: Check -z force-bti emits BTI PLT (exec)
+#name: Specifying '-z force-bti' along feature properties (BTI) forces the generation of BTI PLT (exec)
#source: bti-plt-1.s
#target: [check_shared_lib_support]
#as: -mabi=lp64 -defsym __property_bti__=1
@@ -9,7 +9,7 @@
Disassembly of section \.plt:
-[0-9]+ <.*>:
+[0-9]+ <\.plt>:
.*: d503245f bti c
.*: a9bf7bf0 stp x16, x30, \[sp, #-16\]!
.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_>
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-i.d b/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-i.d
new file mode 100644
index 0000000..ed85f96
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-i.d
@@ -0,0 +1,15 @@
+#name: Specifying only '-z force-bti' emits BTI feature and reports warnings (exec)
+#source: bti-plt-1.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64
+#ld: -z force-bti -e _start -T bti-plt.ld -L./tmpdir -lbti-plt-so
+#warning: .*bti-plt-1\.o: warning: BTI turned on by -z force-bti.*
+#readelf: -n
+
+# Should warn about the missing input BTI NOTE but should still mark
+# output as BTI.
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: BTI \ No newline at end of file
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-ii.d b/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-ii.d
new file mode 100644
index 0000000..2d8b9b5
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-ii.d
@@ -0,0 +1,6 @@
+#name: Specifying '-z force-bti -z bti-report=error' reports errors (exec)
+#source: bti-plt-1.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64
+#ld: -z force-bti -z bti-report=error -e _start -T bti-plt.ld -L./tmpdir -lbti-plt-so
+#error: .*bti-plt-1\.o: error: BTI turned on by -z force-bti.*
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-iii.d b/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-iii.d
new file mode 100644
index 0000000..1abd61b
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-iii.d
@@ -0,0 +1,15 @@
+#name: Specifying '-z force-bti -z bti-report=warning' emits BTI feature and reports warnings (exec)
+#source: bti-plt-1.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64
+#ld: -z force-bti -z bti-report=warning -e _start -T bti-plt.ld -L./tmpdir -lbti-plt-so
+#warning: .*bti-plt-1\.o: warning: BTI turned on by -z force-bti.*
+#readelf: -n
+
+# Should warn about the missing input BTI NOTE but should still mark
+# output as BTI.
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: BTI
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-iv.d b/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-iv.d
new file mode 100644
index 0000000..0f26b45
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-iv.d
@@ -0,0 +1,11 @@
+#name: Specifying '-z force-bti -z bti-report=none' emits BTI feature and reports nothing (exec)
+#source: bti-plt-1.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64
+#ld: -z force-bti -z bti-report=none -e _start -T bti-plt.ld -L./tmpdir -lbti-plt-so
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: BTI
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-v.d b/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-v.d
new file mode 100644
index 0000000..44b3276
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-4-a-v.d
@@ -0,0 +1,15 @@
+#name: Specifying '-z force-bti -z bti-report' emits BTI feature and reports warnings (exec)
+#source: bti-plt-1.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64
+#ld: -z force-bti -z bti-report -e _start -T bti-plt.ld -L./tmpdir -lbti-plt-so
+#warning: .*bti-plt-1\.o: warning: BTI turned on by -z force-bti.*
+#readelf: -n
+
+# Should warn about the missing input BTI NOTE but should still mark
+# output as BTI.
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: BTI
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-4-b.d b/ld/testsuite/ld-aarch64/protections/bti-plt-4-b.d
new file mode 100644
index 0000000..e38ef21
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-4-b.d
@@ -0,0 +1,11 @@
+#name: No '-z force-bti' and all input objects with BTI feature emits BTI feature (exec)
+#source: bti-plt-1.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64 -defsym __property_bti__=1
+#ld: -e _start -T bti-plt.ld -L./tmpdir -lbti-plt-so
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: BTI
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-4-c.d b/ld/testsuite/ld-aarch64/protections/bti-plt-4-c.d
new file mode 100644
index 0000000..575d559
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-4-c.d
@@ -0,0 +1,11 @@
+#name: Specifying '-z force-bti' and all input objects with BTI feature emits BTI feature and reports no warning (exec)
+#source: bti-plt-1.s
+#target: [check_shared_lib_support]
+#as: -mabi=lp64 -defsym __property_bti__=1
+#ld: -z force-bti -e _start -T bti-plt.ld -L./tmpdir -lbti-plt-so
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: BTI
diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-6.d b/ld/testsuite/ld-aarch64/protections/bti-plt-6.d
index df5c063..6bbba57 100644
--- a/ld/testsuite/ld-aarch64/protections/bti-plt-6.d
+++ b/ld/testsuite/ld-aarch64/protections/bti-plt-6.d
@@ -1,4 +1,4 @@
-#name: Warn with one missing GNU NOTE BTI input
+#name: Specifying '-z force-bti' and warn only on inputs with missing BTI feature
#source: property-bti-pac2.s
#source: property-bti-pac1.s
#target: [check_shared_lib_support]
@@ -7,8 +7,8 @@
#warning: .*property-bti-pac2.*: warning: BTI turned on by -z force-bti.*$
#readelf: -n
-# Should warn about the missing input BTI NOTE but should
-# still mark output as BTI
+# Should warn about the missing input BTI NOTE but should still mark
+# output as BTI.
Displaying notes found in: .note.gnu.property
[ ]+Owner[ ]+Data size[ ]+Description