user: implement mlibc as the libc, finally.
It's finally done.. Signed-off-by: kaguya <vpshinomiya@protonmail.com>
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
rtld_test_cases = [
|
||||
'dl_iterate_phdr',
|
||||
'dladdr_local',
|
||||
'ld_library_path',
|
||||
'noload-promote',
|
||||
'rtld_next',
|
||||
'soname',
|
||||
'preinit',
|
||||
'destroy1',
|
||||
'destroy2',
|
||||
'scope1',
|
||||
'scope2',
|
||||
'scope3',
|
||||
'scope4',
|
||||
'scope5',
|
||||
'search-order',
|
||||
'tls_align',
|
||||
'relr',
|
||||
'symver',
|
||||
]
|
||||
|
||||
if host_machine.cpu_family() != 'm68k'
|
||||
rtld_test_cases += [
|
||||
'ifunc',
|
||||
'ifunc-dlopen',
|
||||
]
|
||||
endif
|
||||
|
||||
host_libc_rtld_nosan_test_cases = [
|
||||
'preinit',
|
||||
]
|
||||
|
||||
py = import('python').find_installation('python3')
|
||||
|
||||
foreach test_name : rtld_test_cases
|
||||
test_rpath = meson.global_build_root() / 'tests' / 'rtld' / test_name / ''
|
||||
test_rpath += ':$ORIGIN/' # Workaround old and buggy qemu-user on CI
|
||||
|
||||
test_env = []
|
||||
test_link_with = []
|
||||
test_depends = []
|
||||
test_native_env = []
|
||||
test_native_link_with = []
|
||||
test_native_depends = []
|
||||
test_additional_link_args = []
|
||||
test_skipped = false
|
||||
|
||||
# Build the needed DSOs for the test. This sets the variables above.
|
||||
subdir(test_name)
|
||||
|
||||
if test_skipped
|
||||
exec = executable('rtld-' + test_name, ['skipped.c', test_sources],
|
||||
dependencies: libc_dep,
|
||||
override_options: test_override_options,
|
||||
c_args: test_c_args,
|
||||
link_args: test_link_args,
|
||||
)
|
||||
test(test_name, exec, suite: 'rtld')
|
||||
if build_tests_host_libc and not host_libc_excluded_test_cases.contains('rtld' / test_name)
|
||||
test(test_name, exec, suite: ['host-libc', 'rtld'])
|
||||
endif
|
||||
continue
|
||||
endif
|
||||
|
||||
exec = executable('rtld-' + test_name, [test_name / 'test.c', test_sources],
|
||||
link_with: test_link_with,
|
||||
dependencies: libc_dep,
|
||||
build_rpath: test_rpath,
|
||||
override_options: test_override_options,
|
||||
c_args: test_c_args,
|
||||
link_args: test_link_args + test_additional_link_args,
|
||||
)
|
||||
args = [
|
||||
meson.global_source_root() + '/tests/rtld/env.py',
|
||||
test_env,
|
||||
exec,
|
||||
]
|
||||
# wrap the test so we can control the environment variables without meson interfering
|
||||
test(test_name, py, args: args, suite: 'rtld', depends: test_depends)
|
||||
|
||||
if build_tests_host_libc and not host_libc_excluded_test_cases.contains('rtld' / test_name)
|
||||
if test_name in host_libc_rtld_nosan_test_cases
|
||||
host_libc_rtld_sanitize_options = 'b_sanitize=none'
|
||||
else
|
||||
# Don't use ASan here, due to a bug that breaks dlopen() + DT_RUNPATH:
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1449604
|
||||
host_libc_rtld_sanitize_options = 'b_sanitize=undefined'
|
||||
endif
|
||||
|
||||
exec = executable('host-libc-' + test_name, test_name / 'test.c',
|
||||
link_with: test_native_link_with,
|
||||
dependencies: rtlib_deps,
|
||||
build_rpath: test_rpath,
|
||||
override_options: host_libc_rtld_sanitize_options,
|
||||
c_args: ['-D_GNU_SOURCE', '-DUSE_HOST_LIBC'],
|
||||
link_args: ['-ldl'] + test_additional_link_args,
|
||||
native: true,
|
||||
)
|
||||
args = [
|
||||
meson.global_source_root() + '/tests/rtld/env.py',
|
||||
test_native_env,
|
||||
exec,
|
||||
]
|
||||
test(test_name, py, args: args, suite: ['host-libc', 'rtld'], depends: test_native_depends)
|
||||
endif
|
||||
endforeach
|
||||
Reference in New Issue
Block a user