event: Change EVENT_SPY to global
authorSimon Glass <sjg@chromium.org>
Sat, 30 Jul 2022 21:52:30 +0000 (15:52 -0600)
committerTom Rini <trini@konsulko.com>
Fri, 12 Aug 2022 12:17:11 +0000 (08:17 -0400)
This creates static records at present, but it causes a problem with clang
and LTO: the linker list records are sometimes dropped from the image.

Fix this by making the records global.

Update to use __used while we are here.

Signed-off-by: Simon Glass <sjg@chromium.org>
include/event.h

index c00c4fb..fb0734e 100644 (file)
@@ -123,10 +123,13 @@ static inline const char *event_spy_id(struct evspy_info *spy)
  * The only solution I can think of is to mark linker-list entries as 'used'
  * using an attribute. This should be safe, since we don't actually want to drop
  * any of these. However this does slightly limit LTO's optimisation choices.
+ *
+ * Another issue has come up, only with clang: using 'static' makes it throw
+ * away the linker-list entry sometimes, e.g. with the EVT_FT_FIXUP entry in
+ * vbe_simple.c - so for now, make it global.
  */
 #define EVENT_SPY(_type, _func) \
-       static __attribute__((used)) ll_entry_declare(struct evspy_info, \
-                                                     _type, evspy_info) = \
+       __used ll_entry_declare(struct evspy_info, _type, evspy_info) = \
        _ESPY_REC(_type, _func)
 
 /**