blob: f75e5189e9ba8e787360306d83130b011b93a4dc [file] [log] [blame]
/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <backtrace/backtrace.h>
#include "common.h"
#include "unwind.h"
bool backtrace_get_data(backtrace_t* backtrace, pid_t tid) {
backtrace->num_frames = 0;
backtrace->tid = tid;
backtrace->map_info_list = backtrace_create_map_info_list(tid);
if (tid < 0) {
return local_get_data(backtrace);
} else {
return remote_get_data(backtrace);
}
}
/* Free any memory related to the frame data. */
void backtrace_free_data(backtrace_t* backtrace) {
free_frame_data(backtrace);
if (backtrace->map_info_list) {
backtrace_destroy_map_info_list(backtrace->map_info_list);
backtrace->map_info_list = NULL;
}
if (backtrace->tid < 0) {
local_free_data(backtrace);
} else {
remote_free_data(backtrace);
}
}
char* backtrace_get_proc_name(const backtrace_t* backtrace, uintptr_t pc,
uintptr_t* offset) {
if (backtrace->tid < 0) {
return local_get_proc_name(backtrace, pc, offset);
} else {
return remote_get_proc_name(backtrace, pc, offset);
}
}