[Crash-utility] [PATCH] crash-gcore-command extension module: ARM64 support

Dave Anderson anderson at redhat.com
Tue Jul 29 12:31:00 UTC 2014



----- Original Message -----
> From: Dave Anderson <anderson at redhat.com>
> Subject: [PATCH] crash-gcore-command extension module: ARM64 support
> Date: Thu, 17 Jul 2014 12:04:45 -0400
> 
> > 
> > 
> > Hello Daisuke,
> > 
> 
> Hello Dave,
> 
> Sorry for very late responce....
> 
> > Attached is a patch to introduce support for the ARM64 architecture
> > for the gcore extension module.
> > 
> > The patch is fairly straight-forward other than the fact that on
> > ARM64 machines, the chain of headers included from the crash utility's
> > "defs.h" looks like this:
> > 
> >   /usr/include/crash/defs.h
> >     /usr/include/signal.h
> >       /usr/include/sys/ucontext.h
> >         /usr/include/sys/procfs.h
> > 
> > The <sys/procfs.h> file defines several of the ELF-related structures that
> > are hard-coded in gcore_defs.h, causing compile failures due to duplicate
> > structure declarations.
> > 
> > Note that the <sys/ucontext.h> file on the other three architectures does
> > not #include <sys/procfs.h> so there are no conflicts.  It would be
> > possible
> > to move all architectures to include <sys/procfs.h>, but for example, that
> > would also bring in the <sys/user.h> definition of the user_regs_struct,
> > which in turn causes a myriad of register name mismatches in gcore_x86.c.
> > So for the sake of simplicity, wherever there is an ARM64-only duplicate
> > structure or definition in gcore_defs.h, I've encapsulated them by:
> > 
> >   #if defined(X86) || defined(X86_64) || defined(ARM)
> > 
> 
> Thanks for this explanation. I'll also try to investigate this.
> 
> > Also, there are two generic fixes, one where the gcore module fails on
> > Linux 3.11 and later kernels due to a structure member name change,
> > and another that changes the getopt() return variable to an "int" instead
> > of a "char".
> > 
> > Here are the details:
> >   
> >   gcore.mk:
> >   
> >     - Introduce ARM64 as a supported architecture
> >     - Add libgcore/gcore_arm64 to GCORE_CFILES
> >   
> >   gcore.c:
> >   
> >     - In cmd_gcore() change "c" type to "int" to correctly match
> >       the return type of getopt(); without it, the while loop
> >       spins indefinitely on ARM64.
> 
> >     - In gcore_offset_table_init(), account for the Linux 3.11
> >       structure member name-change from ns_proxy.pid_ns to
> >       ns_proxy.pid_ns_for_children; without it, the gcore command
> >       fails during initialization.
> 
> I've already dealt with this locally, but thanks.
> 
> >   
> >   libgcore/gcore_defs.h:
> >   
> >     - Add ARM64 ELF- and REGSET_VIEW-related #defines required for
> >       each architecture.
> >     - Account for variable page sizes in ARM64.
> >     - Restrict the hard-coded ELF_NGREG, elf_siginfo, elf_prstatus,
> >       __kernel_old_uid_t and __kernel_old_gid_t, and elf_prsinfo
> >       definitions to X86, X86_64 and ARM architectures.
> >     - Add ARM64 thread_struct_fpsmid_state and thread_struct_tp_value
> >       offsets to gcore_offset_table.
> >   
> >   libgcore/gcore_coredump.c:
> >   
> >     - In fill_prstatus_note(), account for the ARM64 usage of
> >       "user_pt_regs" structure instead of the "user_regs_struct"
> >       used by the other architectures.
> >   
> >   libgcore/gcore_arm64.c:
> >   
> >     - Implement ARM64-specific user_regset and user_regset_view
> >       structures and all required support functions.
> >   
> > Please accept these changes into an new package version.
> >   
> 
> I'll commit these into my local repository with some changes for ease
> of my maintainance purpose. Maybe, I'll ask you to review the changed
> version.

Excellent -- thanks!  I thought I'd lost you!

Dave




More information about the Crash-utility mailing list