Nintendo Switch emulator
Go to file
comex d7c532d889 Fixes and workarounds to make UBSan happier on macOS
There are still some other issues not addressed here, but it's a start.

Workarounds for false-positive reports:

- `RasterizerAccelerated`: Put a gigantic array behind a `unique_ptr`,
  because UBSan has a [hardcoded limit](https://stackoverflow.com/questions/64531383/c-runtime-error-using-fsanitize-undefined-object-has-a-possibly-invalid-vp)
  of how big it thinks objects can be, specifically when dealing with
  offset-to-top values used with multiple inheritance.  Hopefully this
  doesn't have a performance impact.

- `QueryCacheBase::QueryCacheBase`: Avoid an operation that UBSan thinks
  is UB even though it at least arguably isn't.  See the link in the
  comment for more information.

Fixes for correct reports:

- `PageTable`, `Memory`: Use `uintptr_t` values instead of pointers to
  avoid UB from pointer overflow (when pointer arithmetic wraps around
  the address space).

- `KScheduler::Reload`: `thread->GetOwnerProcess()` can be `nullptr`;
  avoid calling methods on it in this case.  (The existing code returns
  a garbage reference to a field, which is then passed into
  `LoadWatchpointArray`, and apparently it's never used, so it's
  harmless in practice but still triggers UBSan.)

- `KAutoObject::Close`: This function calls `this->Destroy()`, which
  overwrites the beginning of the object with junk (specifically a free
  list pointer).  Then it calls `this->UnregisterWithKernel()`.  UBSan
  complains about a type mismatch because the vtable has been
  overwritten, and I believe this is indeed UB.  `UnregisterWithKernel`
  also loads `m_kernel` from the 'freed' object, which seems to be
  technically safe (the overwriting doesn't extend as far as that
  field), but seems dubious.  Switch to a `static` method and load
  `m_kernel` in advance.
2023-07-15 12:00:28 -07:00
.ci ci/mingw: Remove pefile installation step 2023-07-09 16:07:43 -04:00
.github verify: Remove dependence on chocolatey 2023-07-07 14:08:18 -04:00
.reuse android: Various fixes for CI. 2023-06-03 00:06:05 -07:00
CMakeModules android: Use ext-android-bin for external binaries. 2023-06-03 00:06:06 -07:00
dist Update translations (2023-07-01) (#10972) 2023-07-01 05:41:49 +02:00
externals general: Update VulkanSDK and Vulkan-Headers 2023-07-07 02:04:13 -04:00
hooks chore: make yuzu REUSE compliant 2022-07-27 12:53:49 +02:00
LICENSES android: Various fixes for CI. 2023-06-03 00:06:05 -07:00
src Fixes and workarounds to make UBSan happier on macOS 2023-07-15 12:00:28 -07:00
.codespellrc codespell: Exclude android resources directory 2023-06-13 02:15:21 +02:00
.gitattributes chore: make yuzu REUSE compliant 2022-07-27 12:53:49 +02:00
.gitignore android: Initialize defaults for each orientations 2023-06-14 16:35:58 -04:00
.gitmodules gitmodules: normalize indentation and url 2023-06-27 23:39:29 +02:00
CMakeLists.txt general: Update VulkanSDK and Vulkan-Headers 2023-07-07 02:04:13 -04:00
CONTRIBUTING.md chore: make yuzu REUSE compliant 2022-07-27 12:53:49 +02:00
Doxyfile chore: make yuzu REUSE compliant 2022-07-27 12:53:49 +02:00
LICENSE.txt chore: make yuzu REUSE compliant 2022-07-27 12:53:49 +02:00
README.md Update README.md (Add Android at builds description) (#10586) 2023-06-03 16:29:26 +02:00
vcpkg.json externals: Update vcpkg to 2023.06.17 2023-06-17 21:46:09 -04:00


yuzu
yuzu

yuzu is the world's most popular, open-source, Nintendo Switch emulator — started by the creators of Citra.
It is written in C++ with portability in mind, and we actively maintain builds for Windows, Linux and Android.

Azure Mainline CI Build Status Discord

Compatibility | Development | Building | Download | Support | License

Compatibility

The emulator is capable of running most commercial games at full speed, provided you meet the necessary hardware requirements.

For a full list of games yuzu support, please visit our Compatibility page

Check out our website for the latest news on exciting features, monthly progress reports, and more!

Development

Most of the development happens on GitHub. It's also where our central repository is hosted. For development discussion, please join us on Discord.

If you want to contribute, please take a look at the Contributor's Guide and Developer Information. You can also contact any of the developers on Discord in order to know about the current state of the emulator.

If you want to contribute to the user interface translation project, please check out the yuzu project on transifex. We centralize translation work there, and periodically upstream translations.

Building

Download

You can download the latest releases automatically via the installer on our downloads page.

Support

If you enjoy the project and want to support us financially, check out our Patreon!

Any donations received will go towards things like:

  • Switch consoles to explore and reverse-engineer the hardware
  • Switch games for testing, reverse-engineering, and implementing new features
  • Web hosting and infrastructure setup
  • Software licenses (e.g. Visual Studio, IDA Pro, etc.)
  • Additional hardware (e.g. GPUs as-needed to improve rendering support, other peripherals to add support for, etc.)

If you wish to support us a different way, please join our Discord and talk to bunnei. You may also contact: donations@yuzu-emu.org.

License

yuzu is licensed under the GPLv3 (or any later version). Refer to the LICENSE.txt file.