3 # The following command will:
4 # 1. dump the symbols of a library using `nm`
5 # 2. extract only those lines that we are interested in via `grep`
6 # 3. from those lines, extract just the symbol name via `sed`, which:
7 # * always starts with "_ZN" and ends with "E" (`legacy` mangling)
8 # * always starts with "_R" (`v0` mangling)
9 # 4. sort those symbol names for deterministic comparison
10 # 5. write the result into a file
12 dump-symbols = nm "$(TMPDIR)/lib$(1).rlib" \
14 | sed -E "s/.*(_ZN.*E|_R[a-zA-Z0-9_]*).*/\1/" \
16 > "$(TMPDIR)/$(1)$(3).nm"
19 # - compiles each of the two crates 2 times and makes sure each time we get
20 # exactly the same symbol names
21 # - makes sure that both crates agree on the same symbol names for monomorphic
25 $(RUSTC) stable-symbol-names1.rs
26 $(call dump-symbols,stable_symbol_names1,generic_|mono_,_v1)
27 rm $(TMPDIR)/libstable_symbol_names1.rlib
28 $(RUSTC) stable-symbol-names1.rs
29 $(call dump-symbols,stable_symbol_names1,generic_|mono_,_v2)
30 cmp "$(TMPDIR)/stable_symbol_names1_v1.nm" "$(TMPDIR)/stable_symbol_names1_v2.nm"
32 $(RUSTC) stable-symbol-names2.rs
33 $(call dump-symbols,stable_symbol_names2,generic_|mono_,_v1)
34 rm $(TMPDIR)/libstable_symbol_names2.rlib
35 $(RUSTC) stable-symbol-names2.rs
36 $(call dump-symbols,stable_symbol_names2,generic_|mono_,_v2)
37 cmp "$(TMPDIR)/stable_symbol_names2_v1.nm" "$(TMPDIR)/stable_symbol_names2_v2.nm"
39 $(call dump-symbols,stable_symbol_names1,mono_,_cross)
40 $(call dump-symbols,stable_symbol_names2,mono_,_cross)
41 cmp "$(TMPDIR)/stable_symbol_names1_cross.nm" "$(TMPDIR)/stable_symbol_names2_cross.nm"