diff --git a/headers/private/kernel/ksyscalls.h b/headers/private/kernel/ksyscalls.h index 669590a578..59764cb560 100644 --- a/headers/private/kernel/ksyscalls.h +++ b/headers/private/kernel/ksyscalls.h @@ -24,15 +24,16 @@ typedef struct syscall_parameter_info { type_code type; } syscall_parameter_info; -typedef struct syscall_parameters_info { +typedef struct extended_syscall_info { + const char* name; int parameter_count; syscall_parameter_info parameters[MAX_SYSCALL_PARAMETERS]; -} syscall_parameters_info; +} extended_syscall_info; extern const int kSyscallCount; extern const syscall_info kSyscallInfos[]; -extern const syscall_parameters_info kSyscallParametersInfos[]; +extern const extended_syscall_info kExtendedSyscallInfos[]; #ifdef __cplusplus diff --git a/src/system/kernel/syscalls.cpp b/src/system/kernel/syscalls.cpp index 5510b53af1..fee81b3035 100644 --- a/src/system/kernel/syscalls.cpp +++ b/src/system/kernel/syscalls.cpp @@ -305,22 +305,10 @@ namespace SyscallTracing { static const char* get_syscall_name(uint32 syscall) { - addr_t baseAddress; - const char* symbolName; - const char* imageName; - bool exactMatch; - if (syscall >= (uint32)kSyscallCount) return ""; - if (elf_debug_lookup_symbol_address( - (addr_t)kSyscallInfos[syscall].function, - &baseAddress, &symbolName, &imageName, - &exactMatch) != B_OK) { - return ""; - } - - return symbolName; + return kExtendedSyscallInfos[syscall].name; } @@ -338,11 +326,11 @@ class PreSyscall : public AbstractTraceEntry { // copy string parameters, if any if (fParameters != NULL) { int32 stringIndex = 0; - const syscall_parameters_info& paramsInfo - = kSyscallParametersInfos[fSyscall]; - for (int i = 0; i < paramsInfo.parameter_count; i++) { + const extended_syscall_info& syscallInfo + = kExtendedSyscallInfos[fSyscall]; + for (int i = 0; i < syscallInfo.parameter_count; i++) { const syscall_parameter_info& paramInfo - = paramsInfo.parameters[i]; + = syscallInfo.parameters[i]; if (paramInfo.type != B_STRING_TYPE) continue; @@ -366,11 +354,11 @@ class PreSyscall : public AbstractTraceEntry { if (fParameters != NULL) { int32 stringIndex = 0; - const syscall_parameters_info& paramsInfo - = kSyscallParametersInfos[fSyscall]; - for (int i = 0; i < paramsInfo.parameter_count; i++) { + const extended_syscall_info& syscallInfo + = kExtendedSyscallInfos[fSyscall]; + for (int i = 0; i < syscallInfo.parameter_count; i++) { const syscall_parameter_info& paramInfo - = paramsInfo.parameters[i]; + = syscallInfo.parameters[i]; const uint8* data = (uint8*)fParameters + paramInfo.offset; uint64 value = 0; bool printValue = true; diff --git a/src/tools/gensyscalls/gensyscalls.cpp b/src/tools/gensyscalls/gensyscalls.cpp index 4b8ae18d28..77bfe4a5a3 100644 --- a/src/tools/gensyscalls/gensyscalls.cpp +++ b/src/tools/gensyscalls/gensyscalls.cpp @@ -408,7 +408,7 @@ public: file << endl; // syscall parameters infos array preamble - file << "const syscall_parameters_info kSyscallParametersInfos[] = {" + file << "const extended_syscall_info kExtendedSyscallInfos[] = {" << endl; // the syscall parameters infos @@ -417,7 +417,8 @@ public: int paramCount = syscall->CountParameters(); file << "\t{" << endl; - file << "\t\t" << paramCount << "," << endl; + file << "\t\t\"" << syscall->Name() << "\", " << paramCount << "," + << endl; file << "\t\t{" << endl; for (int k = 0; k < paramCount; k++) {