// native sampleMethod void sampleMethod(JXValue *results, int argc) { for (int i = 0; i < argc; i++) { std::string str; ConvertResult(&results[i], str); if (compare_base[i] != str.c_str()[0]) { flush_console("FAIL! Item(%d) : %s \n", i, str.c_str()); exit(-1); } } JXValue out; // fnc represents the JS side function fnc = &results[9]; param1 = results + 3; param2 = results + 4; // call JS side fnc with 2 parameters and get // the result to 'out' JX_CallFunction(fnc, (results + 3), 2, &out); // make fnc persistent so we can call it later again // see 'int main' for second call JX_MakePersistent(fnc); JX_MakePersistent(param1); JX_MakePersistent(param2); assert(JX_GetDataLength(&out) == 11 && "Expected return value was 'test{\"a\":3}"); JX_Free(&out); assert(out.data_ == NULL && out.size_ == 0 && "JX_FreeResultData leaks?"); }
static void smdkc110_pm_restart(char mode, const char *cmd) { flush_console(); /* On a normal reboot, INFORM6 will contain a small integer * reason code from the notifier hook. On a panic, it will * contain the 0xee we set at boot. Write 0xbb to differentiate * a watchdog-timeout-and-reboot (0xee) from a controlled reboot * (0xbb) */ if (__raw_readl(S5P_INFORM6) == 0xee) __raw_writel(0xbb, S5P_INFORM6); arm_machine_restart(mode, cmd); }
void sampleMethod(JXValue *results, int argc) { for (int i = 0; i < argc; i++) { std::string str; ConvertResult(&results[i], str); if (compare_base[i] != str.c_str()[0]) { flush_console("FAIL! Item(%d) : %s \n", i, str.c_str()); exit(-1); } } JXValue out; JX_CallFunction(&results[9], (results + 3), 2, &out); assert(JX_GetDataLength(&out) == 11 && "Expected return value was 'test{\"a\":3}"); JX_Free(&out); assert(out.data_ == NULL && out.size_ == 0 && "JX_FreeResultData leaks?"); }
void crashdump(u32 exception,u64 * context) { console_set_colors(0x000080ff, 0xffffffff); console_init(); console_clrscr(); switch(exception) { case 0x200: strcpy(text,"\nMachine Check!\n\n"); break; case 0x380: strcpy(text,"\nData SegFault!\n\n"); break; case 0x480: strcpy(text,"\nInstruction SegFault!\n\n"); break; case 0x500: strcpy(text,"\nExternal Interrupt!\n\n"); break; case 0x600: strcpy(text,"\nAlignment!\n\n"); break; case 0x700: strcpy(text,"\nProgram Interrupt!\n\n"); break; case 0x800: strcpy(text,"\nFPU Unavailable!\n\n"); break; case 0x900: strcpy(text,"\nDecrementer!\n\n"); break; case 0x980: strcpy(text,"\nHV Decrementer!\n\n"); break; case 0xC00: strcpy(text,"\nSystem Call!\n\n"); break; case 0xD00: strcpy(text,"\nTrace!\n\n"); break; case 0xE00: strcpy(text,"\nFPU Assist!\n\n"); break; case 0xF20: strcpy(text,"\nVPU Unavailable!\n\n"); break; case 0x1600: strcpy(text,"\nMaintenance!\n\n"); break; case 0x1700: strcpy(text,"\nVMX Assist!\n\n"); break; case 0x1800: strcpy(text,"\nThermal Managment!\n\n"); break; case 0: strcpy(text,"\nSegmentation Fault!\n\n"); break; default: sprintf(text,"\nException Vector! (%p)\n\n",exception); break; } flush_console(); sprintf(text,"%spir=%016llx dar=%016llx\nIar=%016llx Msr=%016llx lr=%016llx\n\n", text,context[39],context[38],context[36],context[37],context[32]); flush_console(); int i; for(i=0;i<8;++i) sprintf(text,"%s%02d=%016llx %02d=%016llx %02d=%016llx %02d=%016llx\n", text,i,context[i],i+8,context[i+8],i+16,context[i+16],i+24,context[i+24]); flush_console(); _cpu_print_stack((void*)(u32)context[36],(void*)(u32)context[32],(void*)(u32)context[1]); strcat(text,"\n\nOn uart: 'x'=Xell, 'h'=Halt, 'r'=Reboot\n\n"); flush_console(); for(;;){ switch(getch()){ case 'x': exit(0); break; case 'h': xenon_smc_power_shutdown(); for(;;); break; case 'r': xenon_smc_power_reboot(); for(;;); break; } } }
void set_console(struct con_ops *driver) { con_driver = driver; if (driver) flush_console(); }
static void mid_pm_restart(char mode, const char *cmd) { flush_console(); arm_machine_restart(mode, cmd); }