[Crash-utility] struct structname.member1,member2,member3, ...

Dave Anderson anderson at redhat.com
Mon Oct 23 15:51:36 UTC 2006


Olivier Daudel wrote:

> Hi Dave,
> 1) With this new patch, i think we are not far from your goals.
> But i understand that to change somthing in struct, union, etc. is rather
> "dangerous".
> Perhaps it would be preferable to implement this attempt in an independent
> module ?
>
> The command cmd_struct(), cmd_union() and cmd_pointer() have been unified
> and also "*" supports -l now.
> It was not the case before (i missed something ?).
> To take care of the differences between struct, union and *, we have mainely
> one instruction.
>
> 2) Nothing to do with the patch, but may be there is still something wrong
> with struct -o (in standard 3.8 and also in my new version):
>
> crash> struct -o ipc_id_ary
> struct ipc_id_ary {
>   [0] int size;
>   [4] struct kern_ipc_perm *p[0];
> }
> SIZE: 4
>
> We should have SIZE greater than 4 ?
>

When the array dimension is 0, it doesn't take up any space:


  // -------------------- junk.c ------------------------

  #include <stdio.h>

  struct junk {
          int a;
          long b;
          char *c;
  };

  struct container {
          long size;
          struct junk *empty[0];
  } example;

  main()
  {
          printf("sizeof(long): %d\n", sizeof(long));
          printf("sizeof(struct junk): %d\n", sizeof(struct junk));
          printf("sizeof(struct container): %d\n", sizeof(struct container));
          printf("sizeof(example): %d\n", sizeof(example));
  }


  # ./junk
  sizeof(long): 4
  sizeof(struct junk): 12
  sizeof(struct container): 4
  sizeof(example): 4
  #


When the kernel does its initialization, it does this in order
to allocate enough space for a variable number of kern_ipc_perm
structure pointers:

   ids->entries = ipc_rcu_alloc(sizeof(struct kern_ipc_perm *)*size +
                                sizeof(struct ipc_id_ary));

Anyway, I'll take a look at your patch, and if it looks
safe/sane and tests OK, I'll consider folding it in.

Thanks,
  Dave


> Olivier
>
> crash> struct inode.i_uid,i_gid,i_alloc_sem f605b31c
>   i_uid = 0,
>   i_gid = 5,
>   i_alloc_sem = {
>     count = 0,
>     wait_lock = {
>       slock = 1,
>       magic = 3735899821,
>       break_lock = 0
>     },
>     wait_list = {
>       next = 0xf605b3c4,
>       prev = 0xf605b3c4
>     }
>   },
>
> I don't think, it would be very easy to have this result with grep and we
> don't have the -R option
> as in task... (if i am correct).
>
> crash> struct inode.i_uid,i_gid,i_alloc_sem f605b31c 3
>   i_uid = 0,
>   i_gid = 5,
>   i_alloc_sem = {
>     count = 0,
>     wait_lock = {
>       slock = 1,
>       magic = 3735899821,
>       break_lock = 0
>     },
>     wait_list = {
>       next = 0xf605b3c4,
>       prev = 0xf605b3c4
>     }
>   },
>
>   i_uid = 0,
>   i_gid = 0,
>   i_alloc_sem = {
>     count = 0,
>     wait_lock = {
>       slock = 1,
>       magic = 3735899821,
>       break_lock = 0
>     },
>     wait_list = {
>       next = 0xf605b53c,
>       prev = 0xf605b53c
>     }
>   },
>
>   i_uid = 0,
>   i_gid = 0,
>   i_alloc_sem = {
>     count = 0,
>     wait_lock = {
>       slock = 1,
>       magic = 3735899821,
>       break_lock = 0
>     },
>     wait_list = {
>       next = 0xf605b6b4,
>       prev = 0xf605b6b4
>     }
>   },
>
> crash> struct inode.i_list  f605b31c 3
>   i_list = {
>     next = 0xf605b49c,
>     prev = 0xf7b4e1cc
>   },
>
>   i_list = {
>     next = 0xf60cadb8,
>     prev = 0xf605b324
>   },
>
>   i_list = {
>     next = 0xf60e6458,
>     prev = 0xf60e6278
>   },
>
> crash> struct inode -r  f605b31c 3
> f605b31c:  00000000 00000000 f605b49c f7b4e1cc   ................
> f605b32c:  f7d76bfc f6b6903c f6d8ea60 f6d8ea60   .k..<...`...`...
> f605b33c:  00000002 00000001 00002190 00000001   .........!......
> f605b34c:  00000000 00000005 08800000 00000000   ................
> f605b35c:  00000000 453bb0ec 0606fb28 453bb0ec   ......;E(.....;E
> f605b36c:  0606fb28 453ba008 2330b3e8 0000000a   (.....;E..0#....
> f605b37c:  00000400 00000000 00000000 00000000   ................
> f605b38c:  00000001 dead4ead 00000000 00000001   .....N..........
> f605b39c:  00000000 00000001 dead4ead 00000000   .........N......
> f605b3ac:  f605b3ac f605b3ac 00000000 00000001   ................
> f605b3bc:  dead4ead 00000000 f605b3c4 f605b3c4   .N..............
> f605b3cc:  c036d760 c036a7a0 f7d72200 00000000   `.6...6.."......
> f605b3dc:  f605b3e0 f605b31c 00000000 00000220   ............ ...
> f605b3ec:  00000000 01000000 deaf1eed 00000000   ................
> f605b3fc:  00000000 00000000 00010001 f605b408   ................
> f605b40c:  f605b408 00000001 dead4ead 00000000   .........N......
> f605b41c:  00000000 00000000 00000000 c0485540   ............ at UH.
> f605b42c:  000000d2 c0369b88 00000001 dead4ead   ......6......N..
> f605b43c:  00000000 f605b440 f605b440 00000000   .... at ...@.......
> f605b44c:  00000000 00000000 f7da1440 f6b69164   ........ at ...d...
> f605b45c:  00000000 00000000 f7da1404 00000000   ................
> f605b46c:  00000000 00000000 00000000 00000000   ................
> f605b47c:  00000000 00000000 00000001 00000000   ................
> f605b48c:  f60f9000 00000000                     ........
>
> f605b494:  00000000 00000000 f60cadb8 f605b324   ............$...
> f605b4a4:  f674832c f6b6990c f60493ac f60493ac   ,.t.............
> f605b4b4:  00002544 00000001 00001180 00000001   D%..............
> f605b4c4:  00000000 00000000 00000000 00000000   ................
> f605b4d4:  00000000 453ba008 20ce71a8 453ba008   ......;E.q. ..;E
> f605b4e4:  20ce71a8 453ba008 20ce71a8 0000000a   .q. ..;E.q. ....
> f605b4f4:  00001000 00000000 00000000 00000000   ................
> f605b504:  00000001 dead4ead 00000000 00000001   .....N..........
> f605b514:  00000000 00000001 dead4ead 00000000   .........N......
> f605b524:  f605b524 f605b524 00000000 00000001   $...$...........
> f605b534:  dead4ead 00000000 f605b53c f605b53c   .N......<...<...
> f605b544:  c04854e0 c036ab40 f7fcf200 00000000   .TH. at .6.........
> f605b554:  f605b558 f605b494 00000000 00000220   X........... ...
> f605b564:  00000000 01000000 deaf1eed 00000000   ................
> f605b574:  00000000 00000000 00010001 f605b580   ................
> f605b584:  f605b580 00000001 dead4ead 00000000   .........N......
> f605b594:  00000000 00000000 00000000 c0485540   ............ at UH.
> f605b5a4:  000000d2 c0369b88 00000001 dead4ead   ......6......N..
> f605b5b4:  00000000 f605b5b8 f605b5b8 00000000   ................
> f605b5c4:  00000000 00000000 f605b5cc f605b5cc   ................
> f605b5d4:  f7aa7400 00000000 00000000 00000000   .t..............
> f605b5e4:  00000000 00000000 00000000 00000007   ................
> f605b5f4:  00000000 00000000 00000000 00000000   ................
> f605b604:  00000000 00000000                     ........
>
> f605b60c:  00000000 00000000 f60e6458 f60e6278   ........Xd..xb..
> f605b61c:  f605b794 f609e3ac f6067430 f6067430   ........0t..0t..
> f605b62c:  000022db 00000001 00008124 00000001   ."......$.......
> f605b63c:  00000000 00000000 00000000 00001000   ................
> f605b64c:  00000000 453b9fe3 292fe200 453b9fe3   ......;E../)..;E
> f605b65c:  292fe200 453b9fe3 292fe200 0000000c   ../)..;E../)....
> f605b66c:  00001000 00000000 00000000 00000000   ................
> f605b67c:  00000001 dead4ead 00000000 00000001   .....N..........
> f605b68c:  00000000 00000001 dead4ead 00000000   .........N......
> f605b69c:  f605b69c f605b69c 00000000 00000001   ................
> f605b6ac:  dead4ead 00000000 f605b6b4 f605b6b4   .N..............
> f605b6bc:  c04854e0 c036d400 f7eaf400 00000000   .TH...6.........
> f605b6cc:  f605b6d0 f605b60c 00000000 00000220   ............ ...
> f605b6dc:  00000000 01000000 deaf1eed 00000000   ................
> f605b6ec:  00000000 00000000 00010001 f605b6f8   ................
> f605b6fc:  f605b6f8 00000001 dead4ead 00000000   .........N......
> f605b70c:  00000000 00000000 00000000 c036d380   ..............6.
> f605b71c:  000000d2 c036d3b0 00000001 dead4ead   ......6......N..
> f605b72c:  00000000 f605b730 f605b730 00000000   ....0...0.......
> f605b73c:  00000000 00000000 f605b744 f605b744   ........D...D...
> f605b74c:  00000000 00000000 00000000 00000000   ................
> f605b75c:  00000000 00000000 00000000 00000000   ................
> f605b76c:  00000000 00000000 00000000 00000000   ................
> f605b77c:  00000000 00000000                     ........
>
> If you correlate the dump with the previous display, i think the dump is
> correct.
>
> crash> ps 1
>    PID    PPID  CPU   TASK    ST  %MEM     VSZ    RSS  COMM
>       1      0   0  f7e8caa0  IN   0.0       0      0  init
> crash> struct task_struct.sibling
> struct task_struct {
>    [176] struct list_head sibling;
> }
> crash> struct task_struct.pid,tgid,pending -l task_struct.sibling 0xf7e8c0d0
>   pid = 2,
>   tgid = 2,
>   pending = {
>     list = {
>       next = 0xf7e8c494,
>       prev = 0xf7e8c494
>     },
>     signal = {
>       sig = {0, 0}
>     }
>   },
>
> crash> struct task_struct.pid,tgid,pending -l 176 0xf7e8c0d0
>   pid = 2,
>   tgid = 2,
>   pending = {
>     list = {
>       next = 0xf7e8c494,
>       prev = 0xf7e8c494
>     },
>     signal = {
>       sig = {0, 0}
>     }
>   },
>
> I don't think you can do that with task (-l not supported)
>
> crash> * task_struct.pid,tgid,pending -l 176 0xf7e8c0d0
>   pid = 2,
>   tgid = 2,
>   pending = {
>     list = {
>       next = 0xf7e8c494,
>       prev = 0xf7e8c494
>     },
>     signal = {
>       sig = {0, 0}
>     }
>   },
>
>   ------------------------------------------------------------------------------------------------------------------------
>                     Name: symbols.patch
>    symbols.patch    Type: unspecified type (application/octet-stream)
>                 Encoding: quoted-printable
>
>   ------------------------------------------------------------------------------------------------------------------------
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20061023/49bb1237/attachment.htm>


More information about the Crash-utility mailing list