llvm-project/lld/test/elf/group-cmd-search.test

135 lines
4.7 KiB
Plaintext

/*
XFAIL: win32
This test does not pass on Windows because a path starting with
"/" is not considered as an absolute path. (It needs a drive
letter.)
*/
/*
In general the linker scripts's GROUP command works like a pair
of command line options --start-group/--end-group. But there is
a difference in the files look up algorithm.
The --start-group/--end-group commands use a trivial approach:
a) If the path has '-l' prefix, add 'lib' prefix and '.a'/'.so'
suffix and search the path through library search directories.
b) Otherwise, use the path 'as-is'.
The GROUP command implements more compicated approach:
a) If the path has '-l' prefix, add 'lib' prefix and '.a'/'.so'
suffix and search the path through library search directories.
b) If the path does not have '-l' prefix, and sysroot is configured,
and the path starts with the / character, and the script being
processed is located inside the sysroot, search the path under
the sysroot. Otherwise, try to open the path in the current
directory. If it is not found, search through library search
directories.
*/
/*
This link should finish successfully. The --start-group/--end-group
contains an existing absolute path to the file.
RUN: lld -flavor gnu -target x86_64 -shared \
RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
RUN: --start-group %p/Inputs/shared.so-x86-64 --end-group -o %t1
*/
/*
This link should fail with unknown input file format error.
There is no shared.so-x86-64 file in the current directory.
RUN: not \
RUN: lld -flavor gnu -target x86_64 -shared \
RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
RUN: --start-group shared.so-x86-64 --end-group -o %t2
*/
/*
This link should fail with unknown input file format error.
The absolute path /shared.so-x86-64 does not exist and the linker
should not attempt to search it under the sysroot directory.
RUN: not \
RUN: lld -flavor gnu -target x86_64 -shared --sysroot=%p/Inputs \
RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
RUN: --start-group /shared.so-x86-64 --end-group -o %t3
*/
/*
This link should finish successfully. The group-cmd-search-1.ls
script contains "GROUP ( shared.so-x86-64 )" command and the linker
has to search shared.so-x86-64 through the library search paths.
RUN: lld -flavor gnu -target x86_64 -shared \
RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
RUN: %p/Inputs/group-cmd-search-1.ls -o %t4
*/
/*
This link should fail with unknown input file format error.
The group-cmd-search-2.ls script contains GROUP command with
a non-existing absolute path but there is no --sysroot argument.
RUN: not \
RUN: lld -flavor gnu -target x86_64 -shared \
RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
RUN: %p/Inputs/group-cmd-search-2.ls -o %t5
*/
/*
This link should finish successfully. The group-cmd-search-2.ls
script contains GROUP command with an absolute path and the sysroot
directory is provided. The linker has to search the absolute path
under the sysroot directory.
RUN: lld -flavor gnu -target x86_64 -shared --sysroot=%p/Inputs \
RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
RUN: %p/Inputs/group-cmd-search-2.ls -o %t6
*/
/*
This link should finish successfully. The group-cmd-search-2.ls
script contains GROUP command with an absolute path and the sysroot
directory is provided. The linker has to search the absolute path
under the sysroot directory.
RUN: lld -flavor gnu -target x86_64 -shared --sysroot=%p/Inputs/../Inputs \
RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
RUN: %p/Inputs/group-cmd-search-2.ls -o %t6
*/
/*
This link should finish successfully. The group-cmd-search-3.ls
script contains GROUP command with two elements. The first one
has a -l:<path> form and should be found by iterating through
lib dirs and searching the 'path' name exactly. The second element
has a -l<lib name> form and should be found by constructing a full
library name lib<lib name>.a and iterating through lib dirs.
RUN: lld -flavor gnu -target x86_64 -shared \
RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
RUN: %p/Inputs/group-cmd-search-3.ls -o %t8
*/
/*
This link should fail with unknown input file format error.
The linker script from this file contains GROUP with an absolute
path which can be found under provided sysroot directory.
But the linker script itself is not under the sysroot.
RUN: not \
RUN: lld -flavor gnu -target x86_64 -shared --sysroot=%p/Inputs \
RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
RUN: %s -o %t7
*/
/*
RUN: lld -flavor gnu -target x86_64 -shared \
RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
RUN: -l:group-cmd-search-1.ls -o %t9
*/
GROUP ( /shared.so-x86-64 )