FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Crash Utility

 
 
LinkBack Thread Tools
 
Old 03-01-2011, 06:42 AM
Wen Congyang
 
Default debuginfo does not pick user_regs_struct on x86_64

On RHEL6(x86_64), debuginfo does not pick user_regs_struct on x86_64.

# gdb /usr/lib/debug/lib/modules/2.6.32-71.el6.x86_64/vmlinux
GNU gdb (GDB) Red Hat Enterprise Linux (7.1-29.el6)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/lib/debug/lib/modules/2.6.32-71.el6.x86_64/vmlinux...done.
(gdb) ptype struct user_regs_struct
No struct type named user_regs_struct.

---
x86_64.c | 25 +++++++++++++++++++++++++
1 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/x86_64.c b/x86_64.c
index a782334..853a1aa 100644
--- a/x86_64.c
+++ b/x86_64.c
@@ -332,6 +332,31 @@ x86_64_init(int when)
MEMBER_OFFSET_INIT(user_regs_struct_ss,
"user_regs_struct", "ss");
STRUCT_SIZE_INIT(user_regs_struct, "user_regs_struct");
+ if (!VALID_STRUCT(user_regs_struct)) {
+ /* Use this hardwired version -- sometimes the
+ * debuginfo doesn't pick this up even though
+ * it exists in the kernel; it shouldn't change.
+ */
+ struct x86_64_user_regs_struct {
+ unsigned long long r15, r14, r13, r12, bp, bx;
+ unsigned long long r11, r10, r9, r8, ax, cx, dx;
+ unsigned long long si, di, orig_ax, ip, cs;
+ unsigned long long flags, sp, ss, fs_base;
+ unsigned long long gs_base, ds, es, fs, gs;
+ };
+ ASSIGN_SIZE(user_regs_struct) =
+ sizeof(struct x86_64_user_regs_struct);
+ ASSIGN_OFFSET(user_regs_struct_rip) =
+ offsetof(struct x86_64_user_regs_struct, ip);
+ ASSIGN_OFFSET(user_regs_struct_rsp) =
+ offsetof(struct x86_64_user_regs_struct, sp);
+ ASSIGN_OFFSET(user_regs_struct_eflags) =
+ offsetof(struct x86_64_user_regs_struct, flags);
+ ASSIGN_OFFSET(user_regs_struct_cs) =
+ offsetof(struct x86_64_user_regs_struct, cs);
+ ASSIGN_OFFSET(user_regs_struct_ss) =
+ offsetof(struct x86_64_user_regs_struct, ss);
+ }
machdep->vmalloc_start = x86_64_vmalloc_start;
vt->vmalloc_start = machdep->vmalloc_start();
machdep->init_kernel_pgd();
--
1.7.1

--
Crash-utility mailing list
Crash-utility@redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility
 

Thread Tools




All times are GMT. The time now is 09:25 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org