Hi! I was reading elf(7), and while checking the actual type definitions on my system, I found out a kernel struct tag that probably shouldn't be there. Here's the definition of 'Elf64_Dyn' in my <linux/elf.h>. $ grepc Elf64_Dyn /usr/include/linux/elf.h /usr/include/linux/elf.h:151: typedef struct { Elf64_Sxword d_tag; /* entry tag value */ union { Elf64_Xword d_val; Elf64_Addr d_ptr; } d_un; } Elf64_Dyn; And here's the one for 'Elf32_Dyn'. Notice that here there's a struct tag. I expect that such a tag would be prefixed by ElfN_, but it isn't. $ grepc Elf32_Dyn /usr/include/linux/elf.h /usr/include/linux/elf.h:143: typedef struct dynamic { Elf32_Sword d_tag; union { Elf32_Sword d_val; Elf32_Addr d_ptr; } d_un; } Elf32_Dyn; It seems we should blame an automated script :) $ git blame -- ./include/uapi/linux/elf.h | grep 'struct dynamic'; 23a7aea5faf65 (Rolf Eike Beer 2022-10-04 12:25:40 +0200 143) typedef struct dynamic { $ git blame 23a7aea5faf65^ -- ./include/uapi/linux/elf.h | grep 'struct dynamic'; 607ca46e97a1b (David Howells 2012-10-13 10:46:48 +0100 143) typedef struct dynamic{ $ git log -1 607ca46e97a1b commit 607ca46e97a1b6594b29647d98a32d545c24bdff Author: David Howells <dhowells@xxxxxxxxxx> Date: Sat Oct 13 10:46:48 2012 +0100 UAPI: (Scripted) Disintegrate include/linux Signed-off-by: David Howells <dhowells@xxxxxxxxxx> Acked-by: Arnd Bergmann <arnd@xxxxxxxx> Acked-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Acked-by: Michael Kerrisk <mtk.manpages@xxxxxxxxx> Acked-by: Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx> Acked-by: Dave Jones <davej@xxxxxxxxxx> $ git show 607ca46e97a1b \ | grep -e ^diff -e 'struct dynamic' \ | grep -B1 'struct dynamic'; diff --git a/include/linux/elf.h b/include/linux/elf.h -typedef struct dynamic{ -- diff --git a/include/uapi/linux/elf.h b/include/uapi/linux/elf.h +typedef struct dynamic{ struct dynamic is such a generic name that I don't think it's right to expose it in UAPI headers, as anyone might reuse that tag for their own purposes. Should I prepare a patch? Cheers, Alex P.S.: Rolf, I added you because you changed the space in the struct definition to make it easily greppable. You may be interested in using grepc(1), a shell script that does multiline greps of C definitions (see this email for an example of how it works). It's the natural evolution of hand-made greps of C definitions, based on pcre2grep(1). It's imperfect, as any REGEX-based tool for this probably is, but it's quite useful already. :) <http://www.alejandro-colomar.es/src/alx/alx/grepc.git/> -- <http://www.alejandro-colomar.es/> GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5
Attachment:
OpenPGP_signature
Description: OpenPGP digital signature