wine/include/wine
Martin Storsjö f760976803 ntdll: Add ARM EHABI unwind instructions in assembly functions.
On most ELF platforms on ARM, ARM EHABI is the unwind info
format normally used, instead of DWARF like on most other platforms.

Currently, when unwinding through ELF objects with libunwind, the
libraries don't have any .eh_frame section mapped at runtime (since
DWARF isn't used for unwinding). Instead, what happens is that
libunwind ends up loading .debug_frame from the libraries on disk
instead.

Therefore, currently, ELF unwinding relies on the .so files not being
stripped.

This patch adds the necessary EHABI unwinding instructions in the
assembly functions that currently have DWARF CFI instructions.

EHABI isn't signaled via any specific preprocessor macro, but
is signaled by the absence of other unwind mechanisms (such
as __ARM_DWARF_EH__ and __SEH__, or maybe SjLj).

Mark the asm functions in the preloaders as .cantunwind, to avoid
undefined references to __aeabi_unwind_cpp_pr* functions.

Also mark other assembly functions as .cantunwind; for
signal_exit_thread this is essential if the function is marked
with .fnstart/.fnend - otherwise exiting threads does hang.
(pthread_exit internally calls _Unwind_ForcedUnwind, which would
hang if signal_exit_thread had .fnstart without any matching unwind
info).

This would, in principle, allow unwinding through these functions with
libunwind, for versions of libunwind that can parse the EHABI unwind
info - see e.g.
4d779f55c0.
(This commit isn't yet in any current release AFAIK). Unwinding with
EHABI via libunwind would require a few tweaks to the libunwind interface
usage in unix/signal_arm.c though, since e.g. the unw_get_proc_info call
fails if there's no .eh_frame or .debug_frame available.

Signed-off-by: Martin Storsjö <martin@martin.st>
2022-11-07 10:28:18 +01:00
..
afd.h ws2_32: Track SO_EXCLUSIVEADDRUSE option value. 2022-11-04 19:23:54 +01:00
asm.h ntdll: Add ARM EHABI unwind instructions in assembly functions. 2022-11-07 10:28:18 +01:00
atsvc.idl
condrv.h kernelbase: Return full title length from GetConsoleTitle(). 2022-10-10 11:19:44 +02:00
dcetypes.idl
debug.h include: Always use the standard varargs macros. 2022-09-01 10:24:20 +02:00
dplaysp.h
epm.idl
exception.h
fil_data.idl
gdi_driver.h win32u: Add is_primary parameter to GetCurrentDisplaySettings. 2022-11-01 20:46:23 +01:00
glu.h
heap.h
hid.h
http.h
iaccessible2.idl
irot.idl
irpcss.idl
itss.idl
list.h include: Add list_move_after() and list_move_before(). 2022-08-30 21:38:39 +02:00
mfinternal.idl mf: Add archive sink creation exported functions. 2022-08-11 16:51:06 +02:00
mmsystem16.h
mscvpdb.h winedump: Dump PDB public symbols' stream. 2022-09-27 18:29:34 +02:00
mssign.h
nsi.h nsi: Update struct nsi_tcp_conn_dynamic for Windows 11. 2022-10-14 21:52:55 +02:00
orpc.idl
plugplay.idl
rbtree.h include: Avoid _t-suffixes. 2022-08-30 21:38:39 +02:00
schrpc.idl
server.h include: Use RtlSetLastWin32Error in server.h. 2022-08-10 19:24:12 +02:00
server_protocol.h ntdll: Implement NtCancelSynchronousIoFile. 2022-10-17 11:22:41 +02:00
strmbase.h
svcctl.idl
test.h tests: Print unhandled exception messages in colour. 2022-09-28 21:43:44 +02:00
unixlib.h
vulkan.h winevulkan: VkDeviceAddress needs alignment. 2022-11-03 18:33:09 +01:00
vulkan_driver.h
wgl.h
wgl_driver.h
winbase16.h
windef16.h
wine_common_ver.rc
wined3d.h d3d11: Implement d3d11_input_layout_to_wined3d_declaration() on top of vkd3d_shader_parse_input_signature(). 2022-09-15 22:33:10 +02:00
winedxgi.idl
wingdi16.h
winnet16.h
winuser16.h