llvm-project/llvm/test/tools/dsymutil/X86/dead-stripped.cpp
Adrian Prantl 7bc1b28291 llvm-dwarfdump: Replace -debug-dump=sect option with individual options.
As discussed on llvm-dev in
http://lists.llvm.org/pipermail/llvm-dev/2017-September/117301.html
this changes the command line interface of llvm-dwarfdump to match the
one used by the dwarfdump utility shipping on macOS. In addition to
being shorter to type this format also has the advantage of allowing
more than one section to be specified at the same time.

In a nutshell, with this change

  $ llvm-dwarfdump --debug-dump=info
  $ llvm-dwarfdump --debug-dump=apple-objc

becomes

  $ dwarfdump --debug-info --apple-objc

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

llvm-svn: 312970
2017-09-11 22:59:45 +00:00

49 lines
1.4 KiB
C++

// RUN: llvm-dsymutil -f -y %p/dummy-debug-map.map -oso-prepend-path %p/../Inputs/dead-stripped -o - | llvm-dwarfdump - --debug-info | FileCheck %s
// The test was compiled with:
// clang++ -O2 -g -c dead-strip.cpp -o 1.o
// The goal of the test is to exercise dsymutil's behavior in presence of
// functions/variables that have been dead-stripped by the linker but
// that are still present in the linked debug info (in this case because
// they have been DW_TAG_import'd in another namespace).
// Everything in the N namespace bellow doesn't have a debug map entry, and
// thus is considered dead (::foo() has a debug map entry, otherwse dsymutil
// would just drop the CU altogether).
namespace N {
int blah = 42;
// This is actually a dsymutil-classic bug that we reproduced
// CHECK: DW_TAG_variable
// CHECK-NOT: DW_TAG
// CHECK: DW_AT_location
__attribute__((always_inline)) int foo() { return blah; }
// CHECK: DW_TAG_subprogram
// CHECK-NOT: DW_AT_low_pc
// CHECK-NOT: DW_AT_high_pc
// CHECK: DW_AT_frame_base
// CHECK: DW_TAG_subprogram
int bar(unsigned i) {
int val = foo();
if (i)
return val + bar(i-1);
return foo();
}
// CHECK: DW_TAG_subprogram
// CHECK-NOT: DW_AT_low_pc
// CHECK-NOT: DW_AT_high_pc
// CHECK: DW_AT_frame_base
// CHECK-NOT: DW_AT_location
// CHECK-NOT: DW_AT_low_pc
// CHECK-NOT: DW_AT_high_pc
}
// CHECK: TAG_imported_module
using namespace N;
void foo() {}