mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
691c156cc8
This is similar to D83530, but for llvm-objdump. The motivation is the desire to add an `llvm-otool` symlink to llvm-objdump that behaves like macOS's `otool`, using the same technique the at llvm-objcopy uses to behave like `strip` (etc). This change for the most part preserves behavior. In some cases, it increases compatibility with GNU objdump a bit. For example, the long options now require two dashes, and the long options taking arguments for the most part now require a `=` in front of the value. Exceptions are flags where tests passed the value separately, for these the separate form is kept as an alias to the = form. The one-letter short form args are now joined or separate and long longer accept a =, which also matches GNU objdump. cl::opt<>s in libraries now have to be explicitly plumbed through. This patch does that for --x86-asm-syntax=, but there's hope that we can remove that again. Differential Revision: https://reviews.llvm.org/D100433
92 lines
5.0 KiB
Plaintext
92 lines
5.0 KiB
Plaintext
;; Test --prefix option.
|
|
|
|
;; Separators change from platform to platform. In POSIX the full path for the
|
|
;; directory './Inputs' appended with the file 'source-interleave-x86_64.c' is
|
|
;; './Inputs/source-interleave-x86_64.c'. For Windows it is
|
|
;; './Inputs\source-interleave-x86_64.c'. Platform specific tests are needed
|
|
;; since '\' may or may not be a separator.
|
|
|
|
;; Test prefix option ignored for relative paths.
|
|
;; For the test below it is possible to accept both '/' and '\' as a separator.
|
|
|
|
; RUN: sed -e "s,SRC_COMPDIR,./Inputs,g" %p/Inputs/source-interleave.ll > %t-relative-path.ll
|
|
; RUN: llc -o %t-relative-path.o -filetype=obj -mtriple=x86_64-pc-linux %t-relative-path.ll
|
|
; RUN: llvm-objdump --prefix myprefix --source %t-relative-path.o 2>&1 | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-BROKEN-PREFIX -DFILE=%t-relative-path.o -DPREFIX=. -DCOMPDIR=/Inputs
|
|
; CHECK-BROKEN-PREFIX: warning: '[[FILE]]': failed to find source [[PREFIX]][[COMPDIR]]{{[/\\]}}source-interleave-x86_64.c
|
|
|
|
;; Test invalid source interleave fixed by adding the correct prefix.
|
|
|
|
; RUN: sed -e "s,SRC_COMPDIR,/Inputs,g" %p/Inputs/source-interleave.ll > %t-missing-prefix.ll
|
|
; RUN: llc -o %t-missing-prefix.o -filetype=obj -mtriple=x86_64-pc-linux %t-missing-prefix.ll
|
|
; RUN: llvm-objdump --prefix %p --source %t-missing-prefix.o 2>&1 | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-MISSING-PREFIX-FIX
|
|
; CHECK-MISSING-PREFIX-FIX: ; int foo() {
|
|
|
|
;; Test valid source interleave broken by adding an incorrect prefix.
|
|
|
|
; RUN: sed -e "s,SRC_COMPDIR,%/p/Inputs,g" %p/Inputs/source-interleave.ll > %t-correct-prefix.ll
|
|
; RUN: llc -o %t-correct-prefix.o -filetype=obj -mtriple=x86_64-pc-linux %t-correct-prefix.ll
|
|
; RUN: llvm-objdump --prefix myprefix --source %t-correct-prefix.o 2>&1 | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-BROKEN-PREFIX -DFILE=%t-correct-prefix.o -DPREFIX=myprefix%/p -DCOMPDIR=/Inputs
|
|
|
|
;; Using only a prefix separator is the same as not using the `--prefix` option.
|
|
|
|
; RUN: llvm-objdump --prefix / --source %t-missing-prefix.o 2>&1 | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-BROKEN-PREFIX -DFILE=%t-missing-prefix.o -DPREFIX='' -DCOMPDIR=/Inputs
|
|
|
|
;; All trailing separators on the prefix are discarded.
|
|
;; The prefix 'myprefix//' is converted to 'myprefix'.
|
|
|
|
; RUN: llvm-objdump --prefix myprefix// --source %t-missing-prefix.o 2>&1 | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-BROKEN-PREFIX -DFILE=%t-missing-prefix.o -DPREFIX=myprefix -DCOMPDIR=/Inputs
|
|
|
|
;; Test invalid source interleave fixed by adding the correct prefix and
|
|
;; stripping out an extra directory from the path.
|
|
|
|
; RUN: sed -e "s,SRC_COMPDIR,/extra/Inputs,g" %p/Inputs/source-interleave.ll > %t-extra-path-prefix.ll
|
|
; RUN: llc -o %t-extra-path-prefix.o -filetype=obj -mtriple=x86_64-pc-linux %t-extra-path-prefix.ll
|
|
; RUN: llvm-objdump --prefix %p --prefix-strip 1 --source %t-extra-path-prefix.o 2>&1 | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-MISSING-PREFIX-FIX
|
|
|
|
;; Test do not skip extra separators. The --prefix-strip should take into
|
|
;; account each separator individually. Hence, to fix '/extra/Inputs'
|
|
;; --prefix-strip needs to be 1. To fix '//extra/Inputs' --prefix-strip
|
|
;; needs to be 2.
|
|
|
|
; RUN: sed -e "s,SRC_COMPDIR,//extra/Inputs,g" %p/Inputs/source-interleave.ll > %t-extra-sep-path-prefix.ll
|
|
; RUN: llc -o %t-extra-sep-path-prefix.o -filetype=obj -mtriple=x86_64-pc-linux %t-extra-sep-path-prefix.ll
|
|
; RUN: llvm-objdump --prefix %p --prefix-strip 2 --source %t-extra-sep-path-prefix.o 2>&1 | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-MISSING-PREFIX-FIX
|
|
|
|
;; Test --prefix-strip value of 0. No effect.
|
|
;; SRC_COMPDIR is set to '/Inputs' before and after --prefix-strip 0.
|
|
|
|
; RUN: llvm-objdump --prefix %p --prefix-strip 0 --source %t-missing-prefix.o 2>&1 | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-MISSING-PREFIX-FIX
|
|
|
|
;; Test --prefix-strip value equal to the number of directory components.
|
|
;; SRC_COMPDIR is set to '/Inputs' before --prefix-strip 1.
|
|
;; SRC_COMPDIR becomes '' after --prefix-strip 1.
|
|
|
|
; RUN: llvm-objdump --prefix %p/Inputs --prefix-strip 1 --source %t-missing-prefix.o 2>&1 | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-MISSING-PREFIX-FIX
|
|
|
|
;; Test --prefix-strip value greater than the number of components.
|
|
;; SRC_COMPDIR is set to '/Inputs' before --prefix-strip 2.
|
|
;; SRC_COMPDIR becomes '' after --prefix-strip 2.
|
|
|
|
; RUN: llvm-objdump --prefix %p/Inputs --prefix-strip 2 --source %t-missing-prefix.o 2>&1 | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-MISSING-PREFIX-FIX
|
|
|
|
;; Test negative value --prefix-strip. Reports an error.
|
|
|
|
; RUN: not llvm-objdump --prefix %p --prefix-strip '-1' --source %t-missing-prefix.o 2>&1 | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-INVALID-PREFIX-STRIP -DOPTION='-1'
|
|
; CHECK-INVALID-PREFIX-STRIP: {{.*}}llvm-objdump{{.*}}: error: --prefix-strip: expected a non-negative integer, but got '[[OPTION]]'
|
|
|
|
;; Test text value --prefix-strip. Reports an error.
|
|
|
|
; RUN: not llvm-objdump --prefix %p --prefix-strip foo --source %t-missing-prefix.o 2>&1 | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-INVALID-PREFIX-STRIP -DOPTION='foo'
|