passing a null pointer to the function name in to GCDAProfiling, and add another
switch onto GCOVProfiling.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176173
91177308-0d34-0410-b5e6-
96231b3b80d8
ModulePass *createGCOVProfilerPass(bool EmitNotes = true, bool EmitData = true,
bool Use402Format = false,
bool UseExtraChecksum = false,
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(
// Insert AddressSanitizer (address sanity checking) instrumentation
FunctionPass *createAddressSanitizerFunctionPass(
static char ID;
GCOVProfiler()
: ModulePass(ID), EmitNotes(true), EmitData(true), Use402Format(false),
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());
}
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),
: 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());
}
assert((EmitNotes || EmitData) && "GCOVProfiler asked to do nothing?");
initializeGCOVProfilerPass(*PassRegistry::getPassRegistry());
}
bool Use402Format;
bool UseExtraChecksum;
bool NoRedZone;
bool Use402Format;
bool UseExtraChecksum;
bool NoRedZone;
+ bool NoFunctionNamesInData;
Module *M;
LLVMContext *Ctx;
Module *M;
LLVMContext *Ctx;
ModulePass *llvm::createGCOVProfilerPass(bool EmitNotes, bool EmitData,
bool Use402Format,
bool UseExtraChecksum,
ModulePass *llvm::createGCOVProfilerPass(bool EmitNotes, bool EmitData,
bool Use402Format,
bool UseExtraChecksum,
+ bool NoRedZone,
+ bool NoFunctionNamesInData) {
return new GCOVProfiler(EmitNotes, EmitData, Use402Format, UseExtraChecksum,
return new GCOVProfiler(EmitNotes, EmitData, Use402Format, UseExtraChecksum,
+ NoRedZone, NoFunctionNamesInData);
intptr_t ident = reinterpret_cast<intptr_t>(I->second);
Builder.CreateCall2(EmitFunction,
Builder.getInt32(ident),
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 =
GlobalVariable *GV = I->first;
unsigned Arcs =
void llvm_gcda_emit_function(uint32_t ident, const char *function_name) {
#ifdef DEBUG_GCDAPROFILING
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);
#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_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) {
}
void llvm_gcda_emit_arcs(uint32_t num_counters, uint64_t *counters) {