4
votes

i am trying to emulate cavium octeon's mips64 linux kernel on Qemu.I am currently having some issues with use mode init code and want to debug init.i am starting the Qemu using -s -S option in the command line and running the gdb using command

ddd --debugger /OCTEON-SDK/tools/bin/mips64-octeon-linux-gnu-gdb /OCTEON-SDK/linux/kernel_2.6/linux/vmlinux

and then attaching the gdb with command

target remote localhost:1234

The gdb is currently showing only the instructions running in kernel space.

What i want to ask is there any method by which i can debug the usermode init and libraries instructions step by step as in case of kernel space? For example if printf is issued from init then i want to see that which instructions are being executed in the libraries and how the control is returned to kernel ?

1
It will depend if the gdb support for MIPS can handle the transition between kernel and user space. Try putting a break-point on resume_userspace in the kernel and single step from there and see if the transition is handled.stsquad

1 Answers

0
votes

I have managed to step debug BusyBox's /sbin/init using the procedure described at: Is it possible to use gdb and qemu to debug linux user space programs and kernel space simultaneously?

The only additional things you have to keep in mind are:

  • /sbin/init is just a symlink to busybox, so you must use /bin/busybox as the object file
  • the "main" function for /sbin/init is actually init_main, following BusyBox' convention of calling the main for each pseudo-executable as <exec>_main

It is a bit flaky, but mostly just works.