This is a decompilation of curl, in the variant used in Nintendo's first party games.
The objective is to recreate this library as close as possible to the version present in various games, which includes custom changes and additional functions introduced by Nintendo.
For working on this project, it is recommended to obtain a game that ships with debugging symbols or even DWARF information. The following games are currently covered by this repository:
- Super Mario Odyssey (version 1.0.0) (buy it here)
File names, function names and the file organization come from debugging symbols, assertions and information in all of the aforementioned and additional titles.
Note that many names (especially for inlined, templated functions) are just plain guesses.
When comparing the upstream versions of curl with the functions included in SDK 3.5.1 (SMO 1.0), it seems like version 7.42.1 was used.
When comparing with 7.42.0, the following commits are missing (all others have no effect on the functions in SMO):
fd9d3a1, 85c45d1
Version 7.42.1 matches best.
When comparing with 7.43.0, way more functions are mismatching.
However, an additional commit has been cherry-picked on top of the 7.42.1 release:
20ac345
There are multiple breaking commits in-between that indicate that only this individual commit has been picked for Nintendo's release.
This repo currently just contains the version from SDK 3.5.1, as included in SMO 1.0. Other games and versions listed here are just from a quick survey and no in-depth matching or checks. As far as we can tell, all SDK versions use the same version of curl as base, and only change Nintendo's custom functions in the build.
| SDK Version | Game | same/different? |
|---|---|---|
| 0.12.14 | BotW 1.0 | same as 3.5.1 |
| 3.5.1 | SMO 1.0 | base version covered here at the moment |
| 4.4.0 | BotW 1.5 | different: for example different buffer sizes, different OS specific structs and use of newer sdk function calls not present in older firmware. |
| 7.3.2 | SMO 1.3 | same as 4.4.0 |
| 12.3.1 | Doom 1.0 | same as 4.4.0 |
This project may use small hacks to force particular code to be generated by the compiler. Those have no semantic effects but can help with matching assembly code especially when the hacks are used for functions that are inlined.
MATCHING_HACK_NX_CLANG: Hacks for Switch curl, when compiling with Clang.