about summary refs log tree commit diff
path: root/elf
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2020-04-21 13:28:42 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2020-04-21 15:10:10 -0300
commiteb06601bb4187d8f5a9f55c2d212747869f63fe1 (patch)
tree1f3b3e64ea9fd5a3e55c1736e9ae127c3f6bc7e8 /elf
parent566e10aa7292bacd74d229ca6f2cd9e8c8ba8748 (diff)
downloadglibc-eb06601bb4187d8f5a9f55c2d212747869f63fe1.tar.gz
glibc-eb06601bb4187d8f5a9f55c2d212747869f63fe1.tar.xz
glibc-eb06601bb4187d8f5a9f55c2d212747869f63fe1.zip
elf: Support lld-style link map for librtld.map
GNU ld and gold's -Map include a line like:

  path/to/build/libc_pic.a(check_fds.os)

lld -Map does not have the archive member list, but we can still derive the
members from the following output

             VMA              LMA     Size Align Out     In      Symbol
...
           1a1c0            1a1c0       e2    16         path/to/build/libc_pic.a(check_fds.os):(.text)
Diffstat (limited to 'elf')
-rw-r--r--elf/Makefile3
1 files changed, 2 insertions, 1 deletions
diff --git a/elf/Makefile b/elf/Makefile
index 9b1d58c7ad..6919e53c14 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -514,9 +514,10 @@ $(objpfx)librtld.map: $(objpfx)dl-allobjs.os $(common-objpfx)libc_pic.a
 	rm -f $@.o
 	mv -f $@T $@
 
+# For lld, skip preceding addresses and values before matching the archive and the member.
 $(objpfx)librtld.mk: $(objpfx)librtld.map Makefile
 	LC_ALL=C \
-	sed -n 's@^$(common-objpfx)\([^(]*\)(\([^)]*\.os\)) *.*$$@\1 \2@p' \
+	sed -n 's@^[0-9a-f ]*$(common-objpfx)\([^(]*\)(\([^)]*\.os\)) *.*$$@\1 \2@p' \
 	    $< | \
 	while read lib file; do \
 	  case $$lib in \