[llvm-commits] [llvm] r167269 - /llvm/trunk/runtime/libprofile/CommonProfiling.c

Alastair Murray alastairmurray42 at gmail.com
Thu Nov 1 18:49:39 PDT 2012


Hi Takumi,

Sorry, I didn't realise that it was meant to be C89.  Thank you for 
fixing it.

Manman: Thank you for committing it!

Regards,
Alastair,

On 01/11/12 21:33, NAKAMURA Takumi wrote:
> 2012/11/2 Manman Ren <mren at apple.com>:
>> Author: mren
>> Date: Thu Nov  1 20:10:15 2012
>> New Revision: 167269
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=167269&view=rev
>> Log:
>> PGO: allows the profile data file name to be specified by the LLVMPROF_OUTPUT
>> environment variable.
>>
>> This allows parallel make for profiling code, without it there are file
>> collisions as each parallel run uses the default file name.
>>
>> There is already code in the runtime library to specify the output file name
>> via the command line, but this only works for programs which already process
>> argc/argv.  This patch builds on that support.
>>
>> Patch by Alastair Murray.
>>
>> Modified:
>>      llvm/trunk/runtime/libprofile/CommonProfiling.c
>>
>> Modified: llvm/trunk/runtime/libprofile/CommonProfiling.c
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/runtime/libprofile/CommonProfiling.c?rev=167269&r1=167268&r2=167269&view=diff
>> ==============================================================================
>> --- llvm/trunk/runtime/libprofile/CommonProfiling.c (original)
>> +++ llvm/trunk/runtime/libprofile/CommonProfiling.c Thu Nov  1 20:10:15 2012
>> @@ -28,14 +28,35 @@
>>
>>   static char *SavedArgs = 0;
>>   static unsigned SavedArgsLength = 0;
>> +static const char *SavedEnvVar = 0;
>>
>>   static const char *OutputFilename = "llvmprof.out";
>>
>> +/* check_environment_variable - Check to see if the LLVMPROF_OUTPUT environment
>> + * variable is set.  If it is then save it and set OutputFilename.
>> + */
>> +static void check_environment_variable(void) {
>> +  if (SavedEnvVar) return; /* Guarantee that we can't leak memory. */
>> +
>> +  const char *EnvVar = getenv("LLVMPROF_OUTPUT");
>
> It's not C89 compliant. Fixed in r167272.
>
>> +  if (EnvVar) {
>> +    /* The string that getenv returns is allowed to be statically allocated,
>> +     * which means it may be changed by future calls to getenv, so copy it.
>> +     */
>> +    SavedEnvVar = strdup(EnvVar);
>> +    OutputFilename = SavedEnvVar;
>> +  }
>> +}
>> +
>>   /* save_arguments - Save argc and argv as passed into the program for the file
>>    * we output.
>> + * If either the LLVMPROF_OUTPUT environment variable or the -llvmprof-output
>> + * command line argument are set then change OutputFilename to the provided
>> + * value.  The command line argument value overrides the environment variable.
>>    */
>>   int save_arguments(int argc, const char **argv) {
>>     unsigned Length, i;
>> +  if (!SavedEnvVar && !SavedArgs) check_environment_variable();
>>     if (SavedArgs || !argv) return argc;  /* This can be called multiple times */
>>
>>     /* Check to see if there are any arguments passed into the program for the
>> @@ -54,6 +75,7 @@
>>           puts("-llvmprof-output requires a filename argument!");
>>         else {
>>           OutputFilename = strdup(argv[1]);
>> +        if (SavedEnvVar) { free((void *)SavedEnvVar); SavedEnvVar = 0; }
>>           memmove((char**)&argv[1], &argv[2], (argc-1)*sizeof(char*));
>>           --argc;
>>         }
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>




More information about the llvm-commits mailing list