Re: Are ppc*_elf_write_core_note Os-specific?
"H.J. Lu" <[email protected]>
| Newsgroups | gmane.comp.gnu.binutils,gmane.comp.gdb.devel |
|---|---|
| Message-ID | <CAMe9rOq-Hsd6d5rpJ0F=cCg-jyFUst7czvXi66=Eh=vfNfLLpA@mail.gmail.com> |
On Tue, Jan 19, 2016 at 10:16 AM, John Baldwin <[email protected]> wrote: > On Tuesday, January 19, 2016 08:41:05 AM H.J. Lu wrote: >> On Mon, Jan 18, 2016 at 7:14 PM, Alan Modra <[email protected]> wrote: >> > On Tue, Jan 19, 2016 at 10:48:19AM +1030, Alan Modra wrote: >> >> PowerPC64 glibc even now doesn't defing prstatus32_t. :-( It seems >> >> only sparc and s390 do so. So PowerPC would need a >> >> hosts/powerpc-linux.h to define them for Linux, with some configury >> >> changes, like hosts/x86-64linux.h does for x86-64 Linux. I'll see >> >> about making those changes. >> >> >> >> Note that elf_backend_write_core_note is defined for x86-64, arm and >> >> aarch64 too. The ARM and AARCH64 functions look to be completely >> >> redundant, and I suspect all of them could disappear if we modify the >> >> generic code to handle prstatusx32_t for x86-64. >> > >> > Actually, there is a reason for the ARM and AARCH64 functions. >> > See https://sourceware.org/ml/binutils/2011-10/msg00202.html >> > Note the followup emails too.. >> > >> > So it seems that with the current infrastructure we can either support >> > core file generation on remote (linux) targets, or core file >> > generation on more native targets (freebsd). Alternatively, we'd >> > need to use separate bfd target vectors for linux and freebsd, which >> > can and will cause multiple target matches. >> > >> > Do we really want non-native core file generation? >> > >> >> Any changes shouldn't introduce regressions. I don't see why >> elf_backend_write_core_note can't handle all targets BFD supports >> since note_type is unique to each OS. BFD just needs to provide >> proper types independent of host header files, similar to >> hosts/x86-64linux.h. > > Switching on note_type alone (as the current write_core_note methods do) > isn't sufficient. Currently bfd writes out notes like NT_PRSTATUS and > NT_PRPSINFO with the "CORE" name on multiple platforms, so a > (note_name, note_type) tuple also seems insufficient. Are you suggesting > to switch on (ELF OSABI, note_type)? That is, supposing you had a > hosts/x86-64freebsd.h with a 'struct freebsd_amd64_prstatus' and if > hosts/x86-64linux.h had 'struct linux_x86_64_prstatus' (or whatever names > are preferred), then the logic in the write_core_note would look something > like: > > switch (get_elf_backend_data (abfd)->elf_osabi) > { > case ELFOSABI_FREEBSD: > { > switch (note_type) > { > case NT_PRSTATUS: > struct freebsd_amd64_prstatus prstatus; > ... > return elfcore_write_note (abfd, ... &prstatus, ...); > ... > } > ... > } > case ELFOSABI_LINUX: > { > switch (note_type) > { > case NT_PRSTATUS: > struct linux_x86_64_prstatus prstatus; > ... > return elfcore_write_note (abfd, ... &prstatus, ...); > ... > } > ... > } > .. > } > > If so, checking elf_osabi in the current write_core_note functions and > falling back to the native "catch-all" if it is not a currently-supported > elf_osabi would be sufficient to preserve existing functionality (I think) > while allowing other ABIs to either use the catch-all or implement support > for desired non-native cores. How does GDB tell Linux binary from FreeBSD binary? -- H.J.