Message ID | 20230925113942.267924-1-marcandre.lureau@redhat.com |
---|---|
State | New |
Headers | show |
Series | win32: avoid discarding the exception handler | expand |
On 25/09/2023 13.39, marcandre.lureau@redhat.com wrote: > From: Marc-André Lureau <marcandre.lureau@redhat.com> > > In all likelihood, the compiler with lto doesn't see the function being > used, from assembly macro __try1. Help it by marking the function has > being used. > > Fixes: I'd suggest to use "Resolves:" for bug tickets so that they get auto-closed when the patch is merged. > https://gitlab.com/qemu-project/qemu/-/issues/1904 > > Fixes: commit d89f30b4df ("win32: wrap socket close() with an exception handler") > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > include/qemu/compiler.h | 6 ++++++ > util/oslib-win32.c | 2 +- > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h > index a309f90c76..5c7f63f351 100644 > --- a/include/qemu/compiler.h > +++ b/include/qemu/compiler.h > @@ -197,4 +197,10 @@ > #define BUILTIN_SUBCLL_BROKEN > #endif > > +#if __has_attribute(used) > +# define QEMU_USED __attribute__((used)) > +#else > +# define QEMU_USED > +#endif I first thought we could maybe do it without the detour via the QEMU_USED macro, but seems like Clang just learnt this attribute with version 13: https://releases.llvm.org/12.0.0/tools/clang/docs/AttributeReference.html https://releases.llvm.org/13.0.0/tools/clang/docs/AttributeReference.html (while GCC already has it in version 7). So yes, this seems the right way to do this. Reviewed-by: Thomas Huth <thuth@redhat.com>
diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h index a309f90c76..5c7f63f351 100644 --- a/include/qemu/compiler.h +++ b/include/qemu/compiler.h @@ -197,4 +197,10 @@ #define BUILTIN_SUBCLL_BROKEN #endif +#if __has_attribute(used) +# define QEMU_USED __attribute__((used)) +#else +# define QEMU_USED +#endif + #endif /* COMPILER_H */ diff --git a/util/oslib-win32.c b/util/oslib-win32.c index 19a0ea7fbe..55b0189dc3 100644 --- a/util/oslib-win32.c +++ b/util/oslib-win32.c @@ -479,7 +479,7 @@ int qemu_bind_wrap(int sockfd, const struct sockaddr *addr, return ret; } -EXCEPTION_DISPOSITION +QEMU_USED EXCEPTION_DISPOSITION win32_close_exception_handler(struct _EXCEPTION_RECORD *exception_record, void *registration, struct _CONTEXT *context, void *dispatcher)