From 6fc8053f1a380ae93513f9372cc5456417a1b362 Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Wed, 9 Mar 2016 18:38:30 +0000 Subject: [PATCH] Fix reporting of the CloudABI ABI in kdump. - Advertise the word size for CloudABI ABIs via the SV_LP64 flag. All of the other ABIs include either SV_ILP32 or SV_LP64. - Fix kdump to not assume a 32-bit ABI if the ABI flags field is non-zero but SV_LP64 isn't set. Instead, only assume a 32-bit ABI if SV_ILP32 is set and fallback to the unknown value of "00" if neither SV_LP64 nor SV_ILP32 is set. Reviewed by: kib, ed Differential Revision: https://reviews.freebsd.org/D5560 --- sys/amd64/cloudabi64/cloudabi64_sysvec.c | 2 +- sys/arm64/cloudabi64/cloudabi64_sysvec.c | 2 +- usr.bin/kdump/kdump.c | 11 +++++------ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/sys/amd64/cloudabi64/cloudabi64_sysvec.c b/sys/amd64/cloudabi64/cloudabi64_sysvec.c index 30a2bbf78498..70754884638d 100644 --- a/sys/amd64/cloudabi64/cloudabi64_sysvec.c +++ b/sys/amd64/cloudabi64/cloudabi64_sysvec.c @@ -143,7 +143,7 @@ static struct sysentvec cloudabi64_elf_sysvec = { .sv_usrstack = USRSTACK, .sv_stackprot = VM_PROT_READ | VM_PROT_WRITE, .sv_copyout_strings = cloudabi64_copyout_strings, - .sv_flags = SV_ABI_CLOUDABI | SV_CAPSICUM, + .sv_flags = SV_ABI_CLOUDABI | SV_CAPSICUM | SV_LP64, .sv_set_syscall_retval = cloudabi64_set_syscall_retval, .sv_fetch_syscall_args = cloudabi64_fetch_syscall_args, .sv_syscallnames = cloudabi64_syscallnames, diff --git a/sys/arm64/cloudabi64/cloudabi64_sysvec.c b/sys/arm64/cloudabi64/cloudabi64_sysvec.c index 10b98209a291..cb569cd44460 100644 --- a/sys/arm64/cloudabi64/cloudabi64_sysvec.c +++ b/sys/arm64/cloudabi64/cloudabi64_sysvec.c @@ -144,7 +144,7 @@ static struct sysentvec cloudabi64_elf_sysvec = { .sv_usrstack = USRSTACK, .sv_stackprot = VM_PROT_READ | VM_PROT_WRITE, .sv_copyout_strings = cloudabi64_copyout_strings, - .sv_flags = SV_ABI_CLOUDABI | SV_CAPSICUM, + .sv_flags = SV_ABI_CLOUDABI | SV_CAPSICUM | SV_LP64, .sv_set_syscall_retval = cloudabi64_set_syscall_retval, .sv_fetch_syscall_args = cloudabi64_fetch_syscall_args, .sv_syscallnames = cloudabi64_syscallnames, diff --git a/usr.bin/kdump/kdump.c b/usr.bin/kdump/kdump.c index e45a7332eed3..a4d5e64d860f 100644 --- a/usr.bin/kdump/kdump.c +++ b/usr.bin/kdump/kdump.c @@ -529,12 +529,11 @@ abidump(struct ktr_header *kth) break; } - if (flags != 0) { - if (flags & SV_LP64) - arch = "64"; - else - arch = "32"; - } else + if (flags & SV_LP64) + arch = "64"; + else if (flags & SV_ILP32) + arch = "32"; + else arch = "00"; printf("%s%s ", abi, arch);