This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [rfc] bi-arch for x86-64 corefile.
On Tue, Oct 30, 2012 at 12:21 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Mon, Oct 29, 2012 at 9:29 PM, Yao Qi <yao@codesourcery.com> wrote:
>> [add binutils@sourceware.org back to CC]
>>
>>
>> On 10/30/2012 10:51 AM, H.J. Lu wrote:
>>>
>>> >>> >+ 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.
>>>
>>> It won't work for x32.
>>>
>>
>> H.J, I am confused here. I assume you mean x32 as target. Now, both
>> 'prstatus64_t' and 'prpsinfo64_t' are only used in
>> elf64-x86-64.c:elf_x86_64_write_core_note ([1] and [2] as annotated below),
>>
>> elf_x86_64_write_core_note (....)
>> {
>> switch (note_type)
>> case NT_PRPSINFO:
>> if (bed->s->elfclass == ELFCLASS32)
>> {
>> prpsinfo32_t data; <--- [3]
>> }
>> else
>> {
>> prpsinfo64_t data; <---- [1]
>> }
>> case NT_PRSTATUS:
>> if (bed->s->elfclass == ELFCLASS32)
>> {
>> if (bed->elf_machine_code == EM_X86_64)
>> {
>> prstatusx32_t prstat; <--- [4]
>> }
>> else
>> {
>> prstatus32_t prstat;
>> }
>> }
>> else
>> {
>> prstatus64_t prstat; <--- [2]
>> }
>> }
>> }
>>
>> x32 will go the path [3] and [4], unreachable to [1] and [2]. so this patch
>> shouldn't affect x32 as target.
>>
>
> I am checking in this. But sourceware.org times out for me. Please
> give it a try.
>
I checked it in. Please let me know if it works for you.
Thanks.
--
H.J.