]> Chaos Git - corbenik/corbenik.git/commitdiff
Fix memory corruption (kind of, not really...has to do with malloc/free and brk somehow)
authorchaoskagami <chaos.kagami@gmail.com>
Sun, 28 Aug 2016 06:30:40 +0000 (02:30 -0400)
committerchaoskagami <chaos.kagami@gmail.com>
Sun, 28 Aug 2016 07:06:02 +0000 (03:06 -0400)
include/menu-backend.h
source/firm/firm.c
source/linker.ld
source/menu.c

index 05f0544a53c4679c1404865e3c572249592fbf8e..ebb6a45e25af6ce3fa90b591262318d76aae7a06 100644 (file)
@@ -24,7 +24,6 @@ struct options_s
     func_call_t func;  ///< Function to call on selection of option
     get_value_t value; ///< Function to get the value of the menu entry
     uint8_t indent;    ///< Indentation/ownership level of menu.
-    char pad[300];
 };
 
 /* Set the accent foreground color for a screen.
index 74c6a06b0003f1c27ed484bdc41f84d860bd7f19..1a6d9165d41f84b6c92f906d36b08135fa29709c 100644 (file)
@@ -460,6 +460,13 @@ boot_firm()
 
     fflush(stderr); // Flush logs if need be before unmount.
 
+    FILE* f = fopen("/arm9loaderhax_si.bin", "r");
+    size_t s = fsize(f);
+    fclose(f);
+    f = fopen("/corbenik_dump.bin", "w");
+    fwrite((uint8_t*)0x23F00000, 1, s, f);
+    fclose(f);
+
     fumount(); // Unmount SD. No longer needed.
 
     // No fprintf will work from here on out.
index 1203b40c0dafc2f414a5551b7c1ae11161089faf..e87c23ace56f9c59c99a3ba1cf879d418c28e5a5 100644 (file)
@@ -48,5 +48,5 @@ SECTIONS
 
     . = ALIGN(4);
 
-    __end__ = .;
+    __end__ = 0x24000000;
 }
index 2198e82ceb0bd726aa39f3c2db45a5baec9cc1db..3109e1ebd382ada86fefd06b85f87629a3997bcb 100644 (file)
@@ -57,89 +57,89 @@ char* get_opt(void* val) {
 
 static struct options_s options[] = {
     // Patches.
-    { "General Options", "", unselectable, 0, NULL, NULL, 0, "" },
+    { "General Options", "", unselectable, 0, NULL, NULL, 0 },
 
     { "System Module Inject",
       "Replaces system modules in FIRM like loader, fs, pxi, etc.",
-      option, (void*)OPTION_LOADER, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_LOADER, change_opt, get_opt, 0 },
 
     { "svcBackdoor Fixup",
       "Reinserts svcBackdoor on 11.0 NATIVE_FIRM. svcBackdoor allows executing arbitrary functions with ARM11 kernel permissions, and is required by some (poorly coded) applications.",
-      option, (void*)OPTION_SVCS, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_SVCS, change_opt, get_opt, 0 },
 
     { "Firmlaunch Hook",
       "Hooks firmlaunch to allow largemem games on o3DS. Also allows patching TWL/AGB on all consoles. Previously called 'Reboot hook' but renamed for accuracy.",
-      option, (void*)OPTION_REBOOT, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_REBOOT, change_opt, get_opt, 0 },
 
     { "Use EmuNAND",
       "Redirects NAND write/read to the SD. This supports both Gateway and redirected layouts.",
-      option, (void*)OPTION_EMUNAND, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_EMUNAND, change_opt, get_opt, 0 },
     { "Index",
       "Which EmuNAND to use. If you only have one, you want 0. Currently the maximum supported is 10 (0-9), but this is arbitrary.",
-      option, (void*)OPTION_EMUNAND_INDEX, change_opt, get_opt, 1, "" },
+      option, (void*)OPTION_EMUNAND_INDEX, change_opt, get_opt, 1 },
 
     { "Autoboot",
       "Boot the system automatically, unless the R key is held while booting.",
-      option, (void*)OPTION_AUTOBOOT, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_AUTOBOOT, change_opt, get_opt, 0 },
     { "Silent mode",
       "Suppress all debug output during autoboot. You'll see the screen turn on and then off once.",
-      option, (void*)OPTION_SILENCE, change_opt, get_opt, 1, "" },
+      option, (void*)OPTION_SILENCE, change_opt, get_opt, 1 },
 
     { "Dim Background",
       "Experimental! Dims colors on lighter backgrounds to improve readability with text. You won't notice the change until scrolling or exiting the current menu due to the way rendering works.",
-      option, (void*)OPTION_DIM_MODE, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_DIM_MODE, change_opt, get_opt, 0 },
 
     { "Accent color",
       "Changes the accent color in menus.",
-      option, (void*)OPTION_ACCENT_COLOR, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_ACCENT_COLOR, change_opt, get_opt, 0 },
 
     { "Brightness",
       "Changes the screeninit brightness in menu. WIP, only takes effect on reboot (this will change.)",
-      option, (void*)OPTION_BRIGHTNESS, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_BRIGHTNESS, change_opt, get_opt, 0 },
 
     // space
-    { "", "", unselectable, 0, NULL, NULL, 0, "" },
+    { "", "", unselectable, 0, NULL, NULL, 0 },
     // Patches.
-    { "Loader Options", "", unselectable, 0, NULL, NULL, 0, "" },
+    { "Loader Options", "", unselectable, 0, NULL, NULL, 0 },
 
     { "CPU - L2 cache",
       "Forces the system to use the L2 cache on all applications. If you have issues with crashes, try turning this off.",
-      option_n3ds, (void*)OPTION_LOADER_CPU_L2, change_opt, get_opt, 0, "" },
+      option_n3ds, (void*)OPTION_LOADER_CPU_L2, change_opt, get_opt, 0 },
     { "CPU - 804Mhz",
       "Forces the system to run in 804Mhz mode on all applications.",
-      option_n3ds, (void*)OPTION_LOADER_CPU_800MHZ, change_opt, get_opt, 0, "" },
+      option_n3ds, (void*)OPTION_LOADER_CPU_800MHZ, change_opt, get_opt, 0 },
     { "Language Emulation",
       "Reads language emulation configuration from `" PATH_LOCEMU "` and imitates the region/language.",
-      option, (void*)OPTION_LOADER_LANGEMU, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_LOADER_LANGEMU, change_opt, get_opt, 0 },
     { "Load Code Sections",
       "Loads code sections (text/ro/data) from SD card and patches afterwards.",
-      option, (void*)OPTION_LOADER_LOADCODE, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_LOADER_LOADCODE, change_opt, get_opt, 0 },
 
     { "Dump Code Sections",
       "Dumps code sections for titles to SD card the first time they're loaded. Slows things down on first launch.",
-      option, (void*)OPTION_LOADER_DUMPCODE, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_LOADER_DUMPCODE, change_opt, get_opt, 0 },
 
     { "+ System Titles",
       "Dumps code sections for system titles, too. Expect to sit at a blank screen for >3mins on the first time you do this, because it dumps everything.",
-      option, (void*)OPTION_LOADER_DUMPCODE_ALL, change_opt, get_opt, 1, "" },
+      option, (void*)OPTION_LOADER_DUMPCODE_ALL, change_opt, get_opt, 1 },
 
     // space
-    { "", "", unselectable, 0, NULL, NULL, 0, "" },
+    { "", "", unselectable, 0, NULL, NULL, 0 },
     // Patches.
-    { "Developer Options", "", unselectable, 0, NULL, NULL, 0, "" },
+    { "Developer Options", "", unselectable, 0, NULL, NULL, 0 },
 
     { "Step Through",
       "After each important step, [WAIT] will be shown and you'll need to press a key. Debug feature.",
-      option, (void*)OPTION_TRACE, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_TRACE, change_opt, get_opt, 0 },
     { "Verbose",
       "Output more debug information than the average user needs.",
-      option, (void*)OPTION_OVERLY_VERBOSE, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_OVERLY_VERBOSE, change_opt, get_opt, 0 },
     { "Logging",
       "Save logs to `" LOCALSTATEDIR "` as `boot.log` and `loader.log`. Slows operation a bit.",
-      option, (void*)OPTION_SAVE_LOGS, change_opt, get_opt, 0, "" },
+      option, (void*)OPTION_SAVE_LOGS, change_opt, get_opt, 0 },
 
     // Sentinel.
-    { NULL, NULL, 0, 0, NULL, NULL, 0, "" }, // cursor_min and cursor_max are stored in the last two.
+    { NULL, NULL, 0, 0, NULL, NULL, 0 }, // cursor_min and cursor_max are stored in the last two.
 };
 
 static int current_menu_index_patches = 0;
@@ -240,7 +240,7 @@ menu_options()
 #define REL "master"
 #endif
 
-#define ln(s) { s, "", unselectable, 0, NULL, NULL, 0, "" }
+#define ln(s) { s, "", unselectable, 0, NULL, NULL, 0 }
 
 static struct options_s help_d[] = {
     ln("About"),
@@ -269,7 +269,7 @@ static struct options_s help_d[] = {
     ln("  forgotten (yell at me, please!)"),
     ln(""),
     ln("  <https://github.com/chaoskagami/corbenik>"),
-    { NULL, NULL, unselectable, 0, NULL, NULL, 0, "" }, // cursor_min and cursor_max are stored in the last two.
+    { NULL, NULL, unselectable, 0, NULL, NULL, 0 }, // cursor_min and cursor_max are stored in the last two.
 };
 
 void
@@ -311,13 +311,13 @@ void chainload_menu();
 static struct options_s config_opts[] = {
     { "Options",
       "Internal options for the CFW.\nThese are part of " FW_NAME " itself.",
-      option, 0, menu_options, NULL, 0, "" },
+      option, 0, menu_options, NULL, 0 },
     { "Patches",
       "External bytecode patches found in `" PATH_PATCHES "`.\nYou can choose which to enable.",
-      option, 0, menu_patches, NULL, 0, "" },
+      option, 0, menu_patches, NULL, 0 },
 
     // Sentinel.
-    { NULL, NULL, 0, 0, NULL, NULL, 0, "" }, // cursor_min and cursor_max are stored in the last two.
+    { NULL, NULL, 0, 0, NULL, NULL, 0 }, // cursor_min and cursor_max are stored in the last two.
 };
 
 void config_main_menu() {
@@ -331,27 +331,27 @@ void config_main_menu() {
 static struct options_s main_s[] = {
     { "Configuration",
       "Configuration options for the CFW.",
-      option, 0, config_main_menu, NULL, 0, "" },
+      option, 0, config_main_menu, NULL, 0 },
     { "Readme",
       "Mini-readme.\nWhy are you opening help on this, though?\nThat's kind of silly.",
-      option, 0, menu_help, NULL, 0, "" },
+      option, 0, menu_help, NULL, 0 },
     { "Reboot",
       "Reboots the console.",
-      option, 0, reset, NULL, 0, "" },
+      option, 0, reset, NULL, 0 },
     { "Power off",
       "Powers off the console.",
-      option, 0, poweroff, NULL, 0, "" },
+      option, 0, poweroff, NULL, 0 },
 #if defined(CHAINLOADER) && CHAINLOADER == 1
     { "Chainload",
       "Boot another ARM9 payload file.",
-       option, 0, chainload_menu, NULL, 0, "" },
+       option, 0, chainload_menu, NULL, 0 },
 #endif
     { "Boot Firmware",
       "Generates caches, patches the firmware, and boots it.\nMake sure to 'Save Configuration' first if any options changed.",
-      break_menu, 0, NULL, NULL, 0, "" },
+      break_menu, 0, NULL, NULL, 0 },
 
     // Sentinel.
-    { NULL, NULL, 0, 0, NULL, NULL, 0, "" }, // cursor_min and cursor_max are stored in the last two.
+    { NULL, NULL, 0, 0, NULL, NULL, 0 }, // cursor_min and cursor_max are stored in the last two.
 };
 
 void