Difference between revisions of "RO:LoadExeCRO"
Jump to navigation
Jump to search
Line 6: | Line 6: | ||
|- | |- | ||
| 0 | | 0 | ||
− | | Header code [0x000402C2] | + | | Header code [0x000402C2] ([0x000902C2] for the new version) |
|- | |- | ||
| 1 | | 1 | ||
Line 18: | Line 18: | ||
|- | |- | ||
| 4 | | 4 | ||
− | | Process-memory buffer address to use for the CRO | + | | Process-memory buffer address to use for the CRO .data section, all CRO .data section addresses are automatically adjusted to use this address. |
|- | |- | ||
| 5 | | 5 | ||
Line 24: | Line 24: | ||
|- | |- | ||
| 6 | | 6 | ||
− | | | + | | .data section buffer size. |
|- | |- | ||
| 7 | | 7 | ||
− | | Process-memory buffer address to use for the CRO | + | | Process-memory buffer address to use for the CRO .bss section, all CRO .bss section addresses are automatically adjusted to use this address. |
|- | |- | ||
− | | 8-11 | + | | 8 |
− | | | + | | .bss section buffer size. |
+ | |- | ||
+ | | 9 | ||
+ | | Register as auto-link module if non-zero. | ||
+ | |- | ||
+ | | 10 | ||
+ | | Fix level. | ||
+ | |- | ||
+ | | 11 | ||
+ | | Usually zero? | ||
|- | |- | ||
| 12 | | 12 | ||
− | | Must be zero | + | | Must be zero ([[IPC#Message_Structure|translation descriptor]]) |
|- | |- | ||
| 13 | | 13 | ||
Line 52: | Line 61: | ||
|- | |- | ||
| 2 | | 2 | ||
− | | | + | | CRO size after fixing |
|} | |} | ||
=Description= | =Description= | ||
This loads a [[CRO0|CRO]], and maps virtual memory for it with the required memory-permissions. The address for cmdword[2] is calculated by the user-process like so: when cmdword[1](inputaddr) is <0x08000000, the address used is the same one from inputaddr. Otherwise, the address is: mapvaddr = inputaddr - (0x08000000 - <main-process .text address + .text, .rodata, .data, and .bss size aligned to pagesize>); | This loads a [[CRO0|CRO]], and maps virtual memory for it with the required memory-permissions. The address for cmdword[2] is calculated by the user-process like so: when cmdword[1](inputaddr) is <0x08000000, the address used is the same one from inputaddr. Otherwise, the address is: mapvaddr = inputaddr - (0x08000000 - <main-process .text address + .text, .rodata, .data, and .bss size aligned to pagesize>); |
Revision as of 19:05, 15 July 2016
Request
Index Word | Description |
---|---|
0 | Header code [0x000402C2] ([0x000902C2] for the new version) |
1 | Process-memory input CRO address(usually located on the process heap). |
2 | Process-memory address where the CRO will be mapped, starting at the CRO header(normally in the 0x00100000-0x04000000 range). |
3 | Total size of input CRO. |
4 | Process-memory buffer address to use for the CRO .data section, all CRO .data section addresses are automatically adjusted to use this address. |
5 | Usually zero? |
6 | .data section buffer size. |
7 | Process-memory buffer address to use for the CRO .bss section, all CRO .bss section addresses are automatically adjusted to use this address. |
8 | .bss section buffer size. |
9 | Register as auto-link module if non-zero. |
10 | Fix level. |
11 | Usually zero? |
12 | Must be zero (translation descriptor) |
13 | KProcess handle |
Response
Index Word | Description |
---|---|
0 | Header code |
1 | Result code |
2 | CRO size after fixing |
Description
This loads a CRO, and maps virtual memory for it with the required memory-permissions. The address for cmdword[2] is calculated by the user-process like so: when cmdword[1](inputaddr) is <0x08000000, the address used is the same one from inputaddr. Otherwise, the address is: mapvaddr = inputaddr - (0x08000000 - <main-process .text address + .text, .rodata, .data, and .bss size aligned to pagesize>);