summaryrefslogtreecommitdiff
path: root/libunwindstack/tools
diff options
context:
space:
mode:
Diffstat (limited to 'libunwindstack/tools')
-rw-r--r--libunwindstack/tools/unwind.cpp22
-rw-r--r--libunwindstack/tools/unwind_info.cpp55
-rw-r--r--libunwindstack/tools/unwind_symbols.cpp13
3 files changed, 51 insertions, 39 deletions
diff --git a/libunwindstack/tools/unwind.cpp b/libunwindstack/tools/unwind.cpp
index 34cd1ce..642105a 100644
--- a/libunwindstack/tools/unwind.cpp
+++ b/libunwindstack/tools/unwind.cpp
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+#include <elf.h>
#include <errno.h>
#include <inttypes.h>
#include <signal.h>
@@ -27,10 +28,11 @@
#include <string>
-#include "Elf.h"
-#include "Maps.h"
-#include "Memory.h"
-#include "Regs.h"
+#include <unwindstack/Elf.h>
+#include <unwindstack/MapInfo.h>
+#include <unwindstack/Maps.h>
+#include <unwindstack/Memory.h>
+#include <unwindstack/Regs.h>
static bool Attach(pid_t pid) {
if (ptrace(PTRACE_ATTACH, pid, 0, 0) == -1) {
@@ -54,14 +56,14 @@ static bool Detach(pid_t pid) {
}
void DoUnwind(pid_t pid) {
- RemoteMaps remote_maps(pid);
+ unwindstack::RemoteMaps remote_maps(pid);
if (!remote_maps.Parse()) {
printf("Failed to parse map data.\n");
return;
}
uint32_t machine_type;
- Regs* regs = Regs::RemoteGet(pid, &machine_type);
+ unwindstack::Regs* regs = unwindstack::Regs::RemoteGet(pid, &machine_type);
if (regs == nullptr) {
printf("Unable to get remote reg data\n");
return;
@@ -90,20 +92,20 @@ void DoUnwind(pid_t pid) {
}
printf("\n");
- MemoryRemote remote_memory(pid);
+ unwindstack::MemoryRemote remote_memory(pid);
for (size_t frame_num = 0; frame_num < 64; frame_num++) {
if (regs->pc() == 0) {
break;
}
- MapInfo* map_info = remote_maps.Find(regs->pc());
+ unwindstack::MapInfo* map_info = remote_maps.Find(regs->pc());
if (map_info == nullptr) {
printf("Failed to find map data for the pc\n");
break;
}
- Elf* elf = map_info->GetElf(pid, true);
+ unwindstack::Elf* elf = map_info->GetElf(pid, true);
- uint64_t rel_pc = regs->GetRelPc(elf, map_info);
+ uint64_t rel_pc = elf->GetRelPc(regs->pc(), map_info);
uint64_t adjusted_rel_pc = rel_pc;
// Don't need to adjust the first frame pc.
if (frame_num != 0) {
diff --git a/libunwindstack/tools/unwind_info.cpp b/libunwindstack/tools/unwind_info.cpp
index e889f8c..66a9439 100644
--- a/libunwindstack/tools/unwind_info.cpp
+++ b/libunwindstack/tools/unwind_info.cpp
@@ -25,13 +25,16 @@
#include <sys/types.h>
#include <unistd.h>
+#include <unwindstack/DwarfSection.h>
+#include <unwindstack/DwarfStructs.h>
+#include <unwindstack/Elf.h>
+#include <unwindstack/ElfInterface.h>
+#include <unwindstack/Log.h>
+
#include "ArmExidx.h"
-#include "DwarfSection.h"
-#include "DwarfStructs.h"
-#include "Elf.h"
-#include "ElfInterface.h"
#include "ElfInterfaceArm.h"
-#include "Log.h"
+
+namespace unwindstack {
void DumpArm(ElfInterfaceArm* interface) {
if (interface == nullptr) {
@@ -100,27 +103,12 @@ void DumpDwarfSection(ElfInterface* interface, DwarfSection* section, uint64_t l
}
}
-int main(int argc, char** argv) {
- if (argc != 2) {
- printf("Need to pass the name of an elf file to the program.\n");
- return 1;
- }
-
- struct stat st;
- if (stat(argv[1], &st) == -1) {
- printf("Cannot stat %s: %s\n", argv[1], strerror(errno));
- return 1;
- }
- if (!S_ISREG(st.st_mode)) {
- printf("%s is not a regular file.\n", argv[1]);
- return 1;
- }
-
+int GetElfInfo(const char* file) {
// Send all log messages to stdout.
log_to_stdout(true);
MemoryFileAtOffset* memory = new MemoryFileAtOffset;
- if (!memory->Init(argv[1], 0)) {
+ if (!memory->Init(file, 0)) {
// Initializatation failed.
printf("Failed to init\n");
return 1;
@@ -128,7 +116,7 @@ int main(int argc, char** argv) {
Elf elf(memory);
if (!elf.Init() || !elf.valid()) {
- printf("%s is not a valid elf file.\n", argv[1]);
+ printf("%s is not a valid elf file.\n", file);
return 1;
}
@@ -173,3 +161,24 @@ int main(int argc, char** argv) {
return 0;
}
+
+} // namespace unwindstack
+
+int main(int argc, char** argv) {
+ if (argc != 2) {
+ printf("Need to pass the name of an elf file to the program.\n");
+ return 1;
+ }
+
+ struct stat st;
+ if (stat(argv[1], &st) == -1) {
+ printf("Cannot stat %s: %s\n", argv[1], strerror(errno));
+ return 1;
+ }
+ if (!S_ISREG(st.st_mode)) {
+ printf("%s is not a regular file.\n", argv[1]);
+ return 1;
+ }
+
+ return unwindstack::GetElfInfo(argv[1]);
+}
diff --git a/libunwindstack/tools/unwind_symbols.cpp b/libunwindstack/tools/unwind_symbols.cpp
index c010dfc..b757c1e 100644
--- a/libunwindstack/tools/unwind_symbols.cpp
+++ b/libunwindstack/tools/unwind_symbols.cpp
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+#include <elf.h>
#include <errno.h>
#include <inttypes.h>
#include <stdio.h>
@@ -22,9 +23,9 @@
#include <sys/types.h>
#include <unistd.h>
-#include "Elf.h"
-#include "ElfInterface.h"
-#include "Log.h"
+#include <unwindstack/Elf.h>
+#include <unwindstack/Log.h>
+#include <unwindstack/Memory.h>
int main(int argc, char** argv) {
if (argc != 2) {
@@ -43,15 +44,15 @@ int main(int argc, char** argv) {
}
// Send all log messages to stdout.
- log_to_stdout(true);
+ unwindstack::log_to_stdout(true);
- MemoryFileAtOffset* memory = new MemoryFileAtOffset;
+ unwindstack::MemoryFileAtOffset* memory = new unwindstack::MemoryFileAtOffset;
if (!memory->Init(argv[1], 0)) {
printf("Failed to init\n");
return 1;
}
- Elf elf(memory);
+ unwindstack::Elf elf(memory);
if (!elf.Init() || !elf.valid()) {
printf("%s is not a valid elf file.\n", argv[1]);
return 1;