diff libbacktrace/xcoff.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
line wrap: on
line diff
--- a/libbacktrace/xcoff.c	Thu Oct 25 07:37:49 2018 +0900
+++ b/libbacktrace/xcoff.c	Thu Feb 13 11:34:05 2020 +0900
@@ -1,5 +1,5 @@
 /* xcoff.c -- Get debug data from an XCOFF file for backtraces.
-   Copyright (C) 2012-2018 Free Software Foundation, Inc.
+   Copyright (C) 2012-2020 Free Software Foundation, Inc.
    Adapted from elf.c.
 
 Redistribution and use in source and binary forms, with or without
@@ -387,18 +387,6 @@
   uintptr_t base_address;
 };
 
-/* An index of DWARF sections we care about.  */
-
-enum dwarf_section
-{
-  DWSECT_INFO,
-  DWSECT_LINE,
-  DWSECT_ABBREV,
-  DWSECT_RANGES,
-  DWSECT_STR,
-  DWSECT_MAX
-};
-
 /* Information we gather for the DWARF sections we care about.  */
 
 struct dwsect_info
@@ -1100,7 +1088,7 @@
   off_t str_off;
   off_t min_offset;
   off_t max_offset;
-  struct dwsect_info dwsect[DWSECT_MAX];
+  struct dwsect_info dwsect[DEBUG_MAX];
   size_t sects_size;
   size_t syms_size;
   int32_t str_size;
@@ -1111,6 +1099,7 @@
   int dwarf_view_valid;
   int magic_ok;
   int i;
+  struct dwarf_sections dwarf_sections;
 
   *found_sym = 0;
 
@@ -1255,19 +1244,19 @@
       switch (sects[i].s_flags & 0xffff0000)
 	{
 	  case SSUBTYP_DWINFO:
-	    idx = DWSECT_INFO;
+	    idx = DEBUG_INFO;
 	    break;
 	  case SSUBTYP_DWLINE:
-	    idx = DWSECT_LINE;
+	    idx = DEBUG_LINE;
 	    break;
 	  case SSUBTYP_DWABREV:
-	    idx = DWSECT_ABBREV;
+	    idx = DEBUG_ABBREV;
 	    break;
 	  case SSUBTYP_DWARNGE:
-	    idx = DWSECT_RANGES;
+	    idx = DEBUG_RANGES;
 	    break;
 	  case SSUBTYP_DWSTR:
-	    idx = DWSECT_STR;
+	    idx = DEBUG_STR;
 	    break;
 	  default:
 	    continue;
@@ -1288,7 +1277,7 @@
 	goto fail;
       dwarf_view_valid = 1;
 
-      for (i = 0; i < (int) DWSECT_MAX; ++i)
+      for (i = 0; i < (int) DEBUG_MAX; ++i)
 	{
 	  if (dwsect[i].offset == 0)
 	    dwsect[i].data = NULL;
@@ -1297,25 +1286,30 @@
 			      + (dwsect[i].offset - min_offset));
 	}
 
-      if (!backtrace_dwarf_add (state, 0,
-				dwsect[DWSECT_INFO].data,
-				dwsect[DWSECT_INFO].size,
+      memset (&dwarf_sections, 0, sizeof dwarf_sections);
+
+      dwarf_sections.data[DEBUG_INFO] = dwsect[DEBUG_INFO].data;
+      dwarf_sections.size[DEBUG_INFO] = dwsect[DEBUG_INFO].size;
 #if BACKTRACE_XCOFF_SIZE == 32
-				/* XXX workaround for broken lineoff */
-				dwsect[DWSECT_LINE].data - 4,
+      /* XXX workaround for broken lineoff */
+      dwarf_sections.data[DEBUG_LINE] = dwsect[DEBUG_LINE].data - 4;
 #else
-				/* XXX workaround for broken lineoff */
-				dwsect[DWSECT_LINE].data - 12,
+      /* XXX workaround for broken lineoff */
+      dwarf_sections.data[DEBUG_LINE] = dwsect[DEBUG_LINE].data - 12;
 #endif
-				dwsect[DWSECT_LINE].size,
-				dwsect[DWSECT_ABBREV].data,
-				dwsect[DWSECT_ABBREV].size,
-				dwsect[DWSECT_RANGES].data,
-				dwsect[DWSECT_RANGES].size,
-				dwsect[DWSECT_STR].data,
-				dwsect[DWSECT_STR].size,
+      dwarf_sections.size[DEBUG_LINE] = dwsect[DEBUG_LINE].size;
+      dwarf_sections.data[DEBUG_ABBREV] = dwsect[DEBUG_ABBREV].data;
+      dwarf_sections.size[DEBUG_ABBREV] = dwsect[DEBUG_ABBREV].size;
+      dwarf_sections.data[DEBUG_RANGES] = dwsect[DEBUG_RANGES].data;
+      dwarf_sections.size[DEBUG_RANGES] = dwsect[DEBUG_RANGES].size;
+      dwarf_sections.data[DEBUG_STR] = dwsect[DEBUG_STR].data;
+      dwarf_sections.size[DEBUG_STR] = dwsect[DEBUG_STR].size;
+
+      if (!backtrace_dwarf_add (state, 0, &dwarf_sections,
 				1, /* big endian */
-				error_callback, data, fileline_fn))
+				NULL, /* altlink */
+				error_callback, data, fileline_fn,
+				NULL /* returned fileline_entry */))
 	goto fail;
     }
 
@@ -1590,7 +1584,8 @@
       if (found_sym)
 	backtrace_atomic_store_pointer (&state->syminfo_fn, xcoff_syminfo);
       else
-	__sync_bool_compare_and_swap (&state->syminfo_fn, NULL, xcoff_nosyms);
+	(void) __sync_bool_compare_and_swap (&state->syminfo_fn, NULL,
+					     xcoff_nosyms);
     }
 
   if (!state->threaded)