Commit graph

336 commits

Author SHA1 Message Date
Yuri Kunde Schlesner 12390eb155 Kernel: Fix assertion failure when ControlMemory is called with size=0 2015-08-26 21:29:05 -03:00
Yuri Kunde Schlesner 687d973980 Core: Improve APT Shared Font hack
Should fix invalid read loops in some games
2015-08-26 21:28:58 -03:00
Yuri Kunde Schlesner 840b85690b Kernel: Remove unused legacy heap MapBlock_* functions 2015-08-16 01:03:49 -03:00
Yuri Kunde Schlesner 14eca982f4 Kernel: Implement svcGetProcessInfo in a basic way
This also adds some basic memory usage accounting. These two types are
used by Super Smash Bros. during startup.
2015-08-16 01:03:48 -03:00
Yuri Kunde Schlesner 74d4bc0af1 Kernel: Add more infrastructure to support different memory layouts
This adds some structures necessary to support multiple memory regions
in the future. It also adds support for different system memory types
and the new linear heap mapping at 0x30000000.
2015-08-16 01:03:47 -03:00
Yuri Kunde Schlesner 69c3021a8d Move core/mem_map.{cpp,h} => core/hle/kernel/memory.{cpp,h} 2015-08-16 01:03:46 -03:00
Yuri Kunde Schlesner e2c7954be5 Memory: Move address type conversion routines to memory.cpp/h
These helpers aren't really part of the kernel, and mem_map.cpp/h is
going to be moved there next.
2015-08-16 01:03:46 -03:00
Yuri Kunde Schlesner a12a30c9e0 Process: Store kernel compatibility version during loading 2015-08-16 01:03:45 -03:00
Yuri Kunde Schlesner cdeeecf080 Kernel: Properly implement ControlMemory FREE and COMMIT 2015-08-16 01:03:45 -03:00
Yuri Kunde Schlesner 306408d174 VMManager: Introduce names for used ResultCodes 2015-08-16 01:03:44 -03:00
Yuri Kunde Schlesner b9a9ad9742 VMManager: Make LogLayout log level configurable as a parameter 2015-08-16 01:03:43 -03:00
Yuri Kunde Schlesner 785407d06f VMManager: Change block offsets to size_t 2015-08-16 01:03:43 -03:00
Lioncash dfb424b6d1 dyncom: Rename armdefs.h to armstate.h 2015-07-25 22:10:44 -04:00
Subv 275aaeef9c Kernel/Scheduling: Clean up a thread's wait_objects when its scheduled.
They'll be reset if needed during the next svcWaitSynchronization call (if there's any pending)
2015-07-20 17:15:54 -05:00
Yuri Kunde Schlesner dc39d06950 Ensure all kernel objects are released during shutdown
This commit fixes several kernel object leaks. The most severe of them
was threads not being removed from the private handle table used for
CoreTiming events. This resulted in Threads never being released, which
in turn held references to Process, causing CodeSets to never be freed
when loading other applications.
2015-07-17 02:24:13 -03:00
bunnei b6719ec922 Merge pull request #921 from linkmauve/fix-applet
Fix applet includes using iwyu
2015-07-12 17:25:55 -04:00
Yuri Kunde Schlesner d4f35fd989 Kernel: Add CodeSet case to Object::IsWaitable 2015-07-12 18:15:16 -03:00
Emmanuel Gil Peyrot fe909b3b5a Core: Fix applet includes using iwyu. 2015-07-12 22:10:37 +01:00
Yuri Kunde Schlesner 5c5cf2f8e0 Core: Properly configure address space when loading a binary
The code now properly configures the process image to match the loaded
binary segments (code, rodata, data) instead of just blindly allocating
a large chunk of dummy memory.
2015-07-11 23:54:42 -03:00
Yuri Kunde Schlesner d9556912b4 Kernel: Remove unused member from Event 2015-07-11 23:49:51 -03:00
Emmanuel Gil Peyrot e5fcabdd69 Core: Cleanup file_sys includes. 2015-06-28 00:36:54 +01:00
Emmanuel Gil Peyrot aea15f5c73 Core: Cleanup core includes. 2015-06-28 00:36:54 +01:00
Emmanuel Gil Peyrot 596b7c4f63 Common: Cleanup key_map includes. 2015-06-28 00:36:54 +01:00
Yuri Kunde Schlesner 81488d7a6a Add helpers to create IPC command buffer headers and descriptors 2015-06-22 19:24:19 -03:00
bunnei 71e8822d23 kernel: Fix svcWaitSynch to always acquire requested wait objects. 2015-06-16 22:34:39 -04:00
Yuri Kunde Schlesner 8a04c65e20 Merge pull request #810 from yuriks/memmap
Kernel: Add VMManager to manage process address spaces
2015-05-29 18:00:17 -07:00
Emmanuel Gil Peyrot b1503b2020 Remove every trailing whitespace from the project (but externals). 2015-05-29 21:59:29 +01:00
Yuri Kunde Schlesner 0a60aa75c2 Kernel: Add VMManager to manage process address spaces
This enables more dynamic management of the process address space,
compared to just directly configuring the page table for major areas.

This will serve as the foundation upon which the rest of the Kernel
memory management functions will be built.
2015-05-27 03:24:12 -03:00
Emmanuel Gil Peyrot b8f93e6b18 Kernel: Fix a warning introduced with ResourceLimit, and remove the fallback code to prevent it from happening again. 2015-05-21 20:54:49 +02:00
bunnei 0b7d2941cf Kernel: Move reschedules from SVCs to actual mechanisms that reschedule. 2015-05-20 18:05:47 -04:00
bunnei f0365f28c2 Merge pull request #772 from lioncash/warn
core/video_core: Fix a few warnings when compiling on MSVC.
2015-05-18 08:08:49 -04:00
Subv d3634d4bf4 Core/ResourceLimits: Implemented the basic structure of ResourceLimits.
Implemented svcs GetResourceLimit, GetResourceLimitCurrentValues and GetResourceLimitLimitValues.

Note that the resource limits do not currently keep track of used objects, since we have no way to distinguish between an object created by the application, and an object created by some HLE module once we're inside Kernel::T::Create.
2015-05-14 22:50:13 -05:00
Yuri Kunde Schlesner 7ada357b2d Memmap: Re-organize memory function in two files
memory.cpp/h contains definitions related to acessing memory and
configuring the address space
mem_map.cpp/h contains higher-level definitions related to configuring
the address space accoording to the kernel and allocating memory.
2015-05-15 00:04:38 -03:00
Lioncash 150e700729 process: Get rid of warnings
Sign mismatches and "forcing value to bool" warnings.
2015-05-14 12:59:14 -04:00
Lioncash 207087c856 thread: Fix a conditional check in Reschedule 2015-05-14 11:10:04 -04:00
bunnei cb2b2071a8 Merge pull request #748 from Subv/tls_max
Core/Memory: Add TLS support for creating up to 300 threads
2015-05-11 23:32:28 -04:00
bunnei ee8da4c356 Merge pull request #751 from yuriks/idle-thread
Thread: Remove the idle thread
2015-05-11 23:22:47 -04:00
bunnei 6e26d063a5 Merge pull request #757 from Subv/scheduling
Core/Scheduling: Prepare the new priority in the thread queue when svcSetPriority is called
2015-05-11 22:54:00 -04:00
Yuri Kunde Schlesner 4f7a055081 Thread: Remove the idle thread
Instead just use nullptr to represent no thread is active.
2015-05-11 22:39:39 -03:00
Subv dda94e56dd Core/Memory: Add TLS support for creating up to 300 threads 2015-05-11 20:09:23 -05:00
Yuri Kunde Schlesner 820b97787c Merge pull request #750 from Subv/process_svc
Core/HLE: Implemented the SVCs GetProcessId and GetProcessIdOfThread
2015-05-11 17:44:26 -07:00
Subv dbc1320923 Core/Scheduling: Prepare the new priority in the thread queue when svcSetPriority is called 2015-05-11 19:38:10 -05:00
Subv 25c010dc7d fixup! 2015-05-11 18:23:45 -05:00
Subv 41f74a16fd Core/HLE: Implemented the SVCs GetProcessId and GetProcessIdOfThread 2015-05-11 09:15:10 -05:00
Yuri Kunde Schlesner d16c2bd956 Thread: Correctly set main thread initial stack position 2015-05-11 05:08:47 -03:00
archshift e98fbadf4a Merge pull request #740 from yuriks/gsp-shmem
Fix crashes due to un-initialized GSP shared memory
2015-05-10 18:07:44 -07:00
Subv 115ad8e16a fixup! Set the TLS address in the scheduler 2015-05-10 18:43:59 -05:00
Subv 000876858d Core/Memory: Give every emulated thread it's own TLS area.
The TLS area for thread T with id Ti is located at TLS_AREA_VADDR + (Ti - 1) * 0x200.
This allows some games like Mario Kart 7 to continue further.
2015-05-10 18:35:37 -05:00
Yuri Kunde Schlesner 774eea8374 Kernel: Zero-fill shared memory blocks when mapping
This works around crashes related to GSP/HID/etc. shared memory blocks
having garbage values. The proper fix requires proper management of
mapped memory blocks in the process.
2015-05-10 20:05:29 -03:00
Yuri Kunde Schlesner c96f22490a Kernel: Capture SharedMemory attributes at creation, not when mapping 2015-05-10 19:47:07 -03:00
Yuri Kunde Schlesner b700b55696 Common: Remove the BIT macro
When the macro was introduced in 326ec51261
it wasn't noticed that it conflicted in name with a heavily used macro
inside of dyncom. This causes some compiler warnings. Since it's only
lightly used, it was opted to simply remove the new macro.
2015-05-09 18:16:46 -03:00
Yuri Kunde Schlesner 1c0b87edc2 Memory: Re-organize and rename memory area address constants 2015-05-09 01:29:52 -03:00
Yuri Kunde Schlesner 7c50b999fa Kernel: Remove unused g_main_thread variable 2015-05-08 22:12:12 -03:00
Yuri Kunde Schlesner 3cb19c9589 Process: Rename StaticAddressMapping => AddressMapping 2015-05-08 22:12:10 -03:00
Yuri Kunde Schlesner 83ccf85bb2 Process: Add more documentation to the class members 2015-05-08 22:11:49 -03:00
Yuri Kunde Schlesner 2f5904611d Process: Use BitField to store process flags 2015-05-08 22:11:48 -03:00
Yuri Kunde Schlesner 2af30d465f Process: Support parsing of exheader kernel caps 2015-05-08 22:11:44 -03:00
Yuri Kunde Schlesner a5eba2f984 Kernel: Remove g_program_id
This has been obsoleted by the field in Process.
2015-05-08 22:11:03 -03:00
Yuri Kunde Schlesner 6d60acf0f1 Kernel: Introduce skeleton Process class to hold process data 2015-05-08 22:11:02 -03:00
Yuri Kunde Schlesner e1fbac3ca1 Common: Remove common.h 2015-05-07 15:45:22 -03:00
Yuri Kunde Schlesner c916bcf7b5 Move typedefs from kernel.h to more appropriate places 2015-05-06 23:45:05 -03:00
bunnei c7dc799e19 Kernel: Properly initialize and shutdown all modules. 2015-05-01 18:27:03 -04:00
Emmanuel Gil Peyrot 0d69b2f7bd Kernel: Use the correct format string for u64 hex. 2015-04-14 21:18:31 +02:00
bunnei c077bcefa9 SVC: Update various SVCs to cause a reschedule.
- CreateMutex/ReleaseMutex/ReleaseSemaphore/SetTimer/CancelTimer/ArbitrateAddress
2015-04-09 19:06:42 -04:00
bunnei 9c3419ebcc Kernel: Implemented priority inheritance for mutexes. 2015-04-09 19:06:39 -04:00
bunnei 7b9f428b23 Thread: Implement priority boost for starved threads.
SVC: Return correct error code on invalid CreateThread processor ID.

SVC: Assert when creating a thread with an invalid userland priority.
2015-04-09 19:05:21 -04:00
bunnei e08f55b1a7 Kernel: Fixed default thread priority. 2015-04-09 19:04:19 -04:00
Gareth Higgins 25a43cd2ec Initialize base address to 0x0 2015-04-08 20:34:41 -04:00
archshift 4fb75d220a Misc cleanup of common and related functions 2015-02-19 22:26:25 -08:00
Subv 8e2b248e05 Build: Fixed some warnings 2015-02-12 09:25:35 -05:00
archshift ef24e72b26 Asserts: break/crash program, fit to style guide; log.h->assert.h
Involves making asserts use printf instead of the log functions (log functions are asynchronous and, as such, the log won't be printed in time)
As such, the log type argument was removed (printf obviously can't use it, and it's made obsolete by the file and line printing)

Also removed some GEKKO cruft.
2015-02-10 18:30:31 -08:00
Kevin Hartman 5fcbfc06eb Scheduler refactor Pt. 1
* Simplifies scheduling logic, specifically regarding thread status. It should be much clearer which statuses are valid
for a thread at any given point in the system.
* Removes dead code from thread.cpp.
* Moves the implementation of resetting a ThreadContext to the corresponding core's implementation.

Other changes:
* Fixed comments in arm interfaces.
* Updated comments in thread.cpp
* Removed confusing, useless, functions like MakeReady() and ChangeStatus() from thread.cpp.
* Removed stack_size from Thread. In the CTR kernel, the thread's stack would be allocated before thread creation.
2015-02-09 21:47:12 -08:00
bunnei 1b0bf00cbc Mutex: Locks should be recursive. 2015-02-09 22:06:09 -05:00
Lioncash 676daef3c7 core: Fix some warnings on OSX 2015-02-03 08:14:42 -05:00
Yuri Kunde Schlesner 88a4a808c6 Kernel: Stop creating useless Handles during object creation
They're finally unnecessary, and will stop cluttering the application's
handle table.
2015-02-02 15:37:09 -02:00
Yuri Kunde Schlesner 52f58e64ef Kernel: Make WaitObjects share ownership of Threads waiting on them
During normal operation, a thread waiting on an WaitObject and the
object hold mutual references to each other for the duration of the
wait.

If a process is forcefully terminated (The CTR kernel has a SVC to do
this, TerminateProcess, though no equivalent exists for threads.) its
threads would also be stopped and destroyed, leaving dangling pointers
in the WaitObjects.

The solution is to simply have the Thread remove itself from WaitObjects
when it is stopped. The vector of Threads in WaitObject has also been
changed to hold SharedPtrs, just in case. (Better to have a reference
cycle than a crash.)
2015-02-02 15:37:08 -02:00
Yuri Kunde Schlesner 7725256f64 Explicitly instantiate constructors/destructors for Kernel objects
This should speed up compile times a bit, as well as enable more liberal
use of forward declarations. (Due to SharedPtr not trying to emit the
destructor anymore.)
2015-02-02 15:37:07 -02:00
Yuri Kunde Schlesner 4e84df8be3 Mutex: Replace g_mutex_held_locks with a set inside Thread 2015-02-02 15:37:06 -02:00
Yuri Kunde Schlesner e8330dd162 Kernel: Fix bug in HandleTable::Close 2015-02-02 15:37:04 -02:00
Yuri Kunde Schlesner 5354a479bc Kernel: Remove Object::GetHandle (it's not used anymore :D) 2015-02-02 15:37:04 -02:00
Yuri Kunde Schlesner 869ec46683 Kernel: Introduce unique Object ids for debugging 2015-02-02 15:37:03 -02:00
Yuri Kunde Schlesner a9b86db3cf Kernel: Use separate Handle tables for CoreTiming userdata
This is to support the removal of GetHandle soon
2015-02-02 15:37:03 -02:00
Yuri Kunde Schlesner ec9c773251 Kernel: Remove previous scheduled event when a Timer is re-Set 2015-02-02 15:37:02 -02:00
Yuri Kunde Schlesner 664c79ff47 Thread: Modernize two functions that slipped through previous rebases 2015-02-02 15:37:01 -02:00
Lioncash 3f00dd9117 arm: Clean up ARMul_State
Remove unnecessary/unused struct variables.
2015-01-31 21:55:34 -05:00
Lioncash 96c174aed4 shared_memory: Fix assignments in SharedMemory::Map 2015-01-30 11:37:53 -05:00
Yuri Kunde Schlesner d917a9bf77 Kernel: Mark all appropriate kernel objects as "final" 2015-01-30 11:49:46 -02:00
Yuri Kunde Schlesner 09ae6e1fa3 Remove result.h InvalidHandle
It was only being used in two places, where it was replaced by a local
constant.
2015-01-30 11:49:45 -02:00
Yuri Kunde Schlesner d52d859936 Kernel: Convert Event to not use Handles 2015-01-30 11:49:43 -02:00
Yuri Kunde Schlesner ad80ff1e32 Kernel: Convert Timer to (mostly) not use Handles 2015-01-30 11:47:07 -02:00
Yuri Kunde Schlesner 882b6fed75 Kernel: Convert Mutex to not use Handles 2015-01-30 11:47:06 -02:00
Yuri Kunde Schlesner 38e7122f23 Kernel: Convert AddressArbiter to not use Handles 2015-01-30 11:47:06 -02:00
Yuri Kunde Schlesner d9b19be1d9 Kernel: Convert Semaphore to not use Handles 2015-01-30 11:47:05 -02:00
Yuri Kunde Schlesner 4bb33dfc30 Kernel: Convert SharedMemory to not use Handles 2015-01-30 11:47:04 -02:00
Yuri Kunde Schlesner b5ee4f9df9 Move VAddr/PAddr typedefs to kernel.h 2015-01-30 11:47:01 -02:00
Yuri Kunde Schlesner 9a345de2bd Kernel: Remove useless/duplicated comments; mark functions static 2015-01-30 11:47:01 -02:00
bunnei 68ddaaa2f5 Thread: Fix WaitSynchronization1 to not set register 1 on thread wakeup. 2015-01-21 20:48:46 -05:00
bunnei 4255f25647 Thread: Use std::find in CheckWait_WaitObject. 2015-01-21 20:48:46 -05:00
bunnei 2f3020a102 Mutex: Cleanup and remove redundant code. 2015-01-21 20:48:36 -05:00
bunnei f09806aed2 Kernel: Renamed some functions for clarity.
- ReleaseNextThread->WakeupNextThread
- ReleaseAllWaitingThreads->WakeupAllWaitingThreads.
2015-01-21 20:48:30 -05:00