[prev in list] [next in list] [prev in thread] [next in thread]
List: user-mode-linux-user
Subject: [uml-user] can't trace kmem_cache_init with gdb
From: Real Name <enjoymindful () gmail ! com>
Date: 2014-08-16 15:27:31
Message-ID: 20140816152731.GA6653 () name
[Download RAW message or body]
hi,
I can't trace kmem_cache_init function with GDB, because gdb jump to wrong source \
line. Is there anyone know how to fix this issue?
[real@name tmp]$ tar -Jxf linux-3.12.6.tar.xz
[real@name tmp]$ cd linux-3.12.6/
[real@name linux-3.12.6]$ make ARCH=um defconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/zconf.lex.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf --defconfig arch/x86/um/Kconfig
#
# configuration written to .config
#
[real@name linux-3.12.6]$ make ARCH=um linux 1>log.txt
arch/um/kernel/ptrace.c: In function ‘syscall_trace_enter':
arch/um/kernel/ptrace.c:178:32: warning: ignoring return value of \
‘tracehook_report_syscall_entry', declared with attribute warn_unused_result \
[-Wunused-result] tracehook_report_syscall_entry(regs);
^
[real@name linux-3.12.6]$
[real@name linux-3.12.6]$ cat gdb.txt
file linux
handle SIGSEGV pass nostop noprint
handle SIGUSR1 pass nostop noprint
b kmem_cache_init
b create_boot_cache
r ubda=/home/real/uml/linux-3.12.6/Fedora20-x86-root_fs mem=256m
[real@name linux-3.12.6]$
[real@name linux-3.12.6]$ gdb -q -x gdb.txt
Breakpoint 1 at 0x8050a57: file mm/slab.c, line 1512.
Breakpoint 2 at 0x804f7c5: file mm/slab_common.c, line 296.
Locating the bottom of the address space ... 0x10000
Locating the top of the address space ... 0xffffd000
Core dump limits :
soft - 0
hard - NONE
Checking that ptrace can change system call numbers...Detaching after fork from child \
process 16850. OK
Checking syscall emulation patch for ptrace...Detaching after fork from child process \
16851. OK
Checking advanced syscall emulation patch for ptrace...Detaching after fork from \
child process 16852. OK
Checking for tmpfs mount on /dev/shm.../dev/shm...nothing mounted on /dev/shm
Checking PROT_EXEC mmap in /tmp/...OK
Detaching after fork from child process 16853.
Checking for the skas3 patch in the host:
- /proc/mm...not found: No such file or directory
- PTRACE_FAULTINFO...Detaching after fork from child process 16854.
not found
- PTRACE_LDT...Detaching after fork from child process 16855.
not found
UML running in SKAS0 mode
Breakpoint 1, kmem_cache_init () at mm/slab.c:1512
1512 {
Missing separate debuginfos, use: debuginfo-install glibc-2.17-20.fc19.i686
(gdb) c
Continuing.
Breakpoint 2, create_boot_cache (s=0x82bdaf8 <kmem_cache_boot>, name=0x82650f5 \
"kmem_cache", size=92, flags=8192) at mm/slab_common.c:296
296 {
(gdb) n
299 s->name = name;
(gdb)
296 {
(gdb)
299 s->name = name;
(gdb)
300 s->size = s->object_size = size;
(gdb)
301 s->align = calculate_alignment(flags, ARCH_KMALLOC_MINALIGN, size);
(gdb)
302 err = __kmem_cache_create(s, flags);
(gdb) s
__kmem_cache_create (cachep=0x82bdaf8 <kmem_cache_boot>, flags=8192) at \
mm/slab.c:2222 2222 {
(gdb) n
2226 size_t size = cachep->size;
(gdb)
2251 if (size & (BYTES_PER_WORD - 1)) {
(gdb)
2264 if (flags & SLAB_RED_ZONE) {
(gdb)
2273 if (ralign < cachep->align) {
(gdb)
2278 flags &= ~(SLAB_RED_ZONE | SLAB_STORE_USER);
(gdb)
2282 cachep->align = ralign;
(gdb)
2284 if (slab_is_available())
(gdb) p slab_state
$1 = DOWN
(gdb) where
#0 __kmem_cache_create (cachep=0x82bdaf8 <kmem_cache_boot>, flags=8192) at \
mm/slab.c:2284 #1 0x0804f7f6 in create_boot_cache (s=0x82bdaf8 <kmem_cache_boot>, \
name=0x82650f5 "kmem_cache", size=92, flags=8192) at mm/slab_common.c:302
#2 0x08050b1b in kmem_cache_init () at mm/slab.c:1559
#3 0x08049486 in mm_init () at init/main.c:468
#4 start_kernel () at init/main.c:532
#5 0x0804a6d8 in start_kernel_proc (unused=0x0) at arch/um/kernel/skas/process.c:46
#6 0x08059323 in new_thread_handler () at arch/um/kernel/process.c:140
#7 0x00000000 in ?? ()
(gdb) l mm/slab.c:2284
2279 /*
2280 * 4) Store it.
2281 */
2282 cachep->align = ralign;
2283
2284 if (slab_is_available())
2285 gfp = GFP_KERNEL;
2286 else
2287 gfp = GFP_NOWAIT;
2288
(gdb) p slab_state
$2 = DOWN
(gdb) n
2285 gfp = GFP_KERNEL;
(gdb) n
2289 setup_node_pointer(cachep);
(gdb) n
2285 gfp = GFP_KERNEL;
Start from 2289, gdb start jump to wrong source line. GDB should jump to
"2287 gfp = GFP_NOWAIT;"
But it never hit it. And from here, gdb can't match the execuable UML kernel with \
source.
(gdb) n
2327 if ((size >= (PAGE_SIZE >> 3)) && !slab_early_init &&
And I found that "file" command says the file format is different.
[real@name mm]$ pwd
/tmp/linux-3.12.6/mm
[real@name mm]$ file *.c | sort -k 2
percpu-vm.c: ASCII text
filemap.c: assembler source, ASCII text
memcontrol.c: assembler source, ASCII text
ksm.c: C source, ASCII text
mmap.c: C source, ASCII text
rmap.c: C source, ASCII text
slab.c: C source, ASCII text
slob.c: C source, ASCII text
slub.c: C source, ASCII text
Why percpu-vm.c, filemap.c and memcontrol.c has different format?
thanks
------------------------------------------------------------------------------
_______________________________________________
User-mode-linux-user mailing list
User-mode-linux-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-user
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic