| /* |
| 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 |
| */ |
| GROUP ( /shared.so-x86-64 ) |