Commit graph

275 commits

Author SHA1 Message Date
Michael Scire 17b6bcfd37 loader: correct anti-downgrade tables for new version scheme 2020-05-06 22:39:11 -07:00
Michael Scire 4f50f57bb7 os: bug fixes after re-review of rwlock code 2020-04-21 22:40:45 -07:00
Michael Scire 97cba5e881 os: implement ReadWriteLock 2020-04-21 20:23:50 -07:00
Michael Scire 3da0cda4ae ams: centralize system thread definitions 2020-04-17 01:06:07 -07:00
Michael Scire 94ec9ae41b hos: change initialization API
This was needed to make stratosphere buildable with debugging on.

os:: assertions rely on GetCurrentThread() working, and this requires
the global os resource manager to be constructed. However, __appInit executes
before global constructors. We now require that hos::InitializeForStratosphere()
be called before anything else is done. This initializes the os resource manager,
sets the hos version for libnx, and may do more things in the future.

TODO: Consider replacing __appInit/__appExit with ams:: namespace functions in general,
and wrap them so that we guarantee hos::InitializeForStratosphere is called first, and
generally ensure a consistent stratosphere environment.
2020-04-16 22:57:01 -07:00
Michael Scire 353e27b9e2 ldr: update 10.0.0 conditionals 2020-04-14 03:20:23 -07:00
Michael Scire 73552c86c3 loader: update for 10.0.0 2020-04-14 02:45:28 -07:00
Michael Scire dd80e1f463 loader: update anti-downgrade tables for 10.0.0 2020-04-13 23:44:01 -07:00
Michael Scire 6719abec65 hos::Version: rename enum members 2020-04-13 22:19:44 -07:00
Michael Scire 065485b971 os: refactor/rewrite entire namespace. 2020-04-08 02:21:35 -07:00
hexkyz b735bc53c4
stratosphere-ldr: fix code mount name 2020-03-09 21:53:40 +00:00
Michael Scire 93004be59e ams: finish stdio -> fs bindings for stratosphere 2020-03-09 03:58:02 -07:00
Michael Scire 237b513408 loader: refactor to use fs bindings 2020-03-09 03:10:12 -07:00
Michael Scire 08d9de6907 ldr: optimize memory usage for tracking system programs 2020-03-08 16:54:32 -07:00
Adubbz c7026b9094
Implement the NCM sysmodule (closes #91)
* Implement NCM

* Modernize ncm_main

* Remove unnecessary smExit

* Give access to svcCallSecureMonitor

* Stack size bump

* Fix incorrect setup for NandUser's content storage entry

* Fix a potential data abort when flushing the placeholder accessor cache

* Fix HasFile and HasDirectory

* Use r+b, not w+b

* Misc fixes

* errno begone

* Fixed more stdio error handling

* More main fixes

* Various command improvements

* Make dispatch tables great again

* Fix logic inversion

* Fixed content path generation

* Bump heap size, fix CleanupAllPlaceHolder

* Various fixes. Note: This contains debug stuff which will be removed later. I was getting tired of having to cherrypick tiny changes

* Fixed placeholder/content deletion

* Fixed incorrect content manager destruction

* Prevent automatic placeholder creation on open

* Fixed List implementation. Also lots of debug logging.

* Removed debug code

* Added a scope guard for WritePlaceHolder

* Manually prevent placeholder/content appending

* Revert "Removed debug code"

This reverts commit d6ff261fcc.

* Always cache placeholder file. Switch to ftell for preventing appending

* Universally use EnsureEnabled

* Abstract away file writing logic

* Misc cleanup

* Refactor placeholder cacheing

* Remove debug code (again)

* Revert "Remove debug code (again)"

This reverts commit 168447d80e.

* Misc changes

* Fixed file modes

* Fixed ContentId/PlaceHolderId alignment

* Improved type safety

* Fixed reinitialization

* Fixed doubleup on path creation

* Remove debug code

* Fixed 1.0.0 booting

* Correct amount of add on content

* Correct main thread stack size

* lr: Introducing registered data

* Reorder stratosphere Makefile

* Move results to libstrat

* lr: Cleanup lr_redirection

* lr: lr_manager tweaks

* lr: Imrpoved path handling and adjust ResolveAddOnContentPath order

* lr: Organise types

* Add eof newlines

* lr: Eliminate unnecessary vars

* lr: Unnecessary vars 2 electric boogaloo

* lr: Various helpers

* lr: RegisteredLocationResolver helpers

* ncm: Move ncm_types to libstrat

* ncm: Misc cleanup

* Implement NCM

* Modernize ncm_main

* Remove unnecessary smExit

* Give access to svcCallSecureMonitor

* Stack size bump

* Fix incorrect setup for NandUser's content storage entry

* Fix a potential data abort when flushing the placeholder accessor cache

* Fix HasFile and HasDirectory

* Use r+b, not w+b

* Misc fixes

* errno begone

* Fixed more stdio error handling

* More main fixes

* Various command improvements

* Make dispatch tables great again

* Fix logic inversion

* Fixed content path generation

* Bump heap size, fix CleanupAllPlaceHolder

* Various fixes. Note: This contains debug stuff which will be removed later. I was getting tired of having to cherrypick tiny changes

* Fixed placeholder/content deletion

* Fixed incorrect content manager destruction

* Prevent automatic placeholder creation on open

* Fixed List implementation. Also lots of debug logging.

* Removed debug code

* Added a scope guard for WritePlaceHolder

* Manually prevent placeholder/content appending

* Revert "Removed debug code"

This reverts commit d6ff261fcc.

* Always cache placeholder file. Switch to ftell for preventing appending

* Universally use EnsureEnabled

* Abstract away file writing logic

* Misc cleanup

* Refactor placeholder cacheing

* Remove debug code (again)

* Revert "Remove debug code (again)"

This reverts commit 168447d80e.

* Misc changes

* Fixed file modes

* Fixed ContentId/PlaceHolderId alignment

* Improved type safety

* Fixed reinitialization

* Fixed doubleup on path creation

* Remove debug code

* Fixed 1.0.0 booting

* Correct amount of add on content

* Correct main thread stack size

* lr: Introducing registered data

* Reorder stratosphere Makefile

* Move results to libstrat

* lr: Cleanup lr_redirection

* lr: lr_manager tweaks

* lr: Imrpoved path handling and adjust ResolveAddOnContentPath order

* lr: Organise types

* Add eof newlines

* lr: Eliminate unnecessary vars

* lr: Unnecessary vars 2 electric boogaloo

* lr: Various helpers

* lr: RegisteredLocationResolver helpers

* ncm: Move ncm_types to libstrat

* ncm: Misc cleanup

* Updated AddOnContentLocationResolver and RegisteredLocationResolver to 9.0.0

* Finished updating lr to 9.0.0

* Updated NCM to 9.0.0

* Fix libstrat includes

* Fixed application launching

* title_id_2 -> owner_tid

* Updated to new-ipc

* Change to using pure virtuals

* Title Id -> Program Id

* Fixed compilation against master

* std::scoped_lock<> -> std::scoped_lock

* Adopted R_UNLESS and R_CONVERT

* Prefix namespace to Results

* Adopt std::numeric_limits

* Fixed incorrect error handling in ReadFile

* Adopted AMS_ABORT_UNLESS

* Adopt util::GenerateUuid()

* Syntax improvements

* ncm_types: Address review

* Address more review comments

* Updated copyrights

* Address more feedback

* More feedback addressed

* More changes

* Move dispatch tables out of interface files

* Addressed remaining comments

* lr: move into libstratosphere

* ncm: Fix logic inversion

* lr: Add comments

* lr: Remove whitespace

* ncm: Start addressing feedback

* ncm: Cleanup InitializeContentManager

* lr: support client-side usage

* lr_service -> lr_api

* ncm: Begin refactoring content manager

* ncm: More content manager improvements

* ncm: Content manager mount improvements

* ldr: use lr bindings

* lr bindings usage: minor fixes

* ncm/lr: Pointer placement

* ncm: placeholder accessor cleanup

* ncm: minor fixes

* ncm: refactor rights cache

* ncm: content meta database cleanup

* ncm: move content meta database impl out of interface file

* ncm: Use const ContentMetaKey &

* ncm: fix other non-const ContentMetaKey references

* ncm: content meta database cleanup

* ncm: content storage fixes for 2.0.0

* ncm: add missing end of file newlines

* ncm: implement ContentMetaReader

* ncm: client-side api

* ncm: trim trailing spaces

* ncm: FS_MAX_PATH-1 -> fs::EntryNameLengthMax

* ncm: Use PathString and Path

* fs: implement accessor wrappers for ncm

* fs: implement user fs wrappers

* fs: add MountSdCard

* ncm: move to content manager impl

* ncm: fix up main

* kvdb: use fs::

* fs: Add wrappers needed for ncm

* ncm: use fs bindings, other refactoring

* ncm: minor fixes

* fsa: fix ReadFile without size output

* fs: add substorage, rom path tool

* ncm: fix dangling fsdev usage

* fs: fix bug in Commit

* fs: fixed incorrect mode check

* fs: implement Mount(System)Data

* ncm: don't delete hos

* results: add R_SUCCEED_IF

* ams-except-ncm: use R_SUCCEED_IF

* ncm: added comments

* ncm: fix api definitions

* ncm: use R_SUCCEED_IF

* pm: think of the savings

* ncm: employ kernel strats

* ncm: Nintendo has 5 MiB of heap. Give ourselves 4 to be safe, pending analysis

* ncm: refactor IDs, split types header into many headers

* ams.mitm: use fs bindings instead of stdio

* fs: SystemData uses SystemDataId

* ncm: improve meta-db accuracy

* ncm: inline getlatestkey

* fs: improve UnsupportedOperation results

* fs: modernize mount utils

* ams: misc fixes for merge-errors

* fs: improve unsupportedoperation results

* git subrepo pull emummc

subrepo:
  subdir:   "emummc"
  merged:   "d12dd546"
upstream:
  origin:   "https://github.com/m4xw/emuMMC"
  branch:   "develop"
  commit:   "d12dd546"
git-subrepo:
  version:  "0.4.1"
  origin:   "???"
  commit:   "???"

* util: add boundedmap

* ncm: minor style fixes

* ncm: don't unmount if mounting fails

* lr: bug fixes

* ncm: implement ncm.for-initialize + ncm.for-safemode

* lr: ncm::ProgramId::Invalid -> ncm::InvalidProgramId

* ncm: fix open directory mode on 1.0.0

* ncm: fix fs use, implement more of < 4.0.0 for-initialize/safemode

* ncm: implement packagedcontent -> content for building metadb

* ncm: fix save data flag management

* ncm: address some review suggestions (thanks @leoetlino!)

* updater: use fs bindings

* fs: implement MountCode

* fs: prefer make_unique to operator new

* ncm: implement remaining ContentMetaDatabaseBuilder functionality

Co-authored-by: Michael Scire <SciresM@gmail.com>
2020-03-08 00:06:23 -08:00
Michael Scire 981166783b stratosphere: misc static -> global 2020-02-22 23:16:53 -08:00
Michael Scire 40400aee1f ams: revamp assertion system 2020-02-22 23:05:14 -08:00
Michael Scire 6ecf04c3b7 find -exec sed -i'' -e 's/2018-2019 Atmo/2018-2020 Atmo/g' {} + 2020-01-24 02:10:40 -08:00
Michael Scire 3a91a6b786 svc: populate namespace 2020-01-17 20:11:03 -08:00
Michael Scire 0d8bde6079 loader: use BitPack for caps 2020-01-02 03:13:40 -08:00
misson20000 f1a9dd8a98 loader: fix ECS after new-ipc rewrite
The call to serviceCreate(...) tries to query pointer buffer size, but
since we haven't had a chance to return the server side of the session
yet, this deadlocks. Instead, we defer creating the session and
mounting the filesystem until the first time the ECS object is
used. If mounting the filesystem fails, the ECS is silently discarded.
2019-12-13 13:45:52 -08:00
Michael Scire de1e6c9705 loader: update anti-downgrade tables for 9.1.0 2019-12-11 13:35:22 -08:00
Michael Scire 1556a92a38 random: use TinyMT instead of XorShift 2019-12-09 23:50:47 -08:00
Michael Scire d4f99ddb4d libstratosphere: use from /atmosphere/libraries 2019-12-09 18:54:29 -08:00
Michael Scire 7472bc1c7f Improve exception wrapping 2019-12-08 03:29:47 -08:00
Michael Scire 746dbfe018 ams_mitm: Implement emummc Nintendo folder redirection 2019-12-07 12:41:28 -08:00
Michael Scire 421324b498 mitm/cfg: pass around override status for decision-making 2019-12-07 12:41:28 -08:00
Michael Scire b758e3fc55 strat: update for latest libnx. 2019-12-07 12:41:28 -08:00
Michael Scire ea3ebbaa7d strat: TitleId -> ProgramId, titles->contents 2019-12-07 12:41:28 -08:00
Michael Scire d7a06057eb strat: split out common functionality for future meso use 2019-12-07 12:41:28 -08:00
Michael Scire 8cb77ac136 namespace sts -> namespace ams
namespace sts::ams -> ams::exosphere, ams::.

This is to facilitate future use of ams:: namespace code in
mesosphere, as we'll want to include ams::util, ams::result, ams::svc...
2019-12-07 12:41:28 -08:00
Michael Scire 4059dc6187 Results: Implement namespaced, type-safe results.
Because I was working on multiple things at once, this commit also:
- Adds wrappers for/linker flags to wrap CXX exceptions to make them
  abort. This saves ~0x8000 of memory in every system module.
- Broadly replaces lines of the pattern if (cond) { return ResultX; }
  with R_UNLESS(!cond, ResultX());.
- Reworks the R_TRY_CATCH macros (and the result macros in general).
2019-12-07 12:41:28 -08:00
Michael Scire 0b22af1206 libstrat: namespace remaining non-namespaced code. more new-ipc updates 2019-12-07 12:41:28 -08:00
Michael Scire 535e49a38d strat: statically allocate additional threads 2019-12-07 12:41:28 -08:00
Michael Scire 8bd2a9a23b ldr: fix copy/paste, only 1 ldr:pm session needed 2019-12-07 12:41:28 -08:00
Michael Scire 2f959785e1 loader: update for new-ipc 2019-12-07 12:41:28 -08:00
Michael Scire add18d868f sts: add STS_UNREACHABLE_DEFAULT_CASE() 2019-12-07 12:41:28 -08:00
Michael Scire 609a302e16 os: implement waitable management.
This implements waitable management for Events (and
implements Events). It also refactors PM to use new
Event/Waitable semantics, and also adds STS_ASSERT
as a macro for asserting a boolean expression. The
rest of stratosphere has been refactored to use
STS_ASSERT whenever possible.
2019-12-07 12:41:28 -08:00
Michael Scire a6e405c988 ldr: fix hbl_html redirection invocation 2019-09-14 10:43:39 -07:00
Michael Scire 93d83c5bb9 ams: initial support for 9.0.0 2019-09-14 10:43:39 -07:00
Michael Scire 227a1d938d creport: refactor to use sts:: namespace. 2019-07-15 14:35:48 -07:00
Michael Scire 6777dd9b38 pm: inform sm of title ids. remove inconsistent mitm association. 2019-07-11 22:24:59 -07:00
Michael Scire 2d0c881ffe strat: go all in on ncm::TitleId 2019-07-11 22:24:59 -07:00
hexkyz e561919a52 Fix logic in ldr_ro_manager
Fix argument type for isdigit/isxdigit
2019-06-30 18:48:16 +01:00
Michael Scire 18ca8aaf5b stratosphere: all in on enum class CommandId 2019-06-27 23:34:53 -07:00
Michael Scire e5c5101e8a Add missing extension cleanup. 2019-06-27 20:51:57 -07:00
Michael Scire 934ff7bbde <int> -> <s32> 2019-06-27 20:16:56 -07:00
Michael Scire 014f08f6b4 ldr: fix mount check mistake 2019-06-27 18:01:44 -07:00
Michael Scire 6ba2090c01 ldr: address review commentary. 2019-06-27 17:37:33 -07:00
Michael Scire 61fcf5e0f4 loader: completely rewrite. 2019-06-26 15:46:19 -07:00
Michael Scire 9217e4c5f9 sm: add HasService/HasMitm, refactor into sts:: 2019-06-24 17:57:49 -07:00
Michael Scire cead8a36ea stratosphere: more result cleanup 2019-06-20 02:00:59 -07:00
Michael Scire 6699fda8c9 loader: implement 8.1.0 changes 2019-06-19 11:51:30 -07:00
Michael Scire f9bf8923b1 loader: refactor for R_TRY 2019-06-17 16:29:09 -07:00
leo60228 defee07625 Allow pressing buttons on all controllers in loader (closes #541) 2019-05-11 15:15:17 -04:00
Michael Scire 03a425a579 stratosphere: TODO: panic -> std::abort() 2019-05-10 03:28:18 -07:00
Michael Scire 41f5b39f6b stratosphere: stop using kernelAbove 2019-05-10 03:25:07 -07:00
Michael Scire 7945a921ca Merge branch 'ro_dev' 2019-04-22 13:07:11 -07:00
Michael Scire b09adb6a34 stratosphere: only hold sm sessions open when needed 2019-04-22 12:59:49 -07:00
Michael Scire bfd04cfe92 loader: remove more unused ro functionality 2019-04-22 00:40:19 -07:00
Michael Scire 253afc90a4 loader: remove ldr:ro (moved into ro sysmodule) 2019-04-21 09:08:08 -07:00
Michael Scire 4ba6d8b24c ro: implement rest of LoadNrr/LoadNrrEx 2019-04-21 05:28:57 -07:00
Michael Scire ed86c44a49 loader: refactor to use LoaderModuleInfo 2019-04-20 18:15:39 -07:00
Michael Scire 5c9d0f05b1 loader: use libstratosphere randomness 2019-04-20 16:53:56 -07:00
Michael Scire ac07971211 stratosphere: custom exception handlers (reboot to fusee) 2019-04-12 15:28:46 -07:00
Michael Scire 67891954ec loader: fix support for 7.0.0+ games with NPDM flag bit 4 set. 2019-04-11 16:39:59 -07:00
Michael Scire 03e176d7f1 atmosphere: current year is 2019 2019-04-07 19:00:49 -07:00
Mat M 7a4d1e786c ldr_map: Silence lingering initializer warning (#500)
One initializer warning case that I seem to have missed (my bad).
2019-04-04 23:13:46 -07:00
Mat M b237168ec7 loader: Silence Wmissing-field-initializers warnings (#499)
Specifying 0 as the initial entry of a structure is a C-ism. C++ permits
using an empty set of braces to signify the same behavior, silencing
missing initializer warnings.
2019-04-04 21:05:41 -07:00
Michael Scire a0f3183c79 strat: sha256 s/linux/libnx/g 2019-04-04 12:02:00 -07:00
Michael Scire c6d67eab6a strat: 0 -> ResultSuccess 2019-03-28 22:39:39 -07:00
Michael Scire 9427a5cf46 strat: use TitleId defs instead of magics. 2019-03-28 21:49:14 -07:00
Michael Scire c50cb83ec1 strat: use lr results instead of magics 2019-03-28 20:31:48 -07:00
Michael Scire 0001e93810 strat: use atmosphere results instead of magics 2019-03-28 20:19:38 -07:00
Michael Scire 29be429d2f strat: fix remaining FS result magic numbers 2019-03-28 19:45:41 -07:00
Michael Scire acffae6643 strat: replace kernel/dbg magic numbers with result defs 2019-03-28 16:57:18 -07:00
Michael Scire db19fa0f7f loader: Use result definitions instead of magic numbers 2019-03-28 15:06:50 -07:00
Michael Scire 994d7d5429 loader: same heap size change for gcc 8.3.0 compat 2019-03-26 20:56:04 -07:00
Michael Scire dc1db0dc72 loader: Ensure code:/ unmounts if mounted. 2019-03-23 18:27:53 -07:00
Michael Scire 9e1e9ff8c0 loader: separate override_any_app (deprecate =app) 2019-03-22 06:59:28 -07:00
Michael Scire 48e4688c13 loader: begin needed support for HBL to use web browser commands 2019-03-20 07:53:56 -07:00
TuxSH 7ddaad615b loader; suppress gcc warning 2019-03-19 21:29:31 +01:00
Michael Scire db3c5cf20f loader: fix ldr:ro unmap semantics for < 3.0.0 2019-03-16 19:16:19 -07:00
Michael Scire 51fa778fb2 loader/ams_mitm: Change Down -> Held in API 2019-03-15 21:28:38 -07:00
Michael Scire 35167da6dd loader: Actually use hidKeysHeld 2019-03-15 19:51:00 -07:00
Michael Scire 83626923cf loader/ams_mitm: hidKeysHeld, not hidKeysDown (and remove workaround) 2019-03-15 18:34:55 -07:00
Michael Scire 60776e8111 loader: fix ldr:ro mapping error on < 3.0.0 2019-03-15 00:25:09 -07:00
Michael Scire 37d3577028 dmnt: allow disabling cheats via title-specific button combo 2019-03-04 06:55:37 -08:00
Michael Scire eefee8c7a8 loader: add support for title-specific override keys 2019-02-23 07:18:24 -08:00
Michael Scire f00dd05f82 Make stratosphere use new libnx HosVersion API 2019-02-20 14:17:51 -08:00
Michael Scire 6027ff243d Enforce upper bound on application tid range 2019-02-12 02:53:31 -08:00
Michael Scire 5f836aca6d Loader: set 7.0.0+ process bit when relevant 2019-01-31 04:46:20 -08:00
Michael Scire a3adb70a04 stratosphere: version detect via svcCallSecureMonitor 2019-01-31 03:24:19 -08:00
Michael Scire bdfd7946e3 ldr:ro: Correct LoadNrrEx definition, unimpl'd for now 2019-01-30 21:55:04 -08:00
Michael Scire f78fd29e38 Add basic support to fusee for multiple tsec_root_keys. 2019-01-30 21:53:37 -08:00
natinusala da0d22f05a loader: add 'override any app' feature 2019-01-22 05:38:27 -08:00
misson20000 35cf3b65a3 loader/ECS: don't clear ECS on failure, add ClearExternalContentSource command 2019-01-22 05:38:27 -08:00
SciresM ab33329129
Merge pull request #266 from Atmosphere-NX/fatal
Implement custom fatal sysmodule.
2018-11-29 12:04:40 -08:00
Michael Scire ac391d9c5e Loader: always redirect sysmodules. 2018-11-15 14:48:18 -08:00
Michael Scire 2838e41819 Add defines for atmosphere git revision. 2018-11-13 12:42:35 -08:00