xref: /illumos-gate/usr/src/test/elf-tests/tests/resolution/mixed-hidden-comdat/README.md (revision b8052df9f609edb713f6828c9eecc3d7be19dfb3)
1This is a test that COMDAT sections with differing visibilities get resolved
2to the most restrictive visibility, by the usual rules of symbol
3resolution.
4
5The GNU compiler, or build systems which use `-fvisibility*` inconsistently
6often emit technically incorrect COMDAT sections where by the sections are not
7strictly equivalent because they differ in visibility.  This tests that we
8resolve, and resolve them to the most restrictive visibility as the compiler
9expects.
10
11We do this...
12
13- `visible.s`
14	defines our two COMDAT symbols/sections (`data_symbol` and `bss_symbol`)
15	with default visibility
16
17- `hidden.s`
18	defines our two COMDAT symbols/sections (`data_symbol` and
19	`bss_symbol`) with hidden visibility
20
21- `access.S`
22	provides access to our data using relocations we control,
23	just in case
24
25- `main.c`
26	an actual test wrapper that just checks the values of the
27	data
28
29- `Makefile.test`
30	A Makefile to build the tests on the system under test
31
32...and check that the resulting `test` binary links and runs.
33
34For an added check we intentionally break the COMDAT rules ourselves, and know
35a little bit about the link-editor implementation.  `hidden.s` and `visible.s`
36give `data_symbol` _different values_.  We know based on the link-editor
37implementation that the first section seen will be the one taken by the
38link-editor, so we check for the value from `data.s`, but implicitly rely on the
39_visibility_ from `hidden.s` to link.  Proving to ourselves that the visibility
40came from symbol resolution and not any other means.
41