libprocstat: improve conditional for 32-bit compat

Include support for translating 32-bit auxv vectors on non-64-bit
platforms that aren't riscv (which has no 32-bit ABI support and
probably never will).

Reviewed by:	markj
Sponsored by:	DARPA
Differential Revision:	https://reviews.freebsd.org/D42201

(cherry picked from commit 248fe3d348)
This commit is contained in:
Brooks Davis 2023-10-26 21:38:41 +01:00
parent ea7f064a78
commit 302ff7e6af
2 changed files with 8 additions and 3 deletions

View File

@ -2384,7 +2384,7 @@ procstat_getosrel(struct procstat *procstat, struct kinfo_proc *kp, int *osrelp)
#define PROC_AUXV_MAX 256 #define PROC_AUXV_MAX 256
#if __ELF_WORD_SIZE == 64 #ifdef PS_ARCH_HAS_FREEBSD32
static const char *elf32_sv_names[] = { static const char *elf32_sv_names[] = {
"Linux ELF32", "Linux ELF32",
"FreeBSD ELF32", "FreeBSD ELF32",
@ -2467,7 +2467,7 @@ out:
free(auxv32); free(auxv32);
return (auxv); return (auxv);
} }
#endif /* __ELF_WORD_SIZE == 64 */ #endif /* PS_ARCH_HAS_FREEBSD32 */
static Elf_Auxinfo * static Elf_Auxinfo *
procstat_getauxv_sysctl(pid_t pid, unsigned int *cntp) procstat_getauxv_sysctl(pid_t pid, unsigned int *cntp)
@ -2476,7 +2476,7 @@ procstat_getauxv_sysctl(pid_t pid, unsigned int *cntp)
int name[4]; int name[4];
size_t len; size_t len;
#if __ELF_WORD_SIZE == 64 #ifdef PS_ARCH_HAS_FREEBSD32
if (is_elf32_sysctl(pid)) if (is_elf32_sysctl(pid))
return (procstat_getauxv32_sysctl(pid, cntp)); return (procstat_getauxv32_sysctl(pid, cntp));
#endif #endif

View File

@ -102,6 +102,11 @@
#define PS_FST_FFLAG_EXEC 0x2000 #define PS_FST_FFLAG_EXEC 0x2000
#define PS_FST_FFLAG_HASLOCK 0x4000 #define PS_FST_FFLAG_HASLOCK 0x4000
#if !defined(__ILP32__) && !defined(__riscv)
/* Target architecture supports 32-bit compat */
#define PS_ARCH_HAS_FREEBSD32 1
#endif
struct kinfo_kstack; struct kinfo_kstack;
struct kinfo_proc; struct kinfo_proc;
struct kinfo_vmentry; struct kinfo_vmentry;