You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
9.1 KiB
189 lines
9.1 KiB
commit b4bbedb1e75737a80bcc3d53d6eef1fbe0b5f4d5 |
|
Author: H.J. Lu <hjl.tools@gmail.com> |
|
Date: Sat Nov 6 14:13:27 2021 -0700 |
|
|
|
dso-ordering-test.py: Put all sources in one directory [BZ #28550] |
|
|
|
Put all sources for DSO sorting tests in the dso-sort-tests-src directory |
|
and compile test relocatable objects with |
|
|
|
$(objpfx)tst-dso-ordering1-dir/tst-dso-ordering1-a.os: $(objpfx)dso-sort-tests-src/tst-dso-ordering1-a.c |
|
$(compile.c) $(OUTPUT_OPTION) |
|
|
|
to avoid random $< values from $(before-compile) when compiling test |
|
relocatable objects with |
|
|
|
$(objpfx)%$o: $(objpfx)%.c $(before-compile); $$(compile-command.c) |
|
compile-command.c = $(compile.c) $(OUTPUT_OPTION) $(compile-mkdep-flags) |
|
compile.c = $(CC) $< -c $(CFLAGS) $(CPPFLAGS) |
|
|
|
for 3 "make -j 28" parallel builds on a machine with 112 cores at the |
|
same time. |
|
|
|
This partially fixes BZ #28550. |
|
|
|
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> |
|
|
|
diff --git a/scripts/dso-ordering-test.py b/scripts/dso-ordering-test.py |
|
index 944ee740527d60fd..bde0406be9da14fc 100644 |
|
--- a/scripts/dso-ordering-test.py |
|
+++ b/scripts/dso-ordering-test.py |
|
@@ -526,9 +526,13 @@ def process_testcase(t): |
|
base_test_name = t.test_name |
|
test_subdir = base_test_name + "-dir" |
|
testpfx = objpfx + test_subdir + "/" |
|
+ test_srcdir = "dso-sort-tests-src/" |
|
+ testpfx_src = objpfx + test_srcdir |
|
|
|
if not os.path.exists(testpfx): |
|
os.mkdir(testpfx) |
|
+ if not os.path.exists(testpfx_src): |
|
+ os.mkdir(testpfx_src) |
|
|
|
def find_objs_not_depended_on(t): |
|
objs_not_depended_on = [] |
|
@@ -595,6 +599,11 @@ def process_testcase(t): |
|
# Print out needed Makefile fragments for use in glibc/elf/Makefile. |
|
module_names = "" |
|
for o in test_descr.objs: |
|
+ rule = ("$(objpfx)" + test_subdir + "/" + test_name |
|
+ + "-" + o + ".os: $(objpfx)" + test_srcdir |
|
+ + test_name + "-" + o + ".c\n" |
|
+ "\t$(compile.c) $(OUTPUT_OPTION)\n") |
|
+ makefile.write (rule) |
|
module_names += " " + test_subdir + "/" + test_name + "-" + o |
|
makefile.write("modules-names +=%s\n" % (module_names)) |
|
|
|
@@ -637,7 +646,7 @@ def process_testcase(t): |
|
# object. This only needs to be done at most once for |
|
# an object name. |
|
if not dep in fake_created: |
|
- f = open(testpfx + test_name + "-" + dep |
|
+ f = open(testpfx_src + test_name + "-" + dep |
|
+ ".FAKE.c", "w") |
|
f.write(" \n") |
|
f.close() |
|
@@ -648,6 +657,12 @@ def process_testcase(t): |
|
% (test_name + "-" + dep + ".FAKE.so", |
|
("$(objpfx)" + test_subdir + "/" |
|
+ test_name + "-" + dep + ".so"))) |
|
+ rule = ("$(objpfx)" + test_subdir + "/" |
|
+ + test_name + "-" + dep + ".FAKE.os: " |
|
+ "$(objpfx)" + test_srcdir |
|
+ + test_name + "-" + dep + ".FAKE.c\n" |
|
+ "\t$(compile.c) $(OUTPUT_OPTION)\n") |
|
+ makefile.write (rule) |
|
makefile.write \ |
|
("modules-names += %s\n" |
|
% (test_subdir + "/" |
|
@@ -687,6 +702,10 @@ def process_testcase(t): |
|
+ test_descr.soname_map['#'] + ".so") |
|
ldflags += (" -Wl,-soname=" + soname) |
|
makefile.write("LDFLAGS-%s = %s\n" % (test_name, ldflags)) |
|
+ rule = ("$(objpfx)" + test_subdir + "/" + test_name + ".o: " |
|
+ "$(objpfx)" + test_srcdir + test_name + ".c\n" |
|
+ "\t$(compile.c) $(OUTPUT_OPTION)\n") |
|
+ makefile.write (rule) |
|
|
|
not_depended_objs = find_objs_not_depended_on(test_descr) |
|
if not_depended_objs: |
|
@@ -745,7 +764,7 @@ def process_testcase(t): |
|
" something_failed=true\n" |
|
"else\n" |
|
" diff -wu ${common_objpfx}elf/%s/%s%s.output \\\n" |
|
- " ${common_objpfx}elf/%s/%s%s.exp\n" |
|
+ " ${common_objpfx}elf/%s%s%s.exp\n" |
|
" if [ $? -ne 0 ]; then\n" |
|
" echo '%sFAIL: %s%s expected output comparison'\n" |
|
" something_failed=true\n" |
|
@@ -753,14 +772,14 @@ def process_testcase(t): |
|
"fi\n" |
|
% (("X" if xfail else ""), test_name, tunable_descr, |
|
test_subdir, test_name, tunable_sfx, |
|
- test_subdir, base_test_name, exp_tunable_sfx, |
|
+ test_srcdir, base_test_name, exp_tunable_sfx, |
|
("X" if xfail else ""), test_name, tunable_descr)) |
|
|
|
# Generate C files according to dependency and calling relations from |
|
# description string. |
|
for obj in test_descr.objs: |
|
src_name = test_name + "-" + obj + ".c" |
|
- f = open(testpfx + src_name, "w") |
|
+ f = open(testpfx_src + src_name, "w") |
|
if obj in test_descr.callrefs: |
|
called_objs = test_descr.callrefs[obj] |
|
for callee in called_objs: |
|
@@ -804,7 +823,7 @@ def process_testcase(t): |
|
f.close() |
|
|
|
# Open C file for writing main program |
|
- f = open(testpfx + test_name + ".c", "w") |
|
+ f = open(testpfx_src + test_name + ".c", "w") |
|
|
|
# if there are some operations in main(), it means we need -ldl |
|
f.write("#include <stdio.h>\n") |
|
@@ -885,7 +904,7 @@ def process_testcase(t): |
|
for obj in test_descr.objs: |
|
src_name = test_name + "-" + obj + ".c" |
|
obj_name = test_name + "-" + obj + ".os" |
|
- run_cmd([build_gcc, "-c", "-fPIC", testpfx + src_name, |
|
+ run_cmd([build_gcc, "-c", "-fPIC", testpfx_src + src_name, |
|
"-o", testpfx + obj_name]) |
|
|
|
obj_processed = {} |
|
@@ -903,10 +922,12 @@ def process_testcase(t): |
|
deps.append(dep + ".FAKE") |
|
if not dep in fake_created: |
|
base_name = testpfx + test_name + "-" + dep |
|
+ src_base_name = (testpfx_src + test_name |
|
+ + "-" + dep) |
|
cmd = [build_gcc, "-Wl,--no-as-needed", |
|
("-Wl,-soname=" + base_name + ".so"), |
|
"-shared", base_name + ".FAKE.c", |
|
- "-o", base_name + ".FAKE.so"] |
|
+ "-o", src_base_name + ".FAKE.so"] |
|
run_cmd(cmd) |
|
fake_created[dep] = True |
|
dso_deps = map(lambda d: testpfx + test_name + "-" + d + ".so", |
|
@@ -932,7 +953,7 @@ def process_testcase(t): |
|
main_deps = map(lambda d: testpfx + test_name + "-" + d + ".so", |
|
deps) |
|
cmd = [build_gcc, "-Wl,--no-as-needed", "-o", testpfx + test_name, |
|
- testpfx + test_name + ".c", "-L%s" % (os.getcwd()), |
|
+ testpfx_src + test_name + ".c", "-L%s" % (os.getcwd()), |
|
"-Wl,-rpath-link=%s" % (os.getcwd())] |
|
if '#' in test_descr.soname_map: |
|
soname = ("-Wl,-soname=" + testpfx + test_name + "-" |
|
@@ -987,14 +1008,14 @@ def process_testcase(t): |
|
sfx = "" |
|
if r[0] != "": |
|
sfx = "-" + r[0].replace("=","_") |
|
- f = open(testpfx + t.test_name + sfx + ".exp", "w") |
|
+ f = open(testpfx_src + t.test_name + sfx + ".exp", "w") |
|
(output, xfail) = r[1] |
|
f.write('%s' % output) |
|
f.close() |
|
|
|
# Create header part of top-level testcase shell script, to wrap execution |
|
# and output comparison together. |
|
- t.sh = open(testpfx + t.test_name + ".sh", "w") |
|
+ t.sh = open(testpfx_src + t.test_name + ".sh", "w") |
|
t.sh.write("#!/bin/sh\n") |
|
t.sh.write("# Test driver for %s, generated by " |
|
"dso-ordering-test.py\n" % (t.test_name)) |
|
@@ -1022,12 +1043,12 @@ def process_testcase(t): |
|
sfx = "" |
|
if r[0] != "": |
|
sfx = "-" + r[0].replace("=","_") |
|
- expected_output_files += " $(objpfx)%s/%s%s.exp" % (test_subdir, |
|
+ expected_output_files += " $(objpfx)%s%s%s.exp" % (test_srcdir, |
|
t.test_name, sfx) |
|
makefile.write \ |
|
- ("$(objpfx)%s.out: $(objpfx)%s/%s.sh%s " |
|
+ ("$(objpfx)%s.out: $(objpfx)%s%s.sh%s " |
|
"$(common-objpfx)support/test-run-command\n" |
|
- % (t.test_name, test_subdir, t.test_name, |
|
+ % (t.test_name, test_srcdir, t.test_name, |
|
expected_output_files)) |
|
makefile.write("\t$(SHELL) $< $(common-objpfx) '$(test-wrapper-env)' " |
|
"'$(run-program-env)' > $@; $(evaluate-test)\n")
|
|
|