Commit graph

760 commits

Author SHA1 Message Date
Alexandre Julliard bef0969722 ntdll: Move the .so module initialization to winecrt0.
Use new ELF tag ids to avoid breaking backwards compatibility.
2022-12-04 22:00:43 +01:00
Alexandre Julliard c20741b33a winebuild: Reinstate the __wine_spec_dll_entry() entrypoint for .so dlls. 2022-12-03 16:24:45 +01:00
Alexandre Julliard de3c286adf winebuild: Call __delayLoadHelper2 to resolve delay imports also on non-PE builds. 2022-11-29 19:11:19 +01:00
Alexandre Julliard 1181011c1e winebuild: Pass the delay import descriptor to the __wine_spec_delay_load function. 2022-11-29 19:11:19 +01:00
Alexandre Julliard a2d8e7a5d3 winebuild: Generate a separate helper for each delay-imported module. 2022-11-29 19:11:19 +01:00
Alexandre Julliard 0c39285077 winebuild: Use RVAs instead of absolute addresses in the delay import descriptors.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-11-29 19:11:19 +01:00
Alexandre Julliard 29060f3d78 winebuild: Add a helper function to output a thunk data pointer. 2022-11-29 19:11:19 +01:00
Alexandre Julliard ac17191530 winebuild: Remove support for "hybrid" Unix libraries. 2022-11-11 12:07:41 +01:00
Rémi Bernon 2e5e5ade82 winebuild: Put the delay import descriptor in data section.
This fixes incorrect .text section flags for any module using delay
imports. The use of a custom .text$2 section as dlltool is doing causes
the section to be flagged as DATA, and ends up with the .text section
being writable, which triggers the anti tamper used in Forza Horizon.
2022-11-08 20:07:52 +01:00
Rémi Bernon cfe83e80fc winebuild: Fix import hint value for symbols imported by name.
This fixes incorrect hint values generated by dlltool: instead of the
index in the name table, it used the ordinal value, which almost always
ends up in a hint lookup failure and a fallback to binary search.
2022-11-08 20:07:52 +01:00
Rémi Bernon 6b9773529c winebuild: Implement delay import lib generation without dlltool. 2022-11-08 20:07:52 +01:00
Rémi Bernon 244e8fd357 winebuild: Enable unwind tables by default in PE files.
Making sure it also emits .cfi and .seh directives and generates unwind
tables for the delay import thunks.
2022-11-08 20:07:52 +01:00
Rémi Bernon 103eb83156 winebuild: Implement import lib generation without dlltool. 2022-11-08 20:07:52 +01:00
Rémi Bernon b9375920f9 winebuild: Introduce a new --without-dlltool winebuild flag.
Set it only when -Wl,--delay-load linker flag is not supported to keep using
dlltool in LLVM builds, for MSVC-like import libs.
2022-11-08 20:07:52 +01:00
Rémi Bernon 9d1175a464 winebuild: Avoid calling asm_name twice in function arguments.
It returns a static buffer pointer and will free the first returned
pointer on the second call.
2022-11-04 21:53:54 +01:00
Rémi Bernon fd7cee3e31 winebuild: Split output_static_lib into output_(import|static)_lib. 2022-11-03 18:33:09 +01:00
Rémi Bernon f35fbc5be9 winebuild: Use asm_name to add underscore prefix in asm_globl. 2022-11-03 18:33:09 +01:00
Rémi Bernon 6932138f17 winebuild: Split get_link_name into a separate get_abi_name helper. 2022-11-03 18:33:09 +01:00
Alexandre Julliard 31d2a87ba0 winebuild: Add GNU stack note also to the undefined symbols file.
Recent ld complains about this.
2022-07-20 22:33:44 +02:00
Alexandre Julliard 603130cc38 winebuild: Align raw data size instead of virtual size in PE sections.
Use the aligned size to set code/data sizes.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-03-02 10:54:10 +01:00
Alexandre Julliard 8a3064899a winebuild: Add support for building apiset data.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-18 22:10:20 +01:00
Alexandre Julliard 39f6ab55a9 winebuild: Add support for generating data-only DLLs.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-16 22:05:33 +01:00
Alexandre Julliard 2c42d8b9a5 winebuild: Store length of Unicode strings explicitly.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-08 20:24:14 +01:00
Alexandre Julliard c562952f92 tools: Add a helper function to read the contents of a file.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-19 10:57:30 +01:00
Alexandre Julliard 49326cb258 tools: Use flush_output_buffer() in a few more places.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-19 10:55:08 +01:00
Jacek Caban f4ddcc36e9 winebuild: Allow using clang for as command.
Since a9b5bb326a, Wine needs
get_as_command to work without cc_command available. While as is usually
a GCC dependency, Clang toolchains may not contain it.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-16 20:29:38 +01:00
Alexandre Julliard b53773cff2 tools: Move the output buffer functions to the common header.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-10 22:00:17 +01:00
Alexandre Julliard d969d02e21 tools: Move target CPU and platform handling to the common tools.h header.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-18 11:50:30 +01:00
Alexandre Julliard 61e210f196 winebuild: Get rid of PowerPC support.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-18 11:16:19 +01:00
Alexandre Julliard 414e1c8ad5 winebuild: Avoid resolving standard C functions with static importlibs.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-17 15:19:33 +01:00
Alexandre Julliard 32cfdb5496 winebuild: Escape invalid characters in the dll name for static import libraries.
This is necessary for things like vulkan-1.dll.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-16 16:44:19 +01:00
Jacek Caban c41059bcba winebuild: Use find_clang_tool for ld and nm tools.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-10 18:58:32 +01:00
Martin Storsjö 77e9095435 ntdll: Remove stack gap in syscalls on arm.
Store the original stack pointer (on entry to the syscall dispatcher)
in syscall_frame; the stack pointer itself is incremented by
"pop {r0-r3}" right before calling the syscall itself.

This fixes unwinding from functions set up by syscalls, like
KiUserExceptionDispatcher.

Signed-off-by: Martin Storsjö <martin@martin.st>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-09 22:02:56 +01:00
Martin Storsjö 9e9509f307 winebuild: Fix relay entry points in Thumb mode with binutils/ELF and LLVM/PE.
b1fe783ade fixed relay entry points
in Thumb mode when assembled with Clang/LLVM in ELF mode, but broke
them when assembled with binutils as (and PE mode with LLVM didn't
work either before or after).

When/where the thumb bit is applied on symbols varies a lot between
assemblers; this is a notoriously vague and undocumented area.

After a .thumb_func directive, binutils as considers the next
non-local symbol as a thumb symbol, to have the thumb bit set.
LLVM's built-in assembler considers the next symbol, local or not,
to be a thumb symbol. (Just noting for reference for possible
solutions, this particular difference didn't play a role so far.)

Secondly, in a symbol difference expression like this:

    .long symbol1 - symbol2

Binutils as ignores the potential thumb state for both symbols and
just calculates the raw distance. LLVM does include the thumb bit
in symbol1 but ignores it in symbol2.

Finally, for PE targets, the linker sets the thumb bit on all
absolute addresses pointing to the text section, regardless of any
.thumb_func directives at assembly time. (I.e., the
__wine_spec_relay_entry_points entry in .L__wine_spec_relay_descr
gets the bit set even if it wasn't marked as .thumb_func.)

Therefore, mark __wine_spec_relay_entry_points as .thumb_func, as
the absolute address to it will end up with the thumb bit set in
PE builds in any case.

Don't mark the individual relay entry pointers as thumb functions
(the code still is generated as thumb as there hasn't been any
mode switch back to arm mode); this makes the differences calculated
correctly (both LLVM and binutils ignore the thumb state of the
subtracted label).

If desired, one could change __wine_spec_relay_entry_point_%d into
local labels with a .L prefix, just as before
b1fe783ade again, it doesn't make
any difference in this form.

Signed-off-by: Martin Storsjö <martin@martin.st>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-05 11:58:42 +01:00
Alexandre Julliard 5a8f7d1f74 winebuild: Wrap 16-bit fake dlls in a PE module.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51564
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-21 14:53:32 +02:00
Alexandre Julliard 2f0401c783 winebuild: Add a more generic way to create directories and sections in fake dlls.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-21 14:03:54 +02:00
Alexandre Julliard f9ee0d2f05 tools: Avoid using wine/port.h.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-07 18:03:11 +02:00
Alexandre Julliard 3eb1855c7e winebuild: Avoid using getopt_long().
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-05 11:53:08 +02:00
Zebediah Figura ea66623c3c winebuild: Move the CALL32_CBClient[Ex]_RetAddr implementation to krnl386.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-04 11:00:23 +02:00
Zebediah Figura 1f3eb3996d winebuild: Move the CALL32_CBClient[Ex] implementation to krnl386.
Except for the return thunk.

Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-04 10:59:35 +02:00
Alexandre Julliard 9e3959bd9b tools: Add a few helper functions for file names and extensions.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-29 21:38:11 +02:00
Alexandre Julliard 55701c6672 tools: Add a helper function to create temp files.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-29 21:38:11 +02:00
Alexandre Julliard 2a08d6ce80 tools: Add helper functions to spawn a command from an strarray.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-28 18:18:49 +02:00
Alexandre Julliard 97ca9f8a3d tools: Add a shared header for common helper functions.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-28 17:38:06 +02:00
Alexandre Julliard c878a0a4c0 winebuild: Use strarrays for the argument lists.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-23 14:45:39 +02:00
Alexandre Julliard d6d5a21721 winebuild: Unify the strarray implementation with the one from makedep.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-23 14:45:39 +02:00
Alexandre Julliard ea6308e364 ntdll: Declare the syscall functions array explicitly.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-30 22:49:58 +02:00
Alexandre Julliard 7ae1c396ac ntdll: Store the syscall argument table on the PE side.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-30 22:49:58 +02:00
Alexandre Julliard 3513a176fd winebuild: Add an option to set the syscall table id.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-30 22:49:58 +02:00
Alexandre Julliard ff04d8a4c2 ntdll: Move the syscall dispatcher implementation to the platform-specific files.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-26 11:25:38 +02:00