Skip to content

Commit 335ac41

Browse files
Improve readability of "undefined reference" message (#82671)
The current message implies a command line flag caused an undefined reference. This of course is wrong and causes confusion. The message now more accurately reflects the true state of affairs.
1 parent f4fad82 commit 335ac41

File tree

4 files changed

+13
-12
lines changed

4 files changed

+13
-12
lines changed

lld/ELF/Writer.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2057,8 +2057,9 @@ template <class ELFT> void Writer<ELFT>::finalizeSections() {
20572057
if (sym->dsoDefined)
20582058
continue;
20592059
if (sym->isUndefined() && !sym->isWeak()) {
2060-
diagnose("undefined reference due to --no-allow-shlib-undefined: " +
2061-
toString(*sym) + "\n>>> referenced by " + toString(file));
2060+
diagnose("undefined reference: " + toString(*sym) +
2061+
"\n>>> referenced by " + toString(file) +
2062+
" (disallowed by --no-allow-shlib-undefined)");
20622063
} else if (sym->isDefined() && sym->computeBinding() == STB_LOCAL) {
20632064
diagnose("non-exported symbol '" + toString(*sym) + "' in '" +
20642065
toString(sym->file) + "' is referenced by DSO '" +

lld/test/ELF/allow-shlib-undefined.s

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,19 @@
4343
# RUN: ld.lld --gc-sections main.o a.so def.so def-hidden.o --fatal-warnings -o /dev/null
4444

4545
# CHECK-NOT: error:
46-
# CHECK: error: undefined reference due to --no-allow-shlib-undefined: x1{{$}}
47-
# CHECK-NEXT: >>> referenced by a.so{{$}}
46+
# CHECK: error: undefined reference: x1{{$}}
47+
# CHECK-NEXT: >>> referenced by a.so (disallowed by --no-allow-shlib-undefined){{$}}
4848
# CHECK-NOT: {{.}}
4949

5050
# CHECK2-NOT: error:
51-
# CHECK2: error: undefined reference due to --no-allow-shlib-undefined: x1
52-
# CHECK2-NEXT: >>> referenced by a.so
53-
# CHECK2: error: undefined reference due to --no-allow-shlib-undefined: x1
54-
# CHECK2-NEXT: >>> referenced by b.so
51+
# CHECK2: error: undefined reference: x1
52+
# CHECK2-NEXT: >>> referenced by a.so (disallowed by --no-allow-shlib-undefined)
53+
# CHECK2: error: undefined reference: x1
54+
# CHECK2-NEXT: >>> referenced by b.so (disallowed by --no-allow-shlib-undefined)
5555
# CHECK2-NOT: {{.}}
5656

57-
# WARN: warning: undefined reference due to --no-allow-shlib-undefined: x1
58-
# WARN-NEXT: >>> referenced by a.so
57+
# WARN: warning: undefined reference: x1
58+
# WARN-NEXT: >>> referenced by a.so (disallowed by --no-allow-shlib-undefined)
5959

6060
# NONEXPORTED-NOT: error:
6161
# NONEXPORTED: error: non-exported symbol 'x1' in 'def-hidden.o' is referenced by DSO 'a.so'

lld/test/ELF/unresolved-symbols.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
## --unresolved-symbols overrides a previous --allow-shlib-undefined.
3737
# RUN: not ld.lld %t1.o %t.so -o /dev/null --allow-shlib-undefined --unresolved-symbols=ignore-in-object-files 2>&1 | FileCheck %s --check-prefix=SHLIB
3838

39-
# SHLIB: error: undefined reference due to --no-allow-shlib-undefined: undef
39+
# SHLIB: error: undefined reference: undef
4040

4141
## Ignoring undefines in shared should produce error for symbol from object.
4242
# RUN: not ld.lld %t2.o -o /dev/null --unresolved-symbols=ignore-in-shared-libs 2>&1 | \

lld/test/ELF/wrap-shlib-undefined.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
## --no-allow-shlib-undefined errors because __real_foo is not defined.
1919
# RUN: not ld.lld %t/main.o %t/bar.so -o /dev/null 2>&1 | FileCheck --check-prefix=ERR %s
20-
# ERR: error: undefined reference due to --no-allow-shlib-undefined: __real_foo
20+
# ERR: error: undefined reference: __real_foo
2121

2222
## --wrap=foo defines __real_foo.
2323
# RUN: ld.lld %t/main.o %t/bar.so --wrap=foo -o %t2

0 commit comments

Comments
 (0)