Compare commits
145 Commits
Author | SHA256 | Date | |
---|---|---|---|
b0f0d01f4f | |||
afac32a7c0 | |||
60306b8b83 | |||
46cafbd33b | |||
444e8ae674 | |||
f5f9765ee4 | |||
e3e8f6c669 | |||
39ecd72620 | |||
3d7542c78e | |||
a7d4e1f5d1 | |||
a47a6c7ae2 | |||
c1072c9162 | |||
ce539afe45 | |||
e00e0065fb | |||
9d8059d6b9 | |||
eeb7cfc5e7 | |||
643e897094 | |||
7c0c085f9d | |||
f5df47ead9 | |||
7a46c00ae7 | |||
41c4caba77 | |||
4f1ae734f8 | |||
43ff13a9f9 | |||
4cd5e7d48b | |||
4381218556 | |||
ddffb6afc2 | |||
27c5657f8d | |||
8cc2efe84a | |||
39d8753a82 | |||
fa6b0aea9c | |||
3b68b0eb13 | |||
c420d54861 | |||
63a48184dc | |||
59c9df8ab3 | |||
2cb7b4f32b | |||
880f05bd20 | |||
e2604e20ce | |||
769a15d624 | |||
90f7c6b97c | |||
4e0dc5ce60 | |||
a7a8d06102 | |||
d44b58ed57 | |||
6df8046a37 | |||
7de63e5e01 | |||
e44bc9b6a6 | |||
6677e26a3e | |||
3c39a32636 | |||
6eac6fb88a | |||
ca370125f1 | |||
ca3f033df1 | |||
4abb0a3691 | |||
c1701c614c | |||
a4514afa8a | |||
3e616708d2 | |||
96a840a21e | |||
825c4954ae | |||
c77f00360a | |||
9656fb0f7c | |||
b1858f00c1 | |||
8ec2d2fa36 | |||
7eefe09e37 | |||
a30a4e0fe1 | |||
c155231677 | |||
304a220de8 | |||
c6f948f9d5 | |||
c168653416 | |||
ed887cbd3a | |||
134c8edd24 | |||
500bda96e6 | |||
d7967f6f34 | |||
544ab05bba | |||
21aca275f8 | |||
260436bd78 | |||
d7a6cd108c | |||
bedde47acc | |||
ec2f8d7352 | |||
c88d4a9b9c | |||
882160ed64 | |||
95c1324adb | |||
f929ceaaa7 | |||
2967fb3cdd | |||
b18fc9566e | |||
a5d4aec758 | |||
69588043d9 | |||
58ca0a3ea8 | |||
7ea273d98e | |||
9a981f8016 | |||
8705d0f16a | |||
9ec8f3b467 | |||
1708680044 | |||
c8f884fe54 | |||
5518d702a2 | |||
06adeac959 | |||
23ab3ff6b5 | |||
564457ca89 | |||
539e8fd815 | |||
f7ebdff3c2 | |||
ea5ba5b919 | |||
0bded28ebc | |||
2a4861a2dc | |||
4ed93ea332 | |||
dbba2cc4d7 | |||
7cf2a2391f | |||
8324ea5262 | |||
265258e2d3 | |||
cb25bc0df9 | |||
05aed8d82d | |||
30efb40892 | |||
29063422f1 | |||
|
3bba274e73 | ||
4660959c39 | |||
68f75a445c | |||
a2657d9149 | |||
26b3f96cdc | |||
b53afccb97 | |||
e6c9bf9f29 | |||
f4d8aa7cc5 | |||
107eafef25 | |||
2136eed067 | |||
365c7550ac | |||
5f7413af61 | |||
7510398730 | |||
b5070b1b72 | |||
3ab58bd4dc | |||
055da9d2f1 | |||
47544fef54 | |||
0b8efaa38b | |||
99a234d2b3 | |||
657b8f9229 | |||
65fb517798 | |||
c1af3d416f | |||
06d0d10900 | |||
e955d23401 | |||
d8b751fb85 | |||
8cdb1780c8 | |||
|
299b9fabd9 | ||
90627694dd | |||
a0b0d96e1f | |||
c067c70bfe | |||
821b54f1de | |||
789287ec83 | |||
4c870a59ee | |||
97679c2bad | |||
0d6c55a4b4 | |||
51237497eb |
BIN
gcc-13.3.1+git9426.tar.xz
(Stored with Git LFS)
BIN
gcc-13.3.1+git9426.tar.xz
(Stored with Git LFS)
Binary file not shown.
@@ -1,58 +0,0 @@
|
|||||||
From 7562f089a190953b8ef615b90b7b0520e812a930 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Richard Biener <rguenther@suse.de>
|
|
||||||
Date: Mon, 6 Nov 2023 11:31:40 +0100
|
|
||||||
Subject: [PATCH] libstdc++/112351 - deal with __gthread_once failure during
|
|
||||||
locale init
|
|
||||||
To: gcc-patches@gcc.gnu.org
|
|
||||||
|
|
||||||
The following makes the C++98 locale init path follow the way the
|
|
||||||
C++11 performs initialization. This way we deal with pthread_once
|
|
||||||
failing, falling back to non-threadsafe initialization which, given we
|
|
||||||
initialize from the library, should be serialized by the dynamic
|
|
||||||
loader already.
|
|
||||||
|
|
||||||
PR libstdc++/112351
|
|
||||||
libstdc++-v3/
|
|
||||||
* src/c++98/locale.cc (locale::facet::_S_initialize_once):
|
|
||||||
Check whether _S_c_locale is already initialized.
|
|
||||||
(locale::facet::_S_get_c_locale): Always perform non-threadsafe
|
|
||||||
init when threadsafe init failed.
|
|
||||||
---
|
|
||||||
libstdc++-v3/src/c++98/locale.cc | 13 ++++++++-----
|
|
||||||
1 file changed, 8 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/libstdc++-v3/src/c++98/locale.cc b/libstdc++-v3/src/c++98/locale.cc
|
|
||||||
index d308140bab7..1ef0c394cd7 100644
|
|
||||||
--- a/libstdc++-v3/src/c++98/locale.cc
|
|
||||||
+++ b/libstdc++-v3/src/c++98/locale.cc
|
|
||||||
@@ -206,6 +206,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|
||||||
void
|
|
||||||
locale::facet::_S_initialize_once()
|
|
||||||
{
|
|
||||||
+ // Need to check this because we could get called once from
|
|
||||||
+ // _S_get_c_locale() when the program is single-threaded, and then again
|
|
||||||
+ // (via __gthread_once) when it's multi-threaded.
|
|
||||||
+ if (_S_c_locale)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
// Initialize the underlying locale model.
|
|
||||||
_S_create_c_locale(_S_c_locale, _S_c_name);
|
|
||||||
}
|
|
||||||
@@ -216,12 +222,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|
||||||
#ifdef __GTHREADS
|
|
||||||
if (__gthread_active_p())
|
|
||||||
__gthread_once(&_S_once, _S_initialize_once);
|
|
||||||
- else
|
|
||||||
#endif
|
|
||||||
- {
|
|
||||||
- if (!_S_c_locale)
|
|
||||||
- _S_initialize_once();
|
|
||||||
- }
|
|
||||||
+ if (__builtin_expect (!_S_c_locale, 0))
|
|
||||||
+ _S_initialize_once();
|
|
||||||
return _S_c_locale;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@@ -1,265 +0,0 @@
|
|||||||
From 8926dc1cbe8fa3b9ae35bf03ec503bbc40f9cf37 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Giuliano Belinassi <gbelinassi@suse.de>
|
|
||||||
Date: Thu, 25 Jul 2024 11:54:22 -0300
|
|
||||||
Subject: [PATCH] Backport rs6000: Adjust -fpatchable-function-entry* support
|
|
||||||
for dual entry
|
|
||||||
|
|
||||||
Original message:
|
|
||||||
As the discussion in PR112980, although the current
|
|
||||||
implementation for -fpatchable-function-entry* conforms
|
|
||||||
with the documentation (making N NOPs be consecutive),
|
|
||||||
it's inefficient for both kernel and userspace livepatching
|
|
||||||
(see comments in PR for the details).
|
|
||||||
|
|
||||||
So this patch is to change the current implementation by
|
|
||||||
emitting the "before" NOPs before global entry point and
|
|
||||||
the "after" NOPs after local entry point. The new behavior
|
|
||||||
would not keep NOPs to be consecutive, so the documentation
|
|
||||||
is updated to emphasize this
|
|
||||||
|
|
||||||
Backport to gcc-13
|
|
||||||
|
|
||||||
Authored-by: Kewen Lin <linkw@linux.ibm.com>
|
|
||||||
Backported-by: Giuliano Belinassi <gbelinassi@suse.de>
|
|
||||||
|
|
||||||
PR target/112980
|
|
||||||
|
|
||||||
gcc/ChangeLog:
|
|
||||||
|
|
||||||
* config/rs6000/rs6000-logue.cc (rs6000_output_function_prologue):
|
|
||||||
Adjust the handling on patch area emitting with dual entry, remove
|
|
||||||
the restriction on "before" NOPs count, not emit "before" NOPs any
|
|
||||||
more but only emit "after" NOPs.
|
|
||||||
* config/rs6000/rs6000.cc (rs6000_print_patchable_function_entry):
|
|
||||||
Adjust by respecting cfun->machine->stop_patch_area_print.
|
|
||||||
(rs6000_elf_declare_function_name): For ELFv2 with dual entry, set
|
|
||||||
cfun->machine->stop_patch_area_print as true.
|
|
||||||
* config/rs6000/rs6000.h (struct machine_function): Remove member
|
|
||||||
global_entry_emitted, add new member stop_patch_area_print.
|
|
||||||
* doc/invoke.texi (option -fpatchable-function-entry): Adjust the
|
|
||||||
documentation for PowerPC ELFv2 dual entry.
|
|
||||||
|
|
||||||
gcc/testsuite/ChangeLog:
|
|
||||||
|
|
||||||
* c-c++-common/patchable_function_entry-default.c: Adjust.
|
|
||||||
* gcc.target/powerpc/pr99888-4.c: Likewise.
|
|
||||||
* gcc.target/powerpc/pr99888-5.c: Likewise.
|
|
||||||
* gcc.target/powerpc/pr99888-6.c: Likewise.
|
|
||||||
|
|
||||||
Signed-off-by: Giuliano Belinassi <gbelinassi@suse.de>
|
|
||||||
---
|
|
||||||
gcc/config/rs6000/rs6000-logue.cc | 40 +++++--------------
|
|
||||||
gcc/config/rs6000/rs6000.cc | 15 +++++--
|
|
||||||
gcc/config/rs6000/rs6000.h | 10 +++--
|
|
||||||
gcc/doc/invoke.texi | 8 ++--
|
|
||||||
.../patchable_function_entry-default.c | 3 --
|
|
||||||
gcc/testsuite/gcc.target/powerpc/pr99888-4.c | 4 +-
|
|
||||||
gcc/testsuite/gcc.target/powerpc/pr99888-5.c | 4 +-
|
|
||||||
gcc/testsuite/gcc.target/powerpc/pr99888-6.c | 4 +-
|
|
||||||
8 files changed, 33 insertions(+), 55 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gcc/config/rs6000/rs6000-logue.cc b/gcc/config/rs6000/rs6000-logue.cc
|
|
||||||
index 208404e6864..3835bc943ad 100644
|
|
||||||
--- a/gcc/config/rs6000/rs6000-logue.cc
|
|
||||||
+++ b/gcc/config/rs6000/rs6000-logue.cc
|
|
||||||
@@ -4001,43 +4001,21 @@ rs6000_output_function_prologue (FILE *file)
|
|
||||||
fprintf (file, "\tadd 2,2,12\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
- unsigned short patch_area_size = crtl->patch_area_size;
|
|
||||||
- unsigned short patch_area_entry = crtl->patch_area_entry;
|
|
||||||
- /* Need to emit the patching area. */
|
|
||||||
- if (patch_area_size > 0)
|
|
||||||
- {
|
|
||||||
- cfun->machine->global_entry_emitted = true;
|
|
||||||
- /* As ELFv2 ABI shows, the allowable bytes between the global
|
|
||||||
- and local entry points are 0, 4, 8, 16, 32 and 64 when
|
|
||||||
- there is a local entry point. Considering there are two
|
|
||||||
- non-prefixed instructions for global entry point prologue
|
|
||||||
- (8 bytes), the count for patchable nops before local entry
|
|
||||||
- point would be 2, 6 and 14. It's possible to support those
|
|
||||||
- other counts of nops by not making a local entry point, but
|
|
||||||
- we don't have clear use cases for them, so leave them
|
|
||||||
- unsupported for now. */
|
|
||||||
- if (patch_area_entry > 0)
|
|
||||||
- {
|
|
||||||
- if (patch_area_entry != 2
|
|
||||||
- && patch_area_entry != 6
|
|
||||||
- && patch_area_entry != 14)
|
|
||||||
- error ("unsupported number of nops before function entry (%u)",
|
|
||||||
- patch_area_entry);
|
|
||||||
- rs6000_print_patchable_function_entry (file, patch_area_entry,
|
|
||||||
- true);
|
|
||||||
- patch_area_size -= patch_area_entry;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
fputs ("\t.localentry\t", file);
|
|
||||||
assemble_name (file, name);
|
|
||||||
fputs (",.-", file);
|
|
||||||
assemble_name (file, name);
|
|
||||||
fputs ("\n", file);
|
|
||||||
/* Emit the nops after local entry. */
|
|
||||||
- if (patch_area_size > 0)
|
|
||||||
- rs6000_print_patchable_function_entry (file, patch_area_size,
|
|
||||||
- patch_area_entry == 0);
|
|
||||||
+ unsigned short patch_area_size = crtl->patch_area_size;
|
|
||||||
+ unsigned short patch_area_entry = crtl->patch_area_entry;
|
|
||||||
+ if (patch_area_size > patch_area_entry)
|
|
||||||
+ {
|
|
||||||
+ cfun->machine->stop_patch_area_print = false;
|
|
||||||
+ patch_area_size -= patch_area_entry;
|
|
||||||
+ rs6000_print_patchable_function_entry (file, patch_area_size,
|
|
||||||
+ patch_area_entry == 0);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (rs6000_pcrel_p ())
|
|
||||||
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
|
|
||||||
index 2b876c90e6f..a08ed7466dd 100644
|
|
||||||
--- a/gcc/config/rs6000/rs6000.cc
|
|
||||||
+++ b/gcc/config/rs6000/rs6000.cc
|
|
||||||
@@ -14936,12 +14936,14 @@ rs6000_print_patchable_function_entry (FILE *file,
|
|
||||||
bool record_p)
|
|
||||||
{
|
|
||||||
bool global_entry_needed_p = rs6000_global_entry_point_prologue_needed_p ();
|
|
||||||
- /* For a function which needs global entry point, we will emit the
|
|
||||||
- patchable area before and after local entry point under the control of
|
|
||||||
- cfun->machine->global_entry_emitted, see the handling in function
|
|
||||||
+ /* For a function which needs global entry point, we will only emit the
|
|
||||||
+ patchable area after local entry point under the control of
|
|
||||||
+ !cfun->machine->stop_patch_area_print, see the handling in functions
|
|
||||||
rs6000_output_function_prologue. */
|
|
||||||
- if (!global_entry_needed_p || cfun->machine->global_entry_emitted)
|
|
||||||
+ if (!cfun->machine->stop_patch_area_print)
|
|
||||||
default_print_patchable_function_entry (file, patch_area_size, record_p);
|
|
||||||
+ else
|
|
||||||
+ gcc_assert (global_entry_needed_p);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum rtx_code
|
|
||||||
@@ -21115,6 +21117,11 @@ rs6000_elf_declare_function_name (FILE *file, const char *name, tree decl)
|
|
||||||
fprintf (file, "\t.previous\n");
|
|
||||||
}
|
|
||||||
ASM_OUTPUT_LABEL (file, name);
|
|
||||||
+ /* At this time, the "before" NOPs have been already emitted,
|
|
||||||
+ let's stop generic code from printing the "after" NOPs and
|
|
||||||
+ emit just after local entry later. */
|
|
||||||
+ if (rs6000_global_entry_point_prologue_needed_p ())
|
|
||||||
+ cfun->machine->stop_patch_area_print = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void rs6000_elf_file_end (void) ATTRIBUTE_UNUSED;
|
|
||||||
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
|
|
||||||
index 9f02025b0c8..ebe97beb182 100644
|
|
||||||
--- a/gcc/config/rs6000/rs6000.h
|
|
||||||
+++ b/gcc/config/rs6000/rs6000.h
|
|
||||||
@@ -2437,10 +2437,12 @@ typedef struct GTY(()) machine_function
|
|
||||||
bool lr_is_wrapped_separately;
|
|
||||||
bool toc_is_wrapped_separately;
|
|
||||||
bool mma_return_type_error;
|
|
||||||
- /* Indicate global entry is emitted, only useful when the function requires
|
|
||||||
- global entry. It helps to control the patchable area before and after
|
|
||||||
- local entry. */
|
|
||||||
- bool global_entry_emitted;
|
|
||||||
+ /* With ELFv2 ABI dual entry points being adopted, generic framework
|
|
||||||
+ targetm.asm_out.print_patchable_function_entry would generate "after"
|
|
||||||
+ NOPs before local entry, it is wrong. This flag is to stop it from
|
|
||||||
+ printing patch area before local entry, it is only useful when the
|
|
||||||
+ function requires dual entry points. */
|
|
||||||
+ bool stop_patch_area_print;
|
|
||||||
} machine_function;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
|
|
||||||
index b17d0cf9341..0cdc5ac8c61 100644
|
|
||||||
--- a/gcc/doc/invoke.texi
|
|
||||||
+++ b/gcc/doc/invoke.texi
|
|
||||||
@@ -17449,11 +17449,11 @@ If @code{N=0}, no pad location is recorded.
|
|
||||||
The NOP instructions are inserted at---and maybe before, depending on
|
|
||||||
@var{M}---the function entry address, even before the prologue. On
|
|
||||||
PowerPC with the ELFv2 ABI, for a function with dual entry points,
|
|
||||||
-the local entry point is this function entry address.
|
|
||||||
+@var{M} NOP instructions are inserted before the global entry point and
|
|
||||||
+@var{N} - @var{M} NOP instructions are inserted after the local entry
|
|
||||||
+point, which means the NOP instructions may not be consecutive.
|
|
||||||
|
|
||||||
-The maximum value of @var{N} and @var{M} is 65535. On PowerPC with the
|
|
||||||
-ELFv2 ABI, for a function with dual entry points, the supported values
|
|
||||||
-for @var{M} are 0, 2, 6 and 14.
|
|
||||||
+The maximum value of @var{N} and @var{M} is 65535.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/gcc/testsuite/c-c++-common/patchable_function_entry-default.c b/gcc/testsuite/c-c++-common/patchable_function_entry-default.c
|
|
||||||
index 3ccbafc87db..899938b4aa3 100644
|
|
||||||
--- a/gcc/testsuite/c-c++-common/patchable_function_entry-default.c
|
|
||||||
+++ b/gcc/testsuite/c-c++-common/patchable_function_entry-default.c
|
|
||||||
@@ -1,9 +1,6 @@
|
|
||||||
/* { dg-do compile { target { ! { nvptx*-*-* visium-*-* } } } } */
|
|
||||||
/* { dg-options "-O2 -fpatchable-function-entry=3,1" } */
|
|
||||||
/* { dg-additional-options "-fno-pie" { target sparc*-*-* } } */
|
|
||||||
-/* See PR99888, one single preceding nop isn't allowed on powerpc_elfv2,
|
|
||||||
- so overriding with two preceding nops to make it pass there. */
|
|
||||||
-/* { dg-additional-options "-fpatchable-function-entry=3,2" { target powerpc_elfv2 } } */
|
|
||||||
/* { dg-final { scan-assembler-times "nop|NOP|SWYM" 3 { target { ! { alpha*-*-* riscv*-*-* } } } } } */
|
|
||||||
/* { dg-final { scan-assembler-times "bis" 3 { target alpha*-*-* } } } */
|
|
||||||
/* { dg-final { scan-assembler-times "nop\n" 3 { target riscv*-*-* } } } */
|
|
||||||
diff --git a/gcc/testsuite/gcc.target/powerpc/pr99888-4.c b/gcc/testsuite/gcc.target/powerpc/pr99888-4.c
|
|
||||||
index 00a8d4d316e..6f23f2bb939 100644
|
|
||||||
--- a/gcc/testsuite/gcc.target/powerpc/pr99888-4.c
|
|
||||||
+++ b/gcc/testsuite/gcc.target/powerpc/pr99888-4.c
|
|
||||||
@@ -2,12 +2,10 @@
|
|
||||||
/* There is no global entry point prologue with pcrel. */
|
|
||||||
/* { dg-options "-mno-pcrel -fpatchable-function-entry=1,1" } */
|
|
||||||
|
|
||||||
-/* Verify one error emitted for unexpected 1 nop before local
|
|
||||||
- entry. */
|
|
||||||
+/* Verify there is no error with 1 nop before local entry. */
|
|
||||||
|
|
||||||
extern int a;
|
|
||||||
|
|
||||||
int test (int b) {
|
|
||||||
return a + b;
|
|
||||||
}
|
|
||||||
-/* { dg-error "unsupported number of nops before function entry \\(1\\)" "" { target *-*-* } .-1 } */
|
|
||||||
diff --git a/gcc/testsuite/gcc.target/powerpc/pr99888-5.c b/gcc/testsuite/gcc.target/powerpc/pr99888-5.c
|
|
||||||
index 39d3b4465f1..13f192ebd20 100644
|
|
||||||
--- a/gcc/testsuite/gcc.target/powerpc/pr99888-5.c
|
|
||||||
+++ b/gcc/testsuite/gcc.target/powerpc/pr99888-5.c
|
|
||||||
@@ -2,12 +2,10 @@
|
|
||||||
/* There is no global entry point prologue with pcrel. */
|
|
||||||
/* { dg-options "-mno-pcrel -fpatchable-function-entry=7,3" } */
|
|
||||||
|
|
||||||
-/* Verify one error emitted for unexpected 3 nops before local
|
|
||||||
- entry. */
|
|
||||||
+/* Verify no error emitted for 3 nops before local entry. */
|
|
||||||
|
|
||||||
extern int a;
|
|
||||||
|
|
||||||
int test (int b) {
|
|
||||||
return a + b;
|
|
||||||
}
|
|
||||||
-/* { dg-error "unsupported number of nops before function entry \\(3\\)" "" { target *-*-* } .-1 } */
|
|
||||||
diff --git a/gcc/testsuite/gcc.target/powerpc/pr99888-6.c b/gcc/testsuite/gcc.target/powerpc/pr99888-6.c
|
|
||||||
index c6c18dcc7ac..431c69cae9a 100644
|
|
||||||
--- a/gcc/testsuite/gcc.target/powerpc/pr99888-6.c
|
|
||||||
+++ b/gcc/testsuite/gcc.target/powerpc/pr99888-6.c
|
|
||||||
@@ -2,8 +2,7 @@
|
|
||||||
/* There is no global entry point prologue with pcrel. */
|
|
||||||
/* { dg-options "-mno-pcrel" } */
|
|
||||||
|
|
||||||
-/* Verify one error emitted for unexpected 4 nops before local
|
|
||||||
- entry. */
|
|
||||||
+/* Verify no error emitted for 4 nops before local entry. */
|
|
||||||
|
|
||||||
extern int a;
|
|
||||||
|
|
||||||
@@ -11,4 +10,3 @@ __attribute__ ((patchable_function_entry (20, 4)))
|
|
||||||
int test (int b) {
|
|
||||||
return a + b;
|
|
||||||
}
|
|
||||||
-/* { dg-error "unsupported number of nops before function entry \\(4\\)" "" { target *-*-* } .-1 } */
|
|
||||||
--
|
|
||||||
2.45.2
|
|
||||||
|
|
Reference in New Issue
Block a user