Dear Kazu,

Sorry for late reply
Thanks for your suggestion and I have prepared a V2 patch, please help
to review.

BTW, I have switched to evolution mail system, if still look like html
format, please let me know, thanks.

Signed-off-by: James Hsu <[email protected]> 

diff --git a/arm64.c b/arm64.c
index 8934961..03c8167 100644
--- a/arm64.c
+++ b/arm64.c
@@ -3667,8 +3667,42 @@ arm64_get_crash_notes(void)
        ulong *notes_ptrs;
        ulong i, found;
 
-       if (!symbol_exists("crash_notes"))
+       if (!symbol_exists("crash_notes")) {
+               if (DISKDUMP_DUMPFILE() || KDUMP_DUMPFILE()) {
+                       if (!(ms->panic_task_regs = calloc((size_t)kt-
>cpus, sizeof(struct arm64_pt_regs))))
+                               error(FATAL, "cannot calloc
panic_task_regs space\n");
+
+                       for  (i = found = 0; i < kt->cpus; i++) {
+                               if (DISKDUMP_DUMPFILE())
+                                       note =
diskdump_get_prstatus_percpu(i);
+                               else if (KDUMP_DUMPFILE())
+                                       note =
netdump_get_prstatus_percpu(i);
+
+                               if(!note) {
+                                       error(WARNING, "cpu %d: cannot
find NT_PRSTATUS note\n", i);
+                                       continue;
+                               }
+
+                               /*
+                                * Find correct location of note data.
This contains elf_prstatus
+                                * structure which has registers etc.
for the crashed task.
+                                */
+                               offset = sizeof(Elf64_Nhdr);
+                               offset = roundup(offset + note-
>n_namesz, 4);
+                               p = (char *)note + offset; /* start of
elf_prstatus */
+
+                               BCOPY(p + OFFSET(elf_prstatus_pr_reg),
&ms->panic_task_regs[i],
+                                     sizeof(struct arm64_pt_regs));
+
+                               found++;
+                       }
+                       if (!found) {
+                               free(ms->panic_task_regs);
+                               ms->panic_task_regs = NULL;
+                       }
+               }
                return;
+       }
 
        crash_notes = symbol_value("crash_notes");
 
Thanks
James Hsu

On Wed, 2021-08-11 at 02:52 +0000, HAGIO KAZUHITO(萩尾 一仁) wrote:
> -----Original Message-----
> > 
> > Dear Crash maintainers,
> > 
> > We want to improve the crash_tool for the case that need offline
> > cpu  register info even Kdump without
> > crash_notes.
> > 
> > For one thing,  we will prepare a Kdump with all CPU register info
> > in ELF note.
> > For another thing, we need to modify crash_tool and make it support
> > adding offline cpu register info even
> > Kdump without crash_notes.
> > 
> > We prepare a patch for the case with ARCH=arm64.
> > It is verified with our kdump without crash_note and can get all
> > cpu register.
> > Please take your time to review our patch and look forward to
> > receiving your comments.
> > 
> > Patch detail as below
> 
> I've rewritten the commit log, is this ok?
> --
> arm64: Get CPU registers from ELF notes even without crash_notes
> symbol
> 
> Currently arm64 crash retrieves the CPU registers from crash_notes
> symbol
> or ELF notes only when the symbol exists, but there are dumpfiles
> which
> have the registers in ELF notes without the symbol.
> 
> With the patch, crash can retrieve the registers from ELF notes
> without
> the crash_notes symbol.
> --
> 
> And please add Signed-off-by tag.
> 
> > --- crash-7.3.0/arm64.c     2021-04-27 16:01:07.000000000 +0800
> > +++ crash-7.3.0.mod/arm64.c 2021-06-15 17:13:54.037273227 +0800
> > @@ -3667,8 +3667,41 @@ arm64_get_crash_notes(void)
> >     ulong *notes_ptrs;
> >     ulong i, found;
> >  
> > -   if (!symbol_exists("crash_notes"))
> > +   if (!symbol_exists("crash_notes")) {
> > +           if (DISKDUMP_DUMPFILE() || KDUMP_DUMPFILE()) {
> > +                   if (!(ms->panic_task_regs = calloc((size_t)kt-
> > >cpus, sizeof(struct arm64_pt_regs))))
> > +                           error(FATAL, "cannot calloc
> > panic_task_regs space\n");
> > +
> > +                   for  (i = found = 0; i < kt->cpus; i++) {
> > +                           if (DISKDUMP_DUMPFILE())
> > +                                   note =
> > diskdump_get_prstatus_percpu(i);
> > +                           else if (KDUMP_DUMPFILE())
> > +                                   note =
> > netdump_get_prstatus_percpu(i);
> > +                           else {
> > +                                   error(WARNING, "cpu %d: cannot
> > find NT_PRSTATUS note\n", i);
> > +                                   continue;
> > +                           }
> 
> This else block should be separated from the if block like this?
> 
> if (!note) {
>       error(WARNING, "cpu %d: cannot find NT_PRSTATUS note\n", i);
>       continue;
> }
> 
> > +           
> > +                           /*
> > +                            * Find correct location of note data.
> > This contains elf_prstatus
> > +                            * structure which has registers etc.
> > for the crashed task.
> > +                            */
> > +                           offset = sizeof(Elf64_Nhdr);
> > +                           offset = roundup(offset + note-
> > >n_namesz, 4);
> > +                           p = (char *)note + offset; /* start of
> > elf_prstatus */
> > +                           
> > +                           BCOPY(p + OFFSET(elf_prstatus_pr_reg),
> > &ms->panic_task_regs[i],
> > +                                 sizeof(struct arm64_pt_regs));
> > +                           
> > +                           found++;
> > +                   }
> > +           }
> > +           if (!found) {
> > +                   free(ms->panic_task_regs);
> > +                   ms->panic_task_regs = NULL;
> > +           }
> 
> This if block should be within the if (DISKDUMP_DUMPFILE()... block.
> 
> >             return;
> > +   }
> >  
> >     crash_notes = symbol_value("crash_notes");
> >  
> 
> (and this email still looks HTML one to me :-)
> 
> Thanks,
> Kazu
> 

<<attachment: crash-arm64-support_v2.zip>>

--
Crash-utility mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/crash-utility

Reply via email to