Mirror of the gdb mailing list
 help / color / mirror / Atom feed
* Re: 32-bit gcore on amd64
@ 2004-02-19 23:47 Ulrich Weigand
  2004-02-20 18:56 ` Andrew Cagney
  0 siblings, 1 reply; 9+ messages in thread
From: Ulrich Weigand @ 2004-02-19 23:47 UTC (permalink / raw)
  To: cagney; +Cc: gdb

Andrew Cagney wrote:

>This is more questions than answers. I'm trying to figure out how GDB 
>should generate 32-bit core files on amd64 (i.e., get gmake check 
>'RUNTESTFLAGS=--target_board=unix/-m32 gcore.exp' to pass). 
>The problem is, everything I look at feels wrong.

Yup, same problem on s390x.  In fact, the gcore tests are the only
failing tests when running the s390-on-s390x bi-arch test suite
(in addition to those that fail on native s390, of course).

[snip elfcore_write_prstatus]
>This function totally assumes that it's creating a 64-bit note section. 
>How does BFD figure out that it should instead use 32-bit note code?

It doesn't, as far as I can see.

>As a somewhat amazing PS: bigcore.exp does pass 32-bit mode on 
>AMD-64 ->> the 32-bit read path is ok.

That's because there are tons of special-cased code pieces in
the *read* path to handle this; check for HAVE_PRPSINFO32_T
and HAVE_PRSTATUS32_T in bfd/elf.c.  (This relies on sys/procfs.h
to provide both 32-bit and 64-bit versions -- reading cores
didn't work initially on s390x because those were missing.)

Such special cases are completely absent from the write path,
however.

(The other question is whether these 32-on-64 special cases are
really the right way to solve the problem -- a generic solution
should preferably solve the any-on-any cross-gdb core dump 
access problem ...)
 
Bye,
Ulrich

-- 
  Dr. Ulrich Weigand
  weigand@informatik.uni-erlangen.de


^ permalink raw reply	[flat|nested] 9+ messages in thread
* 32-bit gcore on amd64
@ 2004-02-19 23:12 Andrew Cagney
  2004-02-19 23:24 ` Daniel Jacobowitz
  2004-02-20 19:59 ` Mark Kettenis
  0 siblings, 2 replies; 9+ messages in thread
From: Andrew Cagney @ 2004-02-19 23:12 UTC (permalink / raw)
  To: gdb

This is more questions than answers.  I'm trying to figure out how GDB 
should generate 32-bit core files on amd64 (i.e., get gmake check 
'RUNTESTFLAGS=--target_board=unix/-m32 gcore.exp' to pass).  The problem 
is, everything I look at feels wrong.

Here's the first backtrace:

#0  amd64_collect_native_gregset (regcache=0x808410, gregs=0x7fbfffead0,
     regnum=-1) at /home/cygnus/cagney/GDB/src/gdb/amd64-nat.c:124
#1  0x0000000000450e16 in fill_gregset (gregsetp=0x808410, 
regnum=-1073747248)
     at /home/cygnus/cagney/GDB/src/gdb/x86-64-linux-nat.c:126
#2  0x000000000045803d in linux_do_thread_registers (obfd=0x87fc90, ptid=
       {pid = 10494, lwp = 10494, tid = 0}, note_data=0x8b0960 "\005",
     note_size=0x7fbfffed8c) at 
/home/cygnus/cagney/GDB/src/gdb/linux-proc.c:180

This function is asking fill_gregset to populate an amd64 gregset_t.  I 
think it should be asking for the 32-bit gregset_t to be filled in.

#3  0x0000000000458227 in linux_do_registers (obfd=0x87fc90, ptid=
       {pid = 10494, lwp = 0, tid = 0}, note_data=0x8b0960 "\005",
     note_size=0x7fbfffed8c) at 
/home/cygnus/cagney/GDB/src/gdb/linux-proc.c:250
#4  0x00000000004583f8 in linux_make_note_section (obfd=0x87fc90,
     note_size=0x7fbfffed8c) at 
/home/cygnus/cagney/GDB/src/gdb/linux-proc.c:302

Here, I'm thinking that if this is to be portable, this would have to be 
an architecture method (also parameterized with the target).

#5  0x00000000004594d2 in gcore_command (args=0x0, from_tty=-1073747248)
     at /home/cygnus/cagney/GDB/src/gdb/gcore.c:80

Now the second backtrace:

#0  elfcore_write_prstatus (abfd=0x87fc90, buf=0x8b0960 "\005",
     bufsiz=0x7fbfffed8c, pid=10494, cursig=5, gregs=0x7fbfffead0)
     at /home/cygnus/cagney/GDB/src/bfd/elf.c:7163

This function totally assumes that it's creating a 64-bit note section. 
How does BFD figure out that it should instead use 32-bit note code?

#1  0x0000000000458058 in linux_do_thread_registers (obfd=0x87fc90, ptid=
       {pid = 10494, lwp = 10494, tid = 0}, note_data=0x8b0960 "\005",
     note_size=0x7fbfffed8c) at 
/home/cygnus/cagney/GDB/src/gdb/linux-proc.c:181
#2  0x0000000000458227 in linux_do_registers (obfd=0x87fc90, ptid=
       {pid = 10494, lwp = 0, tid = 0}, note_data=0x8b0960 "\005",
     note_size=0x7fbfffed8c) at 
/home/cygnus/cagney/GDB/src/gdb/linux-proc.c:250
#3  0x00000000004583f8 in linux_make_note_section (obfd=0x87fc90,
     note_size=0x7fbfffed8c) at 
/home/cygnus/cagney/GDB/src/gdb/linux-proc.c:302
#4  0x00000000004594d2 in gcore_command (args=0x0, from_tty=-1073747032)
     at /home/cygnus/cagney/GDB/src/gdb/gcore.c:80

Andrew

As a somewhat amazing PS: bigcore.exp does pass 32-bit mode on AMD-64 
->> the 32-bit read path is ok.


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2004-02-21  2:25 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-02-19 23:47 32-bit gcore on amd64 Ulrich Weigand
2004-02-20 18:56 ` Andrew Cagney
  -- strict thread matches above, loose matches on Subject: below --
2004-02-19 23:12 Andrew Cagney
2004-02-19 23:24 ` Daniel Jacobowitz
2004-02-20  0:17   ` Andrew Cagney
2004-02-21  2:25     ` Daniel Jacobowitz
2004-02-20 19:59 ` Mark Kettenis
2004-02-20 21:06   ` Andrew Cagney
2004-02-20 23:44     ` Mark Kettenis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox