在 2020年08月28日 16:36, HAGIO KAZUHITO(萩尾 一仁) 写道:
-----Original Message-----
> Hi Lianbo,
>
> Please note that we still need to formulate a way to maintain
> crash-extension outside a tarball.
> I am preparing a RFC proposal and will share it shortly.
FYI, the maintainer of gcore is Daisuke (Hatayama-san), so I think he
will review the patch and release a new version of gcore someday, and
then we put it to the crash-extension repository. As for gcore, this
is the way Dave and Hatayama-san have done so far, IIRC.
Good to know. Thanks.
>
> On Fri, Aug 28, 2020 at 9:34 AM Lianbo Jiang <lijiang(a)redhat.com> wrote:
>>
>> With kernel commit: <577d5cd7e585> ("x86/ioperm: Move iobitmap data
into
>> a struct"), the io_bitmap_max and io_bitmap_ptr have been changed. And
>> move the iobitmap data into a struct io_bitmap.
>>
>> So, the crash-gcore-command needs to be updated accordingly, otherwise,
>> the gcore will fail as below:
>>
>> crash> bt -t|grep -i task
>> PID: 3968 TASK: ffff9e512e97af80 CPU: 86 COMMAND: "bash"
>> crash> gcore 3968
>>
>> gcore: invalid structure member offset: thread_struct_io_bitmap_max
>> FILE: libgcore/gcore_x86.c LINE: 846 FUNCTION: ioperm_active()
>>
>> [./crash] error trace: 7f31fca56108 => 7f31fca593b7 => 53a4e1 => 53a463
>>
>> 53a463: OFFSET_verify.part.27+51
>> 53a4e1: OFFSET_verify+49
>>
>> gcore: invalid structure member offset: thread_struct_io_bitmap_max
>> FILE: libgcore/gcore_x86.c LINE: 846 FUNCTION: ioperm_active()
>>
>> Failed.
>>
>> Signed-off-by: Lianbo Jiang <lijiang(a)redhat.com>
>> ---
>> gcore.c | 4 ++++
>> 1 file changed, 4 insertions(+)
>>
>> diff --git a/gcore.c b/gcore.c
>> index 27a11938026a..e3e41ecb435b 100644
>> --- a/gcore.c
>> +++ b/gcore.c
>> @@ -487,6 +487,10 @@ static void gcore_offset_table_init(void)
>> GCORE_MEMBER_OFFSET_INIT(thread_struct_xstate,
"thread_struct", "i387");
>> GCORE_MEMBER_OFFSET_INIT(thread_struct_io_bitmap_max,
"thread_struct", "io_bitmap_max");
>> GCORE_MEMBER_OFFSET_INIT(thread_struct_io_bitmap_ptr,
"thread_struct", "io_bitmap_ptr");
>> + if (GCORE_INVALID_MEMBER(thread_struct_io_bitmap_max)) {
>> + GCORE_MEMBER_OFFSET_INIT(thread_struct_io_bitmap_max,
"io_bitmap", "max");
>> + GCORE_MEMBER_OFFSET_INIT(thread_struct_io_bitmap_ptr,
"io_bitmap", "bitmap");
>> + }
>
> Maybe its better to protect this with a kernel version check to
> maintain backward compatibility. Something like:
>
> (THIS_KERNEL_VERSION < LINUX(4,2,0))
I've not looked at this yet, but generally we have to try to avoid
using kernel version check as far as possible, because kernel version
is fragile in distribution kernels, e.g. RHEL8 kernels are 4.18.0 but
have many 5.x patches.
Thanks for your comment, Kazu and Bhupesh.
Maybe, Hatayama-san has good suggestions, lets wait for the reply or fix.
Thanks.
Lianbo
Thanks,
Kazu
>
> Thanks,
> Bhupesh
>
>> GCORE_MEMBER_OFFSET_INIT(user_regset_n, "user_regset",
"n");
>> GCORE_MEMBER_OFFSET_INIT(vm_area_struct_anon_vma,
"vm_area_struct", "anon_vma");
>> GCORE_MEMBER_OFFSET_INIT(vm_area_struct_vm_ops,
"vm_area_struct", "vm_ops");
>> --
>> 2.17.1
>>