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
Jinoh Kang
38dfa2f455
loader: Fix return type of get_auxiliary().
...
This is required for fetching pointer-valued vectors (e.g.
AT_SYSINFO_EHDR).
Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
2022-07-04 20:14:02 +02:00
Alexandre Julliard
e3001b6a7c
configure: Assume that sys/mman.h is available on Unix.
...
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-09 18:43:51 +01:00
Alexandre Julliard
28d7d5ba93
loader: Avoid including wine/port.h.
...
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-20 16:16:07 +02:00
Martin Storsjö
29922c2276
loader: Add support for ARM linux in the preloader.
...
Since 28fe84da45
, the main exe image
must be mappable at its desired base address, which essentially
requires the preloader.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51539
Signed-off-by: Martin Storsjö <martin@martin.st>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-05 23:11:23 +02:00
Alexandre Julliard
d5a372abbb
include: Move inline assembly definitions to a new wine/asm.h header.
...
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2019-05-14 13:45:07 +02:00
Alexandre Julliard
df8c5a37ec
loader: Duplicate some preloader code instead of trying to share it.
...
This mostly reverts bd2d795240
.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-12-05 22:33:43 +01:00
Sebastian Lackner
a0ab2a7b0c
loader: Implement preloader for macOS.
...
Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-12-04 11:10:09 +01:00
Ken Thomases
bd2d795240
loader: Move some code in preparation for adding the Mac preloader.
...
Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-12-04 11:03:46 +01:00
Alexandre Julliard
a2d76cb43f
loader: Don't add the AT_UID entries if they don't already exist.
...
geteuid() etc. are broken on Android.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-10-30 18:04:48 +01:00
André Hentschel
c08e5560c4
loader: Setup the TLS register on ARM64.
...
Signed-off-by: André Hentschel <nerv@dawncrow.de>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-11-16 14:04:10 +01:00
André Hentschel
ebcac6d8f1
loader: Remove dead code.
...
Signed-off-by: André Hentschel <nerv@dawncrow.de>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-11-16 14:03:48 +01:00
Austin English
039d267b09
preloader: Fix a typo in error message.
...
Signed-off-by: Austin English <austinenglish@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-11-01 23:16:08 +01:00
André Hentschel
0ad8bb4ecf
loader: Don't warn for limited user address space on ARM64.
...
Signed-off-by: André Hentschel <nerv@dawncrow.de>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-10-25 10:26:48 +02:00
André Hentschel
27e92e550c
loader: Build the preloader for ARM64.
...
Signed-off-by: André Hentschel <nerv@dawncrow.de>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-10-25 10:26:18 +02:00
Alexandre Julliard
9f06a197c8
preloader: Add a fallback to the old mmap syscall just in case.
...
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-05-02 20:06:25 +02:00
Alexandre Julliard
60fb3d4b64
preloader: Fix symbol lookup for dynamic libraries.
...
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-04-27 15:04:51 +02:00
Alexandre Julliard
45a632ee81
preloader: Use the SYS_mmap2 system call instead of the old SYS_mmap one.
...
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-04-27 15:04:03 +02:00
Alexandre Julliard
1172754fcb
preloader: Add a debug option to dump memory maps.
...
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-04-27 15:03:46 +02:00
Keno Fischer
5f38bfed7c
preloader: Add proper CFI instructions to _start functions.
...
Signed-off-by: Keno Fischer <keno@juliacomputing.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-08-16 23:26:11 +09:00
Qian Hong
33765285c5
loader: Fix wld_prctl prototype.
...
Spotted by Robert O'Callahan.
Signed-off-by: Qian Hong <qhong@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-04-04 13:13:31 +09:00
Alexandre Julliard
8b4ed00b59
loader: Avoid ELF32_ST_INFO macro that is missing on Android.
2014-07-24 20:34:39 +02:00
Alexandre Julliard
1ecfff38bd
loader: ELF hash table entries are always 32-bit on Linux.
2013-07-30 14:43:33 +02:00
Alexandre Julliard
097867debd
loader: Rename the elf_hash function to avoid conflicts.
2013-02-13 17:19:43 +01:00
Alexandre Julliard
3b8ab28c40
loader: Define our own auxv structure.
2013-02-13 17:19:42 +01:00
Alexandre Julliard
6f1932dbca
loader: Hardcode Linux syscall numbers.
2013-01-21 16:00:07 +01:00
Eric Pouech
7b544af170
loader: Protect preloader against ELF file without loadable segments (clang).
2011-03-28 17:24:53 +02:00
Alexandre Julliard
7e112c2917
loader: Setup the TLS register on x86-64 for stack protector checks.
2010-12-21 19:38:27 +01:00
Alexandre Julliard
61d2d80795
loader: Define asm functions instead of inlines for x86-64 syscalls to avoid trouble with register constraints.
2010-12-18 12:33:29 +01:00
Alexandre Julliard
0a0862001b
loader: Build the preloader for x86-64.
2010-12-16 17:59:24 +01:00
Alexandre Julliard
fe031c937d
loader: Use long instead of int in the preloader for anything that can store a pointer.
2010-12-16 16:53:24 +01:00
Alexandre Julliard
144cb78dba
loader: Make sure the new stack is 16-byte aligned in the preloader.
2010-12-16 16:52:02 +01:00
Harald Hoyer
2bea45dd0a
preloader: Fix moving of auxiliary values.
2010-07-29 17:33:35 +02:00
Austin English
df9fda760e
loader: Remove mapat from map_so_lib, where it is unused.
2010-05-28 12:31:12 +02:00
Alexandre Julliard
fa6ffb4d5d
Fix empty function prototypes.
2009-10-07 12:24:53 +02:00
Alexandre Julliard
4d35f3f270
preloader: Reserve addresses only up to 0x68000000, that should be enough for ole32.
2009-07-01 16:03:56 +02:00
Alexandre Julliard
8d833ee2e7
loader: Reserve some more memory to cover the native ole32 addresses.
2009-06-25 14:34:11 +02:00
Stefan Reimer
3dcd1285f1
loader: Fix build with gcc-4.3 and ssp.
2009-01-04 13:33:01 +01:00
Alexandre Julliard
912e4d4def
loader: Reserve some space for the virtual heap too.
2008-11-07 11:05:38 +01:00
Alexandre Julliard
7a4d575029
preloader: Silence the warning for the low 64k.
2008-05-05 19:46:15 +02:00
Alexandre Julliard
195ca1e85f
preloader: Reserve low memory areas in separate chunks.
2008-04-14 20:38:17 +02:00
Francois Gouget
d8c41a25da
Spelling fix in the ldt bitfields.
2008-04-14 12:40:22 +02:00
Joris Huizer
e1e54d1ee7
preloader: sign-compare fix.
2007-03-05 15:31:56 +01:00
Alexandre Julliard
092ac1fbf5
preloader: Added printf format checking and fix some formats.
2007-01-11 12:46:06 +01:00
Alexandre Julliard
13029a2536
preloader: Remove reserved ranges that we failed to allocate.
2007-01-11 12:35:42 +01:00
Alexandre Julliard
4d9f3dfae1
preloader: Reset both AT_SYSINFO and AT_SYSINFO_EHDR when one of them conflicts.
2007-01-02 12:21:45 +01:00
Alexandre Julliard
4c4094e86e
preloader: Clear %gs again before calling the interpreter entry point.
2006-11-04 20:25:06 +01:00
Alexandre Julliard
a68d293bae
preloader: Setup a fake thread-local storage block pointed to by %gs.
2006-11-03 13:55:41 +01:00
Alexandre Julliard
30a3866b78
preloader: Added support for the new style DT_GNU_HASH symbol table.
2006-07-31 21:02:38 +02:00
Alexandre Julliard
51d8482222
preloader: Fixed type checking in symbol lookup.
2006-07-31 17:44:20 +02:00