This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/6] Make BFD read `.stapsdt' section from binary


Jan Kratochvil <jan.kratochvil@redhat.com> writes:

> On Mon, 04 Apr 2011 05:08:03 +0200, Sergio Durigan Junior wrote:
>> --- a/bfd/elf.c
>> +++ b/bfd/elf.c
>> @@ -8416,6 +8416,37 @@ elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
>>      }
>>  }
>>  
>> +#define SDT_NOTE_TYPE 3
>
> I guess this should be in include/elf/common.h named for example NT_STAPSDT.

Sorry for the delay.  Here goes the updated version of the patch.
Thanks for the review!

---
 bfd/ChangeLog         |    9 +++++++++
 bfd/elf-bfd.h         |   14 ++++++++++++++
 bfd/elf.c             |   35 +++++++++++++++++++++++++++++++++++
 include/elf/ChangeLog |    4 ++++
 include/elf/common.h  |    3 +++
 5 files changed, 65 insertions(+), 0 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index ce76b34..765eab8 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,12 @@
+2011-04-14  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* elf-bfd.h (struct sdt_note): New struct.
+	(struct elf_obj_tdata) <sdt_note_head>: New field.
+	* elf.c (elfobj_grok_stapsdt_note_1): New function.
+	(elfobj_grok_stapsdt_note): Likewise.
+	(elf_parse_notes): Added code to treat SystemTap note
+	sections.
+
 2011-04-12  Richard Henderson  <rth@redhat.com>
 
 	* elf64-alpha.c (elf64_alpha_size_dynamic_sections): Do not
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 844610d..39c7de6 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1476,6 +1476,15 @@ enum
   Tag_compatibility = 32
 };
 
+/* The following struct stores information about every SystemTap section
+   found in the object file.  */
+struct sdt_note
+{
+  struct sdt_note *next;
+  bfd_size_type size;
+  bfd_byte data[1];
+};
+
 /* Some private data is stashed away for future use using the tdata pointer
    in the bfd structure.  */
 
@@ -1633,6 +1642,11 @@ struct elf_obj_tdata
   bfd_size_type build_id_size;
   bfd_byte *build_id;
 
+  /* Linked-list containing information about every Systemtap section
+     found in the object file.  Each section corresponds to one entry
+     in the list.  */
+  struct sdt_note *sdt_note_head;
+
   /* True if the bfd contains symbols that have the STT_GNU_IFUNC
      symbol type or STB_GNU_UNIQUE binding.  Used to set the osabi
      field in the ELF header structure.  */
diff --git a/bfd/elf.c b/bfd/elf.c
index 0bb0c5a..71de844 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -8417,6 +8417,35 @@ elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
 }
 
 static bfd_boolean
+elfobj_grok_stapsdt_note_1 (bfd *abfd, Elf_Internal_Note *note)
+{
+  struct sdt_note *cur =
+    (struct sdt_note *) bfd_alloc (abfd, sizeof (struct sdt_note)
+				   + note->descsz);
+
+  cur->next = (struct sdt_note *) (elf_tdata (abfd))->sdt_note_head;
+  cur->size = (bfd_size_type) note->descsz;
+  memcpy (cur->data, note->descdata, note->descsz);
+
+  elf_tdata (abfd)->sdt_note_head = cur;
+
+  return TRUE;
+}
+
+static bfd_boolean
+elfobj_grok_stapsdt_note (bfd *abfd, Elf_Internal_Note *note)
+{
+  switch (note->type)
+    {
+    case NT_STAPSDT:
+      return elfobj_grok_stapsdt_note_1 (abfd, note);
+
+    default:
+      return TRUE;
+    }
+}
+
+static bfd_boolean
 elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
 {
   char *cp;
@@ -9189,6 +9218,12 @@ elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset)
 	      if (! elfobj_grok_gnu_note (abfd, &in))
 		return FALSE;
 	    }
+	  else if (in.namesz == sizeof "stapsdt"
+		   && strcmp (in.namedata, "stapsdt") == 0)
+	    {
+	      if (! elfobj_grok_stapsdt_note (abfd, &in))
+		return FALSE;
+	    }
 	  break;
 	}
 
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index 752730e..8e30979 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,3 +1,7 @@
+2011-04-14  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* common.h (NT_STAPSDT): New define.
+
 2011-03-31  Bernd Schmidt  <bernds@codesourcery.com>
 
 	* tic6x.h (R_C6000_JUMP_SPLOT, R_C6000_EHTYPE,
diff --git a/include/elf/common.h b/include/elf/common.h
index 52ce9a5..a937c6c 100644
--- a/include/elf/common.h
+++ b/include/elf/common.h
@@ -549,6 +549,9 @@
 #define NT_WIN32PSTATUS	18		/* Has a struct win32_pstatus */
 
 
+/* Note segment for SystemTap probes.  */
+#define NT_STAPSDT	3
+
 /* Note segments for core files on NetBSD systems.  Note name
    must start with "NetBSD-CORE".  */
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]