Find a file
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
dlls ntdll: Add ARM EHABI unwind instructions in assembly functions. 2022-11-07 10:28:18 +01:00
documentation readme: Update Finnish translation. 2022-09-02 11:27:12 +02:00
fonts fonts: Fix dotaccent glyph position in Small Fonts. 2021-08-31 10:55:29 +02:00
include ntdll: Add ARM EHABI unwind instructions in assembly functions. 2022-11-07 10:28:18 +01:00
libs libs/wine: Use ARRAY_SIZE instead of open coding it. 2022-10-25 10:58:49 +02:00
loader ntdll: Add ARM EHABI unwind instructions in assembly functions. 2022-11-07 10:28:18 +01:00
nls nls: Allow specifying a locale's native digits. 2022-10-19 18:48:30 +02:00
po wineps.drv: Remove DrvDocumentProperties entry point. 2022-11-01 20:46:22 +01:00
programs cmd: Use the wcsrev function instead of reimplementing it. 2022-11-04 19:23:55 +01:00
server server: Don't invalidate the newly exposed child region on the parent if it doesn't clip children. 2022-11-04 19:23:56 +01:00
tools winebuild: Avoid calling asm_name twice in function arguments. 2022-11-04 21:53:54 +01:00
.editorconfig .editorconfig: Remove the trim_trailing_whitespace setting. 2019-03-26 13:45:55 +01:00
.gitlab-ci.yml gitlab: Run tests on Debian after the daily commit round. 2022-09-08 21:48:33 +02:00
.mailmap Release 7.9. 2022-05-20 22:24:58 +02:00
aclocal.m4 makefiles: Add support for multiple PE architectures. 2022-11-01 10:29:49 +01:00
ANNOUNCE Release 7.20. 2022-10-31 22:47:59 +01:00
AUTHORS Release 7.20. 2022-10-31 22:47:59 +01:00
configure windows.gaming.ui.gamebar: Add stub DLL. 2022-11-04 19:23:56 +01:00
configure.ac windows.gaming.ui.gamebar: Add stub DLL. 2022-11-04 19:23:56 +01:00
COPYING.LIB
LICENSE Update copyright info for 2022. 2022-01-02 21:26:17 +01:00
LICENSE.OLD
MAINTAINERS maintainers: Update Microsoft C Runtime files list. 2022-10-31 12:11:55 +01:00
README README: Mention Gitlab. 2022-07-20 19:51:56 +02:00
VERSION Release 7.20. 2022-10-31 22:47:59 +01:00

1. INTRODUCTION

Wine is a program which allows running Microsoft Windows programs
(including DOS, Windows 3.x, Win32, and Win64 executables) on Unix.
It consists of a program loader which loads and executes a Microsoft
Windows binary, and a library (called Winelib) that implements Windows
API calls using their Unix, X11 or Mac equivalents.  The library may also
be used for porting Windows code into native Unix executables.

Wine is free software, released under the GNU LGPL; see the file
LICENSE for the details.


2. QUICK START

From the top-level directory of the Wine source (which contains this file),
run:

./configure
make

Then either install Wine:

make install

Or run Wine directly from the build directory:

./wine notepad

Run programs as "wine program".  For more information and problem
resolution, read the rest of this file, the Wine man page, and
especially the wealth of information found at https://www.winehq.org.


3. REQUIREMENTS

To compile and run Wine, you must have one of the following:

  Linux version 2.0.36 or later
  FreeBSD 8.0 or later
  Solaris x86 9 or later
  NetBSD-current
  Mac OS X 10.8 or later

As Wine requires kernel-level thread support to run, only the operating
systems mentioned above are supported.  Other operating systems which
support kernel threads may be supported in the future.

FreeBSD info:
  Wine will generally not work properly on versions before FreeBSD 8.0.
  See https://wiki.freebsd.org/Wine for more information.

Solaris info:
  You will most likely need to build Wine with the GNU toolchain
  (gcc, gas, etc.). Warning : installing gas does *not* ensure that it
  will be used by gcc. Recompiling gcc after installing gas or
  symlinking cc, as and ld to the gnu tools is said to be necessary.

NetBSD info:
  Make sure you have the USER_LDT, SYSVSHM, SYSVSEM, and SYSVMSG options
  turned on in your kernel.

Mac OS X info:
  You need Xcode/Xcode Command Line Tools or Apple cctools.  The
  minimum requirements for compiling Wine are clang 3.8 with the
  MacOSX10.10.sdk and mingw-w64 v8.  The MacOSX10.14.sdk and later can
  only build wine64.


Supported file systems:
  Wine should run on most file systems. A few compatibility problems
  have also been reported using files accessed through Samba. Also,
  NTFS does not provide all the file system features needed by some
  applications.  Using a native Unix file system is recommended.

Basic requirements:
  You need to have the X11 development include files installed
  (called xorg-dev in Debian and libX11-devel in Red Hat).

  Of course you also need "make" (most likely GNU make).

  You also need flex version 2.5.33 or later and bison.

Optional support libraries:
  Configure will display notices when optional libraries are not found
  on your system. See https://wiki.winehq.org/Recommended_Packages for
  hints about the packages you should install. On 64-bit platforms,
  you have to make sure to install the 32-bit versions of these
  libraries.


4. COMPILATION

To build Wine, do:

./configure
make

This will build the program "wine" and numerous support libraries/binaries.
The program "wine" will load and run Windows executables.
The library "libwine" ("Winelib") can be used to compile and link
Windows source code under Unix.

To see compile configuration options, do ./configure --help.

For more information, see https://wiki.winehq.org/Building_Wine


5. SETUP

Once Wine has been built correctly, you can do "make install"; this
will install the wine executable and libraries, the Wine man page, and
other needed files.

Don't forget to uninstall any conflicting previous Wine installation
first.  Try either "dpkg -r wine" or "rpm -e wine" or "make uninstall"
before installing.

Once installed, you can run the "winecfg" configuration tool. See the
Support area at https://www.winehq.org/ for configuration hints.


6. RUNNING PROGRAMS

When invoking Wine, you may specify the entire path to the executable,
or a filename only.

For example: to run Notepad:

    wine notepad            (using the search Path as specified in
    wine notepad.exe         the registry to locate the file)

    wine c:\\windows\\notepad.exe      (using DOS filename syntax)

    wine ~/.wine/drive_c/windows/notepad.exe  (using Unix filename syntax)

    wine notepad.exe readme.txt          (calling program with parameters)

Wine is not perfect, so some programs may crash. If that happens you
will get a crash log that you should attach to your report when filing
a bug.


7. GETTING MORE INFORMATION

WWW:	A great deal of information about Wine is available from WineHQ at
	https://www.winehq.org/ : various Wine Guides, application database,
	bug tracking. This is probably the best starting point.

FAQ:	The Wine FAQ is located at https://www.winehq.org/FAQ

Wiki:	The Wine Wiki is located at https://wiki.winehq.org

Gitlab: Wine development is hosted at https://gitlab.winehq.org

Mailing lists:
	There are several mailing lists for Wine users and developers;
	see https://www.winehq.org/forums for more information.

Bugs:	Report bugs to Wine Bugzilla at https://bugs.winehq.org
	Please search the bugzilla database to check whether your
	problem is already known or fixed before posting a bug report.

IRC:	Online help is available at channel #WineHQ on irc.libera.chat.

--
Alexandre Julliard
julliard@winehq.org