2009-11-16 16:32:45 -02:00
/*
* builtin - buildid - list . c
*
* Builtin buildid - list command : list buildids in perf . data
*
* Copyright ( C ) 2009 , Red Hat Inc .
* Copyright ( C ) 2009 , Arnaldo Carvalho de Melo < acme @ redhat . com >
*/
# include "builtin.h"
# include "perf.h"
# include "util/cache.h"
# include "util/debug.h"
# include "util/parse-options.h"
2009-12-11 21:24:02 -02:00
# include "util/session.h"
2009-11-16 16:32:45 -02:00
# include "util/symbol.h"
static char const * input_name = " perf.data " ;
static int force ;
2009-12-18 16:35:58 -02:00
static const char * const buildid_list_usage [ ] = {
2009-12-06 18:03:10 -02:00
" perf buildid-list [<options>] " ,
2009-11-16 16:32:45 -02:00
NULL
} ;
static const struct option options [ ] = {
OPT_STRING ( ' i ' , " input " , & input_name , " file " ,
" input file name " ) ,
OPT_BOOLEAN ( ' f ' , " force " , & force , " don't complain, do it " ) ,
OPT_BOOLEAN ( ' v ' , " verbose " , & verbose ,
2009-11-16 21:45:25 -02:00
" be more verbose " ) ,
2009-11-16 16:32:45 -02:00
OPT_END ( )
} ;
static int perf_file_section__process_buildids ( struct perf_file_section * self ,
int feat , int fd )
{
if ( feat ! = HEADER_BUILD_ID )
return 0 ;
if ( lseek ( fd , self - > offset , SEEK_SET ) < 0 ) {
pr_warning ( " Failed to lseek to %Ld offset for buildids! \n " ,
self - > offset ) ;
return - 1 ;
}
if ( perf_header__read_build_ids ( fd , self - > offset , self - > size ) ) {
pr_warning ( " Failed to read buildids! \n " ) ;
return - 1 ;
}
return 0 ;
}
static int __cmd_buildid_list ( void )
{
int err = - 1 ;
2009-12-15 20:04:39 -02:00
struct perf_session * session ;
session = perf_session__new ( input_name , O_RDONLY , force ) ;
2009-12-11 21:24:02 -02:00
if ( session = = NULL )
return - 1 ;
2009-11-16 16:32:45 -02:00
2009-12-11 21:24:02 -02:00
err = perf_header__process_sections ( & session - > header , session - > fd ,
2009-11-16 16:32:45 -02:00
perf_file_section__process_buildids ) ;
2009-12-11 21:24:02 -02:00
if ( err > = 0 )
dsos__fprintf_buildid ( stdout ) ;
2009-11-16 16:32:45 -02:00
2009-12-11 21:24:02 -02:00
perf_session__delete ( session ) ;
2009-11-16 16:32:45 -02:00
return err ;
}
int cmd_buildid_list ( int argc , const char * * argv , const char * prefix __used )
{
argc = parse_options ( argc , argv , options , buildid_list_usage , 0 ) ;
setup_pager ( ) ;
return __cmd_buildid_list ( ) ;
}