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

Wei Shu weishu at marvell.com
Wed Jul 30 11:35:40 UTC 2014


Hi Dave,

which glibc version are you using? for us, it seems /usr/include/sys/procfs.h is not included, we still met build error with your patch

so Lei and me made some patches to use the old way for ARM64, and also add compat mode support for ARM64

these patches are verified on both ARM64 compat mode and ARM64, please help review, thanks 

Best Regards,
Wei

-----Original Message-----
From: crash-utility-bounces at redhat.com [mailto:crash-utility-bounces at redhat.com] On Behalf Of Dave Anderson
Sent: Tuesday, July 29, 2014 8:31 PM
To: HATAYAMA Daisuke
Cc: crash-utility at redhat.com
Subject: Re: [Crash-utility] [PATCH] crash-gcore-command extension module: ARM64 support



----- 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

--
Crash-utility mailing list
Crash-utility at redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-gcore-fix-build-for-arm64.patch
Type: application/octet-stream
Size: 5116 bytes
Desc: 0001-gcore-fix-build-for-arm64.patch
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20140730/90e73d8c/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-gcore-ARM64-fix-NT_ARM_TLS-missing-build-error.patch
Type: application/octet-stream
Size: 752 bytes
Desc: 0002-gcore-ARM64-fix-NT_ARM_TLS-missing-build-error.patch
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20140730/90e73d8c/attachment-0001.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0004-gcore-ARM64-add-compat-mode-support.patch
Type: application/octet-stream
Size: 7336 bytes
Desc: 0004-gcore-ARM64-add-compat-mode-support.patch
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20140730/90e73d8c/attachment-0002.obj>


More information about the Crash-utility mailing list