Changeset View
Changeset View
Standalone View
Standalone View
usr.bin/gcore/elfcore.c
Show First 20 Lines • Show All 113 Lines • ▼ Show 20 Lines | |||||
#if defined(__arm__) | #if defined(__arm__) | ||||
static void *elf_note_arm_vfp(void *, size_t *); | static void *elf_note_arm_vfp(void *, size_t *); | ||||
#endif | #endif | ||||
#if defined(__i386__) || defined(__amd64__) | #if defined(__i386__) || defined(__amd64__) | ||||
static void *elf_note_x86_xstate(void *, size_t *); | static void *elf_note_x86_xstate(void *, size_t *); | ||||
#endif | #endif | ||||
#if defined(__powerpc__) | #if defined(__powerpc__) | ||||
static void *elf_note_powerpc_vmx(void *, size_t *); | static void *elf_note_powerpc_vmx(void *, size_t *); | ||||
static void *elf_note_powerpc_vsx(void *, size_t *); | |||||
#endif | #endif | ||||
static void *elf_note_procstat_auxv(void *, size_t *); | static void *elf_note_procstat_auxv(void *, size_t *); | ||||
static void *elf_note_procstat_files(void *, size_t *); | static void *elf_note_procstat_files(void *, size_t *); | ||||
static void *elf_note_procstat_groups(void *, size_t *); | static void *elf_note_procstat_groups(void *, size_t *); | ||||
static void *elf_note_procstat_osrel(void *, size_t *); | static void *elf_note_procstat_osrel(void *, size_t *); | ||||
static void *elf_note_procstat_proc(void *, size_t *); | static void *elf_note_procstat_proc(void *, size_t *); | ||||
static void *elf_note_procstat_psstrings(void *, size_t *); | static void *elf_note_procstat_psstrings(void *, size_t *); | ||||
static void *elf_note_procstat_rlimit(void *, size_t *); | static void *elf_note_procstat_rlimit(void *, size_t *); | ||||
▲ Show 20 Lines • Show All 246 Lines • ▼ Show 20 Lines | |||||
#if defined(__arm__) | #if defined(__arm__) | ||||
elf_putnote(NT_ARM_VFP, elf_note_arm_vfp, tids + i, sb); | elf_putnote(NT_ARM_VFP, elf_note_arm_vfp, tids + i, sb); | ||||
#endif | #endif | ||||
#if defined(__i386__) || defined(__amd64__) | #if defined(__i386__) || defined(__amd64__) | ||||
elf_putnote(NT_X86_XSTATE, elf_note_x86_xstate, tids + i, sb); | elf_putnote(NT_X86_XSTATE, elf_note_x86_xstate, tids + i, sb); | ||||
#endif | #endif | ||||
#if defined(__powerpc__) | #if defined(__powerpc__) | ||||
elf_putnote(NT_PPC_VMX, elf_note_powerpc_vmx, tids + i, sb); | elf_putnote(NT_PPC_VMX, elf_note_powerpc_vmx, tids + i, sb); | ||||
elf_putnote(NT_PPC_VSX, elf_note_powerpc_vsx, tids + i, sb); | |||||
#endif | #endif | ||||
} | } | ||||
#ifndef ELFCORE_COMPAT_32 | #ifndef ELFCORE_COMPAT_32 | ||||
elf_putnote(NT_PROCSTAT_PROC, elf_note_procstat_proc, &pid, sb); | elf_putnote(NT_PROCSTAT_PROC, elf_note_procstat_proc, &pid, sb); | ||||
elf_putnote(NT_PROCSTAT_FILES, elf_note_procstat_files, &pid, sb); | elf_putnote(NT_PROCSTAT_FILES, elf_note_procstat_files, &pid, sb); | ||||
elf_putnote(NT_PROCSTAT_VMMAP, elf_note_procstat_vmmap, &pid, sb); | elf_putnote(NT_PROCSTAT_VMMAP, elf_note_procstat_vmmap, &pid, sb); | ||||
elf_putnote(NT_PROCSTAT_GROUPS, elf_note_procstat_groups, &pid, sb); | elf_putnote(NT_PROCSTAT_GROUPS, elf_note_procstat_groups, &pid, sb); | ||||
▲ Show 20 Lines • Show All 405 Lines • ▼ Show 20 Lines | elf_note_powerpc_vmx(void *arg, size_t *sizep) | ||||
if (!has_vmx) { | if (!has_vmx) { | ||||
*sizep = 0; | *sizep = 0; | ||||
return (NULL); | return (NULL); | ||||
} | } | ||||
vmx = calloc(1, sizeof(*vmx)); | vmx = calloc(1, sizeof(*vmx)); | ||||
memcpy(vmx, &info, sizeof(*vmx)); | memcpy(vmx, &info, sizeof(*vmx)); | ||||
*sizep = sizeof(*vmx); | *sizep = sizeof(*vmx); | ||||
return (vmx); | return (vmx); | ||||
} | |||||
static void * | |||||
elf_note_powerpc_vsx(void *arg, size_t *sizep) | |||||
{ | |||||
lwpid_t tid; | |||||
char *vshr_data; | |||||
static bool has_vsx = true; | |||||
uint64_t vshr[32]; | |||||
tid = *(lwpid_t *)arg; | |||||
if (has_vsx) { | |||||
if (ptrace(PT_GETVSRREGS, tid, (void *)vshr, | |||||
sizeof(vshr)) != 0) | |||||
has_vsx = false; | |||||
} | |||||
if (!has_vsx) { | |||||
*sizep = 0; | |||||
return (NULL); | |||||
} | |||||
vshr_data = calloc(1, sizeof(vshr)); | |||||
memcpy(vshr_data, vshr, sizeof(vshr)); | |||||
*sizep = sizeof(vshr); | |||||
return (vshr_data); | |||||
} | } | ||||
#endif | #endif | ||||
static void * | static void * | ||||
procstat_sysctl(void *arg, int what, size_t structsz, size_t *sizep) | procstat_sysctl(void *arg, int what, size_t structsz, size_t *sizep) | ||||
{ | { | ||||
size_t len; | size_t len; | ||||
pid_t pid; | pid_t pid; | ||||
▲ Show 20 Lines • Show All 120 Lines • Show Last 20 Lines |