[dl] Support RTLD_GLOBAL

This CL supports the RTLD_GLOBAL flag with dlopen(). The root
RuntimeModule and all its dependencies (either previously loaded or new
to the session) are marked as global when dlopen-ed with this flag.

This action may rearrange the "global load order" of modules: that is,
the order in which modules loaded with RTLD_GLOBAL are kept in the
dynamic linker's modules_ list.

This CL does not yet include global modules in symbol resolution, but
tests are introduced to test the following behavior in regards to how
global modules relate to load order:

- Promote previously loaded module and all its deps to become global.
- Promoting a previously loaded module to a global module can change the
  "global load order" of modules
- Calling dlopen(RTLD_GLOBAL) multiple times on a module will not change
  the "global load order".
- Calling dlopen(RTLD_GLOBAL) with previously loaded global modules will
  not change the "global load order".

A forthcoming CL will include global modules in symbol relocations and
tests will be enabled then.

Bug: 338233824
Cq-Include-Trybots: luci.turquoise.global.try:run-postsubmit-tryjobs
Change-Id: I6a21146c48cdd82983cc7bb19040ac8954fe512a
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1124721
Fuchsia-Auto-Submit: Caslyn Tonelli <caslyn@google.com>
Commit-Queue: Auto-Submit <auto-submit@fuchsia-infra.iam.gserviceaccount.com>
Reviewed-by: Roland McGrath <mcgrathr@google.com>
5 files changed
tree: 95de70d437f521befd927c717aac1c630dc304a2
  1. boards/
  2. build/
  3. bundles/
  4. docs/
  5. examples/
  6. infra/
  7. products/
  8. scripts/
  9. sdk/
  10. src/
  11. third_party/
  12. tools/
  13. zircon/
  14. .clang-format
  15. .clang-tidy
  16. .editorconfig
  17. .git-blame-ignore-revs
  18. .gitattributes
  19. .gitignore
  20. .gitmodules
  21. .gn
  22. .ignore
  23. analysis_options.yaml
  24. AUTHORS
  25. BUILD.gn
  26. CODE_OF_CONDUCT.md
  27. CONTRIBUTING.md
  28. fuchsia.code-workspace
  29. LICENSE
  30. OWNERS
  31. PATENTS
  32. pyproject.toml
  33. pyrightconfig.json
  34. README.md
  35. rustfmt.toml
  36. shac.star
  37. shac.textproto
README.md

Fuchsia

What is Fuchsia?

Fuchsia is an open source, general purpose operating system supporting modern 64-bit Intel and ARM processors.

We expect everyone interacting with our project to respect our code of conduct.

Read more about Fuchsia's principles.

How can I build and run Fuchsia?

See Getting Started.

Where can I learn more about Fuchsia?

See fuchsia.dev.