[llvm] 66071f4 - [TLI checker] Update for post-commit review comments

Paul Robinson via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 1 12:35:29 PST 2021


Author: Paul Robinson
Date: 2021-12-01T12:33:54-08:00
New Revision: 66071f440c31b95cb2514a8daa003b62882b8245

URL: https://github.com/llvm/llvm-project/commit/66071f440c31b95cb2514a8daa003b62882b8245
DIFF: https://github.com/llvm/llvm-project/commit/66071f440c31b95cb2514a8daa003b62882b8245.diff

LOG: [TLI checker] Update for post-commit review comments

Ignore undefined symbols; other minor code cleanup.
Replace test objects and their asm source with a yaml equivalent.

Differential Revision: https://reviews.llvm.org/D114478

Added: 
    llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml

Modified: 
    llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp

Removed: 
    llvm/test/tools/llvm-tli-checker/Inputs/ps4-tli-check.right.so
    llvm/test/tools/llvm-tli-checker/Inputs/ps4-tli-check.wrong.so
    llvm/test/tools/llvm-tli-checker/ps4-tli-check.s


################################################################################
diff  --git a/llvm/test/tools/llvm-tli-checker/Inputs/ps4-tli-check.right.so b/llvm/test/tools/llvm-tli-checker/Inputs/ps4-tli-check.right.so
deleted file mode 100644
index bbc5362fe7d53..0000000000000
Binary files a/llvm/test/tools/llvm-tli-checker/Inputs/ps4-tli-check.right.so and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-tli-checker/Inputs/ps4-tli-check.wrong.so b/llvm/test/tools/llvm-tli-checker/Inputs/ps4-tli-check.wrong.so
deleted file mode 100644
index bbf4e3fe509dd..0000000000000
Binary files a/llvm/test/tools/llvm-tli-checker/Inputs/ps4-tli-check.wrong.so and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-tli-checker/ps4-tli-check.s b/llvm/test/tools/llvm-tli-checker/ps4-tli-check.s
deleted file mode 100644
index 70b582e25b986..0000000000000
--- a/llvm/test/tools/llvm-tli-checker/ps4-tli-check.s
+++ /dev/null
@@ -1,291 +0,0 @@
-# REQUIRES: x86-registered-target
-#
-## The object files ps4-tli-checks.right.so and ps4-tli-checks.wrong.so
-## were generated with the following commands:
-## llvm-mc --triple=x86_64-scei-ps4 --filetype=obj ps4-tli-check.s -o t.o
-## ld.lld --shared t.o -o Inputs/ps4-tli-check.right.so
-## llvm-mc --triple=x86_64-scei-ps4 --defsym WRONG=1 --filetype=obj ps4-tli-check.s -o t2.o
-## ld.lld --shared t2.o -o Inputs/ps4-tli-check.wrong.so
-#
-# RUN: llvm-tli-checker --triple=x86_64-scei-ps4 %S/Inputs/ps4-tli-check.right.so | FileCheck %s
-#
-# RUN: echo %S/Inputs/ps4-tli-check.wrong.so > %t2.txt
-# RUN: llvm-tli-checker --triple x86_64-scei-ps4 @%t2.txt | \
-# RUN:     FileCheck %s --check-prefix=WRONG_SUMMARY --check-prefix=WRONG_DETAIL \
-# RUN:     --implicit-check-not="==" --implicit-check-not="<<" --implicit-check-not=">>"
-# RUN: llvm-tli-checker --triple x86_64-scei-ps4 @%t2.txt --report=summary | \
-# RUN:     FileCheck %s --check-prefix=WRONG_SUMMARY \
-# RUN:     --implicit-check-not="==" --implicit-check-not="<<" --implicit-check-not=">>"
-## --separate implies --report=summary.
-# RUN: llvm-tli-checker --triple x86_64-scei-ps4 @%t2.txt --separate | \
-# RUN:     FileCheck %s --check-prefix=WRONG_SUMMARY \
-# RUN:     --implicit-check-not="==" --implicit-check-not="<<" --implicit-check-not=">>"
-#
-# RUN: llvm-tli-checker --triple x86_64-scei-ps4 --dump-tli > %t3.txt
-# RUN: FileCheck %s --check-prefix=AVAIL --input-file %t3.txt
-# RUN: FileCheck %s --check-prefix=UNAVAIL --input-file %t3.txt
-#
-# CHECK: << Total TLI yes SDK no:  0
-# CHECK: >> Total TLI no  SDK yes: 0
-# CHECK: == Total TLI yes SDK yes: 235
-#
-# WRONG_DETAIL: << TLI yes SDK no : '_ZdaPv'
-# WRONG_DETAIL: >> TLI no  SDK yes: '_ZdaPvj'
-# WRONG_SUMMARY: << Total TLI yes SDK no:  1{{$}}
-# WRONG_SUMMARY: >> Total TLI no  SDK yes: 1{{$}}
-# WRONG_SUMMARY: == Total TLI yes SDK yes: 234
-#
-## The -COUNT suffix doesn't care if there are too many matches, so check
-## the exact count first; the two directives should add up to that.
-# AVAIL: TLI knows 466 symbols, 235 available
-# AVAIL-COUNT-235: {{^}} available
-# UNAVAIL-COUNT-231: not available
-
-.macro defname name
-.globl \name
-.type  \name , at function
-\name : nop
-.endm
-
-.text
-# For the WRONG case, omit _ZdaPv and include _ZdaPvj.
-.ifdef WRONG
-defname _ZdaPvj
-.else
-defname _ZdaPv
-.endif
-defname _ZdaPvRKSt9nothrow_t
-defname _ZdaPvSt11align_val_t
-defname _ZdaPvSt11align_val_tRKSt9nothrow_t
-defname _ZdaPvm
-defname _ZdaPvmSt11align_val_t
-defname _ZdlPv
-defname _ZdlPvRKSt9nothrow_t
-defname _ZdlPvSt11align_val_t
-defname _ZdlPvSt11align_val_tRKSt9nothrow_t
-defname _ZdlPvm
-defname _ZdlPvmSt11align_val_t
-defname _Znam
-defname _ZnamRKSt9nothrow_t
-defname _ZnamSt11align_val_t
-defname _ZnamSt11align_val_tRKSt9nothrow_t
-defname _Znwm
-defname _ZnwmRKSt9nothrow_t
-defname _ZnwmSt11align_val_t
-defname _ZnwmSt11align_val_tRKSt9nothrow_t
-defname __cxa_atexit
-defname __cxa_guard_abort
-defname __cxa_guard_acquire
-defname __cxa_guard_release
-defname abs
-defname acos
-defname acosf
-defname acosh
-defname acoshf
-defname acoshl
-defname acosl
-defname aligned_alloc
-defname asin
-defname asinf
-defname asinh
-defname asinhf
-defname asinhl
-defname asinl
-defname atan
-defname atan2
-defname atan2f
-defname atan2l
-defname atanf
-defname atanh
-defname atanhf
-defname atanhl
-defname atanl
-defname atof
-defname atoi
-defname atol
-defname atoll
-defname calloc
-defname cbrt
-defname cbrtf
-defname cbrtl
-defname ceil
-defname ceilf
-defname ceill
-defname clearerr
-defname copysign
-defname copysignf
-defname copysignl
-defname cos
-defname cosf
-defname cosh
-defname coshf
-defname coshl
-defname cosl
-defname exp
-defname exp2
-defname exp2f
-defname exp2l
-defname expf
-defname expl
-defname expm1
-defname expm1f
-defname expm1l
-defname fabs
-defname fabsf
-defname fabsl
-defname fclose
-defname fdopen
-defname feof
-defname ferror
-defname fflush
-defname fgetc
-defname fgetpos
-defname fgets
-defname fileno
-defname floor
-defname floorf
-defname floorl
-defname fmax
-defname fmaxf
-defname fmaxl
-defname fmin
-defname fminf
-defname fminl
-defname fmod
-defname fmodf
-defname fmodl
-defname fopen
-defname fprintf
-defname fputc
-defname fputs
-defname fread
-defname free
-defname frexp
-defname frexpf
-defname frexpl
-defname fscanf
-defname fseek
-defname fsetpos
-defname ftell
-defname fwrite
-defname getc
-defname getchar
-defname gets
-defname isdigit
-defname labs
-defname ldexp
-defname ldexpf
-defname ldexpl
-defname llabs
-defname log
-defname log10
-defname log10f
-defname log10l
-defname log1p
-defname log1pf
-defname log1pl
-defname log2
-defname log2f
-defname log2l
-defname logb
-defname logbf
-defname logbl
-defname logf
-defname logl
-defname malloc
-defname memalign
-defname memchr
-defname memcmp
-defname memcpy
-defname memmove
-defname memset
-defname mktime
-defname modf
-defname modff
-defname modfl
-defname nearbyint
-defname nearbyintf
-defname nearbyintl
-defname perror
-defname posix_memalign
-defname pow
-defname powf
-defname powl
-defname printf
-defname putc
-defname putchar
-defname puts
-defname qsort
-defname realloc
-defname remainder
-defname remainderf
-defname remainderl
-defname remove
-defname rewind
-defname rint
-defname rintf
-defname rintl
-defname round
-defname roundf
-defname roundl
-defname scanf
-defname setbuf
-defname setvbuf
-defname sin
-defname sinf
-defname sinh
-defname sinhf
-defname sinhl
-defname sinl
-defname snprintf
-defname sprintf
-defname sqrt
-defname sqrtf
-defname sqrtl
-defname sscanf
-defname strcasecmp
-defname strcat
-defname strchr
-defname strcmp
-defname strcoll
-defname strcpy
-defname strcspn
-defname strdup
-defname strlen
-defname strncasecmp
-defname strncat
-defname strncmp
-defname strncpy
-defname strpbrk
-defname strrchr
-defname strspn
-defname strstr
-defname strtod
-defname strtof
-defname strtok
-defname strtok_r
-defname strtol
-defname strtold
-defname strtoll
-defname strtoul
-defname strtoull
-defname strxfrm
-defname tan
-defname tanf
-defname tanh
-defname tanhf
-defname tanhl
-defname tanl
-defname trunc
-defname truncf
-defname truncl
-defname ungetc
-defname vfprintf
-defname vfscanf
-defname vprintf
-defname vscanf
-defname vsnprintf
-defname vsprintf
-defname vsscanf
-defname wcslen
-

diff  --git a/llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml b/llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml
new file mode 100644
index 0000000000000..c665049e77841
--- /dev/null
+++ b/llvm/test/tools/llvm-tli-checker/ps4-tli-check.yaml
@@ -0,0 +1,1004 @@
+# REQUIRES: x86-registered-target
+#
+## This produces the object that matches expectations for PS4.
+# RUN: yaml2obj %s -DZDAPV=_ZdaPv -o=%t1
+# RUN: llvm-tli-checker --triple=x86_64-scei-ps4 %t1 | FileCheck %s
+#
+## This produces an object that has _ZdaPvj instead of _ZdaPv.
+# RUN: yaml2obj %s -DZDAPV=_ZdaPvj -o=%t2
+# RUN: echo %t2 > %t2.txt
+# RUN: llvm-tli-checker --triple x86_64-scei-ps4 @%t2.txt | \
+# RUN:     FileCheck %s --check-prefixes=WRONG_SUMMARY,WRONG_DETAIL \
+# RUN:    --implicit-check-not="==" --implicit-check-not="<<" --implicit-check-not=">>"
+#
+# RUN: llvm-tli-checker --triple x86_64-scei-ps4 @%t2.txt --report=summary | \
+# RUN:     FileCheck %s --check-prefix=WRONG_SUMMARY \
+# RUN:     --implicit-check-not="==" --implicit-check-not="<<" --implicit-check-not=">>"
+## --separate implies --report=summary.
+## Also use a response file to show we support that.
+# RUN: llvm-tli-checker --triple x86_64-scei-ps4 @%t2.txt --separate | \
+# RUN:     FileCheck %s --check-prefix=WRONG_SUMMARY \
+# RUN:     --implicit-check-not="==" --implicit-check-not="<<" --implicit-check-not=">>"
+#
+## Verify --dump-tli reports the full set.
+# RUN: llvm-tli-checker --triple x86_64-scei-ps4 --dump-tli > %t3.txt
+# RUN: FileCheck %s --check-prefix=AVAIL --input-file %t3.txt
+# RUN: FileCheck %s --check-prefix=UNAVAIL --input-file %t3.txt
+#
+# CHECK: << Total TLI yes SDK no:  0
+# CHECK: >> Total TLI no  SDK yes: 0
+# CHECK: == Total TLI yes SDK yes: 235
+#
+# WRONG_DETAIL: << TLI yes SDK no : '_ZdaPv' aka operator delete[](void*)
+# WRONG_DETAIL: >> TLI no  SDK yes: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+# WRONG_SUMMARY: << Total TLI yes SDK no:  1{{$}}
+# WRONG_SUMMARY: >> Total TLI no  SDK yes: 1{{$}}
+# WRONG_SUMMARY: == Total TLI yes SDK yes: 234
+#
+## The -COUNT suffix doesn't care if there are too many matches, so check
+## the exact count first; the two directives should add up to that.
+# AVAIL: TLI knows 466 symbols, 235 available
+# AVAIL-COUNT-235: {{^}} available
+# UNAVAIL-COUNT-231: not available
+
+
+--- !ELF
+FileHeader:
+    Class:           ELFCLASS64
+    Data:            ELFDATA2LSB
+    OSABI:           ELFOSABI_FREEBSD
+    Type:            ET_DYN
+    Machine:         EM_X86_64
+Sections:
+  - Name:            .text
+    Type:            SHT_PROGBITS
+DynamicSymbols:
+# This is an undefined symbol that is known to TLI but not in the
+# available set for PS4, showing the tool will ignore undefined symbols.
+# Omitting the Section attribute makes it undefined.
+  - Name:            memcpy_chk
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+# This will be either _ZdaPv or _ZdaPvj (see yaml2obj invocations above).
+  - Name:            [[ZDAPV]]
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+# The rest of these are the remaining symbols needed for PS4.
+  - Name:            _ZdaPvRKSt9nothrow_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZdaPvSt11align_val_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZdaPvSt11align_val_tRKSt9nothrow_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZdaPvm
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZdaPvmSt11align_val_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZdlPv
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZdlPvRKSt9nothrow_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZdlPvSt11align_val_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZdlPvSt11align_val_tRKSt9nothrow_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZdlPvm
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZdlPvmSt11align_val_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _Znam
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZnamRKSt9nothrow_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZnamSt11align_val_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZnamSt11align_val_tRKSt9nothrow_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _Znwm
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZnwmRKSt9nothrow_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZnwmSt11align_val_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            _ZnwmSt11align_val_tRKSt9nothrow_t
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            __cxa_atexit
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            __cxa_guard_abort
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            __cxa_guard_acquire
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            __cxa_guard_release
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            abs
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            acos
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            acosf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            acosh
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            acoshf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            acoshl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            acosl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            aligned_alloc
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            asin
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            asinf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            asinh
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            asinhf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            asinhl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            asinl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            atan
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            atan2
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            atan2f
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            atan2l
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            atanf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            atanh
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            atanhf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            atanhl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            atanl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            atof
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            atoi
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            atol
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            atoll
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            calloc
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            cbrt
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            cbrtf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            cbrtl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            ceil
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            ceilf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            ceill
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            clearerr
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            copysign
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            copysignf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            copysignl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            cos
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            cosf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            cosh
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            coshf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            coshl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            cosl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            exp
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            exp2
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            exp2f
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            exp2l
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            expf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            expl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            expm1
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            expm1f
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            expm1l
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fabs
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fabsf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fabsl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fclose
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fdopen
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            feof
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            ferror
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fflush
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fgetc
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fgetpos
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fgets
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fileno
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            floor
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            floorf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            floorl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fmax
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fmaxf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fmaxl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fmin
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fminf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fminl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fmod
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fmodf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fmodl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fopen
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fprintf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fputc
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fputs
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fread
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            free
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            frexp
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            frexpf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            frexpl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fscanf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fseek
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fsetpos
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            ftell
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            fwrite
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            getc
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            getchar
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            gets
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            isdigit
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            labs
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            ldexp
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            ldexpf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            ldexpl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            llabs
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            log
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            log10
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            log10f
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            log10l
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            log1p
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            log1pf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            log1pl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            log2
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            log2f
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            log2l
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            logb
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            logbf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            logbl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            logf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            logl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            malloc
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            memalign
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            memchr
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            memcmp
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            memcpy
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            memmove
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            memset
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            mktime
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            modf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            modff
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            modfl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            nearbyint
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            nearbyintf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            nearbyintl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            perror
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            posix_memalign
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            pow
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            powf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            powl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            printf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            putc
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            putchar
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            puts
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            qsort
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            realloc
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            remainder
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            remainderf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            remainderl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            remove
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            rewind
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            rint
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            rintf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            rintl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            round
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            roundf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            roundl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            scanf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            setbuf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            setvbuf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            sin
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            sinf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            sinh
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            sinhf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            sinhl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            sinl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            snprintf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            sprintf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            sqrt
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            sqrtf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            sqrtl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            sscanf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strcasecmp
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strcat
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strchr
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strcmp
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strcoll
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strcpy
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strcspn
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strdup
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strlen
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strncasecmp
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strncat
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strncmp
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strncpy
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strpbrk
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strrchr
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strspn
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strstr
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strtod
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strtof
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strtok
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strtok_r
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strtol
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strtold
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strtoll
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strtoul
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strtoull
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            strxfrm
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            tan
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            tanf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            tanh
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            tanhf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            tanhl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            tanl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            trunc
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            truncf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            truncl
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            ungetc
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            vfprintf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            vfscanf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            vprintf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            vscanf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            vsnprintf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            vsprintf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            vsscanf
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+  - Name:            wcslen
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+...

diff  --git a/llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp b/llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp
index bf25efc0b0bdf..4a69f96a597a2 100644
--- a/llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp
+++ b/llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp
@@ -39,7 +39,7 @@ enum ID {
 #include "Opts.inc"
 #undef PREFIX
 
-const opt::OptTable::Info InfoTable[] = {
+static const opt::OptTable::Info InfoTable[] = {
 #define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM,  \
                HELPTEXT, METAVAR, VALUES)                                      \
   {                                                                            \
@@ -55,7 +55,7 @@ class TLICheckerOptTable : public opt::OptTable {
 public:
   TLICheckerOptTable() : OptTable(InfoTable) {}
 };
-} // namespace
+} // end anonymous namespace
 
 // We have three levels of reporting.
 enum class ReportKind {
@@ -66,13 +66,14 @@ enum class ReportKind {
 };
 
 // Most of the ObjectFile interfaces return an Expected<T>, so make it easy
-// to ignore those.
-template <typename T> T unwrapIgnoreError(Expected<T> E) {
+// to ignore errors.
+template <typename T>
+static T unwrapIgnoreError(Expected<T> E, T Default = T()) {
   if (E)
     return std::move(*E);
   // Sink the error and return a nothing value.
   consumeError(E.takeError());
-  return T();
+  return Default;
 }
 
 static void fail(const Twine &Message) {
@@ -99,13 +100,14 @@ static void reportArchiveChildIssue(const object::Archive::Child &C, int Index,
 }
 
 // Return Name, and if Name is mangled, append "aka" and the demangled name.
-static std::string PrintableName(StringRef Name) {
+static std::string getPrintableName(StringRef Name) {
   std::string OutputName = "'";
   OutputName += Name;
   OutputName += "'";
-  if (Name.startswith("_Z") || Name.startswith("??")) {
+  std::string DemangledName(demangle(Name.str()));
+  if (Name != DemangledName) {
     OutputName += " aka ";
-    OutputName += demangle(Name.str());
+    OutputName += DemangledName;
   }
   return OutputName;
 }
@@ -119,7 +121,7 @@ struct TLINameList : std::vector<std::pair<StringRef, bool>> {
   // Print out what we found.
   void dump();
 };
-TLINameList TLINames;
+static TLINameList TLINames;
 
 void TLINameList::initialize(StringRef TargetTriple) {
   Triple T(TargetTriple);
@@ -146,7 +148,7 @@ void TLINameList::dump() {
   // output as a header.  So, for example, no need to repeat the triple.
   for (auto &TLIName : TLINames) {
     outs() << (TLIName.second ? "    " : "not ")
-           << "available: " << PrintableName(TLIName.first) << '\n';
+           << "available: " << getPrintableName(TLIName.first) << '\n';
   }
 }
 
@@ -159,24 +161,27 @@ class SDKNameMap : public StringMap<bool> {
 public:
   void populateFromFile(StringRef LibDir, StringRef LibName);
 };
-SDKNameMap SDKNames;
+static SDKNameMap SDKNames;
 
 // Given an ObjectFile, extract the global function symbols.
 void SDKNameMap::populateFromObject(ObjectFile *O) {
-  // FIXME: Support COFF.
+  // FIXME: Support other formats.
   if (!O->isELF()) {
-    WithColor::warning() << "Only ELF-format files are supported\n";
+    WithColor::warning() << O->getFileName()
+                         << ": only ELF-format files are supported\n";
     return;
   }
-  auto *ELF = cast<const ELFObjectFileBase>(O);
+  const auto *ELF = cast<ELFObjectFileBase>(O);
 
-  for (auto I = ELF->getDynamicSymbolIterators().begin();
-       I != ELF->getDynamicSymbolIterators().end(); ++I) {
-    // We want only global function symbols.
-    SymbolRef::Type Type = unwrapIgnoreError(I->getType());
-    uint32_t Flags = unwrapIgnoreError(I->getFlags());
-    StringRef Name = unwrapIgnoreError(I->getName());
-    if (Type == SymbolRef::ST_Function && (Flags & SymbolRef::SF_Global))
+  for (auto &S : ELF->getDynamicSymbolIterators()) {
+    // We want only defined global function symbols.
+    SymbolRef::Type Type = unwrapIgnoreError(S.getType());
+    uint32_t Flags = unwrapIgnoreError(S.getFlags());
+    section_iterator Section = unwrapIgnoreError(S.getSection(),
+                                                 /*Default=*/O->section_end());
+    StringRef Name = unwrapIgnoreError(S.getName());
+    if (Type == SymbolRef::ST_Function && (Flags & SymbolRef::SF_Global) &&
+        Section != O->section_end())
       insert({Name, true});
   }
 }
@@ -211,7 +216,7 @@ void SDKNameMap::populateFromFile(StringRef LibDir, StringRef LibName) {
   SmallString<255> Filepath(LibDir);
   sys::path::append(Filepath, LibName);
   if (!sys::fs::exists(Filepath)) {
-    WithColor::warning() << "Could not find '" << StringRef(Filepath) << "'\n";
+    WithColor::warning() << StringRef(Filepath) << ": not found\n";
     return;
   }
   outs() << "\nLooking for symbols in '" << StringRef(Filepath) << "'\n";
@@ -229,13 +234,12 @@ void SDKNameMap::populateFromFile(StringRef LibDir, StringRef LibName) {
   else if (ObjectFile *O = dyn_cast<ObjectFile>(&Binary))
     populateFromObject(O);
   else {
-    WithColor::warning() << "Not an Archive or ObjectFile: '"
-                         << StringRef(Filepath) << "'\n";
+    WithColor::warning() << StringRef(Filepath)
+                         << ": not an archive or object file\n";
     return;
   }
   if (Precount == size())
-    WithColor::warning() << "No symbols found in '" << StringRef(Filepath)
-                         << "'\n";
+    WithColor::warning() << StringRef(Filepath) << ": no symbols found\n";
   else
     outs() << "Found " << size() - Precount << " global function symbols in '"
            << StringRef(Filepath) << "'\n";
@@ -268,10 +272,8 @@ int main(int argc, char *argv[]) {
   }
 
   std::vector<std::string> LibList = Args.getAllArgValues(OPT_INPUT);
-  if (LibList.empty()) {
-    WithColor::error() << "No input files\n";
-    exit(EXIT_FAILURE);
-  }
+  if (LibList.empty())
+    fail("no input files\n");
   StringRef LibDir = Args.getLastArgValue(OPT_libdir_EQ);
   bool SeparateMode = Args.hasArg(OPT_separate);
 
@@ -283,10 +285,8 @@ int main(int argc, char *argv[]) {
                       .Case("discrepancy", ReportKind::Discrepancy)
                       .Case("full", ReportKind::Full)
                       .Default(ReportKind::Error);
-    if (ReportLevel == ReportKind::Error) {
-      WithColor::error() << "invalid option for --report: " << A->getValue();
-      exit(EXIT_FAILURE);
-    }
+    if (ReportLevel == ReportKind::Error)
+      fail(Twine("invalid option for --report: ", StringRef(A->getValue())));
   }
 
   for (size_t I = 0; I < LibList.size(); ++I) {
@@ -330,7 +330,8 @@ int main(int argc, char *argv[]) {
         constexpr char YesNo[2][4] = {"no ", "yes"};
         constexpr char Indicator[4][3] = {"!!", ">>", "<<", "=="};
         outs() << Indicator[Which] << " TLI " << YesNo[TLIHas] << " SDK "
-               << YesNo[SDKHas] << ": " << PrintableName(TLIName.first) << '\n';
+               << YesNo[SDKHas] << ": " << getPrintableName(TLIName.first)
+               << '\n';
       }
     }
 


        


More information about the llvm-commits mailing list