aboutsummaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-03-02 14:26:58 +0100
committerDmitry Vyukov <dvyukov@google.com>2018-03-05 12:10:27 +0100
commita339951e5f3c045290340330bcea3ff4155b8334 (patch)
treee7ec9a7d5379d2ef2bef4c682ed7873f7e725dbb /sys
parent5110ff445ddb5a09a13e17b187c06d2dc3a7d52a (diff)
pkg/compiler: add size attribute for structs
The size attribute allows to pad a struct up to the specified size.
Diffstat (limited to 'sys')
-rw-r--r--sys/test/32.go10
-rw-r--r--sys/test/64.go10
-rw-r--r--sys/test/test.txt5
3 files changed, 23 insertions, 2 deletions
diff --git a/sys/test/32.go b/sys/test/32.go
index 8b3dc2892..2afb57717 100644
--- a/sys/test/32.go
+++ b/sys/test/32.go
@@ -50,6 +50,10 @@ var structDescs_32 = []*KeyedStruct{
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "i8", TypeSize: 1}}},
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "i32", TypeSize: 4}}},
}}},
+ {Key: StructKey{Name: "explicitly_sized"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "explicitly_sized", TypeSize: 42}, Fields: []Type{
+ &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "f1", TypeSize: 1}}},
+ &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "pad", TypeSize: 41}}, IsPad: true},
+ }}},
{Key: StructKey{Name: "len_nontemp4"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "len_nontemp4", TypeSize: 4}, Fields: []Type{
&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "f1", TypeSize: 4}}, Buf: "len_temp3"},
}}},
@@ -675,6 +679,10 @@ var syscalls_32 = []*Syscall{
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "len_unaligned"}}},
&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "b", TypeSize: 4}}, BitSize: 8, Buf: "a"},
}},
+ {Name: "syz_test$length27", CallName: "syz_test", Args: []Type{
+ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "explicitly_sized"}}},
+ &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "a1", TypeSize: 4}}, Buf: "a0"},
+ }},
{Name: "syz_test$length3", CallName: "syz_test", Args: []Type{
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_length_len_struct"}}},
}},
@@ -782,4 +790,4 @@ var consts_32 = []ConstValue{
{Name: "ONLY_32BITS_CONST", Value: 1},
}
-const revision_32 = "10a1935b1f3ef8f206e29a3b6863de4cac10bd9e"
+const revision_32 = "035aa7331fff3c8bb13bc8925ae43befcbc94a71"
diff --git a/sys/test/64.go b/sys/test/64.go
index ed996452d..ac32ebbe8 100644
--- a/sys/test/64.go
+++ b/sys/test/64.go
@@ -50,6 +50,10 @@ var structDescs_64 = []*KeyedStruct{
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "i8", TypeSize: 1}}},
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "i32", TypeSize: 4}}},
}}},
+ {Key: StructKey{Name: "explicitly_sized"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "explicitly_sized", TypeSize: 42}, Fields: []Type{
+ &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "f1", TypeSize: 1}}},
+ &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "pad", TypeSize: 41}}, IsPad: true},
+ }}},
{Key: StructKey{Name: "len_nontemp4"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "len_nontemp4", TypeSize: 4}, Fields: []Type{
&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "f1", TypeSize: 4}}, Buf: "len_temp3"},
}}},
@@ -674,6 +678,10 @@ var syscalls_64 = []*Syscall{
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "len_unaligned"}}},
&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "b", TypeSize: 8}}, BitSize: 8, Buf: "a"},
}},
+ {Name: "syz_test$length27", CallName: "syz_test", Args: []Type{
+ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "explicitly_sized"}}},
+ &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "a1", TypeSize: 8}}, Buf: "a0"},
+ }},
{Name: "syz_test$length3", CallName: "syz_test", Args: []Type{
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_length_len_struct"}}},
}},
@@ -780,4 +788,4 @@ var consts_64 = []ConstValue{
{Name: "IPPROTO_UDP", Value: 17},
}
-const revision_64 = "7c718fa299ed570a4acbd25a1fcf2448c4e2a2d4"
+const revision_64 = "7106e9ab2b7a52203a8ad681140f3326e8b3d7ce"
diff --git a/sys/test/test.txt b/sys/test/test.txt
index f520afa04..063a9a2e2 100644
--- a/sys/test/test.txt
+++ b/sys/test/test.txt
@@ -401,9 +401,14 @@ len_unaligned {
f2 int8
}
+explicitly_sized {
+ f1 int8
+} [size[42]]
+
syz_test$length24(a ptr[in, len_nontemp5])
syz_test$length25(a0 ptr[in, array[array[int8]]], a1 len[a0])
syz_test$length26(a ptr[in, len_unaligned], b bytesize[a])
+syz_test$length27(a0 ptr[in, explicitly_sized], a1 len[a0])
# Big endian