[rfc] bi-arch for x86-64 corefile.

Yao Qi yao@codesourcery.com
Tue Oct 30 02:29:00 GMT 2012


On 10/30/2012 08:21 AM, H.J. Lu wrote:
>> diff --git a/bfd/configure.in b/bfd/configure.in
>> >index 530bbcb..5ed3ac2 100644
>> >--- a/bfd/configure.in
>> >+++ b/bfd/configure.in
>> >@@ -331,6 +331,9 @@ changequote(,)dnl
>> >  changequote([,])dnl
>> >         COREFILE=trad-core.lo
>> >         TRAD_HEADER='"hosts/i386linux.h"'
>> >+       if test x${want64} = xtrue ; then
>> >+       CORE_HEADER='"hosts/x86-64linux.h"'
>> >+       fi
>> >         ;;
> Please use "else" for CORE_HEADER=.
>

H.J, thanks for the review.  A few questions below,

I don't see the point of using "else" here, am I missing something here?

>> >+    int pr_fpvalid;                    /* True if math copro being used.  */
>> >+#if __WORDSIZE == 32
>> >+    char pad[4];
>> >+#endif
>> >+  };
> This is wrong. There should be no pad.  Please properly copy the
> 64-bit elf_prstatus.
>

Without this pad, the size of 'struct elf_prstatus64' on 32-bit(332) is 
not equal to the size of 'struct elf_prstatus' on 64-bit(336).  IIUC, 
the goal of defining 'elf_prstatus64' is to emulate 64-bit 
'elf_prstatus' on 32-bit machine.  The field 'pad' is for tail padding, 
as the size of this struct should be multiple of 8.

>> >  struct elf_prpsinfo32
>> >    {
>> >      char pr_state;                     /* Numeric process state.  */
>> >@@ -179,6 +208,24 @@ struct elf_prpsinfo32
>> >      char pr_psargs[ELF_PRARGSZ];       /* Initial part of arg list.  */
>> >    };
>> >
>> >+struct elf_prpsinfo64
>> >+  {
>> >+    char pr_state;                     /* Numeric process state.  */
>> >+    char pr_sname;                     /* Char for pr_state.  */
>> >+    char pr_zomb;                      /* Zombie.  */
>> >+    char pr_nice;                      /* Nice val.  */
>> >+#if __WORDSIZE == 32
>> >+    char pad[4];
>> >+#endif
>> >+    uint64_t pr_flag;          /* Flags.  */
>> >+    unsigned int pr_uid;
>> >+    unsigned int pr_gid;
>> >+    int pr_pid, pr_ppid, pr_pgrp, pr_sid;
>> >+    /* Lots missing */
>> >+    char pr_fname[16];                 /* Filename of executable.  */
>> >+    char pr_psargs[ELF_PRARGSZ];       /* Initial part of arg list.  */
>> >+  };
>> >+
> This is wrong. There should be no pad.  Please properly copy the
> 64-bit elf_prpsinfo64.
>
Likewise, this field 'pad' is for internal padding, as field 'pr_flag' 
is 8-byte aligned.

-- 
Yao



More information about the Binutils mailing list