http://sourceware.org/ml/binutils-cvs/2010-08/msg00105.html ### src/bfd/ChangeLog 2010/08/13 20:50:25 1.5106 ### src/bfd/ChangeLog 2010/08/18 12:24:02 1.5107 ## -1,3 +1,89 @@ +2010-08-18 Pedro Alves + + PR corefile/8210 + + * bfd-in2.h: Regenerate. + * corefile.c (bfd_core_file_pid): New. + + * targets.c (BFD_JUMP_TABLE_CORE): Add NAME##_core_file_pid. + (struct bfd_target) <_core_file_pid>: New. + + * libbfd-in.h (_bfd_nocore_core_file_pid): Declare. + * libbfd.c (_bfd_nocore_core_file_pid): New. + + * elf-bfd.h (bfd_elf32_core_file_pid, bfd_elf64_core_file_pid): + Declare. + * elfcode.h (elf_core_file_pid): New define. + * elfcore.h (elf_core_file_pid): New function. + + * elf.c (elfcore_make_pid): Rewrite. + (elfcore_grok_prstatus): Only set core_pid if not set yet. + (elfcore_grok_prstatus) [!HAVE_PRSTATUS_T_PR_WHO]: Fallback to + getting the lwpid from prstat.pr_pid. + + * elf64-x86-64.c (elf64_x86_64_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + (elf64_x86_64_grok_psinfo): Extract the the main process's PID, + and store it in elf_tdata's core_pid field. + * elf32-i386.c (elf_i386_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + (elf_i386_grok_psinfo): Extract the the main process's PID, and + store it in elf_tdata's core_pid field. + + * elf32-am33lin.c (elf32_am33lin_grok_prstatus): Write the LWPID + to elf_tdata's core_lwpid instead of to core_pid. + * elf32-arm.c (elf32_arm_nabi_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + * elf32-cris.c (cris_elf_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + * elf32-frv.c (elf32_frv_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + * elf32-hppa.c (elf32_hppa_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + * elf32-mips.c (elf32_mips_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + * elf32-ppc.c (ppc_elf_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + * elf32-s390.c (elf_s390_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + * elf32-score.c (s3_bfd_score_elf_grok_prstatus): Write the LWPID + to elf_tdata's core_lwpid instead of to core_pid. + * elf32-score7.c (s7_bfd_score_elf_grok_prstatus): Write the LWPID + to elf_tdata's core_lwpid instead of to core_pid. + * elf32-sh.c (elf32_shlin_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + * elf32-xtensa.c (elf_xtensa_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + * elf64-hppa.c (elf64_hppa_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + * elf64-mips.c (elf64_mips_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + * elf64-ppc.c (ppc64_elf_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + * elfn32-mips.c (elf32_mips_grok_prstatus): Write the LWPID to + elf_tdata's core_lwpid instead of to core_pid. + + * plugin.c (bfd_plugin_core_file_pid): New function. + * aout-target.h (MY_core_file_pid): Define. + * aout-tic30.c (MY_core_file_pid, MY_core_file_p): New defines. + * coff-rs6000.c (coff_core_file_pid): New define. + (rs6000coff_vec, pmac_xcoff_vec): Use BFD_JUMP_TABLE_CORE. + * coff64-rs6000.c (coff_core_file_pid): New define. + (rs6000coff64_vec): Use BFD_JUMP_TABLE_CORE. + (xcoff64_core_file_pid): New define. + (aix5coff64_vec): Use BFD_JUMP_TABLE_CORE. + * mach-o-target.c (bfd_mach_o_core_file_pid): New define. + * aix386-core.c (aix386_core_file_pid): New define. + * hppabsd-core.c (hppabsd_core_core_file_pid): New define. + * hpux-core.c (hpux_core_core_file_pid): New define. + * irix-core.c (irix_core_core_file_pid): New define. + * lynx-core.c (lynx_core_file_pid): New define. + * osf-core.c (osf_core_core_file_pid): New define. + * ptrace-core.c (ptrace_unix_core_file_pid): New define. + * sco5-core.c (sco5_core_file_pid): New define. + * xcoff-target.h (coff_core_file_pid): New define. + * netbsd-core.c (netbsd_core_core_file_pid): New define. + 2010-08-13 H.J. Lu PR ld/11913 Index: gdb-7.2/bfd/aix386-core.c =================================================================== --- gdb-7.2.orig/bfd/aix386-core.c 2009-09-02 09:18:35.000000000 +0200 +++ gdb-7.2/bfd/aix386-core.c 2011-01-30 19:30:35.000000000 +0100 @@ -211,6 +211,8 @@ aix386_core_file_failing_signal (abfd) #define aix386_core_file_matches_executable_p generic_core_file_matches_executable_p +#define aix386_core_file_pid _bfd_nocore_core_file_pid + /* If somebody calls any byte-swapping routines, shoot them. */ static void Index: gdb-7.2/bfd/aout-target.h =================================================================== --- gdb-7.2.orig/bfd/aout-target.h 2010-03-24 16:41:58.000000000 +0100 +++ gdb-7.2/bfd/aout-target.h 2011-01-30 19:30:35.000000000 +0100 @@ -401,6 +401,9 @@ MY_bfd_final_link (bfd *abfd, struct bfd #define MY_core_file_matches_executable_p \ _bfd_nocore_core_file_matches_executable_p #endif +#ifndef MY_core_file_pid +#define MY_core_file_pid _bfd_nocore_core_file_pid +#endif #ifndef MY_core_file_p #define MY_core_file_p _bfd_dummy_target #endif Index: gdb-7.2/bfd/aout-tic30.c =================================================================== --- gdb-7.2.orig/bfd/aout-tic30.c 2010-03-24 16:41:58.000000000 +0100 +++ gdb-7.2/bfd/aout-tic30.c 2011-01-30 19:30:35.000000000 +0100 @@ -859,6 +859,9 @@ tic30_aout_set_arch_mach (bfd *abfd, #define MY_core_file_matches_executable_p \ _bfd_nocore_core_file_matches_executable_p #endif +#ifndef MY_core_file_pid +#define MY_core_file_pid _bfd_nocore_core_file_pid +#endif #ifndef MY_core_file_p #define MY_core_file_p _bfd_dummy_target #endif Index: gdb-7.2/bfd/bfd-in2.h =================================================================== --- gdb-7.2.orig/bfd/bfd-in2.h 2010-06-29 06:17:20.000000000 +0200 +++ gdb-7.2/bfd/bfd-in2.h 2011-01-30 19:30:35.000000000 +0100 @@ -5344,6 +5344,8 @@ const char *bfd_core_file_failing_comman int bfd_core_file_failing_signal (bfd *abfd); +int bfd_core_file_pid (bfd *abfd); + bfd_boolean core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd); @@ -5540,11 +5542,13 @@ typedef struct bfd_target #define BFD_JUMP_TABLE_CORE(NAME) \ NAME##_core_file_failing_command, \ NAME##_core_file_failing_signal, \ - NAME##_core_file_matches_executable_p + NAME##_core_file_matches_executable_p, \ + NAME##_core_file_pid char * (*_core_file_failing_command) (bfd *); int (*_core_file_failing_signal) (bfd *); bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *); + int (*_core_file_pid) (bfd *); /* Archive entry points. */ #define BFD_JUMP_TABLE_ARCHIVE(NAME) \ Index: gdb-7.2/bfd/coff-rs6000.c =================================================================== --- gdb-7.2.orig/bfd/coff-rs6000.c 2010-06-27 06:07:51.000000000 +0200 +++ gdb-7.2/bfd/coff-rs6000.c 2011-01-30 19:30:35.000000000 +0100 @@ -112,6 +112,8 @@ extern int rs6000coff_core_file_failing_ rs6000coff_core_file_failing_signal #define coff_core_file_matches_executable_p \ rs6000coff_core_file_matches_executable_p +#define coff_core_file_pid \ + _bfd_nocore_core_file_pid #else #define CORE_FILE_P _bfd_dummy_target #define coff_core_file_failing_command \ @@ -120,6 +122,8 @@ extern int rs6000coff_core_file_failing_ _bfd_nocore_core_file_failing_signal #define coff_core_file_matches_executable_p \ _bfd_nocore_core_file_matches_executable_p +#define coff_core_file_pid \ + _bfd_nocore_core_file_pid #endif #define coff_SWAP_sym_in _bfd_xcoff_swap_sym_in #define coff_SWAP_sym_out _bfd_xcoff_swap_sym_out @@ -4182,9 +4186,7 @@ const bfd_target rs6000coff_vec = _bfd_generic_bfd_print_private_bfd_data, /* Core */ - coff_core_file_failing_command, - coff_core_file_failing_signal, - coff_core_file_matches_executable_p, + BFD_JUMP_TABLE_CORE (coff), /* Archive */ _bfd_xcoff_slurp_armap, @@ -4437,9 +4439,7 @@ const bfd_target pmac_xcoff_vec = _bfd_generic_bfd_print_private_bfd_data, /* Core */ - coff_core_file_failing_command, - coff_core_file_failing_signal, - coff_core_file_matches_executable_p, + BFD_JUMP_TABLE_CORE (coff), /* Archive */ _bfd_xcoff_slurp_armap, Index: gdb-7.2/bfd/coff64-rs6000.c =================================================================== --- gdb-7.2.orig/bfd/coff64-rs6000.c 2010-03-24 16:41:58.000000000 +0100 +++ gdb-7.2/bfd/coff64-rs6000.c 2011-01-30 19:30:35.000000000 +0100 @@ -256,6 +256,8 @@ extern int rs6000coff_core_file_failing_ rs6000coff_core_file_failing_signal #define coff_core_file_matches_executable_p \ rs6000coff_core_file_matches_executable_p +#define coff_core_file_pid \ + _bfd_nocore_core_file_pid #else #define CORE_FILE_P _bfd_dummy_target #define coff_core_file_failing_command \ @@ -264,6 +266,8 @@ extern int rs6000coff_core_file_failing_ _bfd_nocore_core_file_failing_signal #define coff_core_file_matches_executable_p \ _bfd_nocore_core_file_matches_executable_p +#define coff_core_file_pid \ + _bfd_nocore_core_file_pid #endif #define coff_SWAP_sym_in _bfd_xcoff64_swap_sym_in #define coff_SWAP_sym_out _bfd_xcoff64_swap_sym_out @@ -2753,9 +2757,7 @@ const bfd_target rs6000coff64_vec = _bfd_generic_bfd_print_private_bfd_data, /* Core */ - coff_core_file_failing_command, - coff_core_file_failing_signal, - coff_core_file_matches_executable_p, + BFD_JUMP_TABLE_CORE (coff), /* Archive */ xcoff64_slurp_armap, @@ -2835,6 +2837,8 @@ extern char *xcoff64_core_file_failing_c PARAMS ((bfd *)); extern int xcoff64_core_file_failing_signal PARAMS ((bfd *)); +#define xcoff64_core_file_pid \ + _bfd_nocore_core_file_pid /* AIX 5 */ static const struct xcoff_backend_data_rec bfd_xcoff_aix5_backend_data = @@ -3009,9 +3013,7 @@ const bfd_target aix5coff64_vec = _bfd_generic_bfd_print_private_bfd_data, /* Core */ - xcoff64_core_file_failing_command, - xcoff64_core_file_failing_signal, - xcoff64_core_file_matches_executable_p, + BFD_JUMP_TABLE_CORE (xcoff64), /* Archive */ xcoff64_slurp_armap, Index: gdb-7.2/bfd/corefile.c =================================================================== --- gdb-7.2.orig/bfd/corefile.c 2007-07-03 16:26:40.000000000 +0200 +++ gdb-7.2/bfd/corefile.c 2011-01-30 19:30:35.000000000 +0100 @@ -84,6 +84,31 @@ bfd_core_file_failing_signal (bfd *abfd) /* FUNCTION + bfd_core_file_pid + +SYNOPSIS + int bfd_core_file_pid (bfd *abfd); + +DESCRIPTION + + Returns the PID of the process the core dump the BFD + @var{abfd} is attached to was generated from. +*/ + +int +bfd_core_file_pid (bfd *abfd) +{ + if (abfd->format != bfd_core) + { + bfd_set_error (bfd_error_invalid_operation); + return 0; + } + return BFD_SEND (abfd, _core_file_pid, (abfd)); +} + + +/* +FUNCTION core_file_matches_executable_p SYNOPSIS Index: gdb-7.2/bfd/elf-bfd.h =================================================================== --- gdb-7.2.orig/bfd/elf-bfd.h 2011-01-30 19:30:14.000000000 +0100 +++ gdb-7.2/bfd/elf-bfd.h 2011-01-30 19:30:35.000000000 +0100 @@ -1989,6 +1989,8 @@ extern int bfd_elf32_core_file_failing_s (bfd *); extern bfd_boolean bfd_elf32_core_file_matches_executable_p (bfd *, bfd *); +extern int bfd_elf32_core_file_pid + (bfd *); extern bfd_boolean bfd_elf32_swap_symbol_in (bfd *, const void *, const void *, Elf_Internal_Sym *); @@ -2033,6 +2035,8 @@ extern int bfd_elf64_core_file_failing_s (bfd *); extern bfd_boolean bfd_elf64_core_file_matches_executable_p (bfd *, bfd *); +extern int bfd_elf64_core_file_pid + (bfd *); extern bfd_boolean bfd_elf64_swap_symbol_in (bfd *, const void *, const void *, Elf_Internal_Sym *); Index: gdb-7.2/bfd/elf.c =================================================================== --- gdb-7.2.orig/bfd/elf.c 2011-01-30 19:30:14.000000000 +0100 +++ gdb-7.2/bfd/elf.c 2011-01-30 19:30:35.000000000 +0100 @@ -7513,13 +7513,19 @@ _bfd_elf_rel_vtable_reloc_fn # include #endif -/* FIXME: this is kinda wrong, but it's what gdb wants. */ +/* Return a PID that identifies a "thread" for threaded cores, or the + PID of the main process for non-threaded cores. */ static int elfcore_make_pid (bfd *abfd) { - return ((elf_tdata (abfd)->core_lwpid << 16) - + (elf_tdata (abfd)->core_pid)); + int pid; + + pid = elf_tdata (abfd)->core_lwpid; + if (pid == 0) + pid = elf_tdata (abfd)->core_pid; + + return pid; } /* If there isn't a section called NAME, make one, using @@ -7609,7 +7615,8 @@ elfcore_grok_prstatus (bfd *abfd, Elf_In has already been set by another thread. */ if (elf_tdata (abfd)->core_signal == 0) elf_tdata (abfd)->core_signal = prstat.pr_cursig; - elf_tdata (abfd)->core_pid = prstat.pr_pid; + if (elf_tdata (abfd)->core_pid == 0) + elf_tdata (abfd)->core_pid = prstat.pr_pid; /* pr_who exists on: solaris 2.5+ @@ -7619,6 +7626,8 @@ elfcore_grok_prstatus (bfd *abfd, Elf_In */ #if defined (HAVE_PRSTATUS_T_PR_WHO) elf_tdata (abfd)->core_lwpid = prstat.pr_who; +#else + elf_tdata (abfd)->core_lwpid = prstat.pr_pid; #endif } #if defined (HAVE_PRSTATUS32_T) @@ -7635,7 +7644,8 @@ elfcore_grok_prstatus (bfd *abfd, Elf_In has already been set by another thread. */ if (elf_tdata (abfd)->core_signal == 0) elf_tdata (abfd)->core_signal = prstat.pr_cursig; - elf_tdata (abfd)->core_pid = prstat.pr_pid; + if (elf_tdata (abfd)->core_pid == 0) + elf_tdata (abfd)->core_pid = prstat.pr_pid; /* pr_who exists on: solaris 2.5+ @@ -7645,6 +7655,8 @@ elfcore_grok_prstatus (bfd *abfd, Elf_In */ #if defined (HAVE_PRSTATUS32_T_PR_WHO) elf_tdata (abfd)->core_lwpid = prstat.pr_who; +#else + elf_tdata (abfd)->core_lwpid = prstat.pr_pid; #endif } #endif /* HAVE_PRSTATUS32_T */ Index: gdb-7.2/bfd/elf32-am33lin.c =================================================================== --- gdb-7.2.orig/bfd/elf32-am33lin.c 2007-07-03 16:26:40.000000000 +0200 +++ gdb-7.2/bfd/elf32-am33lin.c 2011-01-30 19:30:35.000000000 +0100 @@ -55,7 +55,7 @@ elf32_am33lin_grok_prstatus (bfd *abfd, elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 72; Index: gdb-7.2/bfd/elf32-arm.c =================================================================== --- gdb-7.2.orig/bfd/elf32-arm.c 2010-06-27 06:07:51.000000000 +0200 +++ gdb-7.2/bfd/elf32-arm.c 2011-01-30 19:30:35.000000000 +0100 @@ -1829,7 +1829,7 @@ elf32_arm_nabi_grok_prstatus (bfd *abfd, elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 72; Index: gdb-7.2/bfd/elf32-cris.c =================================================================== --- gdb-7.2.orig/bfd/elf32-cris.c 2010-06-27 06:07:51.000000000 +0200 +++ gdb-7.2/bfd/elf32-cris.c 2011-01-30 19:30:35.000000000 +0100 @@ -580,7 +580,7 @@ cris_elf_grok_prstatus (abfd, note) elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 22); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 22); /* pr_reg */ offset = 70; @@ -599,7 +599,7 @@ cris_elf_grok_prstatus (abfd, note) elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 22); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 22); /* pr_reg */ offset = 70; Index: gdb-7.2/bfd/elf32-frv.c =================================================================== --- gdb-7.2.orig/bfd/elf32-frv.c 2010-02-04 10:16:39.000000000 +0100 +++ gdb-7.2/bfd/elf32-frv.c 2011-01-30 19:30:35.000000000 +0100 @@ -6935,7 +6935,7 @@ elf32_frv_grok_prstatus (bfd *abfd, Elf_ elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* `pr_pid' is at offset 24. */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); /* `pr_reg' is at offset 72. */ offset = 72; Index: gdb-7.2/bfd/elf32-hppa.c =================================================================== --- gdb-7.2.orig/bfd/elf32-hppa.c 2010-06-27 06:07:51.000000000 +0200 +++ gdb-7.2/bfd/elf32-hppa.c 2011-01-30 19:30:36.000000000 +0100 @@ -1736,7 +1736,7 @@ elf32_hppa_grok_prstatus (bfd *abfd, Elf elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 72; Index: gdb-7.2/bfd/elf32-i386.c =================================================================== --- gdb-7.2.orig/bfd/elf32-i386.c 2010-04-30 20:27:31.000000000 +0200 +++ gdb-7.2/bfd/elf32-i386.c 2011-01-30 19:30:36.000000000 +0100 @@ -419,7 +419,7 @@ elf_i386_grok_prstatus (bfd *abfd, Elf_I elf_tdata (abfd)->core_signal = bfd_get_32 (abfd, note->descdata + 20); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 28; @@ -437,7 +437,7 @@ elf_i386_grok_prstatus (bfd *abfd, Elf_I elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 72; @@ -475,6 +475,8 @@ elf_i386_grok_psinfo (bfd *abfd, Elf_Int return FALSE; case 124: /* Linux/i386 elf_prpsinfo. */ + elf_tdata (abfd)->core_pid + = bfd_get_32 (abfd, note->descdata + 12); elf_tdata (abfd)->core_program = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16); elf_tdata (abfd)->core_command Index: gdb-7.2/bfd/elf32-mips.c =================================================================== --- gdb-7.2.orig/bfd/elf32-mips.c 2009-09-02 09:18:36.000000000 +0200 +++ gdb-7.2/bfd/elf32-mips.c 2011-01-30 19:30:36.000000000 +0100 @@ -1507,7 +1507,7 @@ elf32_mips_grok_prstatus (bfd *abfd, Elf elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 72; Index: gdb-7.2/bfd/elf32-ppc.c =================================================================== --- gdb-7.2.orig/bfd/elf32-ppc.c 2010-07-06 11:29:46.000000000 +0200 +++ gdb-7.2/bfd/elf32-ppc.c 2011-01-30 19:30:36.000000000 +0100 @@ -1858,7 +1858,7 @@ ppc_elf_grok_prstatus (bfd *abfd, Elf_In elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 72; Index: gdb-7.2/bfd/elf32-s390.c =================================================================== --- gdb-7.2.orig/bfd/elf32-s390.c 2010-02-04 10:16:39.000000000 +0100 +++ gdb-7.2/bfd/elf32-s390.c 2011-01-30 19:30:36.000000000 +0100 @@ -3462,7 +3462,7 @@ elf_s390_grok_prstatus (abfd, note) elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 72; Index: gdb-7.2/bfd/elf32-score.c =================================================================== --- gdb-7.2.orig/bfd/elf32-score.c 2010-06-27 06:07:51.000000000 +0200 +++ gdb-7.2/bfd/elf32-score.c 2011-01-30 19:30:36.000000000 +0100 @@ -3917,7 +3917,7 @@ s3_bfd_score_elf_grok_prstatus (bfd *abf elf_tdata (abfd)->core_signal = score_bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = score_bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = score_bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 72; Index: gdb-7.2/bfd/elf32-score7.c =================================================================== --- gdb-7.2.orig/bfd/elf32-score7.c 2010-06-27 06:07:52.000000000 +0200 +++ gdb-7.2/bfd/elf32-score7.c 2011-01-30 19:30:36.000000000 +0100 @@ -3734,7 +3734,7 @@ s7_bfd_score_elf_grok_prstatus (bfd *abf elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 72; Index: gdb-7.2/bfd/elf32-sh.c =================================================================== --- gdb-7.2.orig/bfd/elf32-sh.c 2010-06-27 06:07:52.000000000 +0200 +++ gdb-7.2/bfd/elf32-sh.c 2011-01-30 19:30:36.000000000 +0100 @@ -7438,7 +7438,7 @@ elf32_shlin_grok_prstatus (bfd *abfd, El elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 72; Index: gdb-7.2/bfd/elf32-xtensa.c =================================================================== --- gdb-7.2.orig/bfd/elf32-xtensa.c 2010-06-27 06:07:53.000000000 +0200 +++ gdb-7.2/bfd/elf32-xtensa.c 2011-01-30 19:30:36.000000000 +0100 @@ -3802,7 +3802,7 @@ elf_xtensa_grok_prstatus (bfd *abfd, Elf elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 72; Index: gdb-7.2/bfd/elf64-hppa.c =================================================================== --- gdb-7.2.orig/bfd/elf64-hppa.c 2010-06-27 06:07:53.000000000 +0200 +++ gdb-7.2/bfd/elf64-hppa.c 2011-01-30 19:30:36.000000000 +0100 @@ -2611,7 +2611,7 @@ elf64_hppa_grok_prstatus (bfd *abfd, Elf elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 32); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 32); /* pr_reg */ offset = 112; Index: gdb-7.2/bfd/elf64-mips.c =================================================================== --- gdb-7.2.orig/bfd/elf64-mips.c 2010-03-24 16:41:59.000000000 +0100 +++ gdb-7.2/bfd/elf64-mips.c 2011-01-30 19:30:36.000000000 +0100 @@ -3083,7 +3083,7 @@ elf64_mips_grok_prstatus (bfd *abfd, Elf elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 32); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 32); /* pr_reg */ offset = 112; Index: gdb-7.2/bfd/elf64-ppc.c =================================================================== --- gdb-7.2.orig/bfd/elf64-ppc.c 2010-07-01 11:48:26.000000000 +0200 +++ gdb-7.2/bfd/elf64-ppc.c 2011-01-30 19:30:36.000000000 +0100 @@ -2651,7 +2651,7 @@ ppc64_elf_grok_prstatus (bfd *abfd, Elf_ elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 32); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 32); /* pr_reg */ offset = 112; Index: gdb-7.2/bfd/elf64-x86-64.c =================================================================== --- gdb-7.2.orig/bfd/elf64-x86-64.c 2010-04-30 20:27:31.000000000 +0200 +++ gdb-7.2/bfd/elf64-x86-64.c 2011-01-30 19:30:36.000000000 +0100 @@ -308,7 +308,7 @@ elf64_x86_64_grok_prstatus (bfd *abfd, E = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 32); /* pr_reg */ @@ -332,6 +332,8 @@ elf64_x86_64_grok_psinfo (bfd *abfd, Elf return FALSE; case 136: /* sizeof(struct elf_prpsinfo) on Linux/x86_64 */ + elf_tdata (abfd)->core_pid + = bfd_get_32 (abfd, note->descdata + 24); elf_tdata (abfd)->core_program = _bfd_elfcore_strndup (abfd, note->descdata + 40, 16); elf_tdata (abfd)->core_command Index: gdb-7.2/bfd/elfcode.h =================================================================== --- gdb-7.2.orig/bfd/elfcode.h 2010-05-26 09:37:36.000000000 +0200 +++ gdb-7.2/bfd/elfcode.h 2011-01-30 19:30:36.000000000 +0100 @@ -87,6 +87,7 @@ #define elf_core_file_failing_signal NAME(bfd_elf,core_file_failing_signal) #define elf_core_file_matches_executable_p \ NAME(bfd_elf,core_file_matches_executable_p) +#define elf_core_file_pid NAME(bfd_elf,core_file_pid) #define elf_object_p NAME(bfd_elf,object_p) #define elf_core_file_p NAME(bfd_elf,core_file_p) #define elf_get_symtab_upper_bound NAME(bfd_elf,get_symtab_upper_bound) Index: gdb-7.2/bfd/elfcore.h =================================================================== --- gdb-7.2.orig/bfd/elfcore.h 2010-01-19 14:50:55.000000000 +0100 +++ gdb-7.2/bfd/elfcore.h 2011-01-30 19:30:36.000000000 +0100 @@ -31,6 +31,12 @@ elf_core_file_failing_signal (bfd *abfd) return elf_tdata (abfd)->core_signal; } +int +elf_core_file_pid (bfd *abfd) +{ + return elf_tdata (abfd)->core_pid; +} + bfd_boolean elf_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd) { Index: gdb-7.2/bfd/elfn32-mips.c =================================================================== --- gdb-7.2.orig/bfd/elfn32-mips.c 2009-09-02 09:18:36.000000000 +0200 +++ gdb-7.2/bfd/elfn32-mips.c 2011-01-30 19:30:36.000000000 +0100 @@ -2333,7 +2333,7 @@ elf32_mips_grok_prstatus (bfd *abfd, Elf elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 72; Index: gdb-7.2/bfd/hppabsd-core.c =================================================================== --- gdb-7.2.orig/bfd/hppabsd-core.c 2007-07-03 16:26:42.000000000 +0200 +++ gdb-7.2/bfd/hppabsd-core.c 2011-01-30 19:30:36.000000000 +0100 @@ -59,6 +59,7 @@ static char *hppabsd_core_core_file_fail static int hppabsd_core_core_file_failing_signal PARAMS ((bfd *)); #define hppabsd_core_core_file_matches_executable_p generic_core_file_matches_executable_p +#define hppabsd_core_core_file_pid _bfd_nocore_core_file_pid static void swap_abort PARAMS ((void)); Index: gdb-7.2/bfd/hpux-core.c =================================================================== --- gdb-7.2.orig/bfd/hpux-core.c 2009-09-02 09:18:37.000000000 +0200 +++ gdb-7.2/bfd/hpux-core.c 2011-01-30 19:30:36.000000000 +0100 @@ -103,6 +103,7 @@ struct hpux_core_struct #define core_kernel_thread_id(bfd) (core_hdr(bfd)->lwpid) #define core_user_thread_id(bfd) (core_hdr(bfd)->user_tid) #define hpux_core_core_file_matches_executable_p generic_core_file_matches_executable_p +#define hpux_core_core_file_pid _bfd_nocore_core_file_pid static asection *make_bfd_asection (bfd *, const char *, flagword, bfd_size_type, bfd_vma, unsigned int); Index: gdb-7.2/bfd/irix-core.c =================================================================== --- gdb-7.2.orig/bfd/irix-core.c 2009-09-02 09:18:37.000000000 +0200 +++ gdb-7.2/bfd/irix-core.c 2011-01-30 19:30:36.000000000 +0100 @@ -44,6 +44,7 @@ struct sgi_core_struct #define core_command(bfd) (core_hdr(bfd)->cmd) #define irix_core_core_file_matches_executable_p generic_core_file_matches_executable_p +#define irix_core_core_file_pid _bfd_nocore_core_file_pid static asection *make_bfd_asection (bfd *, const char *, flagword, bfd_size_type, bfd_vma, file_ptr); Index: gdb-7.2/bfd/libbfd-in.h =================================================================== --- gdb-7.2.orig/bfd/libbfd-in.h 2010-06-08 10:26:01.000000000 +0200 +++ gdb-7.2/bfd/libbfd-in.h 2011-01-30 19:30:36.000000000 +0100 @@ -270,6 +270,8 @@ extern int _bfd_nocore_core_file_failing (bfd *); extern bfd_boolean _bfd_nocore_core_file_matches_executable_p (bfd *, bfd *); +extern int _bfd_nocore_core_file_pid + (bfd *); /* Routines to use for BFD_JUMP_TABLE_ARCHIVE when there is no archive file support. Use BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive). */ Index: gdb-7.2/bfd/libbfd.c =================================================================== --- gdb-7.2.orig/bfd/libbfd.c 2009-12-11 14:42:04.000000000 +0100 +++ gdb-7.2/bfd/libbfd.c 2011-01-30 19:30:36.000000000 +0100 @@ -150,6 +150,16 @@ _bfd_nocore_core_file_failing_signal (bf return 0; } +/* Routine to handle the core_file_pid entry point for targets without + core file support. */ + +int +_bfd_nocore_core_file_pid (bfd *ignore_abfd ATTRIBUTE_UNUSED) +{ + bfd_set_error (bfd_error_invalid_operation); + return 0; +} + const bfd_target * _bfd_dummy_target (bfd *ignore_abfd ATTRIBUTE_UNUSED) { Index: gdb-7.2/bfd/libbfd.h =================================================================== --- gdb-7.2.orig/bfd/libbfd.h 2010-06-29 06:17:22.000000000 +0200 +++ gdb-7.2/bfd/libbfd.h 2011-01-30 19:30:36.000000000 +0100 @@ -275,6 +275,8 @@ extern int _bfd_nocore_core_file_failing (bfd *); extern bfd_boolean _bfd_nocore_core_file_matches_executable_p (bfd *, bfd *); +extern int _bfd_nocore_core_file_pid + (bfd *); /* Routines to use for BFD_JUMP_TABLE_ARCHIVE when there is no archive file support. Use BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive). */ Index: gdb-7.2/bfd/lynx-core.c =================================================================== --- gdb-7.2.orig/bfd/lynx-core.c 2009-09-02 09:18:37.000000000 +0200 +++ gdb-7.2/bfd/lynx-core.c 2011-01-30 19:30:36.000000000 +0100 @@ -53,6 +53,7 @@ struct lynx_core_struct #define core_command(bfd) (core_hdr(bfd)->cmd) #define lynx_core_file_matches_executable_p generic_core_file_matches_executable_p +#define lynx_core_file_pid _bfd_nocore_core_file_pid /* Handle Lynx core dump file. */ Index: gdb-7.2/bfd/mach-o-target.c =================================================================== --- gdb-7.2.orig/bfd/mach-o-target.c 2010-03-24 16:41:59.000000000 +0100 +++ gdb-7.2/bfd/mach-o-target.c 2011-01-30 19:30:36.000000000 +0100 @@ -58,6 +58,7 @@ #define bfd_mach_o_bfd_define_common_symbol bfd_generic_define_common_symbol #define bfd_mach_o_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data #define bfd_mach_o_core_file_matches_executable_p generic_core_file_matches_executable_p +#define bfd_mach_o_core_file_pid _bfd_nocore_core_file_pid #define bfd_mach_o_get_dynamic_symtab_upper_bound bfd_mach_o_get_symtab_upper_bound #define bfd_mach_o_canonicalize_dynamic_symtab bfd_mach_o_canonicalize_symtab Index: gdb-7.2/bfd/netbsd-core.c =================================================================== --- gdb-7.2.orig/bfd/netbsd-core.c 2007-07-03 16:26:42.000000000 +0200 +++ gdb-7.2/bfd/netbsd-core.c 2011-01-30 19:30:36.000000000 +0100 @@ -44,6 +44,7 @@ #define SPARC64_WCOOKIE_OFFSET 832 #define netbsd_core_file_matches_executable_p generic_core_file_matches_executable_p +#define netbsd_core_core_file_pid _bfd_nocore_core_file_pid struct netbsd_core_struct { Index: gdb-7.2/bfd/osf-core.c =================================================================== --- gdb-7.2.orig/bfd/osf-core.c 2009-09-02 09:18:37.000000000 +0200 +++ gdb-7.2/bfd/osf-core.c 2011-01-30 19:30:36.000000000 +0100 @@ -43,6 +43,7 @@ static char *osf_core_core_file_failing_ static int osf_core_core_file_failing_signal PARAMS ((bfd *)); #define osf_core_core_file_matches_executable_p generic_core_file_matches_executable_p +#define osf_core_core_file_pid _bfd_nocore_core_file_pid static void swap_abort PARAMS ((void)); Index: gdb-7.2/bfd/plugin.c =================================================================== --- gdb-7.2.orig/bfd/plugin.c 2010-03-17 09:50:36.000000000 +0100 +++ gdb-7.2/bfd/plugin.c 2011-01-30 19:30:36.000000000 +0100 @@ -319,6 +319,13 @@ bfd_plugin_core_file_failing_signal (bfd return 0; } +static int +bfd_plugin_core_file_pid (bfd *abfd ATTRIBUTE_UNUSED) +{ + BFD_ASSERT (0); + return 0; +} + static long bfd_plugin_get_symtab_upper_bound (bfd *abfd) { Index: gdb-7.2/bfd/ptrace-core.c =================================================================== --- gdb-7.2.orig/bfd/ptrace-core.c 2009-09-02 09:18:37.000000000 +0200 +++ gdb-7.2/bfd/ptrace-core.c 2011-01-30 19:30:36.000000000 +0100 @@ -53,6 +53,7 @@ const bfd_target *ptrace_unix_core_file_ char * ptrace_unix_core_file_failing_command PARAMS ((bfd *abfd)); int ptrace_unix_core_file_failing_signal PARAMS ((bfd *abfd)); #define ptrace_unix_core_file_matches_executable_p generic_core_file_matches_executable_p +#define ptrace_unix_core_file_pid _bfd_nocore_core_file_pid static void swap_abort PARAMS ((void)); const bfd_target * Index: gdb-7.2/bfd/sco5-core.c =================================================================== --- gdb-7.2.orig/bfd/sco5-core.c 2007-07-03 16:26:42.000000000 +0200 +++ gdb-7.2/bfd/sco5-core.c 2011-01-30 19:30:36.000000000 +0100 @@ -51,6 +51,7 @@ const bfd_target *sco5_core_file_p PARAM char *sco5_core_file_failing_command PARAMS ((bfd *abfd)); int sco5_core_file_failing_signal PARAMS ((bfd *abfd)); #define sco5_core_file_matches_executable_p generic_core_file_matches_executable_p +#define sco5_core_file_pid _bfd_nocore_core_file_pid static void swap_abort PARAMS ((void)); static asection * Index: gdb-7.2/bfd/targets.c =================================================================== --- gdb-7.2.orig/bfd/targets.c 2010-06-29 06:17:22.000000000 +0200 +++ gdb-7.2/bfd/targets.c 2011-01-30 19:30:36.000000000 +0100 @@ -314,11 +314,13 @@ BFD_JUMP_TABLE macros. .#define BFD_JUMP_TABLE_CORE(NAME) \ . NAME##_core_file_failing_command, \ . NAME##_core_file_failing_signal, \ -. NAME##_core_file_matches_executable_p +. NAME##_core_file_matches_executable_p, \ +. NAME##_core_file_pid . . char * (*_core_file_failing_command) (bfd *); . int (*_core_file_failing_signal) (bfd *); . bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *); +. int (*_core_file_pid) (bfd *); . . {* Archive entry points. *} .#define BFD_JUMP_TABLE_ARCHIVE(NAME) \ Index: gdb-7.2/bfd/trad-core.c =================================================================== --- gdb-7.2.orig/bfd/trad-core.c 2007-07-15 08:33:34.000000000 +0200 +++ gdb-7.2/bfd/trad-core.c 2011-01-30 19:30:36.000000000 +0100 @@ -71,6 +71,7 @@ const bfd_target *trad_unix_core_file_p char * trad_unix_core_file_failing_command PARAMS ((bfd *abfd)); int trad_unix_core_file_failing_signal PARAMS ((bfd *abfd)); #define trad_unix_core_file_matches_executable_p generic_core_file_matches_executable_p +#define trad_unix_core_file_pid _bfd_nocore_core_file_pid static void swap_abort PARAMS ((void)); /* Handle 4.2-style (and perhaps also sysV-style) core dump file. */ Index: gdb-7.2/bfd/xcoff-target.h =================================================================== --- gdb-7.2.orig/bfd/xcoff-target.h 2009-09-02 09:18:37.000000000 +0200 +++ gdb-7.2/bfd/xcoff-target.h 2011-01-30 19:30:36.000000000 +0100 @@ -51,6 +51,7 @@ #define coff_core_file_failing_command _bfd_nocore_core_file_failing_command #define coff_core_file_failing_signal _bfd_nocore_core_file_failing_signal #define coff_core_file_matches_executable_p _bfd_nocore_core_file_matches_executable_p +#define coff_core_file_pid _bfd_nocore_core_file_pid #define _bfd_xcoff_bfd_get_relocated_section_contents coff_bfd_get_relocated_section_contents #define _bfd_xcoff_bfd_relax_section coff_bfd_relax_section #define _bfd_xcoff_bfd_gc_sections coff_bfd_gc_sections