]> granicus.if.org Git - strace/blobdiff - gen_bpf_attr_check.sh
print_array: enhance printing of unfetchable object addresses
[strace] / gen_bpf_attr_check.sh
index 1a52c2177745c513f74707ff4aeb9ea663b068d6..517e6212cbb5417ca3a951b26db72a210c35cde2 100755 (executable)
@@ -38,7 +38,13 @@ cat <<EOF
 # define SoM(type_, member_) (sizeof(((type_ *)0)->member_))
 EOF
 
-for struct in $(sed -n 's/^struct \(BPF_[^[:space:]]\+_struct\) .*/\1/p' < "$input"); do
+for struct in $(sed -n 's/^struct \([^[:space:]]\+_struct\) .*/\1/p' < "$input"); do
+       case "$struct" in
+               BPF_*) type_name='union bpf_attr' ;;
+               *) type_name="struct ${struct%_struct}" ;;
+       esac
+       TYPE_NAME="$(printf %s "$type_name" |tr '[:lower:] ' '[:upper:]_')"
+
        enum="$(sed -n 's/^struct '"$struct"' \/\* \([^[:space:]]\+\) \*\/ {.*/\1/p' < "$input")"
        ENUM="$(printf %s "$enum" |tr '[:lower:]' '[:upper:]')"
        enum="$enum${enum:+.}"
@@ -49,12 +55,12 @@ for struct in $(sed -n 's/^struct \(BPF_[^[:space:]]\+_struct\) .*/\1/p' < "$inp
                FIELD="$(printf %s "$field" |tr '[:lower:]' '[:upper:]')"
                cat <<EOF
 
-# ifdef HAVE_UNION_BPF_ATTR_$ENUM$FIELD
-       static_assert(SoM(struct $struct, $field) == SoM(union bpf_attr, $enum$field),
+# ifdef HAVE_${TYPE_NAME}_$ENUM$FIELD
+       static_assert(SoM(struct $struct, $field) == SoM($type_name, $enum$field),
                      "$struct.$field size mismatch");
-       static_assert(offsetof(struct $struct, $field) == offsetof(union bpf_attr, $enum$field),
+       static_assert(offsetof(struct $struct, $field) == offsetof($type_name, $enum$field),
                      "$struct.$field offset mismatch");
-# endif /* HAVE_UNION_BPF_ATTR_$ENUM$FIELD */
+# endif /* HAVE_${TYPE_NAME}_$ENUM$FIELD */
 EOF
        done
                cat <<EOF