# =========================================================================================== # This script prints addresses and offsets required for PEEDI to enable OS thread awareness. # It is used within .gdbinit only once to obtain the OS section. # # Use the name after the define to enable the selected script. # # For example: ecos # # =========================================================================================== define ecos printf "[OS_ECOS]\r\n" printf "BASE = 4, 0x%X, 0\r\n", &_ZN10Cyg_Thread11thread_listE printf "NEXT = 4, 0x%X\r\n", &((Cyg_Thread*)0)->list_next printf "PID = 2, 0x%X\r\n", &((Cyg_Thread*)0)->unique_id printf "NAME = 32, 0x%X, 0\r\n", &((Cyg_Thread*)0)->name printf "REGISTER = r0, 0x%X, 0x00\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = r1, 0x%X, 0x04\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = r2, 0x%X, 0x08\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = r3, 0x%X, 0x0C\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = r4, 0x%X, 0x10\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = r5, 0x%X, 0x14\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = r6, 0x%X, 0x18\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = r7, 0x%X, 0x1C\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = r8, 0x%X, 0x20\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = r9, 0x%X, 0x24\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = r10,0x%X, 0x28\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = r12,0x%X, 0x30\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = sp, 0x%X, 0x34\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = lr, 0x%X, 0x38\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = pc, 0x%X, 0x48\r\n", &((Cyg_Thread*)0)->stack_ptr printf "REGISTER = cpsr,0x%X,0x40\r\n", &((Cyg_Thread*)0)->stack_ptr end define linux_kernel printf "[OS_LINUX_KERNEL]\r\n" printf "BASE = 4, 0x%X\r\n", &init_task printf "NEXT = 4, -0x%X\r\n", &((struct task_struct*)0)->tasks.next printf "NEXT_THREAD = 4, -0x%X\r\n", &((struct task_struct*)0)->thread_group.next printf "PID = 4, 0x%X\r\n", &((struct task_struct*)0)->pid printf "NAME = 16, 0x%X\r\n", &((struct task_struct*)0)->comm printf "REGISTER = r4, 0x%X, 0x%X+0x00\r\n", &((struct task_struct*)0)->stack, &((struct thread_info*)0)->cpu_context printf "REGISTER = r5, 0x%X, 0x%X+0x04\r\n", &((struct task_struct*)0)->stack, &((struct thread_info*)0)->cpu_context printf "REGISTER = r6, 0x%X, 0x%X+0x08\r\n", &((struct task_struct*)0)->stack, &((struct thread_info*)0)->cpu_context printf "REGISTER = r7, 0x%X, 0x%X+0x0C\r\n", &((struct task_struct*)0)->stack, &((struct thread_info*)0)->cpu_context printf "REGISTER = r8, 0x%X, 0x%X+0x10\r\n", &((struct task_struct*)0)->stack, &((struct thread_info*)0)->cpu_context printf "REGISTER = r9, 0x%X, 0x%X+0x14\r\n", &((struct task_struct*)0)->stack, &((struct thread_info*)0)->cpu_context printf "REGISTER = r10,0x%X, 0x%X+0x18\r\n", &((struct task_struct*)0)->stack, &((struct thread_info*)0)->cpu_context printf "REGISTER = r11,0x%X, 0x%X+0x1C\r\n", &((struct task_struct*)0)->stack, &((struct thread_info*)0)->cpu_context printf "REGISTER = sp, 0x%X, 0x%X+0x20\r\n", &((struct task_struct*)0)->stack, &((struct thread_info*)0)->cpu_context printf "REGISTER = lr, 0x%X, 0x%X+0x24\r\n", &((struct task_struct*)0)->stack, &((struct thread_info*)0)->cpu_context printf "REGISTER = pc, 0x%X, 0x%X+0x24\r\n", &((struct task_struct*)0)->stack, &((struct thread_info*)0)->cpu_context end define linux_user printf "[OS_LINUX_USER]\r\n" printf "BASE = 4, 0x%X\r\n", &init_task printf "NEXT = 4, -0x%X\r\n", &((struct task_struct*)0)->tasks.next printf "NEXT_THREAD = 4, -0x%X\r\n", &((struct task_struct*)0)->thread_group.next printf "PID = 4, 0x%X\r\n", &((struct task_struct*)0)->pid printf "NAME = 16, 0x%X\r\n", &((struct task_struct*)0)->comm printf "REGISTER = r0, 0x%X, 0x2000-0x50+0x00\r\n", &((struct task_struct*)0)->stack printf "REGISTER = r1, 0x%X, 0x2000-0x50+0x04\r\n", &((struct task_struct*)0)->stack printf "REGISTER = r2, 0x%X, 0x2000-0x50+0x08\r\n", &((struct task_struct*)0)->stack printf "REGISTER = r3, 0x%X, 0x2000-0x50+0x0C\r\n", &((struct task_struct*)0)->stack printf "REGISTER = r4, 0x%X, 0x2000-0x50+0x10\r\n", &((struct task_struct*)0)->stack printf "REGISTER = r5, 0x%X, 0x2000-0x50+0x14\r\n", &((struct task_struct*)0)->stack printf "REGISTER = r6, 0x%X, 0x2000-0x50+0x18\r\n", &((struct task_struct*)0)->stack printf "REGISTER = r7, 0x%X, 0x2000-0x50+0x1C\r\n", &((struct task_struct*)0)->stack printf "REGISTER = r8, 0x%X, 0x2000-0x50+0x20\r\n", &((struct task_struct*)0)->stack printf "REGISTER = r9, 0x%X, 0x2000-0x50+0x24\r\n", &((struct task_struct*)0)->stack printf "REGISTER = r10,0x%X, 0x2000-0x50+0x28\r\n", &((struct task_struct*)0)->stack printf "REGISTER = r12,0x%X, 0x2000-0x50+0x30\r\n", &((struct task_struct*)0)->stack printf "REGISTER = sp, 0x%X, 0x2000-0x50+0x34\r\n", &((struct task_struct*)0)->stack printf "REGISTER = lr, 0x%X, 0x2000-0x50+0x38\r\n", &((struct task_struct*)0)->stack printf "REGISTER = pc, 0x%X, 0x2000-0x50+0x3C\r\n", &((struct task_struct*)0)->stack printf "REGISTER = cpsr,0x%X,0x2000-0x50+0x40\r\n", &((struct task_struct*)0)->stack end