From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jiri Benc Date: Wed, 19 Feb 2020 11:52:21 +0100 Subject: [PATCH] redhat: rh_kabi: deduplication friendly structs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RH-Acked-by: Bruno Meneguele RH-Acked-by: Jesper Brouer RH-Acked-by: Prarit Bhargava RH-Acked-by: Jiri Olsa RH-Acked-by: Toke Høiland-Jørgensen Upstream status: RHEL only We don't really need the field names to be globally unique, it is enough when they are unique in the given struct. Since structs do not generally span mutliple files, using the line number is enough to ensure an unique identifier. It means that we can't use two RH_KABI_RENAME macros on the same line but that's not happening anyway. This allows pahole to deduplicate the type info of structs using kABI macros, lowering the size of vmlinuz from 26M to 8.5M. Upstream Status: RHEL only Signed-off-by: Jiri Benc --- include/linux/rh_kabi.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h index b90601e8a657..ea9c136bf884 100644 --- a/include/linux/rh_kabi.h +++ b/include/linux/rh_kabi.h @@ -163,6 +163,8 @@ # define __RH_KABI_CHECK_SIZE(_item, _size) #endif +#define RH_KABI_UNIQUE_ID __PASTE(rh_kabi_hidden_, __LINE__) + # define _RH_KABI_DEPRECATE(_type, _orig) _type rh_reserved_##_orig # define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...) \ _type (* rh_reserved_##_orig)(_args) @@ -171,7 +173,7 @@ _new; \ struct { \ _orig; \ - } __UNIQUE_ID(rh_kabi_hide); \ + } RH_KABI_UNIQUE_ID; \ __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new); \ } # define _RH_KABI_REPLACE_UNSAFE(_orig, _new) _new @@ -218,7 +220,7 @@ #define RH_KABI_EXTEND_WITH_SIZE(_new, _size) \ RH_KABI_EXTEND(union { \ _new; \ - unsigned long __UNIQUE_ID(rh_kabi_reserved)[_size]; \ + unsigned long RH_KABI_UNIQUE_ID[_size]; \ __RH_KABI_CHECK_SIZE(_new, 8 * (_size)); \ }) -- 2.26.2