Successfully identified regression in *gcc* in CI configuration tcwg_bmk_gnu_tk1/gnu-release-arm-spec2k6-O3_LTO. So far, this commit has regressed CI configurations:
- tcwg_bmk_gnu_tk1/gnu-release-arm-spec2k6-O3_LTO
Culprit:
<cut>
commit c7207339a7dbce5b68f872064e624dcf1639ba46
Author: Wilco Dijkstra <wdijkstr(a)arm.com>
Date: Mon Oct 14 12:21:14 2019 +0000
[ARM] Switch to default sched pressure algorithm
Currently the Arm backend selects the alternative sched pressure algorithm.
The issue is that this doesn't take register pressure into account, and so
it causes significant additional spilling on Arm where there are only 14
allocatable registers. Building SPEC2006 showed significant codesize gains
with the default pressure algorithm, so switch back to that. PR77308 shows
~800 fewer instructions.
SPECINT2006 is ~0.6% faster on Cortex-A57 together with the other DImode
patches. Overall SPEC codesize is 1.1% smaller.
gcc/
* config/arm/arm.c (arm_option_override): Don't override sched
pressure algorithm.
From-SVN: r276960
</cut>
Results regressed to (for first_bad == c7207339a7dbce5b68f872064e624dcf1639ba46)
# reset_artifacts:
-10
# build_abe binutils:
-9
# build_abe stage1 -- --set gcc_override_configure=--with-mode=arm --set gcc_override_configure=--disable-libsanitizer:
-8
# build_abe linux:
-7
# build_abe glibc:
-6
# build_abe stage2 -- --set gcc_override_configure=--with-mode=arm --set gcc_override_configure=--disable-libsanitizer:
-5
# true:
0
# benchmark -O3_LTO_marm -- artifacts/build-c7207339a7dbce5b68f872064e624dcf1639ba46/results_id:
1
# 410.bwaves,bwaves_base.default regressed by 108
# 454.calculix,calculix_base.default regressed by 105
# 482.sphinx3,sphinx_livepretend_base.default regressed by 104
# 436.cactusADM,cactusADM_base.default regressed by 116
# 444.namd,namd_base.default regressed by 103
# 435.gromacs,gromacs_base.default regressed by 106
from (for last_good == 7bd8bec53f0e43c7a7852c54650746e65324514b)
# reset_artifacts:
-10
# build_abe binutils:
-9
# build_abe stage1 -- --set gcc_override_configure=--with-mode=arm --set gcc_override_configure=--disable-libsanitizer:
-8
# build_abe linux:
-7
# build_abe glibc:
-6
# build_abe stage2 -- --set gcc_override_configure=--with-mode=arm --set gcc_override_configure=--disable-libsanitizer:
-5
# true:
0
# benchmark -O3_LTO_marm -- artifacts/build-7bd8bec53f0e43c7a7852c54650746e65324514b/results_id:
1
Artifacts of last_good build: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a…
Results ID of last_good: tk1_32/tcwg_bmk_gnu_tk1/bisect-gnu-release-arm-spec2k6-O3_LTO/1468
Artifacts of first_bad build: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a…
Results ID of first_bad: tk1_32/tcwg_bmk_gnu_tk1/bisect-gnu-release-arm-spec2k6-O3_LTO/1469
Build top page/logs: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a…
Configuration details:
Reproduce builds:
<cut>
mkdir investigate-gcc-c7207339a7dbce5b68f872064e624dcf1639ba46
cd investigate-gcc-c7207339a7dbce5b68f872064e624dcf1639ba46
git clone https://git.linaro.org/toolchain/jenkins-scripts
mkdir -p artifacts/manifests
curl -o artifacts/manifests/build-baseline.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a… --fail
curl -o artifacts/manifests/build-parameters.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a… --fail
curl -o artifacts/test.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a… --fail
chmod +x artifacts/test.sh
# Reproduce the baseline build (build all pre-requisites)
./jenkins-scripts/tcwg_bmk-build.sh @@ artifacts/manifests/build-baseline.sh
cd gcc
# Reproduce first_bad build
git checkout --detach c7207339a7dbce5b68f872064e624dcf1639ba46
../artifacts/test.sh
# Reproduce last_good build
git checkout --detach 7bd8bec53f0e43c7a7852c54650746e65324514b
../artifacts/test.sh
cd ..
</cut>
History of pending regressions and results: https://git.linaro.org/toolchain/ci/base-artifacts.git/log/?h=linaro-local/…
Artifacts: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a…
Build log: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a…
Full commit (up to 1000 lines):
<cut>
commit c7207339a7dbce5b68f872064e624dcf1639ba46
Author: Wilco Dijkstra <wdijkstr(a)arm.com>
Date: Mon Oct 14 12:21:14 2019 +0000
[ARM] Switch to default sched pressure algorithm
Currently the Arm backend selects the alternative sched pressure algorithm.
The issue is that this doesn't take register pressure into account, and so
it causes significant additional spilling on Arm where there are only 14
allocatable registers. Building SPEC2006 showed significant codesize gains
with the default pressure algorithm, so switch back to that. PR77308 shows
~800 fewer instructions.
SPECINT2006 is ~0.6% faster on Cortex-A57 together with the other DImode
patches. Overall SPEC codesize is 1.1% smaller.
gcc/
* config/arm/arm.c (arm_option_override): Don't override sched
pressure algorithm.
From-SVN: r276960
---
gcc/ChangeLog | 5 +++++
gcc/config/arm/arm.c | 5 -----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c2cbd4274ca..f07a0e61e6b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2019-10-14 Wilco Dijkstra <wdijkstr(a)arm.com>
+
+ * config/arm/arm.c (arm_option_override): Don't override sched
+ pressure algorithm.
+
2019-10-14 Richard Biener <rguenther(a)suse.de>
PR tree-optimization/92069
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 39e1a1ef9a2..394b1dd1902 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -3555,11 +3555,6 @@ arm_option_override (void)
global_options.x_param_values,
global_options_set.x_param_values);
- /* Use the alternative scheduling-pressure algorithm by default. */
- maybe_set_param_value (PARAM_SCHED_PRESSURE_ALGORITHM, SCHED_PRESSURE_MODEL,
- global_options.x_param_values,
- global_options_set.x_param_values);
-
/* Look through ready list and all of queue for instructions
relevant for L2 auto-prefetcher. */
int param_sched_autopref_queue_depth;
</cut>
Successfully identified regression in *gcc* in CI configuration tcwg_bmk_gnu_tk1/gnu-release-arm-spec2k6-O3_LTO. So far, this commit has regressed CI configurations:
- tcwg_bmk_gnu_tk1/gnu-release-arm-spec2k6-O3_LTO
Culprit:
<cut>
commit c7207339a7dbce5b68f872064e624dcf1639ba46
Author: Wilco Dijkstra <wdijkstr(a)arm.com>
Date: Mon Oct 14 12:21:14 2019 +0000
[ARM] Switch to default sched pressure algorithm
Currently the Arm backend selects the alternative sched pressure algorithm.
The issue is that this doesn't take register pressure into account, and so
it causes significant additional spilling on Arm where there are only 14
allocatable registers. Building SPEC2006 showed significant codesize gains
with the default pressure algorithm, so switch back to that. PR77308 shows
~800 fewer instructions.
SPECINT2006 is ~0.6% faster on Cortex-A57 together with the other DImode
patches. Overall SPEC codesize is 1.1% smaller.
gcc/
* config/arm/arm.c (arm_option_override): Don't override sched
pressure algorithm.
From-SVN: r276960
</cut>
Results regressed to (for first_bad == c7207339a7dbce5b68f872064e624dcf1639ba46)
# reset_artifacts:
-10
# build_abe binutils:
-9
# build_abe stage1 -- --set gcc_override_configure=--with-mode=arm --set gcc_override_configure=--disable-libsanitizer:
-8
# build_abe linux:
-7
# build_abe glibc:
-6
# build_abe stage2 -- --set gcc_override_configure=--with-mode=arm --set gcc_override_configure=--disable-libsanitizer:
-5
# true:
0
# benchmark -O3_LTO_marm -- artifacts/build-c7207339a7dbce5b68f872064e624dcf1639ba46/results_id:
1
# 435.gromacs,gromacs_base.default regressed by 106
# 459.GemsFDTD,GemsFDTD_base.default regressed by 103
# 436.cactusADM,cactusADM_base.default regressed by 115
# 444.namd,namd_base.default regressed by 103
# 482.sphinx3,sphinx_livepretend_base.default regressed by 103
# 410.bwaves,bwaves_base.default regressed by 107
# 454.calculix,calculix_base.default regressed by 105
from (for last_good == 7bd8bec53f0e43c7a7852c54650746e65324514b)
# reset_artifacts:
-10
# build_abe binutils:
-9
# build_abe stage1 -- --set gcc_override_configure=--with-mode=arm --set gcc_override_configure=--disable-libsanitizer:
-8
# build_abe linux:
-7
# build_abe glibc:
-6
# build_abe stage2 -- --set gcc_override_configure=--with-mode=arm --set gcc_override_configure=--disable-libsanitizer:
-5
# true:
0
# benchmark -O3_LTO_marm -- artifacts/build-7bd8bec53f0e43c7a7852c54650746e65324514b/results_id:
1
Artifacts of last_good build: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a…
Results ID of last_good: tk1_32/tcwg_bmk_gnu_tk1/bisect-gnu-release-arm-spec2k6-O3_LTO/1638
Artifacts of first_bad build: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a…
Results ID of first_bad: tk1_32/tcwg_bmk_gnu_tk1/bisect-gnu-release-arm-spec2k6-O3_LTO/1643
Build top page/logs: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a…
Configuration details:
Reproduce builds:
<cut>
mkdir investigate-gcc-c7207339a7dbce5b68f872064e624dcf1639ba46
cd investigate-gcc-c7207339a7dbce5b68f872064e624dcf1639ba46
git clone https://git.linaro.org/toolchain/jenkins-scripts
mkdir -p artifacts/manifests
curl -o artifacts/manifests/build-baseline.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a… --fail
curl -o artifacts/manifests/build-parameters.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a… --fail
curl -o artifacts/test.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a… --fail
chmod +x artifacts/test.sh
# Reproduce the baseline build (build all pre-requisites)
./jenkins-scripts/tcwg_bmk-build.sh @@ artifacts/manifests/build-baseline.sh
# Save baseline build state (which is then restored in artifacts/test.sh)
rsync -a --del --delete-excluded --exclude bisect/ --exclude artifacts/ --exclude gcc/ ./ ./bisect/baseline/
cd gcc
# Reproduce first_bad build
git checkout --detach c7207339a7dbce5b68f872064e624dcf1639ba46
../artifacts/test.sh
# Reproduce last_good build
git checkout --detach 7bd8bec53f0e43c7a7852c54650746e65324514b
../artifacts/test.sh
cd ..
</cut>
History of pending regressions and results: https://git.linaro.org/toolchain/ci/base-artifacts.git/log/?h=linaro-local/…
Artifacts: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a…
Build log: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tk1-gnu-release-a…
Full commit (up to 1000 lines):
<cut>
commit c7207339a7dbce5b68f872064e624dcf1639ba46
Author: Wilco Dijkstra <wdijkstr(a)arm.com>
Date: Mon Oct 14 12:21:14 2019 +0000
[ARM] Switch to default sched pressure algorithm
Currently the Arm backend selects the alternative sched pressure algorithm.
The issue is that this doesn't take register pressure into account, and so
it causes significant additional spilling on Arm where there are only 14
allocatable registers. Building SPEC2006 showed significant codesize gains
with the default pressure algorithm, so switch back to that. PR77308 shows
~800 fewer instructions.
SPECINT2006 is ~0.6% faster on Cortex-A57 together with the other DImode
patches. Overall SPEC codesize is 1.1% smaller.
gcc/
* config/arm/arm.c (arm_option_override): Don't override sched
pressure algorithm.
From-SVN: r276960
---
gcc/ChangeLog | 5 +++++
gcc/config/arm/arm.c | 5 -----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c2cbd4274ca..f07a0e61e6b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2019-10-14 Wilco Dijkstra <wdijkstr(a)arm.com>
+
+ * config/arm/arm.c (arm_option_override): Don't override sched
+ pressure algorithm.
+
2019-10-14 Richard Biener <rguenther(a)suse.de>
PR tree-optimization/92069
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 39e1a1ef9a2..394b1dd1902 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -3555,11 +3555,6 @@ arm_option_override (void)
global_options.x_param_values,
global_options_set.x_param_values);
- /* Use the alternative scheduling-pressure algorithm by default. */
- maybe_set_param_value (PARAM_SCHED_PRESSURE_ALGORITHM, SCHED_PRESSURE_MODEL,
- global_options.x_param_values,
- global_options_set.x_param_values);
-
/* Look through ready list and all of queue for instructions
relevant for L2 auto-prefetcher. */
int param_sched_autopref_queue_depth;
</cut>
Successfully identified regression in *gcc* in CI configuration tcwg_bmk_gnu_tx1/gnu-master-aarch64-spec2k6-O3_LTO. So far, this commit has regressed CI configurations:
- tcwg_bmk_gnu_tx1/gnu-master-aarch64-spec2k6-O3_LTO
Culprit:
<cut>
commit fedcf3c476aff7533741a1c61071200f0a38cf83
Author: Richard Biener <rguenther(a)suse.de>
Date: Thu Jul 8 09:52:49 2021 +0200
tree-optimization/101373 - avoid PRE across externally throwing call
PRE already tries to avoid hoisting possibly trapping expressions
across calls that might not return normally but fails to consider
const calls that throw externally. The following fixes that and
also plugs the hole of trapping references not pruned in case
they are not catched by the actuall call clobbering it.
At -Os we hit the same issue in RTL PRE and postreload-gcse has
even more incomplete checks so the patch adjusts both of those
as well.
2021-07-08 Richard Biener <rguenther(a)suse.de>
PR tree-optimization/101373
* tree-ssa-pre.c (prune_clobbered_mems): Also prune trapping
references when the BB may not return.
(compute_avail): Pass in the function we're working on and
replace cfun references with it. Externally throwing
const calls also possibly terminate the function.
(pass_pre::execute): Pass down the function we're working on.
* gcse.c (compute_hash_table_work): Externally throwing
const/pure calls also need record_last_mem_set_info.
* postreload-gcse.c (record_opr_changes): Looping or externally
throwing const/pure calls also need record_last_mem_set_info.
* g++.dg/torture/pr101373.C: New testcase, XFAILed.
* gnat.dg/opt95.adb: Likewise.
</cut>
Results regressed to (for first_bad == fedcf3c476aff7533741a1c61071200f0a38cf83)
# reset_artifacts:
-10
# build_abe binutils:
-9
# build_abe stage1 -- --set gcc_override_configure=--disable-libsanitizer:
-8
# build_abe linux:
-7
# build_abe glibc:
-6
# build_abe stage2 -- --set gcc_override_configure=--disable-libsanitizer:
-5
# true:
0
# benchmark -O3_LTO -- artifacts/build-fedcf3c476aff7533741a1c61071200f0a38cf83/results_id:
1
# 429.mcf,mcf_base.default regressed by 106
from (for last_good == fe610051a803131822bd02a8842a67b573b8e46a)
# reset_artifacts:
-10
# build_abe binutils:
-9
# build_abe stage1 -- --set gcc_override_configure=--disable-libsanitizer:
-8
# build_abe linux:
-7
# build_abe glibc:
-6
# build_abe stage2 -- --set gcc_override_configure=--disable-libsanitizer:
-5
# true:
0
# benchmark -O3_LTO -- artifacts/build-fe610051a803131822bd02a8842a67b573b8e46a/results_id:
1
Artifacts of last_good build: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-master-aa…
Results ID of last_good: tx1_64/tcwg_bmk_gnu_tx1/bisect-gnu-master-aarch64-spec2k6-O3_LTO/1618
Artifacts of first_bad build: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-master-aa…
Results ID of first_bad: tx1_64/tcwg_bmk_gnu_tx1/bisect-gnu-master-aarch64-spec2k6-O3_LTO/1613
Build top page/logs: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-master-aa…
Configuration details:
Reproduce builds:
<cut>
mkdir investigate-gcc-fedcf3c476aff7533741a1c61071200f0a38cf83
cd investigate-gcc-fedcf3c476aff7533741a1c61071200f0a38cf83
git clone https://git.linaro.org/toolchain/jenkins-scripts
mkdir -p artifacts/manifests
curl -o artifacts/manifests/build-baseline.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-master-aa… --fail
curl -o artifacts/manifests/build-parameters.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-master-aa… --fail
curl -o artifacts/test.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-master-aa… --fail
chmod +x artifacts/test.sh
# Reproduce the baseline build (build all pre-requisites)
./jenkins-scripts/tcwg_bmk-build.sh @@ artifacts/manifests/build-baseline.sh
# Save baseline build state (which is then restored in artifacts/test.sh)
rsync -a --del --delete-excluded --exclude bisect/ --exclude artifacts/ --exclude gcc/ ./ ./bisect/baseline/
cd gcc
# Reproduce first_bad build
git checkout --detach fedcf3c476aff7533741a1c61071200f0a38cf83
../artifacts/test.sh
# Reproduce last_good build
git checkout --detach fe610051a803131822bd02a8842a67b573b8e46a
../artifacts/test.sh
cd ..
</cut>
History of pending regressions and results: https://git.linaro.org/toolchain/ci/base-artifacts.git/log/?h=linaro-local/…
Artifacts: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-master-aa…
Build log: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-master-aa…
Full commit (up to 1000 lines):
<cut>
commit fedcf3c476aff7533741a1c61071200f0a38cf83
Author: Richard Biener <rguenther(a)suse.de>
Date: Thu Jul 8 09:52:49 2021 +0200
tree-optimization/101373 - avoid PRE across externally throwing call
PRE already tries to avoid hoisting possibly trapping expressions
across calls that might not return normally but fails to consider
const calls that throw externally. The following fixes that and
also plugs the hole of trapping references not pruned in case
they are not catched by the actuall call clobbering it.
At -Os we hit the same issue in RTL PRE and postreload-gcse has
even more incomplete checks so the patch adjusts both of those
as well.
2021-07-08 Richard Biener <rguenther(a)suse.de>
PR tree-optimization/101373
* tree-ssa-pre.c (prune_clobbered_mems): Also prune trapping
references when the BB may not return.
(compute_avail): Pass in the function we're working on and
replace cfun references with it. Externally throwing
const calls also possibly terminate the function.
(pass_pre::execute): Pass down the function we're working on.
* gcse.c (compute_hash_table_work): Externally throwing
const/pure calls also need record_last_mem_set_info.
* postreload-gcse.c (record_opr_changes): Looping or externally
throwing const/pure calls also need record_last_mem_set_info.
* g++.dg/torture/pr101373.C: New testcase, XFAILed.
* gnat.dg/opt95.adb: Likewise.
---
gcc/gcse.c | 3 ++-
gcc/postreload-gcse.c | 4 +++-
gcc/testsuite/g++.dg/torture/pr101373.C | 33 +++++++++++++++++++++++++++
gcc/testsuite/gnat.dg/opt95.adb | 40 +++++++++++++++++++++++++++++++++
gcc/tree-ssa-pre.c | 34 +++++++++++++++++-----------
5 files changed, 99 insertions(+), 15 deletions(-)
diff --git a/gcc/gcse.c b/gcc/gcse.c
index ecf7e51aac5..ccd33664af5 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -1537,7 +1537,8 @@ compute_hash_table_work (struct gcse_hash_table_d *table)
record_last_reg_set_info (insn, regno);
if (! RTL_CONST_OR_PURE_CALL_P (insn)
- || RTL_LOOPING_CONST_OR_PURE_CALL_P (insn))
+ || RTL_LOOPING_CONST_OR_PURE_CALL_P (insn)
+ || can_throw_external (insn))
record_last_mem_set_info (insn);
}
diff --git a/gcc/postreload-gcse.c b/gcc/postreload-gcse.c
index 0b28247e299..6c95d09a1e5 100644
--- a/gcc/postreload-gcse.c
+++ b/gcc/postreload-gcse.c
@@ -779,7 +779,9 @@ record_opr_changes (rtx_insn *insn)
EXECUTE_IF_SET_IN_HARD_REG_SET (callee_clobbers, 0, regno, hrsi)
record_last_reg_set_info_regno (insn, regno);
- if (! RTL_CONST_OR_PURE_CALL_P (insn))
+ if (! RTL_CONST_OR_PURE_CALL_P (insn)
+ || RTL_LOOPING_CONST_OR_PURE_CALL_P (insn)
+ || can_throw_external (insn))
record_last_mem_set_info (insn);
}
}
diff --git a/gcc/testsuite/g++.dg/torture/pr101373.C b/gcc/testsuite/g++.dg/torture/pr101373.C
new file mode 100644
index 00000000000..f8c809739e2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr101373.C
@@ -0,0 +1,33 @@
+// { dg-do run }
+// { dg-xfail-run-if "PR100409" { *-*-* } }
+
+int __attribute__((const,noipa)) foo (int j)
+{
+ if (j != 0)
+ throw 1;
+ return 0;
+}
+
+int __attribute__((noipa)) bar (int *p, int n)
+{
+ int ret = 0;
+ if (n)
+ {
+ foo (n);
+ ret = *p;
+ }
+ ret += *p;
+ return ret;
+}
+
+int main()
+{
+ try
+ {
+ return bar (nullptr, 1);
+ }
+ catch (...)
+ {
+ return 0;
+ }
+}
diff --git a/gcc/testsuite/gnat.dg/opt95.adb b/gcc/testsuite/gnat.dg/opt95.adb
new file mode 100644
index 00000000000..2c72582b3f1
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt95.adb
@@ -0,0 +1,40 @@
+-- { dg-do run }
+-- { dg-options "-O2 -gnatp" }
+
+procedure Opt95 is
+
+ function Foo (J : Integer) return Integer;
+ pragma Pure_Function (Foo);
+ pragma Machine_Attribute (Foo, "noipa");
+
+ function Foo (J : Integer) return Integer is
+ begin
+ if J /= 0 then
+ raise Constraint_Error;
+ end if;
+ return 0;
+ end;
+
+ function Bar (A : access Integer; N : Integer) return Integer;
+ pragma Machine_Attribute (Bar, "noipa");
+
+ function Bar (A : access Integer; N : Integer) return Integer is
+ Ret : Integer := 0;
+ Ret2 : Integer := 0;
+ begin
+ if N /= 0 then
+ Ret2 := Foo (N);
+ Ret := A.all;
+ end if;
+ Ret := Ret + A.all;
+ return Ret + Ret2;
+ end;
+
+ V : Integer;
+ pragma Volatile (V);
+
+begin
+ V := Bar (null, 1);
+exception
+ when Constraint_Error => null;
+end;
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index 69141c2f0c9..aa5244e678c 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -2071,6 +2071,13 @@ prune_clobbered_mems (bitmap_set_t set, basic_block block)
&& value_dies_in_block_x (expr, block))))
to_remove = i;
}
+ /* If the REFERENCE may trap make sure the block does not contain
+ a possible exit point.
+ ??? This is overly conservative if we translate AVAIL_OUT
+ as the available expression might be after the exit point. */
+ if (BB_MAY_NOTRETURN (block)
+ && vn_reference_may_trap (ref))
+ to_remove = i;
}
else if (expr->kind == NARY)
{
@@ -3860,7 +3867,7 @@ insert (void)
AVAIL_OUT[BLOCK] = AVAIL_IN[BLOCK] U PHI_GEN[BLOCK] U TMP_GEN[BLOCK]. */
static void
-compute_avail (void)
+compute_avail (function *fun)
{
basic_block block, son;
@@ -3871,7 +3878,7 @@ compute_avail (void)
/* We pretend that default definitions are defined in the entry block.
This includes function arguments and the static chain decl. */
- FOR_EACH_SSA_NAME (i, name, cfun)
+ FOR_EACH_SSA_NAME (i, name, fun)
{
pre_expr e;
if (!SSA_NAME_IS_DEFAULT_DEF (name)
@@ -3881,31 +3888,31 @@ compute_avail (void)
e = get_or_alloc_expr_for_name (name);
add_to_value (get_expr_value_id (e), e);
- bitmap_insert_into_set (TMP_GEN (ENTRY_BLOCK_PTR_FOR_FN (cfun)), e);
- bitmap_value_insert_into_set (AVAIL_OUT (ENTRY_BLOCK_PTR_FOR_FN (cfun)),
+ bitmap_insert_into_set (TMP_GEN (ENTRY_BLOCK_PTR_FOR_FN (fun)), e);
+ bitmap_value_insert_into_set (AVAIL_OUT (ENTRY_BLOCK_PTR_FOR_FN (fun)),
e);
}
if (dump_file && (dump_flags & TDF_DETAILS))
{
- print_bitmap_set (dump_file, TMP_GEN (ENTRY_BLOCK_PTR_FOR_FN (cfun)),
+ print_bitmap_set (dump_file, TMP_GEN (ENTRY_BLOCK_PTR_FOR_FN (fun)),
"tmp_gen", ENTRY_BLOCK);
- print_bitmap_set (dump_file, AVAIL_OUT (ENTRY_BLOCK_PTR_FOR_FN (cfun)),
+ print_bitmap_set (dump_file, AVAIL_OUT (ENTRY_BLOCK_PTR_FOR_FN (fun)),
"avail_out", ENTRY_BLOCK);
}
/* Allocate the worklist. */
- worklist = XNEWVEC (basic_block, n_basic_blocks_for_fn (cfun));
+ worklist = XNEWVEC (basic_block, n_basic_blocks_for_fn (fun));
/* Seed the algorithm by putting the dominator children of the entry
block on the worklist. */
- for (son = first_dom_son (CDI_DOMINATORS, ENTRY_BLOCK_PTR_FOR_FN (cfun));
+ for (son = first_dom_son (CDI_DOMINATORS, ENTRY_BLOCK_PTR_FOR_FN (fun));
son;
son = next_dom_son (CDI_DOMINATORS, son))
worklist[sp++] = son;
- BB_LIVE_VOP_ON_EXIT (ENTRY_BLOCK_PTR_FOR_FN (cfun))
- = ssa_default_def (cfun, gimple_vop (cfun));
+ BB_LIVE_VOP_ON_EXIT (ENTRY_BLOCK_PTR_FOR_FN (fun))
+ = ssa_default_def (fun, gimple_vop (fun));
/* Loop until the worklist is empty. */
while (sp)
@@ -3970,7 +3977,8 @@ compute_avail (void)
before it. */
int flags = gimple_call_flags (stmt);
if (!(flags & ECF_CONST)
- || (flags & ECF_LOOPING_CONST_OR_PURE))
+ || (flags & ECF_LOOPING_CONST_OR_PURE)
+ || stmt_can_throw_external (fun, stmt))
BB_MAY_NOTRETURN (block) = 1;
}
@@ -3987,7 +3995,7 @@ compute_avail (void)
BB_LIVE_VOP_ON_EXIT (block) = gimple_vdef (stmt);
if (gimple_has_side_effects (stmt)
- || stmt_could_throw_p (cfun, stmt)
+ || stmt_could_throw_p (fun, stmt)
|| is_gimple_debug (stmt))
continue;
@@ -4384,7 +4392,7 @@ pass_pre::execute (function *fun)
we require AVAIL. */
if (n_basic_blocks_for_fn (fun) < 4000)
{
- compute_avail ();
+ compute_avail (fun);
compute_antic ();
insert ();
}
</cut>
Successfully identified regression in *gcc* in CI configuration tcwg_bmk_gnu_tx1/gnu-release-aarch64-spec2k6-O2. So far, this commit has regressed CI configurations:
- tcwg_bmk_gnu_tx1/gnu-release-aarch64-spec2k6-O2
Culprit:
<cut>
commit a4dfaad2e5594d871fe00a1116005e28f95d644e
Author: Richard Sandiford <richard.sandiford(a)arm.com>
Date: Mon Sep 30 16:20:44 2019 +0000
Remove global call sets: gcse.c
This is another case in which we can conservatively treat partial
kills as full kills. Again this is in principle a bug fix for
TARGET_HARD_REGNO_CALL_PART_CLOBBERED targets, but in practice
it probably doesn't make a difference.
2019-09-30 Richard Sandiford <richard.sandiford(a)arm.com>
gcc/
* gcse.c: Include function-abi.h.
(compute_hash_table_work): Use insn_callee_abi to get the ABI of
the call insn target. Invalidate partially call-clobbered
registers as well as fully call-clobbered ones.
From-SVN: r276323
</cut>
Results regressed to (for first_bad == a4dfaad2e5594d871fe00a1116005e28f95d644e)
# reset_artifacts:
-10
# build_abe binutils:
-9
# build_abe stage1 -- --set gcc_override_configure=--disable-libsanitizer:
-8
# build_abe linux:
-7
# build_abe glibc:
-6
# build_abe stage2 -- --set gcc_override_configure=--disable-libsanitizer:
-5
# true:
0
# benchmark -O2 -- artifacts/build-a4dfaad2e5594d871fe00a1116005e28f95d644e/results_id:
1
# 447.dealII,[.] _ZNK12SparseMatrixIdE5vmultI6VectorIdES3_EEvRT regressed by 112
from (for last_good == c1b582720a39c3cb944aaff0298f721cdd034e3f)
# reset_artifacts:
-10
# build_abe binutils:
-9
# build_abe stage1 -- --set gcc_override_configure=--disable-libsanitizer:
-8
# build_abe linux:
-7
# build_abe glibc:
-6
# build_abe stage2 -- --set gcc_override_configure=--disable-libsanitizer:
-5
# true:
0
# benchmark -O2 -- artifacts/build-c1b582720a39c3cb944aaff0298f721cdd034e3f/results_id:
1
Artifacts of last_good build: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-a…
Results ID of last_good: tx1_64/tcwg_bmk_gnu_tx1/bisect-gnu-release-aarch64-spec2k6-O2/1425
Artifacts of first_bad build: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-a…
Results ID of first_bad: tx1_64/tcwg_bmk_gnu_tx1/bisect-gnu-release-aarch64-spec2k6-O2/1421
Build top page/logs: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-a…
Configuration details:
Reproduce builds:
<cut>
mkdir investigate-gcc-a4dfaad2e5594d871fe00a1116005e28f95d644e
cd investigate-gcc-a4dfaad2e5594d871fe00a1116005e28f95d644e
git clone https://git.linaro.org/toolchain/jenkins-scripts
mkdir -p artifacts/manifests
curl -o artifacts/manifests/build-baseline.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-a… --fail
curl -o artifacts/manifests/build-parameters.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-a… --fail
curl -o artifacts/test.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-a… --fail
chmod +x artifacts/test.sh
# Reproduce the baseline build (build all pre-requisites)
./jenkins-scripts/tcwg_bmk-build.sh @@ artifacts/manifests/build-baseline.sh
cd gcc
# Reproduce first_bad build
git checkout --detach a4dfaad2e5594d871fe00a1116005e28f95d644e
../artifacts/test.sh
# Reproduce last_good build
git checkout --detach c1b582720a39c3cb944aaff0298f721cdd034e3f
../artifacts/test.sh
cd ..
</cut>
History of pending regressions and results: https://git.linaro.org/toolchain/ci/base-artifacts.git/log/?h=linaro-local/…
Artifacts: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-a…
Build log: https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-a…
Full commit (up to 1000 lines):
<cut>
commit a4dfaad2e5594d871fe00a1116005e28f95d644e
Author: Richard Sandiford <richard.sandiford(a)arm.com>
Date: Mon Sep 30 16:20:44 2019 +0000
Remove global call sets: gcse.c
This is another case in which we can conservatively treat partial
kills as full kills. Again this is in principle a bug fix for
TARGET_HARD_REGNO_CALL_PART_CLOBBERED targets, but in practice
it probably doesn't make a difference.
2019-09-30 Richard Sandiford <richard.sandiford(a)arm.com>
gcc/
* gcse.c: Include function-abi.h.
(compute_hash_table_work): Use insn_callee_abi to get the ABI of
the call insn target. Invalidate partially call-clobbered
registers as well as fully call-clobbered ones.
From-SVN: r276323
---
gcc/ChangeLog | 7 +++++++
gcc/gcse.c | 10 ++++++++--
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9d8b083d539..1b1c31cf009 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2019-09-30 Richard Sandiford <richard.sandiford(a)arm.com>
+
+ * gcse.c: Include function-abi.h.
+ (compute_hash_table_work): Use insn_callee_abi to get the ABI of
+ the call insn target. Invalidate partially call-clobbered
+ registers as well as fully call-clobbered ones.
+
2019-09-30 Richard Sandiford <richard.sandiford(a)arm.com>
* function.c (aggregate_value_p): Work out which ABI the
diff --git a/gcc/gcse.c b/gcc/gcse.c
index 9bde8619b7b..aeb59c645e1 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -160,6 +160,7 @@ along with GCC; see the file COPYING3. If not see
#include "dbgcnt.h"
#include "gcse.h"
#include "gcse-common.h"
+#include "function-abi.h"
/* We support GCSE via Partial Redundancy Elimination. PRE optimizations
are a superset of those done by classic GCSE.
@@ -1528,8 +1529,13 @@ compute_hash_table_work (struct gcse_hash_table_d *table)
if (CALL_P (insn))
{
hard_reg_set_iterator hrsi;
- EXECUTE_IF_SET_IN_HARD_REG_SET (regs_invalidated_by_call,
- 0, regno, hrsi)
+
+ /* We don't track modes of hard registers, so we need
+ to be conservative and assume that partial kills
+ are full kills. */
+ HARD_REG_SET callee_clobbers
+ = insn_callee_abi (insn).full_and_partial_reg_clobbers ();
+ EXECUTE_IF_SET_IN_HARD_REG_SET (callee_clobbers, 0, regno, hrsi)
record_last_reg_set_info (insn, regno);
if (! RTL_CONST_OR_PURE_CALL_P (insn)
</cut>
Successfully identified regression in *glibc* in CI configuration tcwg_cross/gnu-master-aarch64-build_cross. So far, this commit has regressed CI configurations:
- tcwg_cross/gnu-master-aarch64-build_cross
Culprit:
<cut>
commit 6ec6c77867af4ddfec7323e0ac6ede89effca852
Author: liuhongt <hongtao.liu(a)intel.com>
Date: Wed Jul 7 10:07:59 2021 +0800
soft-fp: Add __extendhfsf2/__extendhfdf2, __truncsfhf2/__truncdfhf2, __eqhf2/__nehf2
1. Add __extendhfdf2/__extendhfsf2 to return an IEEE half converted to IEEE double/single.
2. Add __truncdfhf2/__extendsfhf2 to truncate IEEE double/single into IEEE half.
3. Add __eqhf2/__nehf2 to return 0 if a == b and a,b are not NAN, otherwise return 1.
These are needed by x86 _Float16:
https://software.intel.com/content/www/us/en/develop/download/intel-avx512-…
support in GCC.
</cut>
Results regressed to (for first_bad == 6ec6c77867af4ddfec7323e0ac6ede89effca852)
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe stage1:
2
# build_abe linux:
3
# First few build errors in logs:
# 00:00:14 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/start.o] Error 1
# 00:00:14 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:499: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/start.os] Error 1
# 00:00:14 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/crtn.o] Error 1
# 00:00:14 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/crti.o] Error 1
# 00:00:14 make[2]: *** [../o-iterator.mk:9: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/check_fds.o] Error 1
# 00:00:14 make[2]: *** [../o-iterator.mk:9: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/check_fds.os] Error 1
# 00:00:14 ../sysdeps/aarch64/nptl/tls.h:91:19: error: ‘__builtin_thread_pointer’ is not supported on this target
# 00:00:14 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:485: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/libc-tls.o] Error 1
# 00:00:14 ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:190:17: error: invalid register name for ‘_x0’
# 00:00:14 ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:174:22: error: invalid register name for ‘_x8’
from (for last_good == b46cfcef3f7dab8e90729c6616ac1420f2642245)
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe stage1:
2
# build_abe linux:
3
# build_abe glibc:
4
# build_abe stage2:
5
# build_abe qemu:
6
Artifacts of last_good build: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Artifacts of first_bad build: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Build top page/logs: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Configuration details:
Reproduce builds:
<cut>
mkdir investigate-glibc-6ec6c77867af4ddfec7323e0ac6ede89effca852
cd investigate-glibc-6ec6c77867af4ddfec7323e0ac6ede89effca852
git clone https://git.linaro.org/toolchain/jenkins-scripts
mkdir -p artifacts/manifests
curl -o artifacts/manifests/build-baseline.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
curl -o artifacts/manifests/build-parameters.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
curl -o artifacts/test.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
chmod +x artifacts/test.sh
# Reproduce the baseline build (build all pre-requisites)
./jenkins-scripts/tcwg_gnu-build.sh @@ artifacts/manifests/build-baseline.sh
cd glibc
# Reproduce first_bad build
git checkout --detach 6ec6c77867af4ddfec7323e0ac6ede89effca852
../artifacts/test.sh
# Reproduce last_good build
git checkout --detach b46cfcef3f7dab8e90729c6616ac1420f2642245
../artifacts/test.sh
cd ..
</cut>
History of pending regressions and results: https://git.linaro.org/toolchain/ci/base-artifacts.git/log/?h=linaro-local/…
Artifacts: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Build log: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Full commit (up to 1000 lines):
<cut>
commit 6ec6c77867af4ddfec7323e0ac6ede89effca852
Author: liuhongt <hongtao.liu(a)intel.com>
Date: Wed Jul 7 10:07:59 2021 +0800
soft-fp: Add __extendhfsf2/__extendhfdf2, __truncsfhf2/__truncdfhf2, __eqhf2/__nehf2
1. Add __extendhfdf2/__extendhfsf2 to return an IEEE half converted to IEEE double/single.
2. Add __truncdfhf2/__extendsfhf2 to truncate IEEE double/single into IEEE half.
3. Add __eqhf2/__nehf2 to return 0 if a == b and a,b are not NAN, otherwise return 1.
These are needed by x86 _Float16:
https://software.intel.com/content/www/us/en/develop/download/intel-avx512-…
support in GCC.
---
soft-fp/eqhf2.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++
soft-fp/extendhfdf2.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++
soft-fp/extendhfsf2.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++
soft-fp/half.h | 2 ++
soft-fp/truncdfhf2.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++
soft-fp/truncsfhf2.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++
6 files changed, 253 insertions(+)
diff --git a/soft-fp/eqhf2.c b/soft-fp/eqhf2.c
new file mode 100644
index 0000000000..6d6634e5c5
--- /dev/null
+++ b/soft-fp/eqhf2.c
@@ -0,0 +1,49 @@
+/* Software floating-point emulation.
+ Return 0 iff a == b, 1 otherwise
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "soft-fp.h"
+#include "half.h"
+
+CMPtype
+__eqhf2 (HFtype a, HFtype b)
+{
+ FP_DECL_EX;
+ FP_DECL_H (A);
+ FP_DECL_H (B);
+ CMPtype r;
+
+ FP_INIT_EXCEPTIONS;
+ FP_UNPACK_RAW_H (A, a);
+ FP_UNPACK_RAW_H (B, b);
+ FP_CMP_EQ_H (r, A, B, 1);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r;
+}
+
+strong_alias (__eqhf2, __nehf2);
diff --git a/soft-fp/extendhfdf2.c b/soft-fp/extendhfdf2.c
new file mode 100644
index 0000000000..337ba791d4
--- /dev/null
+++ b/soft-fp/extendhfdf2.c
@@ -0,0 +1,53 @@
+/* Software floating-point emulation.
+ Return an IEEE half converted to IEEE double
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define FP_NO_EXACT_UNDERFLOW
+#include "soft-fp.h"
+#include "half.h"
+#include "double.h"
+
+DFtype
+__extendhfdf2 (HFtype a)
+{
+ FP_DECL_EX;
+ FP_DECL_H (A);
+ FP_DECL_D (R);
+ DFtype r;
+
+ FP_INIT_EXCEPTIONS;
+ FP_UNPACK_RAW_H (A, a);
+#if _FP_W_TYPE_SIZE < _FP_FRACBITS_D
+ FP_EXTEND (D, H, 2, 1, R, A);
+#else
+ FP_EXTEND (D, H, 1, 1, R, A);
+#endif
+ FP_PACK_RAW_D (r, R);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r;
+}
diff --git a/soft-fp/extendhfsf2.c b/soft-fp/extendhfsf2.c
new file mode 100644
index 0000000000..a02f46d9a9
--- /dev/null
+++ b/soft-fp/extendhfsf2.c
@@ -0,0 +1,49 @@
+/* Software floating-point emulation.
+ Return an IEEE half converted to IEEE single
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define FP_NO_EXACT_UNDERFLOW
+#include "soft-fp.h"
+#include "half.h"
+#include "single.h"
+
+SFtype
+__extendhfsf2 (HFtype a)
+{
+ FP_DECL_EX;
+ FP_DECL_H (A);
+ FP_DECL_S (R);
+ SFtype r;
+
+ FP_INIT_EXCEPTIONS;
+ FP_UNPACK_RAW_H (A, a);
+ FP_EXTEND (S, H, 1, 1, R, A);
+ FP_PACK_RAW_S (r, R);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r;
+}
diff --git a/soft-fp/half.h b/soft-fp/half.h
index ca2c1fad03..70af2712fc 100644
--- a/soft-fp/half.h
+++ b/soft-fp/half.h
@@ -167,4 +167,6 @@ union _FP_UNION_H
#define _FP_FRAC_HIGH_RAW_H(X) _FP_FRAC_HIGH_1 (X)
#define _FP_FRAC_HIGH_DW_H(X) _FP_FRAC_HIGH_1 (X)
+#define FP_CMP_EQ_H(r, X, Y, ex) _FP_CMP_EQ (H, 1, (r), X, Y, (ex))
+
#endif /* !SOFT_FP_HALF_H */
diff --git a/soft-fp/truncdfhf2.c b/soft-fp/truncdfhf2.c
new file mode 100644
index 0000000000..8bcb278769
--- /dev/null
+++ b/soft-fp/truncdfhf2.c
@@ -0,0 +1,52 @@
+/* Software floating-point emulation.
+ Truncate IEEE double into IEEE half.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "soft-fp.h"
+#include "half.h"
+#include "double.h"
+
+HFtype
+__truncdfhf2 (DFtype a)
+{
+ FP_DECL_EX;
+ FP_DECL_D (A);
+ FP_DECL_H (R);
+ HFtype r;
+
+ FP_INIT_ROUNDMODE;
+ FP_UNPACK_SEMIRAW_D (A, a);
+#if _FP_W_TYPE_SIZE < _FP_FRACBITS_D
+ FP_TRUNC (H, D, 1, 2, R, A);
+#else
+ FP_TRUNC (H, D, 1, 1, R, A);
+#endif
+ FP_PACK_SEMIRAW_H (r, R);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r;
+}
diff --git a/soft-fp/truncsfhf2.c b/soft-fp/truncsfhf2.c
new file mode 100644
index 0000000000..25bee29f7f
--- /dev/null
+++ b/soft-fp/truncsfhf2.c
@@ -0,0 +1,48 @@
+/* Software floating-point emulation.
+ Truncate IEEE single into IEEE half.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "soft-fp.h"
+#include "half.h"
+#include "single.h"
+
+HFtype
+__truncsfhf2 (SFtype a)
+{
+ FP_DECL_EX;
+ FP_DECL_S (A);
+ FP_DECL_H (R);
+ HFtype r;
+
+ FP_INIT_ROUNDMODE;
+ FP_UNPACK_SEMIRAW_S (A, a);
+ FP_TRUNC (H, S, 1, 1, R, A);
+ FP_PACK_SEMIRAW_H (r, R);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r;
+}
</cut>
Successfully identified regression in *glibc* in CI configuration tcwg_cross/gnu-master-aarch64-build_cross. So far, this commit has regressed CI configurations:
- tcwg_cross/gnu-master-aarch64-build_cross
Culprit:
<cut>
commit b46cfcef3f7dab8e90729c6616ac1420f2642245
Author: Joseph Myers <joseph(a)codesourcery.com>
Date: Wed Jul 7 13:24:05 2021 +0000
Update kernel version to 5.13 in tst-mman-consts.py
This patch updates the kernel version in the test tst-mman-consts.py
to 5.13. (There are no new MAP_* constants covered by this test in
5.13 that need any other header changes.)
Tested with build-many-glibcs.py.
</cut>
Results regressed to (for first_bad == b46cfcef3f7dab8e90729c6616ac1420f2642245)
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe stage1:
2
# build_abe linux:
3
# First few build errors in logs:
# 00:00:18 ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:190:17: error: invalid register name for ‘_x0’
# 00:00:18 ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:174:22: error: invalid register name for ‘_x8’
# 00:00:18 ../sysdeps/aarch64/nptl/tls.h:95:21: error: ‘__builtin_thread_pointer’ is not supported on this target
# 00:00:18 ../sysdeps/aarch64/nptl/tls.h:91:19: error: ‘__builtin_thread_pointer’ is not supported on this target
# 00:00:18 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/crti.o] Error 1
# 00:00:18 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:9: /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/libc-start.o] Error 1
# 00:00:18 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/start.o] Error 1
# 00:00:18 ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:190:17: error: invalid register name for ‘_x0’
# 00:00:18 ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:174:22: error: invalid register name for ‘_x8’
# 00:00:18 ../sysdeps/aarch64/nptl/tls.h:95:21: error: ‘__builtin_thread_pointer’ is not supported on this target
from (for last_good == fab3a6daf137c734e684471e197148aa058102e3)
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe stage1:
2
# build_abe linux:
3
# build_abe glibc:
4
# build_abe stage2:
5
# build_abe qemu:
6
Artifacts of last_good build: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Artifacts of first_bad build: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Build top page/logs: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Configuration details:
Reproduce builds:
<cut>
mkdir investigate-glibc-b46cfcef3f7dab8e90729c6616ac1420f2642245
cd investigate-glibc-b46cfcef3f7dab8e90729c6616ac1420f2642245
git clone https://git.linaro.org/toolchain/jenkins-scripts
mkdir -p artifacts/manifests
curl -o artifacts/manifests/build-baseline.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
curl -o artifacts/manifests/build-parameters.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
curl -o artifacts/test.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
chmod +x artifacts/test.sh
# Reproduce the baseline build (build all pre-requisites)
./jenkins-scripts/tcwg_gnu-build.sh @@ artifacts/manifests/build-baseline.sh
cd glibc
# Reproduce first_bad build
git checkout --detach b46cfcef3f7dab8e90729c6616ac1420f2642245
../artifacts/test.sh
# Reproduce last_good build
git checkout --detach fab3a6daf137c734e684471e197148aa058102e3
../artifacts/test.sh
cd ..
</cut>
History of pending regressions and results: https://git.linaro.org/toolchain/ci/base-artifacts.git/log/?h=linaro-local/…
Artifacts: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Build log: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Full commit (up to 1000 lines):
<cut>
commit b46cfcef3f7dab8e90729c6616ac1420f2642245
Author: Joseph Myers <joseph(a)codesourcery.com>
Date: Wed Jul 7 13:24:05 2021 +0000
Update kernel version to 5.13 in tst-mman-consts.py
This patch updates the kernel version in the test tst-mman-consts.py
to 5.13. (There are no new MAP_* constants covered by this test in
5.13 that need any other header changes.)
Tested with build-many-glibcs.py.
---
sysdeps/unix/sysv/linux/tst-mman-consts.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sysdeps/unix/sysv/linux/tst-mman-consts.py b/sysdeps/unix/sysv/linux/tst-mman-consts.py
index fec7c9b8da..ee5b13ee12 100644
--- a/sysdeps/unix/sysv/linux/tst-mman-consts.py
+++ b/sysdeps/unix/sysv/linux/tst-mman-consts.py
@@ -33,7 +33,7 @@ def main():
help='C compiler (including options) to use')
args = parser.parse_args()
linux_version_headers = glibcsyscalls.linux_kernel_version(args.cc)
- linux_version_glibc = (5, 12)
+ linux_version_glibc = (5, 13)
sys.exit(glibcextract.compare_macro_consts(
'#define _GNU_SOURCE 1\n'
'#include <sys/mman.h>\n',
</cut>
Successfully identified regression in *glibc* in CI configuration tcwg_cross/gnu-master-aarch64-build_cross. So far, this commit has regressed CI configurations:
- tcwg_cross/gnu-master-aarch64-build_cross
Culprit:
<cut>
commit 7a5db2e82fbb6c3a6e3fdae02b7166c5d0e8c7a8
Author: Florian Weimer <fweimer(a)redhat.com>
Date: Wed Jul 7 08:40:41 2021 +0200
elf: Clean up GLIBC_PRIVATE exports of internal libdl symbols
They are no longer needed after everything has been moved into
libc. The _dl_vsym test has to be removed because the symbol
cannot be used outside libc anymore.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella(a)linaro.org>
</cut>
Results regressed to (for first_bad == 7a5db2e82fbb6c3a6e3fdae02b7166c5d0e8c7a8)
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe stage1:
2
# build_abe linux:
3
# First few build errors in logs:
# 00:00:14 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/start.o] Error 1
# 00:00:14 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:499: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/start.os] Error 1
# 00:00:14 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/crtn.o] Error 1
# 00:00:14 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/crti.o] Error 1
# 00:00:14 make[2]: *** [../o-iterator.mk:9: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/check_fds.o] Error 1
# 00:00:14 make[2]: *** [../o-iterator.mk:9: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/check_fds.os] Error 1
# 00:00:14 ../sysdeps/aarch64/nptl/tls.h:91:19: error: ‘__builtin_thread_pointer’ is not supported on this target
# 00:00:14 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:485: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/libc-tls.o] Error 1
# 00:00:14 ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:190:17: error: invalid register name for ‘_x0’
# 00:00:14 ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:174:22: error: invalid register name for ‘_x8’
from (for last_good == ceda365fbac3083e16eed07892fbd5970b3839a0)
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe stage1:
2
# build_abe linux:
3
# build_abe glibc:
4
# build_abe stage2:
5
# build_abe qemu:
6
Artifacts of last_good build: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Artifacts of first_bad build: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Build top page/logs: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Configuration details:
Reproduce builds:
<cut>
mkdir investigate-glibc-7a5db2e82fbb6c3a6e3fdae02b7166c5d0e8c7a8
cd investigate-glibc-7a5db2e82fbb6c3a6e3fdae02b7166c5d0e8c7a8
git clone https://git.linaro.org/toolchain/jenkins-scripts
mkdir -p artifacts/manifests
curl -o artifacts/manifests/build-baseline.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
curl -o artifacts/manifests/build-parameters.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
curl -o artifacts/test.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
chmod +x artifacts/test.sh
# Reproduce the baseline build (build all pre-requisites)
./jenkins-scripts/tcwg_gnu-build.sh @@ artifacts/manifests/build-baseline.sh
cd glibc
# Reproduce first_bad build
git checkout --detach 7a5db2e82fbb6c3a6e3fdae02b7166c5d0e8c7a8
../artifacts/test.sh
# Reproduce last_good build
git checkout --detach ceda365fbac3083e16eed07892fbd5970b3839a0
../artifacts/test.sh
cd ..
</cut>
History of pending regressions and results: https://git.linaro.org/toolchain/ci/base-artifacts.git/log/?h=linaro-local/…
Artifacts: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Build log: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Full commit (up to 1000 lines):
<cut>
commit 7a5db2e82fbb6c3a6e3fdae02b7166c5d0e8c7a8
Author: Florian Weimer <fweimer(a)redhat.com>
Date: Wed Jul 7 08:40:41 2021 +0200
elf: Clean up GLIBC_PRIVATE exports of internal libdl symbols
They are no longer needed after everything has been moved into
libc. The _dl_vsym test has to be removed because the symbol
cannot be used outside libc anymore.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella(a)linaro.org>
---
dlfcn/dlerror.c | 1 -
elf/Makefile | 16 ++----
elf/Versions | 3 -
elf/dl-addr.c | 1 -
elf/dl-libc.c | 4 --
elf/dl-sym.c | 2 -
elf/tst-libc_dlvsym-dso.c | 25 ---------
elf/tst-libc_dlvsym-static.c | 32 -----------
elf/tst-libc_dlvsym.c | 34 -----------
elf/tst-libc_dlvsym.h | 130 -------------------------------------------
include/dlfcn.h | 30 +++++-----
11 files changed, 18 insertions(+), 260 deletions(-)
diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c
index d0194a7cef..5047b14066 100644
--- a/dlfcn/dlerror.c
+++ b/dlfcn/dlerror.c
@@ -196,4 +196,3 @@ _dlerror_run (void (*operate) (void *), void *args)
return 1;
}
}
-libc_hidden_def (_dlerror_run)
diff --git a/elf/Makefile b/elf/Makefile
index 698a6ab985..b1e01d9516 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -165,7 +165,7 @@ tests-static-normal := tst-leaks1-static tst-array1-static tst-array5-static \
tests-static-internal := tst-tls1-static tst-tls2-static \
tst-ptrguard1-static tst-stackguard1-static \
- tst-tls1-static-non-pie tst-libc_dlvsym-static
+ tst-tls1-static-non-pie
CRT-tst-tls1-static-non-pie := $(csu-objpfx)crt1.o
tst-tls1-static-non-pie-no-pie = yes
@@ -229,7 +229,7 @@ tests += restest1 preloadtest loadfail multiload origtest resolvfail \
tests-internal += loadtest unload unload2 circleload1 \
neededtest neededtest2 neededtest3 neededtest4 \
tst-tls3 tst-tls6 tst-tls7 tst-tls8 tst-dlmopen2 \
- tst-ptrguard1 tst-stackguard1 tst-libc_dlvsym \
+ tst-ptrguard1 tst-stackguard1 \
tst-create_format1 tst-tls-surplus tst-dl-hwcaps_split
tests-container += tst-pldd tst-dlopen-tlsmodid-container \
tst-dlopen-self-container tst-preload-pthread-libc
@@ -326,7 +326,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
tst-audit12mod1 tst-audit12mod2 tst-audit12mod3 tst-auditmod12 \
tst-latepthreadmod $(tst-tls-many-dynamic-modules) \
tst-nodelete-dlclose-dso tst-nodelete-dlclose-plugin \
- tst-main1mod tst-libc_dlvsym-dso tst-absolute-sym-lib \
+ tst-main1mod tst-absolute-sym-lib \
tst-absolute-zero-lib tst-big-note-lib tst-unwind-ctor-lib \
tst-audit13mod1 tst-sonamemove-linkmod1 \
tst-sonamemove-runmod1 tst-sonamemove-runmod2 \
@@ -352,7 +352,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
# Most modules build with _ISOMAC defined, but those filtered out
# depend on internal headers.
-modules-names-tests = $(filter-out ifuncmod% tst-libc_dlvsym-dso tst-tlsmod%,\
+modules-names-tests = $(filter-out ifuncmod% tst-tlsmod%,\
$(modules-names))
ifeq (yes,$(have-mtls-dialect-gnu2))
@@ -1582,14 +1582,6 @@ LDLIBS-tst-absolute-zero-lib.so = tst-absolute-zero-lib.lds
$(objpfx)tst-absolute-zero-lib.so: $(LDLIBS-tst-absolute-zero-lib.so)
$(objpfx)tst-absolute-zero: $(objpfx)tst-absolute-zero-lib.so
-# Both the main program and the DSO for tst-libc_dlvsym need to link
-# against libdl.
-$(objpfx)tst-libc_dlvsym-dso.so: $(libsupport)
-$(objpfx)tst-libc_dlvsym.out: $(objpfx)tst-libc_dlvsym-dso.so
-tst-libc_dlvsym-static-ENV = \
- LD_LIBRARY_PATH=$(ld-library-path):$(common-objpfx)dlfcn
-$(objpfx)tst-libc_dlvsym-static.out: $(objpfx)tst-libc_dlvsym-dso.so
-
$(objpfx)tst-big-note: $(objpfx)tst-big-note-lib.so
# Avoid creating an ABI tag note, which may come before the
# artificial, large note in tst-big-note-lib.o and invalidate the
diff --git a/elf/Versions b/elf/Versions
index a12d64e8db..775aab62af 100644
--- a/elf/Versions
+++ b/elf/Versions
@@ -22,9 +22,6 @@ libc {
%endif
GLIBC_PRIVATE {
# functions used in other libraries
- _dl_addr;
- _dl_sym; _dl_vsym;
- __libc_dlclose; __libc_dlopen_mode; __libc_dlsym; __libc_dlvsym;
__libc_early_init;
# Internal error handling support. Interposes the functions in ld.so.
diff --git a/elf/dl-addr.c b/elf/dl-addr.c
index 70a60d5b91..3226880d48 100644
--- a/elf/dl-addr.c
+++ b/elf/dl-addr.c
@@ -142,4 +142,3 @@ _dl_addr (const void *address, Dl_info *info,
return result;
}
-libc_hidden_def (_dl_addr)
diff --git a/elf/dl-libc.c b/elf/dl-libc.c
index ba792e9589..d5bc4a277f 100644
--- a/elf/dl-libc.c
+++ b/elf/dl-libc.c
@@ -162,7 +162,6 @@ __libc_dlopen_mode (const char *name, int mode)
#endif
return dlerror_run (do_dlopen, &args) ? NULL : (void *) args.map;
}
-libc_hidden_def (__libc_dlopen_mode)
#ifndef SHARED
void *
@@ -192,7 +191,6 @@ __libc_dlsym (void *map, const char *name)
return (dlerror_run (do_dlsym, &args) ? NULL
: (void *) (DL_SYMBOL_ADDRESS (args.loadbase, args.ref)));
}
-libc_hidden_def (__libc_dlsym)
/* Replacement for dlvsym. MAP must be a real map. This function
returns NULL without setting the dlerror value in case of static
@@ -219,7 +217,6 @@ __libc_dlvsym (void *map, const char *name, const char *version)
: (void *) (DL_SYMBOL_ADDRESS (args.dlsym.loadbase,
args.dlsym.ref)));
}
-libc_hidden_def (__libc_dlvsym)
int
__libc_dlclose (void *map)
@@ -230,7 +227,6 @@ __libc_dlclose (void *map)
#endif
return dlerror_run (do_dlclose, map);
}
-libc_hidden_def (__libc_dlclose)
static bool __libc_freeres_fn_section
diff --git a/elf/dl-sym.c b/elf/dl-sym.c
index fa0cce678f..de5769f926 100644
--- a/elf/dl-sym.c
+++ b/elf/dl-sym.c
@@ -188,11 +188,9 @@ _dl_vsym (void *handle, const char *name, const char *version, void *who)
return do_sym (handle, name, who, &vers, 0);
}
-libc_hidden_def (_dl_vsym)
void *
_dl_sym (void *handle, const char *name, void *who)
{
return do_sym (handle, name, who, NULL, DL_LOOKUP_RETURN_NEWEST);
}
-libc_hidden_def (_dl_sym)
diff --git a/elf/tst-libc_dlvsym-dso.c b/elf/tst-libc_dlvsym-dso.c
deleted file mode 100644
index 19091ddb41..0000000000
--- a/elf/tst-libc_dlvsym-dso.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Compare dlvsym and __libc_dlvsym results. Shared object code.
- Copyright (C) 2017-2021 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#include "tst-libc_dlvsym.h"
-
-void
-compare_vsyms_global (void)
-{
- compare_vsyms ();
-}
diff --git a/elf/tst-libc_dlvsym-static.c b/elf/tst-libc_dlvsym-static.c
deleted file mode 100644
index 19c438c3cd..0000000000
--- a/elf/tst-libc_dlvsym-static.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Compare dlvsym and __libc_dlvsym results. Static version.
- Copyright (C) 2017-2021 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#include <support/xdlfcn.h>
-
-static int
-do_test (void)
-{
- void *handle = xdlopen ("tst-libc_dlvsym-dso.so", RTLD_LAZY);
- void (*compare) (void) = xdlsym (handle, "compare_vsyms_global");
- compare ();
- xdlclose (handle);
-
- return 0;
-}
-
-#include <support/test-driver.c>
diff --git a/elf/tst-libc_dlvsym.c b/elf/tst-libc_dlvsym.c
deleted file mode 100644
index 823643fb1c..0000000000
--- a/elf/tst-libc_dlvsym.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Compare dlvsym and __libc_dlvsym results. Dynamic version.
- Copyright (C) 2017-2021 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#include "tst-libc_dlvsym.h"
-
-static int
-do_test (void)
-{
- compare_vsyms ();
-
- void *handle = xdlopen ("tst-libc_dlvsym-dso.so", RTLD_LAZY);
- void (*compare) (void) = xdlsym (handle, "compare_vsyms_global");
- compare ();
- xdlclose (handle);
-
- return 0;
-}
-
-#include <support/test-driver.c>
diff --git a/elf/tst-libc_dlvsym.h b/elf/tst-libc_dlvsym.h
deleted file mode 100644
index 1a8f2e9271..0000000000
--- a/elf/tst-libc_dlvsym.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Compare dlvsym and __libc_dlvsym results. Common code.
- Copyright (C) 2017-2021 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-/* compare_vsyms is the main entry point for these tests.
-
- Indirectly, It calls __libc_dlvsym (from libc.so; internal
- interface) and dlvsym (from libdl.so; public interface) to compare
- the results for a selected set of symbols in libc.so which
- typically have more than one symbol version. The two functions are
- implemented by somewhat different code, and this test checks that
- their results are the same.
-
- The versions are generated to range from GLIBC_2.0 to GLIBC_2.Y,
- with Y being the current __GLIBC_MINOR__ version plus two. In
- addition, there is a list of special symbol versions of the form
- GLIBC_2.Y.Z, which were used for some releases.
-
- Comparing the two dlvsym results at versions which do not actually
- exist does not test much, but it will not contribute to false test
- failures, either. */
-
-#include <array_length.h>
-#include <gnu/lib-names.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <support/check.h>
-#include <support/xdlfcn.h>
-
-/* Run consistency check for versioned symbol NAME@VERSION. NB: We
- may execute in a shared object, so exit on error for proper error
- reporting. */
-static void
-compare_vsyms_0 (void *libc_handle, const char *name, const char *version,
- bool *pfound)
-{
- void *dlvsym_address = dlvsym (libc_handle, name, version);
- void *libc_dlvsym_address
- = __libc_dlvsym (libc_handle, name, version);
- if (dlvsym_address != libc_dlvsym_address)
- FAIL_EXIT1 ("%s@%s mismatch: %p != %p",
- name, version, dlvsym_address, libc_dlvsym_address);
- if (dlvsym_address != NULL)
- *pfound = true;
-}
-
-
-/* Run consistency check for versioned symbol NAME at multiple symbol
- version. */
-static void
-compare_vsyms_1 (void *libc_handle, const char *name)
-{
- bool found = false;
-
- /* Historic versions which do not follow the usual GLIBC_2.Y
- pattern, to increase test coverage. Not all architectures have
- those, but probing additional versions does not hurt. */
- static const char special_versions[][12] =
- {
- "GLIBC_2.1.1",
- "GLIBC_2.1.2",
- "GLIBC_2.1.3",
- "GLIBC_2.1.4",
- "GLIBC_2.2.1",
- "GLIBC_2.2.2",
- "GLIBC_2.2.3",
- "GLIBC_2.2.4",
- "GLIBC_2.2.5",
- "GLIBC_2.2.6",
- "GLIBC_2.3.2",
- "GLIBC_2.3.3",
- "GLIBC_2.3.4",
- };
- for (int i = 0; i < array_length (special_versions); ++i)
- compare_vsyms_0 (libc_handle, name, special_versions[i], &found);
-
- /* Iterate to an out-of-range version, to cover some unused symbols
- as well. */
- for (int minor_version = 0; minor_version <= __GLIBC_MINOR__ + 2;
- ++minor_version)
- {
- char version[30];
- snprintf (version, sizeof (version), "GLIBC_%d.%d",
- __GLIBC__, minor_version);
- compare_vsyms_0 (libc_handle, name, version, &found);
- }
-
- if (!found)
- FAIL_EXIT1 ("symbol %s not found at any version", name);
-}
-
-/* Run consistency checks for various symbols which usually have
- multiple versions. */
-static void
-compare_vsyms (void)
-{
- /* The minor version loop in compare_vsyms_1 needs updating in case
- we ever switch to glibc 3.0. */
- if (__GLIBC__ != 2)
- FAIL_EXIT1 ("unexpected glibc major version: %d", __GLIBC__);
-
- /* __libc_dlvsym does not recognize the special RTLD_* handles, so
- obtain an explicit handle for libc.so. */
- void *libc_handle = xdlopen (LIBC_SO, RTLD_LAZY | RTLD_NOLOAD);
-
-
- /* sys_errlist and sys_siglist were deprecated in glibc 2.32 and they are
- not available on architectures with base ABI newer than 2.32. */
-#if TEST_COMPAT (libc, GLIBC_2_0, GLIBC_2_32)
- compare_vsyms_1 (libc_handle, "_sys_errlist");
- compare_vsyms_1 (libc_handle, "_sys_siglist");
-#endif
- compare_vsyms_1 (libc_handle, "quick_exit");
-
- xdlclose (libc_handle);
-}
diff --git a/include/dlfcn.h b/include/dlfcn.h
index d4440c567e..a4c283728f 100644
--- a/include/dlfcn.h
+++ b/include/dlfcn.h
@@ -45,20 +45,20 @@ extern char **__libc_argv attribute_hidden;
better error handling semantics for the library. */
#define __libc_dlopen(name) \
__libc_dlopen_mode (name, RTLD_NOW | __RTLD_DLOPEN)
-extern void *__libc_dlopen_mode (const char *__name, int __mode);
-extern void *__libc_dlsym (void *__map, const char *__name);
-extern void *__libc_dlvsym (void *map, const char *name, const char *version);
-extern int __libc_dlclose (void *__map);
-libc_hidden_proto (__libc_dlopen_mode)
-libc_hidden_proto (__libc_dlsym)
-libc_hidden_proto (__libc_dlvsym)
-libc_hidden_proto (__libc_dlclose)
+extern void *__libc_dlopen_mode (const char *__name, int __mode)
+ attribute_hidden;
+extern void *__libc_dlsym (void *__map, const char *__name)
+ attribute_hidden;
+extern void *__libc_dlvsym (void *map, const char *name, const char *version)
+ attribute_hidden;
+extern int __libc_dlclose (void *__map)
+ attribute_hidden;
/* Locate shared object containing the given address. */
#ifdef ElfW
extern int _dl_addr (const void *address, Dl_info *info,
- struct link_map **mapp, const ElfW(Sym) **symbolp);
-libc_hidden_proto (_dl_addr)
+ struct link_map **mapp, const ElfW(Sym) **symbolp)
+ attribute_hidden;
#endif
struct link_map;
@@ -73,23 +73,21 @@ extern void _dl_close_worker (struct link_map *map, bool force)
/* Look up NAME in shared object HANDLE (which may be RTLD_DEFAULT or
RTLD_NEXT). WHO is the calling function, for RTLD_NEXT. Returns
the symbol value, which may be NULL. */
-extern void *_dl_sym (void *handle, const char *name, void *who);
-libc_hidden_proto (_dl_sym)
+extern void *_dl_sym (void *handle, const char *name, void *who)
+ attribute_hidden;
/* Look up version VERSION of symbol NAME in shared object HANDLE
(which may be RTLD_DEFAULT or RTLD_NEXT). WHO is the calling
function, for RTLD_NEXT. Returns the symbol value, which may be
NULL. */
extern void *_dl_vsym (void *handle, const char *name, const char *version,
- void *who);
-libc_hidden_proto (_dl_vsym)
+ void *who) attribute_hidden;
/* Helper function for <dlfcn.h> functions. Runs the OPERATE function via
_dl_catch_error. Returns zero for success, nonzero for failure; and
arranges for `dlerror' to return the error details.
ARGS is passed as argument to OPERATE. */
-extern int _dlerror_run (void (*operate) (void *), void *args);
-libc_hidden_proto (_dlerror_run)
+extern int _dlerror_run (void (*operate) (void *), void *args) attribute_hidden;
/* This structure is used to make the outer (statically linked)
implementation of dlopen and related functions to the inner libc
</cut>
Successfully identified regression in *glibc* in CI configuration tcwg_cross/gnu-master-aarch64-build_cross. So far, this commit has regressed CI configurations:
- tcwg_cross/gnu-master-aarch64-build_cross
Culprit:
<cut>
commit 8ec022a037788cc540c5670b0c9b1aa137bfbf97
Author: Florian Weimer <fweimer(a)redhat.com>
Date: Wed Jul 7 08:40:41 2021 +0200
nptl: Remove GLIBC_2.34 versions of __pthread_mutex_lock, __pthread_mutex_unlock
Now that there are no internal users anymore, these new symbol
versions can be removed from the public ABI. The compatibility
symbols remain.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella(a)linaro.org>
</cut>
Results regressed to (for first_bad == 8ec022a037788cc540c5670b0c9b1aa137bfbf97)
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe stage1:
2
# build_abe linux:
3
# First few build errors in logs:
# 00:00:16 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/start.o] Error 1
# 00:00:17 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/crti.o] Error 1
# 00:00:17 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/crtn.o] Error 1
# 00:00:17 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:499: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/start.os] Error 1
# 00:00:17 make[2]: *** [../o-iterator.mk:9: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/check_fds.o] Error 1
# 00:00:17 make[2]: *** [../o-iterator.mk:9: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/check_fds.os] Error 1
# 00:00:17 ../sysdeps/aarch64/nptl/tls.h:91:19: error: ‘__builtin_thread_pointer’ is not supported on this target
# 00:00:17 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:485: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/libc-tls.o] Error 1
# 00:00:17 ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:190:17: error: invalid register name for ‘_x0’
# 00:00:17 ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:174:22: error: invalid register name for ‘_x8’
from (for last_good == 1f9c804fbd699104adefbce9e56d2c8aa711b6b9)
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe stage1:
2
# build_abe linux:
3
# build_abe glibc:
4
# build_abe stage2:
5
# build_abe qemu:
6
Artifacts of last_good build: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Artifacts of first_bad build: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Build top page/logs: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Configuration details:
Reproduce builds:
<cut>
mkdir investigate-glibc-8ec022a037788cc540c5670b0c9b1aa137bfbf97
cd investigate-glibc-8ec022a037788cc540c5670b0c9b1aa137bfbf97
git clone https://git.linaro.org/toolchain/jenkins-scripts
mkdir -p artifacts/manifests
curl -o artifacts/manifests/build-baseline.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
curl -o artifacts/manifests/build-parameters.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
curl -o artifacts/test.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
chmod +x artifacts/test.sh
# Reproduce the baseline build (build all pre-requisites)
./jenkins-scripts/tcwg_gnu-build.sh @@ artifacts/manifests/build-baseline.sh
cd glibc
# Reproduce first_bad build
git checkout --detach 8ec022a037788cc540c5670b0c9b1aa137bfbf97
../artifacts/test.sh
# Reproduce last_good build
git checkout --detach 1f9c804fbd699104adefbce9e56d2c8aa711b6b9
../artifacts/test.sh
cd ..
</cut>
History of pending regressions and results: https://git.linaro.org/toolchain/ci/base-artifacts.git/log/?h=linaro-local/…
Artifacts: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Build log: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Full commit (up to 1000 lines):
<cut>
commit 8ec022a037788cc540c5670b0c9b1aa137bfbf97
Author: Florian Weimer <fweimer(a)redhat.com>
Date: Wed Jul 7 08:40:41 2021 +0200
nptl: Remove GLIBC_2.34 versions of __pthread_mutex_lock, __pthread_mutex_unlock
Now that there are no internal users anymore, these new symbol
versions can be removed from the public ABI. The compatibility
symbols remain.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella(a)linaro.org>
---
nptl/Versions | 2 --
nptl/pthread_mutex_lock.c | 5 +++--
nptl/pthread_mutex_unlock.c | 5 +++--
sysdeps/unix/sysv/linux/aarch64/libc.abilist | 2 --
sysdeps/unix/sysv/linux/alpha/libc.abilist | 2 --
sysdeps/unix/sysv/linux/arc/libc.abilist | 2 --
sysdeps/unix/sysv/linux/arm/be/libc.abilist | 2 --
sysdeps/unix/sysv/linux/arm/le/libc.abilist | 2 --
sysdeps/unix/sysv/linux/csky/libc.abilist | 2 --
sysdeps/unix/sysv/linux/hppa/libc.abilist | 2 --
sysdeps/unix/sysv/linux/i386/libc.abilist | 2 --
sysdeps/unix/sysv/linux/ia64/libc.abilist | 2 --
sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist | 2 --
sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist | 2 --
sysdeps/unix/sysv/linux/microblaze/be/libc.abilist | 2 --
sysdeps/unix/sysv/linux/microblaze/le/libc.abilist | 2 --
sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist | 2 --
sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist | 2 --
sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist | 2 --
sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist | 2 --
sysdeps/unix/sysv/linux/nios2/libc.abilist | 2 --
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist | 2 --
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist | 2 --
sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist | 2 --
sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist | 2 --
sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist | 2 --
sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist | 2 --
sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist | 2 --
sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist | 2 --
sysdeps/unix/sysv/linux/sh/be/libc.abilist | 2 --
sysdeps/unix/sysv/linux/sh/le/libc.abilist | 2 --
sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist | 2 --
sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist | 2 --
sysdeps/unix/sysv/linux/x86_64/64/libc.abilist | 2 --
sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist | 2 --
35 files changed, 6 insertions(+), 70 deletions(-)
diff --git a/nptl/Versions b/nptl/Versions
index 060d8d5dec..0a1c75509a 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -253,8 +253,6 @@ libc {
GLIBC_2.34 {
__pthread_cleanup_routine;
__pthread_key_create;
- __pthread_mutex_lock;
- __pthread_mutex_unlock;
__pthread_register_cancel;
__pthread_register_cancel_defer;
__pthread_unregister_cancel;
diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
index c9e438ef37..da624f322d 100644
--- a/nptl/pthread_mutex_lock.c
+++ b/nptl/pthread_mutex_lock.c
@@ -609,9 +609,10 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
}
#if PTHREAD_MUTEX_VERSIONS
-versioned_symbol (libpthread, ___pthread_mutex_lock, __pthread_mutex_lock,
- GLIBC_2_34);
libc_hidden_ver (___pthread_mutex_lock, __pthread_mutex_lock)
+# ifndef SHARED
+strong_alias (___pthread_mutex_lock, __pthread_mutex_lock)
+# endif
versioned_symbol (libpthread, ___pthread_mutex_lock, pthread_mutex_lock,
GLIBC_2_0);
diff --git a/nptl/pthread_mutex_unlock.c b/nptl/pthread_mutex_unlock.c
index ea88ba2986..7c15397572 100644
--- a/nptl/pthread_mutex_unlock.c
+++ b/nptl/pthread_mutex_unlock.c
@@ -368,9 +368,10 @@ ___pthread_mutex_unlock (pthread_mutex_t *mutex)
{
return __pthread_mutex_unlock_usercnt (mutex, 1);
}
-versioned_symbol (libpthread, ___pthread_mutex_unlock, __pthread_mutex_unlock,
- GLIBC_2_34);
libc_hidden_ver (___pthread_mutex_unlock, __pthread_mutex_unlock)
+#ifndef SHARED
+strong_alias (___pthread_mutex_unlock, __pthread_mutex_unlock)
+#endif
versioned_symbol (libpthread, ___pthread_mutex_unlock, pthread_mutex_unlock,
GLIBC_2_0);
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 6730cbdd6b..6f19b07b47 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2384,8 +2384,6 @@ GLIBC_2.34 __libc_start_main F
GLIBC_2.34 __mq_open_2 F
GLIBC_2.34 __pthread_cleanup_routine F
GLIBC_2.34 __pthread_key_create F
-GLIBC_2.34 __pthread_mutex_lock F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 63de4fadc3..6ece449d4b 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2483,8 +2483,6 @@ GLIBC_2.34 __libc_start_main F
GLIBC_2.34 __mq_open_2 F
GLIBC_2.34 __pthread_cleanup_routine F
GLIBC_2.34 __pthread_key_create F
-GLIBC_2.34 __pthread_mutex_lock F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 2f13701fd7..3bf846349f 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -2143,8 +2143,6 @@ GLIBC_2.34 __libc_start_main F
GLIBC_2.34 __mq_open_2 F
GLIBC_2.34 __pthread_cleanup_routine F
GLIBC_2.34 __pthread_key_create F
-GLIBC_2.34 __pthread_mutex_lock F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 9b824f1605..08be998d35 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -245,9 +245,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 443a81b8f7..ebd767ed96 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -242,9 +242,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 243de3cf93..4a467e706e 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2377,9 +2377,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 24ae58bb6f..bdef8d2a34 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2330,9 +2330,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 09bebcd5a1..eba95a2cf0 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2514,9 +2514,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index 0bafe09253..3fbc5ae978 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -2321,8 +2321,6 @@ GLIBC_2.34 __libc_start_main F
GLIBC_2.34 __mq_open_2 F
GLIBC_2.34 __pthread_cleanup_routine F
GLIBC_2.34 __pthread_key_create F
-GLIBC_2.34 __pthread_mutex_lock F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index c1fcde4c24..0aef2ec43a 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -246,9 +246,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 407651cfd7..a4704f7e96 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2457,9 +2457,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 7da722a734..8f135f30c0 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2428,9 +2428,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index c374607b81..719609ac10 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2425,9 +2425,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index b1f426e053..f9a6bccdc5 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2422,9 +2422,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 066ceb2258..cee02495c6 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2420,9 +2420,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 51c563ebbe..c9fdfe3a55 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2428,9 +2428,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 28db715d8a..d27c97094e 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2372,8 +2372,6 @@ GLIBC_2.34 __libc_start_main F
GLIBC_2.34 __mq_open_2 F
GLIBC_2.34 __pthread_cleanup_routine F
GLIBC_2.34 __pthread_key_create F
-GLIBC_2.34 __pthread_mutex_lock F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index ab9f2bd42c..25f270403f 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -2467,9 +2467,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 83f8513e17..0256a272dd 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2484,9 +2484,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 0fad357bf6..946f855c64 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2517,9 +2517,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 424ec8d953..602da17327 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2285,8 +2285,6 @@ GLIBC_2.34 __libc_start_main F
GLIBC_2.34 __mq_open_2 F
GLIBC_2.34 __pthread_cleanup_routine F
GLIBC_2.34 __pthread_key_create F
-GLIBC_2.34 __pthread_mutex_lock F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 9909fd0e9a..287285a21a 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2580,8 +2580,6 @@ GLIBC_2.34 __libc_start_main F
GLIBC_2.34 __mq_open_2 F
GLIBC_2.34 __pthread_cleanup_routine F
GLIBC_2.34 __pthread_key_create F
-GLIBC_2.34 __pthread_mutex_lock F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 7085989b16..cdeee28d0f 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -2145,8 +2145,6 @@ GLIBC_2.34 __libc_start_main F
GLIBC_2.34 __mq_open_2 F
GLIBC_2.34 __pthread_cleanup_routine F
GLIBC_2.34 __pthread_key_create F
-GLIBC_2.34 __pthread_mutex_lock F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index a855997957..a74b54d6bb 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2345,8 +2345,6 @@ GLIBC_2.34 __libc_start_main F
GLIBC_2.34 __mq_open_2 F
GLIBC_2.34 __pthread_cleanup_routine F
GLIBC_2.34 __pthread_key_create F
-GLIBC_2.34 __pthread_mutex_lock F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 12aeb82520..e96371317c 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2482,9 +2482,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index e2d746ad5f..aadc7c1d66 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2322,8 +2322,6 @@ GLIBC_2.34 __libc_start_main F
GLIBC_2.34 __mq_open_2 F
GLIBC_2.34 __pthread_cleanup_routine F
GLIBC_2.34 __pthread_key_create F
-GLIBC_2.34 __pthread_mutex_lock F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index 1ce4b54bf2..cc4a625cb4 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2337,9 +2337,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 7d01add713..163d2cd613 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2334,9 +2334,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index b5ef3247d7..6eceee6b88 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2477,9 +2477,7 @@ GLIBC_2.34 __pthread_cond_clockwait64 F
GLIBC_2.34 __pthread_cond_timedwait64 F
GLIBC_2.34 __pthread_key_create F
GLIBC_2.34 __pthread_mutex_clocklock64 F
-GLIBC_2.34 __pthread_mutex_lock F
GLIBC_2.34 __pthread_mutex_timedlock64 F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_rwlock_clockrdlock64 F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 14ae7c8417..e6bac469ba 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2344,8 +2344,6 @@ GLIBC_2.34 __libc_start_main F
GLIBC_2.34 __mq_open_2 F
GLIBC_2.34 __pthread_cleanup_routine F
GLIBC_2.34 __pthread_key_create F
-GLIBC_2.34 __pthread_mutex_lock F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 57c4f28d17..e90f3e54c0 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2300,8 +2300,6 @@ GLIBC_2.34 __libc_start_main F
GLIBC_2.34 __mq_open_2 F
GLIBC_2.34 __pthread_cleanup_routine F
GLIBC_2.34 __pthread_key_create F
-GLIBC_2.34 __pthread_mutex_lock F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_unregister_cancel F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 47211abe4e..792f681bba 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2399,8 +2399,6 @@ GLIBC_2.34 __libc_start_main F
GLIBC_2.34 __mq_open_2 F
GLIBC_2.34 __pthread_cleanup_routine F
GLIBC_2.34 __pthread_key_create F
-GLIBC_2.34 __pthread_mutex_lock F
-GLIBC_2.34 __pthread_mutex_unlock F
GLIBC_2.34 __pthread_register_cancel F
GLIBC_2.34 __pthread_register_cancel_defer F
GLIBC_2.34 __pthread_unregister_cancel F
</cut>
Successfully identified regression in *glibc* in CI configuration tcwg_cross/gnu-master-aarch64-build_cross. So far, this commit has regressed CI configurations:
- tcwg_cross/gnu-master-aarch64-build_cross
Culprit:
<cut>
commit 83e55c982ffcf42185254cff5ac16377672ae32e
Author: Siddhesh Poyarekar <siddhesh(a)sourceware.org>
Date: Wed Jul 7 07:02:13 2021 +0530
glibc.malloc.check: Fix nit in documentation
The tunable will not work with *any* non-zero tunable value since its
list of allowed values is 0-3. Fix the documentation to reflect that.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella(a)linaro.org>
</cut>
Results regressed to (for first_bad == 83e55c982ffcf42185254cff5ac16377672ae32e)
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe stage1:
2
# build_abe linux:
3
# First few build errors in logs:
# 00:00:19 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/start.o] Error 1
# 00:00:19 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:499: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/start.os] Error 1
# 00:00:19 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/crtn.o] Error 1
# 00:00:19 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:483: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/crti.o] Error 1
# 00:00:19 make[2]: *** [../o-iterator.mk:9: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/check_fds.os] Error 1
# 00:00:19 make[2]: *** [../o-iterator.mk:9: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/check_fds.o] Error 1
# 00:00:19 ../sysdeps/aarch64/nptl/tls.h:91:19: error: ‘__builtin_thread_pointer’ is not supported on this target
# 00:00:19 make[2]: *** [/home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/sysd-rules:485: /home/tcwg-buildslave/workspace/tcwg_gnu_0/abe/builds/x86_64-pc-linux-gnu/aarch64-linux-gnu/glibc-glibc.git~master/csu/libc-tls.o] Error 1
# 00:00:19 ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:190:17: error: invalid register name for ‘_x0’
# 00:00:19 ../sysdeps/unix/sysv/linux/aarch64/sysdep.h:174:22: error: invalid register name for ‘_x8’
from (for last_good == 7042b53f11339bc286270cd1a48eebf7989d198b)
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe stage1:
2
# build_abe linux:
3
# build_abe glibc:
4
# build_abe stage2:
5
# build_abe qemu:
6
Artifacts of last_good build: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Artifacts of first_bad build: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Build top page/logs: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Configuration details:
Reproduce builds:
<cut>
mkdir investigate-glibc-83e55c982ffcf42185254cff5ac16377672ae32e
cd investigate-glibc-83e55c982ffcf42185254cff5ac16377672ae32e
git clone https://git.linaro.org/toolchain/jenkins-scripts
mkdir -p artifacts/manifests
curl -o artifacts/manifests/build-baseline.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
curl -o artifacts/manifests/build-parameters.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
curl -o artifacts/test.sh https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/… --fail
chmod +x artifacts/test.sh
# Reproduce the baseline build (build all pre-requisites)
./jenkins-scripts/tcwg_gnu-build.sh @@ artifacts/manifests/build-baseline.sh
cd glibc
# Reproduce first_bad build
git checkout --detach 83e55c982ffcf42185254cff5ac16377672ae32e
../artifacts/test.sh
# Reproduce last_good build
git checkout --detach 7042b53f11339bc286270cd1a48eebf7989d198b
../artifacts/test.sh
cd ..
</cut>
History of pending regressions and results: https://git.linaro.org/toolchain/ci/base-artifacts.git/log/?h=linaro-local/…
Artifacts: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Build log: https://ci.linaro.org/job/tcwg_cross-bisect-gnu-master-aarch64-build_cross/…
Full commit (up to 1000 lines):
<cut>
commit 83e55c982ffcf42185254cff5ac16377672ae32e
Author: Siddhesh Poyarekar <siddhesh(a)sourceware.org>
Date: Wed Jul 7 07:02:13 2021 +0530
glibc.malloc.check: Fix nit in documentation
The tunable will not work with *any* non-zero tunable value since its
list of allowed values is 0-3. Fix the documentation to reflect that.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella(a)linaro.org>
---
manual/memory.texi | 10 +++++-----
manual/tunables.texi | 2 +-
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/manual/memory.texi b/manual/memory.texi
index 28ec2e4e63..31ee36be8c 100644
--- a/manual/memory.texi
+++ b/manual/memory.texi
@@ -1364,11 +1364,11 @@ The block was already freed.
Another possibility to check for and guard against bugs in the use of
@code{malloc}, @code{realloc} and @code{free} is to set the environment
variable @code{MALLOC_CHECK_}. When @code{MALLOC_CHECK_} is set to a
-non-zero value, a special (less efficient) implementation is used which
-is designed to be tolerant against simple errors, such as double calls
-of @code{free} with the same argument, or overruns of a single byte
-(off-by-one bugs). Not all such errors can be protected against,
-however, and memory leaks can result.
+non-zero value less than 4, a special (less efficient) implementation is
+used which is designed to be tolerant against simple errors, such as
+double calls of @code{free} with the same argument, or overruns of a
+single byte (off-by-one bugs). Not all such errors can be protected
+against, however, and memory leaks can result.
Any detected heap corruption results in immediate termination of the
process.
diff --git a/manual/tunables.texi b/manual/tunables.texi
index d5d957fb5b..ebdb562e36 100644
--- a/manual/tunables.texi
+++ b/manual/tunables.texi
@@ -115,7 +115,7 @@ following tunables in the @code{malloc} namespace:
This tunable supersedes the @env{MALLOC_CHECK_} environment variable and is
identical in features.
-Setting this tunable to a non-zero value enables a special (less
+Setting this tunable to a non-zero value less than 4 enables a special (less
efficient) memory allocator for the @code{malloc} family of functions that is
designed to be tolerant against simple errors such as double calls of
free with the same argument, or overruns of a single byte (off-by-one
</cut>