serials_releaser::serials_releaser(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) { ui.setupUi(this); set_serials_list(); // copy code to clipboard QObject::connect(ui.pushButton_copycode, SIGNAL(clicked()), this, SLOT(copy_code())); // add serial QObject::connect(ui.pushButton_addserial, SIGNAL(clicked()), this, SLOT(add_serial())); }
uint32_t * trap_install(unsigned idx, void (*trap_func)(), const struct exc_copy_block *pref) { uint32_t *start; uint32_t *vector; unsigned size; size = pref->size; if(trap_func != NULL) size += 4*sizeof(vector[0]); start = exc_vector_address(idx, size); vector = start; copy_code(vector, pref); vector = (uint32_t *)((uintptr_t)vector + pref->size); // // KLUDGE: We need to rework the kernel entry sequences to make // the following stuff cleaner. // // Careful with these instructions sequences. See trap_chain_addr() // below for rationale. // if(trap_func != NULL) { // lis %r3, func >> 16 // ori %r3, func & 0xffff // mtlr %r3 // ba PPC_KERENTRY_COMMON vector[0] = MK_OPCODE(15, 3, 0, (uint32_t)trap_func >> 16); vector[1] = MK_OPCODE(24, 3, 3, (uint32_t)trap_func & 0xffff); vector[2] = 0x7c6803a6; vector[3] = 0x48000002 | PPC_KERENTRY_COMMON; flush_icache(vector, 4*sizeof(vector[0])); }
void copy_vm_code() { copy_code(&_syspage_ptr->un.ppc.exceptptr[PPC400_EXC_DTLB_MISS], &__exc_dtlb_400); copy_code(&_syspage_ptr->un.ppc.exceptptr[PPC400_EXC_ITLB_MISS], &__exc_itlb_400); }
void install_traps() { copy_code((void*)((unsigned)_syspage_ptr->un.sh.exceptptr + SH_EXC_GENERAL), (void*)__exc_general_start, (void*)__exc_general_end); }