Merged update from upstream sources
This is an automated DistroBaker update from upstream sources. If you do not know what this is about or would like to opt out, contact the OSCI team. Source: https://src.fedoraproject.org/rpms/gcc.git#6e2000ccdcdb66c5cfdc8eb6cbde89a7900e4603
This commit is contained in:
parent
04faf4a952
commit
39922df896
14
gcc.spec
14
gcc.spec
@ -119,7 +119,7 @@
|
||||
Summary: Various compilers (C, C++, Objective-C, ...)
|
||||
Name: gcc
|
||||
Version: %{gcc_version}
|
||||
Release: %{gcc_release}.16%{?dist}
|
||||
Release: %{gcc_release}.15%{?dist}
|
||||
# libgcc, libgfortran, libgomp, libstdc++ and crtstuff have
|
||||
# GCC Runtime Exception.
|
||||
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
|
||||
@ -277,9 +277,6 @@ Patch14: gcc11-pr98687.patch
|
||||
Patch15: gcc11-pr98721.patch
|
||||
Patch16: gcc11-pr98742.patch
|
||||
Patch17: gcc11-pr98638.patch
|
||||
Patch18: gcc11-pr98765.patch
|
||||
Patch19: gcc11-libgomp-task.patch
|
||||
Patch20: gcc11-pr98751.patch
|
||||
|
||||
# On ARM EABI systems, we do want -gnueabi to be part of the
|
||||
# target triple.
|
||||
@ -796,9 +793,6 @@ to NVidia PTX capable devices if available.
|
||||
%patch15 -p0 -b .pr98721~
|
||||
%patch16 -p0 -b .pr98742~
|
||||
%patch17 -p0 -b .pr98638~
|
||||
%patch18 -p0 -b .pr98765~
|
||||
%patch19 -p0 -b .libgomp-task~
|
||||
%patch20 -p0 -b .pr98751~
|
||||
|
||||
rm -f libgomp/testsuite/*/*task-detach*
|
||||
|
||||
@ -3085,12 +3079,6 @@ end
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Wed Jan 20 2021 Jakub Jelinek <jakub@redhat.com> 11.0.0-0.16
|
||||
- fix DWARF5 -g -flto -ffat-lto-objects, so that LTO sections can be stripped off
|
||||
later (PR debug/98765)
|
||||
- fix GOMP_task caller stack corruption on s390x
|
||||
- libgccjit DWARF5 fixes (PR debug/98751)
|
||||
|
||||
* Tue Jan 19 2021 Jakub Jelinek <jakub@redhat.com> 11.0.0-0.15
|
||||
- update from trunk
|
||||
- PRs debug/98708, debug/98716, ipa/98222, libstdc++/98725, target/97847,
|
||||
|
@ -1,69 +0,0 @@
|
||||
2021-01-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* task.c (GOMP_task): Rename priority argument to priority_arg,
|
||||
add priority automatic variable and modify that variable. Instead of
|
||||
clearing detach argument when GOMP_TASK_FLAG_DETACH bit is not set,
|
||||
check flags for that bit.
|
||||
|
||||
--- libgomp/task.c.jj 2021-01-18 07:18:42.362339622 +0100
|
||||
+++ libgomp/task.c 2021-01-20 17:23:36.973758174 +0100
|
||||
@@ -354,10 +354,11 @@ task_fulfilled_p (struct gomp_task *task
|
||||
void
|
||||
GOMP_task (void (*fn) (void *), void *data, void (*cpyfn) (void *, void *),
|
||||
long arg_size, long arg_align, bool if_clause, unsigned flags,
|
||||
- void **depend, int priority, void *detach)
|
||||
+ void **depend, int priority_arg, void *detach)
|
||||
{
|
||||
struct gomp_thread *thr = gomp_thread ();
|
||||
struct gomp_team *team = thr->ts.team;
|
||||
+ int priority = 0;
|
||||
|
||||
#ifdef HAVE_BROKEN_POSIX_SEMAPHORES
|
||||
/* If pthread_mutex_* is used for omp_*lock*, then each task must be
|
||||
@@ -385,13 +386,12 @@ GOMP_task (void (*fn) (void *), void *da
|
||||
}
|
||||
}
|
||||
|
||||
- if ((flags & GOMP_TASK_FLAG_PRIORITY) == 0)
|
||||
- priority = 0;
|
||||
- else if (priority > gomp_max_task_priority_var)
|
||||
- priority = gomp_max_task_priority_var;
|
||||
-
|
||||
- if ((flags & GOMP_TASK_FLAG_DETACH) == 0)
|
||||
- detach = NULL;
|
||||
+ if (__builtin_expect ((flags & GOMP_TASK_FLAG_PRIORITY) != 0, 0))
|
||||
+ {
|
||||
+ priority = priority_arg;
|
||||
+ if (priority > gomp_max_task_priority_var)
|
||||
+ priority = gomp_max_task_priority_var;
|
||||
+ }
|
||||
|
||||
if (!if_clause || team == NULL
|
||||
|| (thr->task && thr->task->final_task)
|
||||
@@ -415,7 +415,7 @@ GOMP_task (void (*fn) (void *), void *da
|
||||
|| (flags & GOMP_TASK_FLAG_FINAL);
|
||||
task.priority = priority;
|
||||
|
||||
- if (detach)
|
||||
+ if ((flags & GOMP_TASK_FLAG_DETACH) != 0)
|
||||
{
|
||||
task.detach = true;
|
||||
gomp_sem_init (&task.completion_sem, 0);
|
||||
@@ -443,7 +443,7 @@ GOMP_task (void (*fn) (void *), void *da
|
||||
else
|
||||
fn (data);
|
||||
|
||||
- if (detach && !task_fulfilled_p (&task))
|
||||
+ if (task.detach && !task_fulfilled_p (&task))
|
||||
gomp_sem_wait (&task.completion_sem);
|
||||
|
||||
/* Access to "children" is normally done inside a task_lock
|
||||
@@ -484,7 +484,7 @@ GOMP_task (void (*fn) (void *), void *da
|
||||
task->kind = GOMP_TASK_UNDEFERRED;
|
||||
task->in_tied_task = parent->in_tied_task;
|
||||
task->taskgroup = taskgroup;
|
||||
- if (detach)
|
||||
+ if ((flags & GOMP_TASK_FLAG_DETACH) != 0)
|
||||
{
|
||||
task->detach = true;
|
||||
gomp_sem_init (&task->completion_sem, 0);
|
@ -1,185 +0,0 @@
|
||||
2021-01-19 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR debug/98751
|
||||
* dwarf2out.c (output_line_info): Rename static variable
|
||||
"generation", moving it out of the function to...
|
||||
(output_line_info_generation): New.
|
||||
(init_sections_and_labels): Likewise, renaming the variable to...
|
||||
(init_sections_and_labels_generation): New.
|
||||
(dwarf2out_c_finalize): Reset the new variables.
|
||||
|
||||
--- gcc/dwarf2out.c
|
||||
+++ gcc/dwarf2out.c
|
||||
@@ -12709,22 +12709,27 @@ output_one_line_info_table (dw_line_info_table *table)
|
||||
dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
|
||||
}
|
||||
|
||||
+static unsigned int output_line_info_generation;
|
||||
+
|
||||
/* Output the source line number correspondence information. This
|
||||
information goes into the .debug_line section. */
|
||||
|
||||
static void
|
||||
output_line_info (bool prologue_only)
|
||||
{
|
||||
- static unsigned int generation;
|
||||
char l1[MAX_ARTIFICIAL_LABEL_BYTES], l2[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||
char p1[MAX_ARTIFICIAL_LABEL_BYTES], p2[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||
bool saw_one = false;
|
||||
int opc;
|
||||
|
||||
- ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, generation);
|
||||
- ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, generation);
|
||||
- ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, generation);
|
||||
- ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, generation++);
|
||||
+ ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL,
|
||||
+ output_line_info_generation);
|
||||
+ ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL,
|
||||
+ output_line_info_generation);
|
||||
+ ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL,
|
||||
+ output_line_info_generation);
|
||||
+ ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL,
|
||||
+ output_line_info_generation++);
|
||||
|
||||
if (!XCOFF_DEBUGGING_INFO)
|
||||
{
|
||||
@@ -28589,6 +28594,10 @@ output_macinfo (const char *debug_line_label, bool early_lto_debug)
|
||||
macinfo_label_base += macinfo_label_base_adj;
|
||||
}
|
||||
|
||||
+/* As init_sections_and_labels may get called multiple times, have a
|
||||
+ generation count for labels. */
|
||||
+static unsigned init_sections_and_labels_generation;
|
||||
+
|
||||
/* Initialize the various sections and labels for dwarf output and prefix
|
||||
them with PREFIX if non-NULL. Returns the generation (zero based
|
||||
number of times function was called). */
|
||||
@@ -28596,10 +28605,6 @@ output_macinfo (const char *debug_line_label, bool early_lto_debug)
|
||||
static unsigned
|
||||
init_sections_and_labels (bool early_lto_debug)
|
||||
{
|
||||
- /* As we may get called multiple times have a generation count for
|
||||
- labels. */
|
||||
- static unsigned generation = 0;
|
||||
-
|
||||
if (early_lto_debug)
|
||||
{
|
||||
if (!dwarf_split_debug_info)
|
||||
@@ -28634,7 +28639,7 @@ init_sections_and_labels (bool early_lto_debug)
|
||||
SECTION_DEBUG | SECTION_EXCLUDE, NULL);
|
||||
ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_abbrev_section_label,
|
||||
DEBUG_SKELETON_ABBREV_SECTION_LABEL,
|
||||
- generation);
|
||||
+ init_sections_and_labels_generation);
|
||||
|
||||
/* Somewhat confusing detail: The skeleton_[abbrev|info] sections
|
||||
stay in the main .o, but the skeleton_line goes into the split
|
||||
@@ -28644,14 +28649,14 @@ init_sections_and_labels (bool early_lto_debug)
|
||||
SECTION_DEBUG | SECTION_EXCLUDE, NULL);
|
||||
ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label,
|
||||
DEBUG_SKELETON_LINE_SECTION_LABEL,
|
||||
- generation);
|
||||
+ init_sections_and_labels_generation);
|
||||
debug_str_offsets_section
|
||||
= get_section (DEBUG_LTO_DWO_STR_OFFSETS_SECTION,
|
||||
SECTION_DEBUG | SECTION_EXCLUDE,
|
||||
NULL);
|
||||
ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_info_section_label,
|
||||
DEBUG_SKELETON_INFO_SECTION_LABEL,
|
||||
- generation);
|
||||
+ init_sections_and_labels_generation);
|
||||
debug_str_dwo_section = get_section (DEBUG_LTO_STR_DWO_SECTION,
|
||||
DEBUG_STR_DWO_SECTION_FLAGS,
|
||||
NULL);
|
||||
@@ -28667,7 +28672,8 @@ init_sections_and_labels (bool early_lto_debug)
|
||||
debug_line_section = get_section (DEBUG_LTO_LINE_SECTION,
|
||||
SECTION_DEBUG | SECTION_EXCLUDE, NULL);
|
||||
ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
|
||||
- DEBUG_LINE_SECTION_LABEL, generation);
|
||||
+ DEBUG_LINE_SECTION_LABEL,
|
||||
+ init_sections_and_labels_generation);
|
||||
|
||||
debug_str_section = get_section (DEBUG_LTO_STR_SECTION,
|
||||
DEBUG_STR_SECTION_FLAGS
|
||||
@@ -28711,7 +28717,7 @@ init_sections_and_labels (bool early_lto_debug)
|
||||
SECTION_DEBUG, NULL);
|
||||
ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_abbrev_section_label,
|
||||
DEBUG_SKELETON_ABBREV_SECTION_LABEL,
|
||||
- generation);
|
||||
+ init_sections_and_labels_generation);
|
||||
|
||||
/* Somewhat confusing detail: The skeleton_[abbrev|info] sections
|
||||
stay in the main .o, but the skeleton_line goes into the
|
||||
@@ -28721,13 +28727,13 @@ init_sections_and_labels (bool early_lto_debug)
|
||||
SECTION_DEBUG | SECTION_EXCLUDE, NULL);
|
||||
ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label,
|
||||
DEBUG_SKELETON_LINE_SECTION_LABEL,
|
||||
- generation);
|
||||
+ init_sections_and_labels_generation);
|
||||
debug_str_offsets_section
|
||||
= get_section (DEBUG_DWO_STR_OFFSETS_SECTION,
|
||||
SECTION_DEBUG | SECTION_EXCLUDE, NULL);
|
||||
ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_info_section_label,
|
||||
DEBUG_SKELETON_INFO_SECTION_LABEL,
|
||||
- generation);
|
||||
+ init_sections_and_labels_generation);
|
||||
debug_loc_section = get_section (dwarf_version >= 5
|
||||
? DEBUG_DWO_LOCLISTS_SECTION
|
||||
: DEBUG_DWO_LOC_SECTION,
|
||||
@@ -28767,31 +28773,37 @@ init_sections_and_labels (bool early_lto_debug)
|
||||
}
|
||||
|
||||
ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
|
||||
- DEBUG_ABBREV_SECTION_LABEL, generation);
|
||||
+ DEBUG_ABBREV_SECTION_LABEL,
|
||||
+ init_sections_and_labels_generation);
|
||||
ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
|
||||
- DEBUG_INFO_SECTION_LABEL, generation);
|
||||
+ DEBUG_INFO_SECTION_LABEL,
|
||||
+ init_sections_and_labels_generation);
|
||||
info_section_emitted = false;
|
||||
ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
|
||||
- DEBUG_LINE_SECTION_LABEL, generation);
|
||||
+ DEBUG_LINE_SECTION_LABEL,
|
||||
+ init_sections_and_labels_generation);
|
||||
/* There are up to 4 unique ranges labels per generation.
|
||||
See also output_rnglists. */
|
||||
ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
|
||||
- DEBUG_RANGES_SECTION_LABEL, generation * 4);
|
||||
+ DEBUG_RANGES_SECTION_LABEL,
|
||||
+ init_sections_and_labels_generation * 4);
|
||||
if (dwarf_version >= 5 && dwarf_split_debug_info)
|
||||
ASM_GENERATE_INTERNAL_LABEL (ranges_base_label,
|
||||
DEBUG_RANGES_SECTION_LABEL,
|
||||
- 1 + generation * 4);
|
||||
+ 1 + init_sections_and_labels_generation * 4);
|
||||
ASM_GENERATE_INTERNAL_LABEL (debug_addr_section_label,
|
||||
- DEBUG_ADDR_SECTION_LABEL, generation);
|
||||
+ DEBUG_ADDR_SECTION_LABEL,
|
||||
+ init_sections_and_labels_generation);
|
||||
ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
|
||||
(dwarf_strict && dwarf_version < 5)
|
||||
? DEBUG_MACINFO_SECTION_LABEL
|
||||
- : DEBUG_MACRO_SECTION_LABEL, generation);
|
||||
+ : DEBUG_MACRO_SECTION_LABEL,
|
||||
+ init_sections_and_labels_generation);
|
||||
ASM_GENERATE_INTERNAL_LABEL (loc_section_label, DEBUG_LOC_SECTION_LABEL,
|
||||
- generation);
|
||||
+ init_sections_and_labels_generation);
|
||||
|
||||
- ++generation;
|
||||
- return generation - 1;
|
||||
+ ++init_sections_and_labels_generation;
|
||||
+ return init_sections_and_labels_generation - 1;
|
||||
}
|
||||
|
||||
/* Set up for Dwarf output at the start of compilation. */
|
||||
@@ -32379,6 +32391,8 @@ dwarf2out_c_finalize (void)
|
||||
base_types.release ();
|
||||
XDELETEVEC (producer_string);
|
||||
producer_string = NULL;
|
||||
+ output_line_info_generation = 0;
|
||||
+ init_sections_and_labels_generation = 0;
|
||||
}
|
||||
|
||||
#include "gt-dwarf2out.h"
|
@ -1,83 +0,0 @@
|
||||
2021-01-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/98765
|
||||
* dwarf2out.c (reset_indirect_string): Also reset indirect strings
|
||||
with DW_FORM_line_strp form.
|
||||
(prune_unused_types_update_strings): Don't add into debug_str_hash
|
||||
indirect strings with DW_FORM_line_strp form.
|
||||
(adjust_name_comp_dir): New function.
|
||||
(dwarf2out_finish): Call it on CU DIEs after resetting
|
||||
debug_line_str_hash.
|
||||
|
||||
--- gcc/dwarf2out.c.jj 2021-01-20 08:32:09.612958930 +0100
|
||||
+++ gcc/dwarf2out.c 2021-01-20 15:41:30.343417095 +0100
|
||||
@@ -4733,7 +4733,9 @@ int
|
||||
reset_indirect_string (indirect_string_node **h, void *)
|
||||
{
|
||||
struct indirect_string_node *node = *h;
|
||||
- if (node->form == DW_FORM_strp || node->form == dwarf_FORM (DW_FORM_strx))
|
||||
+ if (node->form == DW_FORM_strp
|
||||
+ || node->form == DW_FORM_line_strp
|
||||
+ || node->form == dwarf_FORM (DW_FORM_strx))
|
||||
{
|
||||
free (node->label);
|
||||
node->label = NULL;
|
||||
@@ -29477,8 +29479,9 @@ prune_unused_types_update_strings (dw_di
|
||||
s->refcount++;
|
||||
/* Avoid unnecessarily putting strings that are used less than
|
||||
twice in the hash table. */
|
||||
- if (s->refcount
|
||||
- == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
|
||||
+ if (s->form != DW_FORM_line_strp
|
||||
+ && (s->refcount
|
||||
+ == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2)))
|
||||
{
|
||||
indirect_string_node **slot
|
||||
= debug_str_hash->find_slot_with_hash (s->str,
|
||||
@@ -31325,6 +31328,33 @@ reset_dies (dw_die_ref die)
|
||||
FOR_EACH_CHILD (die, c, reset_dies (c));
|
||||
}
|
||||
|
||||
+/* reset_indirect_string removed the references coming from DW_AT_name
|
||||
+ and DW_AT_comp_dir attributes on compilation unit DIEs. Readd them as
|
||||
+ .debug_line_str strings again. */
|
||||
+
|
||||
+static void
|
||||
+adjust_name_comp_dir (dw_die_ref die)
|
||||
+{
|
||||
+ for (int i = 0; i < 2; i++)
|
||||
+ {
|
||||
+ dwarf_attribute attr_kind = i ? DW_AT_comp_dir : DW_AT_name;
|
||||
+ dw_attr_node *a = get_AT (die, attr_kind);
|
||||
+ if (a == NULL || a->dw_attr_val.val_class != dw_val_class_str)
|
||||
+ continue;
|
||||
+
|
||||
+ if (!debug_line_str_hash)
|
||||
+ debug_line_str_hash
|
||||
+ = hash_table<indirect_string_hasher>::create_ggc (10);
|
||||
+
|
||||
+ struct indirect_string_node *node
|
||||
+ = find_AT_string_in_table (a->dw_attr_val.v.val_str->str,
|
||||
+ debug_line_str_hash);
|
||||
+ set_indirect_string (node);
|
||||
+ node->form = DW_FORM_line_strp;
|
||||
+ a->dw_attr_val.v.val_str = node;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/* Output stuff that dwarf requires at the end of every file,
|
||||
and generate the DWARF-2 debugging info. */
|
||||
|
||||
@@ -31398,6 +31428,12 @@ dwarf2out_finish (const char *filename)
|
||||
{
|
||||
debug_line_str_hash->traverse<void *, reset_indirect_string> (NULL);
|
||||
debug_line_str_hash = NULL;
|
||||
+ if (asm_outputs_debug_line_str ())
|
||||
+ {
|
||||
+ adjust_name_comp_dir (comp_unit_die ());
|
||||
+ for (limbo_die_node *node = cu_die_list; node; node = node->next)
|
||||
+ adjust_name_comp_dir (node->die);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user