* gdb.arch/arm-bl-branch-dest.exp: Use gdb_test_file_name instead
[deliverable/binutils-gdb.git] / binutils / dwarf.c
index 05bc483abfa06126b8db53c08121a0e6ec6d40b2..c78f1243d248299ab45562b96a02ad5b28b828b1 100644 (file)
@@ -139,52 +139,27 @@ get_encoded_value (unsigned char *data,
   return val;
 }
 
-/* Print a dwarf_vma value (typically an address, offset or length) in
-   hexadecimal format, followed by a space.  The length of the value (and
-   hence the precision displayed) is determined by the byte_size parameter.  */
-
-static void
-print_dwarf_vma (dwarf_vma val, unsigned byte_size)
-{
-  static char buff[18];
-  int offset = 0;
-
-  /* Printf does not have a way of specifiying a maximum field width for an
-     integer value, so we print the full value into a buffer and then select
-     the precision we need.  */
 #if __STDC_VERSION__ >= 199901L || (defined(__GNUC__) && __GNUC__ >= 2)
 #ifndef __MINGW32__
-  snprintf (buff, sizeof (buff), "%16.16llx ", val);
+#define  DWARF_VMA_FMT       "ll"
+#define  DWARF_VMA_FMT_LONG  "%16.16llx"
 #else
-  snprintf (buff, sizeof (buff), "%016I64x ", val);
+#define  DWARF_VMA_FMT       "I64"
+#define  DWARF_VMA_FMT_LONG  "%016I64x"
 #endif
 #else
-  snprintf (buff, sizeof (buff), "%16.16lx ", val);
+#define  DWARF_VMA_FMT       "l"
+#define  DWARF_VMA_FMT_LONG  "%16.16lx"
 #endif
 
-  if (byte_size != 0)
-    {
-      if (byte_size > 0 && byte_size <= 8)
-       offset = 16 - 2 * byte_size;
-      else
-       error (_("Wrong size in print_dwarf_vma"));
-    }
-
-  fputs (buff + offset, stdout);
-}
-
-#if __STDC_VERSION__ >= 199901L || (defined(__GNUC__) && __GNUC__ >= 2)
-#ifndef __MINGW32__
-#define  DWARF_VMA_FMT "ll"
-#else
-#define  DWARF_VMA_FMT "I64"
-#endif
-#else
-#define  DWARF_VMA_FMT "l"
-#endif
+/* Convert a dwarf vma value into a string.  Returns a pointer to a static
+   buffer containing the converted VALUE.  The value is converted according
+   to the printf formating character FMTCH.  If NUM_BYTES is non-zero then
+   it specifies the maximum number of bytes to be displayed in the converted
+   value and FMTCH is ignored - hex is always used.  */
 
 static const char *
-dwarf_vmatoa (const char *fmtch, dwarf_vma value)
+dwarf_vmatoa_1 (const char *fmtch, dwarf_vma value, unsigned num_bytes)
 {
   /* As dwarf_vmatoa is used more then once in a printf call
      for output, we are cycling through an fixed array of pointers
@@ -194,17 +169,45 @@ dwarf_vmatoa (const char *fmtch, dwarf_vma value)
   {
     char place[64];
   } buf[16];
-  char fmt[32];
   char *ret;
 
-  sprintf (fmt, "%%%s%s", DWARF_VMA_FMT, fmtch);
-
   ret = buf[buf_pos++].place;
   buf_pos %= ARRAY_SIZE (buf);
 
-  snprintf (ret, sizeof (buf[0].place), fmt, value);
+  if (num_bytes)
+    {
+      /* Printf does not have a way of specifiying a maximum field width for an
+        integer value, so we print the full value into a buffer and then select
+        the precision we need.  */
+      snprintf (ret, sizeof (buf[0].place), DWARF_VMA_FMT_LONG, value);
+      if (num_bytes > 8)
+       num_bytes = 8;
+      return ret + (16 - 2 * num_bytes);
+    }
+  else
+    {
+      char fmt[32];
+
+      sprintf (fmt, "%%%s%s", DWARF_VMA_FMT, fmtch);
+      snprintf (ret, sizeof (buf[0].place), fmt, value);
+      return ret;
+    }
+}
 
-  return ret;
+static inline const char *
+dwarf_vmatoa (const char * fmtch, dwarf_vma value)
+{
+  return dwarf_vmatoa_1 (fmtch, value, 0);
+}
+
+/* Print a dwarf_vma value (typically an address, offset or length) in
+   hexadecimal format, followed by a space.  The length of the VALUE (and
+   hence the precision displayed) is determined by the NUM_BYTES parameter.  */
+
+static void
+print_dwarf_vma (dwarf_vma value, unsigned num_bytes)
+{
+  printf ("%s ", dwarf_vmatoa_1 (NULL, value, num_bytes));
 }
 
 /* Format a 64-bit value, given as two 32-bit values, in hex.
@@ -285,6 +288,7 @@ read_uleb128 (unsigned char * data,
 #define SAFE_BYTE_GET(VAL, PTR, AMOUNT, END)   \
   do                                           \
     {                                          \
+      int dummy [sizeof (VAL) < (AMOUNT) ? -1 : 1] ATTRIBUTE_UNUSED ; \
       unsigned int amount = (AMOUNT);          \
       if (((PTR) + amount) >= (END))           \
        {                                       \
@@ -810,7 +814,7 @@ static const char *
 get_FORM_name (unsigned long form)
 {
   const char *name;
-  
+
   if (form == 0)
     return "DW_FORM value: 0";
 
@@ -1421,6 +1425,34 @@ find_cu_tu_set_v2 (dwarf_vma cu_offset, int do_types)
   return NULL;
 }
 
+/* Add INC to HIGH_BITS:LOW_BITS.  */
+static void
+add64 (dwarf_vma * high_bits, dwarf_vma * low_bits, dwarf_vma inc)
+{
+  dwarf_vma tmp = * low_bits;
+
+  tmp += inc;
+
+  /* FIXME: There is probably a better way of handling this:
+
+     We need to cope with dwarf_vma being a 32-bit or 64-bit
+     type.  Plus regardless of its size LOW_BITS is meant to
+     only hold 32-bits, so if there is overflow or wrap around
+     we must propagate into HIGH_BITS.  */
+  if (tmp < * low_bits)
+    {
+      ++ * high_bits;
+    }
+  else if (sizeof (tmp) > 8
+          && (tmp >> 31) > 1)
+    {
+      ++ * high_bits;
+      tmp &= 0xFFFFFFFF;
+    }
+
+  * low_bits = tmp;
+}
+
 static unsigned char *
 read_and_display_attr_value (unsigned long attribute,
                             unsigned long form,
@@ -1566,12 +1598,15 @@ read_and_display_attr_value (unsigned long attribute,
       if (!do_loc)
        {
          dwarf_vma high_bits;
+         dwarf_vma utmp;
          char buf[64];
 
          SAFE_BYTE_GET64 (data, &high_bits, &uvalue, end);
-
+         utmp = uvalue;
+         if (form == DW_FORM_ref8)
+           add64 (& high_bits, & utmp, cu_offset);
          printf (" 0x%s",
-                 dwarf_vmatoa64 (high_bits, uvalue, buf, sizeof (buf)));
+                 dwarf_vmatoa64 (high_bits, utmp, buf, sizeof (buf)));
        }
 
       if ((do_loc || do_debug_loc || do_debug_ranges)
@@ -2192,7 +2227,7 @@ process_debug_info (struct dwarf_section *section,
       unsigned char *tags;
       int level, last_level, saved_level;
       dwarf_vma cu_offset;
-      int offset_size;
+      unsigned int offset_size;
       int initial_length_size;
       dwarf_vma signature_high = 0;
       dwarf_vma signature_low = 0;
@@ -3472,9 +3507,29 @@ find_debug_info_for_offset (unsigned long offset)
   return NULL;
 }
 
+static const char *
+get_gdb_index_symbol_kind_name (gdb_index_symbol_kind kind)
+{
+  /* See gdb/gdb-index.h.  */
+  static const char * const kinds[] =
+  {
+    N_ ("no info"),
+    N_ ("type"),
+    N_ ("variable"),
+    N_ ("function"),
+    N_ ("other"),
+    N_ ("unused5"),
+    N_ ("unused6"),
+    N_ ("unused7")
+  };
+
+  return _ (kinds[kind]);
+}
+
 static int
-display_debug_pubnames (struct dwarf_section *section,
-                       void *file ATTRIBUTE_UNUSED)
+display_debug_pubnames_worker (struct dwarf_section *section,
+                              void *file ATTRIBUTE_UNUSED,
+                              int is_gnu)
 {
   DWARF2_Internal_PubNames names;
   unsigned char *start = section->start;
@@ -3490,7 +3545,7 @@ display_debug_pubnames (struct dwarf_section *section,
     {
       unsigned char *data;
       unsigned long offset;
-      int offset_size, initial_length_size;
+      unsigned int offset_size, initial_length_size;
 
       data = start;
 
@@ -3542,7 +3597,10 @@ display_debug_pubnames (struct dwarf_section *section,
       printf (_("  Size of area in .debug_info section: %ld\n"),
              (long) names.pn_size);
 
-      printf (_("\n    Offset\tName\n"));
+      if (is_gnu)
+       printf (_("\n    Offset  Kind          Name\n"));
+      else
+       printf (_("\n    Offset\tName\n"));
 
       do
        {
@@ -3551,7 +3609,29 @@ display_debug_pubnames (struct dwarf_section *section,
          if (offset != 0)
            {
              data += offset_size;
-             printf ("    %-6lx\t%s\n", offset, data);
+             if (is_gnu)
+               {
+                 unsigned int kind_data;
+                 gdb_index_symbol_kind kind;
+                 const char *kind_name;
+                 int is_static;
+
+                 SAFE_BYTE_GET (kind_data, data, 1, end);
+                 data++;
+                 /* GCC computes the kind as the upper byte in the CU index
+                    word, and then right shifts it by the CU index size.
+                    Left shift KIND to where the gdb-index.h accessor macros
+                    can use it.  */
+                 kind_data <<= GDB_INDEX_CU_BITSIZE;
+                 kind = GDB_INDEX_SYMBOL_KIND_VALUE (kind_data);
+                 kind_name = get_gdb_index_symbol_kind_name (kind);
+                 is_static = GDB_INDEX_SYMBOL_STATIC_VALUE (kind_data);
+                 printf ("    %-6lx  %s,%-10s  %s\n",
+                         offset, is_static ? _("s") : _("g"),
+                         kind_name, data);
+               }
+             else
+               printf ("    %-6lx\t%s\n", offset, data);
              data += strnlen ((char *) data, end - data) + 1;
            }
        }
@@ -3562,6 +3642,18 @@ display_debug_pubnames (struct dwarf_section *section,
   return 1;
 }
 
+static int
+display_debug_pubnames (struct dwarf_section *section, void *file)
+{
+  return display_debug_pubnames_worker (section, file, 0);
+}
+
+static int
+display_debug_gnu_pubnames (struct dwarf_section *section, void *file)
+{
+  return display_debug_pubnames_worker (section, file, 1);
+}
+
 static int
 display_debug_macinfo (struct dwarf_section *section,
                       void *file ATTRIBUTE_UNUSED)
@@ -3773,7 +3865,7 @@ display_debug_macro (struct dwarf_section *section,
          dwarf_vma nargs, n;
 
          SAFE_BYTE_GET_AND_INC (count, curr, 1, end);
-         
+
          memset (extended_op_buf, 0, sizeof (extended_op_buf));
          extended_ops = extended_op_buf;
          if (count)
@@ -4517,8 +4609,8 @@ display_debug_aranges (struct dwarf_section *section,
       dwarf_vma address;
       unsigned char address_size;
       int excess;
-      int offset_size;
-      int initial_length_size;
+      unsigned int offset_size;
+      unsigned int initial_length_size;
 
       hdrptr = start;
 
@@ -4889,8 +4981,8 @@ typedef struct Frame_Chunk
   char *augmentation;
   unsigned int code_factor;
   int data_factor;
-  unsigned long pc_begin;
-  unsigned long pc_range;
+  dwarf_vma pc_begin;
+  dwarf_vma pc_range;
   int cfa_reg;
   int cfa_offset;
   int ra;
@@ -5075,7 +5167,7 @@ frame_display_row (Frame_Chunk *fc, int *need_col_headers, int *max_regs)
       printf ("\n");
     }
 
-  printf ("%0*lx ", eh_addr_size * 2, fc->pc_begin);
+  print_dwarf_vma (fc->pc_begin, eh_addr_size);
   if (fc->cfa_exp)
     strcpy (tmp, "exp");
   else
@@ -5145,16 +5237,16 @@ display_debug_frames (struct dwarf_section *section,
     {
       unsigned char *saved_start;
       unsigned char *block_end;
-      unsigned long length;
-      unsigned long cie_id;
+      dwarf_vma length;
+      dwarf_vma cie_id;
       Frame_Chunk *fc;
       Frame_Chunk *cie;
       int need_col_headers = 1;
       unsigned char *augmentation_data = NULL;
       unsigned long augmentation_data_len = 0;
-      int encoded_ptr_size = saved_eh_addr_size;
-      int offset_size;
-      int initial_length_size;
+      unsigned int encoded_ptr_size = saved_eh_addr_size;
+      unsigned int offset_size;
+      unsigned int initial_length_size;
 
       saved_start = start;
 
@@ -5181,14 +5273,16 @@ display_debug_frames (struct dwarf_section *section,
       block_end = saved_start + length + initial_length_size;
       if (block_end > end)
        {
-         warn ("Invalid length %#08lx in FDE at %#08lx\n",
-               length, (unsigned long)(saved_start - section_start));
+         warn ("Invalid length 0x%s in FDE at %#08lx\n",
+               dwarf_vmatoa_1 (NULL, length, offset_size),
+               (unsigned long) (saved_start - section_start));
          block_end = end;
        }
 
       SAFE_BYTE_GET_AND_INC (cie_id, start, offset_size, end);
 
-      if (is_eh ? (cie_id == 0) : (cie_id == DW_CIE_ID))
+      if (is_eh ? (cie_id == 0) : ((offset_size == 4 && cie_id == DW_CIE_ID)
+                                  || (offset_size == 8 && cie_id == DW64_CIE_ID)))
        {
          int version;
 
@@ -5241,15 +5335,18 @@ display_debug_frames (struct dwarf_section *section,
            }
          cie = fc;
 
+         printf ("\n%08lx ", (unsigned long) (saved_start - section_start));
+         print_dwarf_vma (length, fc->ptr_size);
+         print_dwarf_vma (cie_id, offset_size);
+
          if (do_debug_frames_interp)
-           printf ("\n%08lx %08lx %08lx CIE \"%s\" cf=%d df=%d ra=%d\n",
-                   (unsigned long)(saved_start - section_start), length, cie_id,
-                   fc->augmentation, fc->code_factor, fc->data_factor,
-                   fc->ra);
+           {
+             printf ("CIE \"%s\" cf=%d df=%d ra=%d\n", fc->augmentation,
+                     fc->code_factor, fc->data_factor, fc->ra);
+           }
          else
            {
-             printf ("\n%08lx %08lx %08lx CIE\n",
-                     (unsigned long)(saved_start - section_start), length, cie_id);
+             printf ("CIE\n");
              printf ("  Version:               %d\n", version);
              printf ("  Augmentation:          \"%s\"\n", fc->augmentation);
              if (version >= 4)
@@ -5316,8 +5413,9 @@ display_debug_frames (struct dwarf_section *section,
 
          if (!cie)
            {
-             warn ("Invalid CIE pointer %#08lx in FDE at %#08lx\n",
-                   cie_id, (unsigned long)(saved_start - section_start));
+             warn ("Invalid CIE pointer 0x%s in FDE at %#08lx\n",
+                   dwarf_vmatoa_1 (NULL, cie_id, offset_size),
+                   (unsigned long) (saved_start - section_start));
              fc->ncols = 0;
              fc->col_type = (short int *) xmalloc (sizeof (short int));
              fc->col_offset = (int *) xmalloc (sizeof (int));
@@ -5364,7 +5462,7 @@ display_debug_frames (struct dwarf_section *section,
             run of the "objcopy on compressed debug sections" test for an
             example of this.  */
          SAFE_BYTE_GET_AND_INC (fc->pc_range, start, encoded_ptr_size, end);
-         
+
          if (cie->augmentation[0] == 'z')
            {
              augmentation_data_len = LEB ();
@@ -5372,12 +5470,19 @@ display_debug_frames (struct dwarf_section *section,
              start += augmentation_data_len;
            }
 
-         printf ("\n%08lx %08lx %08lx FDE cie=%08lx pc=",
-                 (unsigned long)(saved_start - section_start), length, cie_id,
+         printf ("\n%08lx %s %s FDE cie=%08lx pc=",
+                 (unsigned long)(saved_start - section_start),
+                 dwarf_vmatoa_1 (NULL, length, fc->ptr_size),
+                 dwarf_vmatoa_1 (NULL, cie_id, offset_size),
                  (unsigned long)(cie->chunk_start - section_start));
+
          if (fc->segment_size)
            printf ("%04lx:", segment_selector);
-         printf ("%08lx..%08lx\n", fc->pc_begin, fc->pc_begin + fc->pc_range);
+
+         printf ("%s..%s\n",
+                 dwarf_vmatoa_1 (NULL, fc->pc_begin, fc->ptr_size),
+                 dwarf_vmatoa_1 (NULL, fc->pc_begin + fc->pc_range, fc->ptr_size));
+
          if (! do_debug_frames_interp && augmentation_data_len)
            {
              unsigned long i;
@@ -5525,7 +5630,8 @@ display_debug_frames (struct dwarf_section *section,
        {
          unsigned op, opa;
          unsigned long ul, reg, roffs;
-         long l, ofs;
+         long l;
+         dwarf_vma ofs;
          dwarf_vma vma;
          const char *reg_prefix = "";
 
@@ -5542,9 +5648,11 @@ display_debug_frames (struct dwarf_section *section,
              if (do_debug_frames_interp)
                frame_display_row (fc, &need_col_headers, &max_regs);
              else
-               printf ("  DW_CFA_advance_loc: %d to %08lx\n",
+               printf ("  DW_CFA_advance_loc: %d to %s\n",
                        opa * fc->code_factor,
-                       fc->pc_begin + opa * fc->code_factor);
+                       dwarf_vmatoa_1 (NULL, 
+                                       fc->pc_begin + opa * fc->code_factor,
+                                       fc->ptr_size));
              fc->pc_begin += opa * fc->code_factor;
              break;
 
@@ -5586,7 +5694,8 @@ display_debug_frames (struct dwarf_section *section,
              if (do_debug_frames_interp)
                frame_display_row (fc, &need_col_headers, &max_regs);
              else
-               printf ("  DW_CFA_set_loc: %08lx\n", (unsigned long)vma);
+               printf ("  DW_CFA_set_loc: %s\n",
+                       dwarf_vmatoa_1 (NULL, vma, fc->ptr_size));
              fc->pc_begin = vma;
              break;
 
@@ -5595,9 +5704,11 @@ display_debug_frames (struct dwarf_section *section,
              if (do_debug_frames_interp)
                frame_display_row (fc, &need_col_headers, &max_regs);
              else
-               printf ("  DW_CFA_advance_loc1: %ld to %08lx\n",
-                       ofs * fc->code_factor,
-                       fc->pc_begin + ofs * fc->code_factor);
+               printf ("  DW_CFA_advance_loc1: %ld to %s\n",
+                       (unsigned long) (ofs * fc->code_factor),
+                       dwarf_vmatoa_1 (NULL,
+                                       fc->pc_begin + ofs * fc->code_factor,
+                                       fc->ptr_size));
              fc->pc_begin += ofs * fc->code_factor;
              break;
 
@@ -5606,9 +5717,11 @@ display_debug_frames (struct dwarf_section *section,
              if (do_debug_frames_interp)
                frame_display_row (fc, &need_col_headers, &max_regs);
              else
-               printf ("  DW_CFA_advance_loc2: %ld to %08lx\n",
-                       ofs * fc->code_factor,
-                       fc->pc_begin + ofs * fc->code_factor);
+               printf ("  DW_CFA_advance_loc2: %ld to %s\n",
+                       (unsigned long) (ofs * fc->code_factor),
+                       dwarf_vmatoa_1 (NULL,
+                                       fc->pc_begin + ofs * fc->code_factor,
+                                       fc->ptr_size));
              fc->pc_begin += ofs * fc->code_factor;
              break;
 
@@ -5617,9 +5730,11 @@ display_debug_frames (struct dwarf_section *section,
              if (do_debug_frames_interp)
                frame_display_row (fc, &need_col_headers, &max_regs);
              else
-               printf ("  DW_CFA_advance_loc4: %ld to %08lx\n",
-                       ofs * fc->code_factor,
-                       fc->pc_begin + ofs * fc->code_factor);
+               printf ("  DW_CFA_advance_loc4: %ld to %s\n",
+                       (unsigned long) (ofs * fc->code_factor),
+                       dwarf_vmatoa_1 (NULL,
+                                       fc->pc_begin + ofs * fc->code_factor,
+                                       fc->ptr_size));
              fc->pc_begin += ofs * fc->code_factor;
              break;
 
@@ -5880,9 +5995,11 @@ display_debug_frames (struct dwarf_section *section,
              if (do_debug_frames_interp)
                frame_display_row (fc, &need_col_headers, &max_regs);
              else
-               printf ("  DW_CFA_MIPS_advance_loc8: %ld to %08lx\n",
-                       ofs * fc->code_factor,
-                       fc->pc_begin + ofs * fc->code_factor);
+               printf ("  DW_CFA_MIPS_advance_loc8: %ld to %s\n",
+                       (unsigned long) (ofs * fc->code_factor),
+                       dwarf_vmatoa_1 (NULL,
+                                       fc->pc_begin + ofs * fc->code_factor,
+                                       fc->ptr_size));
              fc->pc_begin += ofs * fc->code_factor;
              break;
 
@@ -6081,38 +6198,9 @@ display_gdb_index (struct dwarf_section *section,
              else
                printf ("%c%lu", num_cus > 1 ? '\t' : ' ', (unsigned long) cu);
 
-             switch (kind)
-               {
-               case GDB_INDEX_SYMBOL_KIND_NONE:
-                 printf (_(" [no symbol information]"));
-                 break;
-               case GDB_INDEX_SYMBOL_KIND_TYPE:
-                 printf (is_static
-                         ? _(" [static type]")
-                         : _(" [global type]"));
-                 break;
-               case GDB_INDEX_SYMBOL_KIND_VARIABLE:
-                 printf (is_static
-                         ? _(" [static variable]")
-                         : _(" [global variable]"));
-                 break;
-               case GDB_INDEX_SYMBOL_KIND_FUNCTION:
-                 printf (is_static
-                         ? _(" [static function]")
-                         : _(" [global function]"));
-                 break;
-               case GDB_INDEX_SYMBOL_KIND_OTHER:
-                 printf (is_static
-                         ? _(" [static other]")
-                         : _(" [global other]"));
-                 break;
-               default:
-                 printf (is_static
-                         ? _(" [static unknown: %d]")
-                         : _(" [global unknown: %d]"),
-                         kind);
-                 break;
-               }
+             printf (" [%s, %s]",
+                     is_static ? _("static") : _("global"),
+                     get_gdb_index_symbol_kind_name (kind));
              if (num_cus > 1)
                printf ("\n");
            }
@@ -6736,6 +6824,8 @@ struct dwarf_section_display debug_displays[] =
     display_debug_lines,    &do_debug_lines,   1 },
   { { ".debug_pubnames",    ".zdebug_pubnames",        NULL, NULL, 0, 0, 0 },
     display_debug_pubnames, &do_debug_pubnames,        0 },
+  { { ".debug_gnu_pubnames", ".zdebug_gnu_pubnames", NULL, NULL, 0, 0, 0 },
+    display_debug_gnu_pubnames, &do_debug_pubnames, 0 },
   { { ".eh_frame",         "",                 NULL, NULL, 0, 0, 0 },
     display_debug_frames,   &do_debug_frames,  1 },
   { { ".debug_macinfo",            ".zdebug_macinfo",  NULL, NULL, 0, 0, 0 },
@@ -6748,6 +6838,8 @@ struct dwarf_section_display debug_displays[] =
     display_debug_loc,     &do_debug_loc,      1 },
   { { ".debug_pubtypes",    ".zdebug_pubtypes",        NULL, NULL, 0, 0, 0 },
     display_debug_pubnames, &do_debug_pubtypes,        0 },
+  { { ".debug_gnu_pubtypes", ".zdebug_gnu_pubtypes", NULL, NULL, 0, 0, 0 },
+    display_debug_gnu_pubnames, &do_debug_pubtypes, 0 },
   { { ".debug_ranges",     ".zdebug_ranges",   NULL, NULL, 0, 0, 0 },
     display_debug_ranges,   &do_debug_ranges,  1 },
   { { ".debug_static_func", ".zdebug_static_func", NULL, NULL, 0, 0, 0 },
This page took 0.032905 seconds and 4 git commands to generate.