mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-22 19:49:49 +00:00
In GCC 4.7, function names are now forbidden from .gcda files. Support this by
passing a null pointer to the function name in to GCDAProfiling, and add another switch onto GCOVProfiling. llvm-svn: 176173
This commit is contained in:
parent
c5554019e1
commit
7f68cef53a
@ -34,7 +34,8 @@ ModulePass *createPathProfilerPass();
|
||||
ModulePass *createGCOVProfilerPass(bool EmitNotes = true, bool EmitData = true,
|
||||
bool Use402Format = false,
|
||||
bool UseExtraChecksum = false,
|
||||
bool NoRedZone = false);
|
||||
bool NoRedZone = false,
|
||||
bool NoFunctionNamesInData = false);
|
||||
|
||||
// Insert AddressSanitizer (address sanity checking) instrumentation
|
||||
FunctionPass *createAddressSanitizerFunctionPass(
|
||||
|
@ -45,14 +45,16 @@ namespace {
|
||||
static char ID;
|
||||
GCOVProfiler()
|
||||
: ModulePass(ID), EmitNotes(true), EmitData(true), Use402Format(false),
|
||||
UseExtraChecksum(false), NoRedZone(false) {
|
||||
UseExtraChecksum(false), NoRedZone(false),
|
||||
NoFunctionNamesInData(false) {
|
||||
initializeGCOVProfilerPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
GCOVProfiler(bool EmitNotes, bool EmitData, bool use402Format,
|
||||
bool useExtraChecksum, bool NoRedZone_)
|
||||
GCOVProfiler(bool EmitNotes, bool EmitData, bool Use402Format,
|
||||
bool UseExtraChecksum, bool NoRedZone,
|
||||
bool NoFunctionNamesInData)
|
||||
: ModulePass(ID), EmitNotes(EmitNotes), EmitData(EmitData),
|
||||
Use402Format(use402Format), UseExtraChecksum(useExtraChecksum),
|
||||
NoRedZone(NoRedZone_) {
|
||||
Use402Format(Use402Format), UseExtraChecksum(UseExtraChecksum),
|
||||
NoRedZone(NoRedZone), NoFunctionNamesInData(NoFunctionNamesInData) {
|
||||
assert((EmitNotes || EmitData) && "GCOVProfiler asked to do nothing?");
|
||||
initializeGCOVProfilerPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
@ -100,6 +102,7 @@ namespace {
|
||||
bool Use402Format;
|
||||
bool UseExtraChecksum;
|
||||
bool NoRedZone;
|
||||
bool NoFunctionNamesInData;
|
||||
|
||||
Module *M;
|
||||
LLVMContext *Ctx;
|
||||
@ -113,9 +116,10 @@ INITIALIZE_PASS(GCOVProfiler, "insert-gcov-profiling",
|
||||
ModulePass *llvm::createGCOVProfilerPass(bool EmitNotes, bool EmitData,
|
||||
bool Use402Format,
|
||||
bool UseExtraChecksum,
|
||||
bool NoRedZone) {
|
||||
bool NoRedZone,
|
||||
bool NoFunctionNamesInData) {
|
||||
return new GCOVProfiler(EmitNotes, EmitData, Use402Format, UseExtraChecksum,
|
||||
NoRedZone);
|
||||
NoRedZone, NoFunctionNamesInData);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@ -664,7 +668,9 @@ void GCOVProfiler::insertCounterWriteout(
|
||||
intptr_t ident = reinterpret_cast<intptr_t>(I->second);
|
||||
Builder.CreateCall2(EmitFunction,
|
||||
Builder.getInt32(ident),
|
||||
Builder.CreateGlobalStringPtr(SP.getName()));
|
||||
NoFunctionNamesInData ?
|
||||
Constant::getNullValue(Builder.getInt8PtrTy()) :
|
||||
Builder.CreateGlobalStringPtr(SP.getName()));
|
||||
|
||||
GlobalVariable *GV = I->first;
|
||||
unsigned Arcs =
|
||||
|
@ -162,17 +162,22 @@ void llvm_gcda_increment_indirect_counter(uint32_t *predecessor,
|
||||
|
||||
void llvm_gcda_emit_function(uint32_t ident, const char *function_name) {
|
||||
#ifdef DEBUG_GCDAPROFILING
|
||||
printf("llvmgcda: function id=%x\n", ident);
|
||||
printf("llvmgcda: function id=%x name=%s\n", ident,
|
||||
function_name ? function_name : "NULL");
|
||||
#endif
|
||||
if (!output_file) return;
|
||||
|
||||
/* function tag */
|
||||
fwrite("\0\0\0\1", 4, 1, output_file);
|
||||
write_int32(3 + 1 + length_of_string(function_name));
|
||||
uint32_t len = 3;
|
||||
if (function_name)
|
||||
len += 1 + length_of_string(function_name);
|
||||
write_int32(len);
|
||||
write_int32(ident);
|
||||
write_int32(0);
|
||||
write_int32(0);
|
||||
write_string(function_name);
|
||||
if (function_name)
|
||||
write_string(function_name);
|
||||
}
|
||||
|
||||
void llvm_gcda_emit_arcs(uint32_t num_counters, uint64_t *counters) {
|
||||
|
Loading…
Reference in New Issue
Block a user