18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file oprof_start_config.cpp 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * GUI startup config management 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2002 OProfile authors 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <stdio.h> 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <sstream> 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <fstream> 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <iomanip> 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <sys/utsname.h> 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "string_manip.h" 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "oprof_start_config.h" 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_config.h" 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_config_24.h" 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddusing namespace std; 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddevent_setting::event_setting() 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd : 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd count(0), 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd umask(0), 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd os_ring_count(0), 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd user_ring_count(0) 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddconfig_setting::config_setting() 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd : 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd buffer_size(OP_DEFAULT_BUF_SIZE), 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd note_table_size(OP_DEFAULT_NOTE_SIZE), 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd no_kernel(false), 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd verbose(false), 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd separate_lib(false), 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd separate_kernel(false), 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd separate_cpu(false), 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd separate_thread(false), 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd callgraph_depth(0), 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd buffer_watershed(0), 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cpu_buffer_size(0) 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd struct utsname info; 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /* Guess path to vmlinux based on kernel currently running. */ 538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (uname(&info)) { 548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd perror("oprof_start: Unable to determine OS release."); 558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } else { 568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd string const version(info.release); 578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd string const vmlinux_path("/lib/modules/" + version 588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd + "/build/vmlinux"); 598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kernel_filename = vmlinux_path; 608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvoid config_setting::load(istream & in) 658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd buffer_size = OP_DEFAULT_BUF_SIZE; 678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd note_table_size = OP_DEFAULT_NOTE_SIZE; 688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd string str; 708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd while (getline(in, str)) { 728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd string val = split(str, '='); 738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (str == "BUF_SIZE") { 748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd buffer_size = op_lexical_cast<unsigned int>(val); 758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (buffer_size < OP_DEFAULT_BUF_SIZE) 768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd buffer_size = OP_DEFAULT_BUF_SIZE; 778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } else if (str == "NOTE_SIZE") { 788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd note_table_size = op_lexical_cast<unsigned int>(val); 798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (note_table_size < OP_DEFAULT_NOTE_SIZE) 808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd note_table_size = OP_DEFAULT_NOTE_SIZE; 818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } else if (str == "VMLINUX") { 828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (val == "none") { 838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kernel_filename = ""; 848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd no_kernel = true; 858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } else if (!val.empty()) { 868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd no_kernel = false; 878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kernel_filename = val; 888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } else if (str == "SEPARATE_LIB") { 908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd separate_lib = op_lexical_cast<bool>(val); 918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } else if (str == "SEPARATE_KERNEL") { 928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd separate_kernel = op_lexical_cast<bool>(val); 938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } else if (str == "SEPARATE_CPU") { 948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd separate_cpu = op_lexical_cast<bool>(val); 958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } else if (str == "SEPARATE_THREAD") { 968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd separate_thread = op_lexical_cast<bool>(val); 978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } else if (str == "CALLGRAPH") { 988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd callgraph_depth = op_lexical_cast<unsigned int>(val); 998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } else if (str == "BUF_WATERSHED") { 1008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd buffer_watershed = op_lexical_cast<unsigned int>(val); 1018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } else if (str == "CPU_BUF_SIZE") { 1028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cpu_buffer_size = op_lexical_cast<unsigned int>(val); 1038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 1048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 1058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 1068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddistream & operator>>(istream & in, config_setting & object) 1098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 1108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd object.load(in); 1118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return in; 1128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 113