android_system_core/libbacktrace/unwind.c
Christopher Ferris 7fb22878d4 Create a single backtrace library.
This library will be used to abstract away getting backtrace
data from how it is implemented. This is the first step to
replacing libcorkscrew with libunwind.

Bug: 8410085
Change-Id: Ie8f159e96a055d378e1ddc72d40239fba4cf52b7
2013-09-28 12:26:35 -07:00

57 lines
1.6 KiB
C

/*
* 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);
}
}