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
49 lines
1.4 KiB
C++
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() {}
|