diff options
author | Masahiro Yamada <masahiroy@kernel.org> | 2025-01-14 00:00:47 +0900 |
---|---|---|
committer | Masahiro Yamada <masahiroy@kernel.org> | 2025-01-18 09:11:46 +0900 |
commit | ccc11a195c69b0c01ee140aecadfbdcdcdd03605 (patch) | |
tree | 3aadf04ce82e496db087fb8061b13cfec0d13ddd /scripts | |
parent | aa710cee0d677043f49a447c4665df51a553a2ba (diff) | |
download | linux-ccc11a195c69b0c01ee140aecadfbdcdcdd03605.tar.gz linux-ccc11a195c69b0c01ee140aecadfbdcdcdd03605.tar.bz2 linux-ccc11a195c69b0c01ee140aecadfbdcdcdd03605.zip |
genksyms: record attributes consistently for init-declarator
I believe the missing action here is a bug.
For rules with no explicit action, the following default is used:
{ $$ = $1; }
However, in this case, $1 is the value of attribute_opt itself. As a
result, the value of attribute_opt is always NULL.
The following test code demonstrates inconsistent behavior.
int x __attribute__((__aligned__(4)));
int y __attribute__((__aligned__(4))) = 0;
The attribute is recorded only when followed by an initializer.
This commit adds the correct action to propagate the value of the
ATTRIBUTE_PHRASE token.
With this change, the attribute in the example above is consistently
recorded for both 'x' and 'y'.
[Before]
$ cat <<EOF | scripts/genksyms/genksyms -d
int x __attribute__((__aligned__(4)));
int y __attribute__((__aligned__(4))) = 0;
EOF
Defn for type0 x == <int x >
Defn for type0 y == <int y __attribute__ ( ( __aligned__ ( 4 ) ) ) >
Hash table occupancy 2/4096 = 0.000488281
[After]
$ cat <<EOF | scripts/genksyms/genksyms -d
int x __attribute__((__aligned__(4)));
int y __attribute__((__aligned__(4))) = 0;
EOF
Defn for type0 x == <int x __attribute__ ( ( __aligned__ ( 4 ) ) ) >
Defn for type0 y == <int y __attribute__ ( ( __aligned__ ( 4 ) ) ) >
Hash table occupancy 2/4096 = 0.000488281
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Acked-by: Nicolas Schier <n.schier@avm.de>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/genksyms/parse.y | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/scripts/genksyms/parse.y b/scripts/genksyms/parse.y index 33a6aab53b69..e3c160046143 100644 --- a/scripts/genksyms/parse.y +++ b/scripts/genksyms/parse.y @@ -480,7 +480,7 @@ member_bitfield_declarator: attribute_opt: /* empty */ { $$ = NULL; } - | attribute_opt ATTRIBUTE_PHRASE + | attribute_opt ATTRIBUTE_PHRASE { $$ = $2; } ; enum_body: |