From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14195 invoked by alias); 15 Nov 2012 16:29:35 -0000 Received: (qmail 14185 invoked by uid 22791); 15 Nov 2012 16:29:31 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_DNSWL_LOW,TW_OC X-Spam-Check-By: sourceware.org Received: from service87.mimecast.com (HELO service87.mimecast.com) (91.220.42.44) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 15 Nov 2012 16:29:25 +0000 Received: from cam-owa1.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.21]) by service87.mimecast.com; Thu, 15 Nov 2012 16:29:23 +0000 Received: from [10.1.69.62] ([10.1.255.212]) by cam-owa1.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.0); Thu, 15 Nov 2012 16:29:22 +0000 Message-ID: <50A51861.2060807@arm.com> Date: Thu, 15 Nov 2012 16:29:00 -0000 From: Yufeng Zhang User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: "binutils@sourceware.org" Subject: [Patch, ARM/AArch64] Add new elf note types X-MC-Unique: 112111516292303901 Content-Type: multipart/mixed; boundary="------------090900070806030107000507" X-IsSubscribed: yes Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2012-11/txt/msg00218.txt.bz2 This is a multi-part message in MIME format. --------------090900070806030107000507 Content-Type: text/plain; charset=WINDOWS-1252; format=flowed Content-Transfer-Encoding: quoted-printable Content-length: 1180 Hi, This patch adds support for three ARM elf note types in bfd and readelf. Is it OK to commit it? Thanks, Yufeng include/elf/ 2012-11-15 Yufeng Zhang * common.h (NT_ARM_TLS, NT_ARM_HW_BREAK, NT_ARM_HW_WATCH): New=20 macro definitions. bfd/ 2012-11-15 Yufeng Zhang * elf-bfd.h (elfcore_write_arm_tls): Add prototype. (elfcore_write_arm_hw_break): Likewise. (elfcore_write_arm_hw_watch): Likewise. * elf.c (elfcore_grok_arm_tls): New function. (elfcore_grok_arm_hw_break): Likewise. (elfcore_grok_arm_hw_watch): Likewise. (elfcore_grok_note): Call the new functions to handle the corresponding notes. (elfcore_write_arm_tls): New function. (elfcore_write_arm_hw_break): Likewise. (elfcore_write_arm_hw_watch): Likewise. (elfcore_write_register_note): Call the new functions to handle the corresponding pseudo sections. binutils/ 2012-11-15 Yufeng Zhang * readelf.c (get_note_type): Handle NT_ARM_TLS, NT_ARM_HW_BREAK and NT_ARM_HW_WATCH.= --------------090900070806030107000507 Content-Type: text/x-patch; name=aarch64-new-elf-note-types.patch Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="aarch64-new-elf-note-types.patch" Content-length: 5350 diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index b8d82b1..9d42f44 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -2269,6 +2269,12 @@ extern char *elfcore_write_s390_system_call (bfd *, char *, int *, const void *, int); extern char *elfcore_write_arm_vfp (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_arm_tls + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_arm_hw_break + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_arm_hw_watch + (bfd *, char *, int *, const void *, int); extern char *elfcore_write_lwpstatus (bfd *, char *, int *, long, int, const void *); extern char *elfcore_write_register_note diff --git a/bfd/elf.c b/bfd/elf.c index cab1cc7..2bb243d 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -8140,6 +8140,24 @@ elfcore_grok_arm_vfp (bfd *abfd, Elf_Internal_Note *= note) return elfcore_make_note_pseudosection (abfd, ".reg-arm-vfp", note); } =20 +static bfd_boolean +elfcore_grok_arm_tls (bfd *abfd, Elf_Internal_Note *note) +{ + return elfcore_make_note_pseudosection (abfd, ".reg-arm-tls", note); +} + +static bfd_boolean +elfcore_grok_arm_hw_break (bfd *abfd, Elf_Internal_Note *note) +{ + return elfcore_make_note_pseudosection (abfd, ".reg-arm-hw-break", note); +} + +static bfd_boolean +elfcore_grok_arm_hw_watch (bfd *abfd, Elf_Internal_Note *note) +{ + return elfcore_make_note_pseudosection (abfd, ".reg-arm-hw-watch", note); +} + #if defined (HAVE_PRPSINFO_T) typedef prpsinfo_t elfcore_psinfo_t; #if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */ @@ -8580,6 +8598,27 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *not= e) else return TRUE; =20 + case NT_ARM_TLS: + if (note->namesz =3D=3D 6 + && strcmp (note->namedata, "LINUX") =3D=3D 0) + return elfcore_grok_arm_tls (abfd, note); + else + return TRUE; + + case NT_ARM_HW_BREAK: + if (note->namesz =3D=3D 6 + && strcmp (note->namedata, "LINUX") =3D=3D 0) + return elfcore_grok_arm_hw_break (abfd, note); + else + return TRUE; + + case NT_ARM_HW_WATCH: + if (note->namesz =3D=3D 6 + && strcmp (note->namedata, "LINUX") =3D=3D 0) + return elfcore_grok_arm_hw_watch (abfd, note); + else + return TRUE; + case NT_PRPSINFO: case NT_PSINFO: if (bed->elf_backend_grok_psinfo) @@ -9376,6 +9415,42 @@ elfcore_write_arm_vfp (bfd *abfd, } =20 char * +elfcore_write_arm_tls (bfd *abfd, + char *buf, + int *bufsiz, + const void *arm_tls, + int size) +{ + char *note_name =3D "LINUX"; + return elfcore_write_note (abfd, buf, bufsiz, + note_name, NT_ARM_TLS, arm_tls, size); +} + +char * +elfcore_write_arm_hw_break (bfd *abfd, + char *buf, + int *bufsiz, + const void *arm_hw_break, + int size) +{ + char *note_name =3D "LINUX"; + return elfcore_write_note (abfd, buf, bufsiz, + note_name, NT_ARM_HW_BREAK, arm_hw_break, size); +} + +char * +elfcore_write_arm_hw_watch (bfd *abfd, + char *buf, + int *bufsiz, + const void *arm_hw_watch, + int size) +{ + char *note_name =3D "LINUX"; + return elfcore_write_note (abfd, buf, bufsiz, + note_name, NT_ARM_HW_WATCH, arm_hw_watch, size); +} + +char * elfcore_write_register_note (bfd *abfd, char *buf, int *bufsiz, @@ -9411,6 +9486,12 @@ elfcore_write_register_note (bfd *abfd, return elfcore_write_s390_system_call (abfd, buf, bufsiz, data, size); if (strcmp (section, ".reg-arm-vfp") =3D=3D 0) return elfcore_write_arm_vfp (abfd, buf, bufsiz, data, size); + if (strcmp (section, ".reg-arm-tls") =3D=3D 0) + return elfcore_write_arm_tls (abfd, buf, bufsiz, data, size); + if (strcmp (section, ".reg-arm-hw-break") =3D=3D 0) + return elfcore_write_arm_hw_break (abfd, buf, bufsiz, data, size); + if (strcmp (section, ".reg-arm-hw-watch") =3D=3D 0) + return elfcore_write_arm_hw_watch (abfd, buf, bufsiz, data, size); return NULL; } =20 diff --git a/binutils/readelf.c b/binutils/readelf.c index 2fbf2ae..1a52130 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -12600,6 +12600,12 @@ get_note_type (unsigned e_type) return _("NT_S390_PREFIX (s390 prefix register)"); case NT_ARM_VFP: return _("NT_ARM_VFP (arm VFP registers)"); + case NT_ARM_TLS: + return _("NT_ARM_TLS (arm TLS registers)"); + case NT_ARM_HW_BREAK: + return _("NT_ARM_HW_BREAK (arm hardware breakpoint registers)"); + case NT_ARM_HW_WATCH: + return _("NT_ARM_HW_WATCH (arm hardware watchpoint registers)"); case NT_PSTATUS: return _("NT_PSTATUS (pstatus structure)"); case NT_FPREGS: diff --git a/include/elf/common.h b/include/elf/common.h index 1c681d5..7814733 100644 --- a/include/elf/common.h +++ b/include/elf/common.h @@ -549,6 +549,12 @@ /* note name must be "LINUX". */ #define NT_ARM_VFP 0x400 /* ARM VFP registers */ /* note name must be "LINUX". */ +#define NT_ARM_TLS 0x401 /* ARM TLS registers */ + /* note name must be "LINUX". */ +#define NT_ARM_HW_BREAK 0x402 /* ARM hardware breakpoint registers */ + /* note name must be "LINUX". */ +#define NT_ARM_HW_WATCH 0x403 /* ARM hardware watchpoint registers */ + /* note name must be "LINUX". */ =20 /* Note segments for core files on dir-style procfs systems. */ =20= --------------090900070806030107000507--