[roll] Roll fuchsia [ld] RemotePerfectSymbolFilter

This builds on the <lib/elfldltl/perfect-symbol-table.h> API to
provide a full, integrated solution for static symbol allow-lists
to use with the <lib/ld/remote-dynamic-linker.h> API.

The new <lib/ld/remote-perfect-symbol-filter.h> header is used by
the perfect_symbol_filter() GN template to automate defining a
function of generated code that encapsulates a symbol list.  The
template also generates an IFS file and linking stub for the
shared-library ABI that a module so filtered will export.

The generated function is a template that can be instantiated for
multiple ELF formats, e.g. to support loading both Elf64 (LP64)
and Elf32 (ILP32).  Instantiating for Elf32 to test this turned
up a handful of places where there was incorrect or missing use
of template parameters to make the Elf32 instantiation compile.

ld::RemoteDecodedModule no longer checks the e_machine field, but
stores it--any ELF file in the right format will be decoded,
regardless of its e_machine.  Cross-linking can be allowed by
ld::RemoteDynamicLinker:Init with an optional new argument to
specify a different machine or to not check at all.

To enable testing Elf32, test modules are now built for
armv7-linux-gnu.  This entailed completing a port of the (Linux)
startup dynamic linker to AArch32, though this is not yet tested
at runtime.  Only the small bits of assembly code needed for each
machine's dynamic linker and test executable entry points had to
be added.  Two additional mangled symbol names were needed in the
trivial-allocator stub delete implementations for the difference
in the normalization of size_t in signatures between machines.

Also in aid of easing the testing, generated_ifs_file() is
enhanced to allow plain strings as shorthand for the most common
case of STB_GLOBAL, STT_FUNC symbols.

Original-Bug: 326524302
Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1156973
Original-Revision: ba261031189259d6c604d45dd80a9f587e9ee9e8
GitOrigin-RevId: 368c1c85fb95b332df89ca17e71b7c25e1b0dac1
Change-Id: Ic4b11529f4c0ec477dcb529c54ab75981d993557
1 file changed
tree: b68d94458b443c8dde1f4cc05da2592fd2fae93a
  1. ctf/
  2. git-hooks/
  3. infra/
  4. third_party/
  5. cts
  6. firmware
  7. flower
  8. jiri.lock
  9. MILESTONE
  10. minimal
  11. prebuilts
  12. README.md
  13. stem
  14. test_durations
  15. toolchain
README.md

Integration

This repository contains Fuchsia's Global Integration manifest files.

Making changes

All changes should be made to the internal version of this repository. Our infrastructure automatically updates this version when the internal one changes.

Currently all changes must be made by a Google employee. Non-Google employees wishing to make a change can ask for assistance in one of the communication channels documented at get involved.

Obtaining the source

First install Jiri.

Next run:

$ jiri init
$ jiri import minimal https://fuchsia.googlesource.com/integration
$ jiri update

Third party

Third party projects should have their own subdirectory in ./third_party.