mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-31 08:51:55 +00:00 
			
		
		
		
	added android implementation of ggml_print_backtrace_symbols (#8751)
* added android implementation of ggml_print_backtrace_symbols * Update ggml/src/ggml.c Co-authored-by: slaren <slarengh@gmail.com> * Update ggml/src/ggml.c Co-authored-by: slaren <slarengh@gmail.com> * Update ggml/src/ggml.c Co-authored-by: slaren <slarengh@gmail.com> * Update ggml/src/ggml.c Co-authored-by: slaren <slarengh@gmail.com> * Update ggml/src/ggml.c Co-authored-by: slaren <slarengh@gmail.com> --------- Co-authored-by: slaren <slarengh@gmail.com>
This commit is contained in:
		| @@ -141,7 +141,51 @@ typedef pthread_t ggml_thread_t; | ||||
|  | ||||
| #include <sys/wait.h> | ||||
|  | ||||
| #if defined(__linux__) | ||||
| #if defined(__ANDROID__) | ||||
| #include <unwind.h> | ||||
| #include <dlfcn.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| struct backtrace_state { | ||||
|     void ** current; | ||||
|     void ** end; | ||||
| }; | ||||
|  | ||||
| static _Unwind_Reason_Code unwind_callback(struct _Unwind_Context* context, void* arg) { | ||||
|     struct backtrace_state * state = (struct backtrace_state *)arg; | ||||
|     uintptr_t pc = _Unwind_GetIP(context); | ||||
|     if (pc) { | ||||
|         if (state->current == state->end) { | ||||
|             return _URC_END_OF_STACK; | ||||
|         } else { | ||||
|             *state->current++ = (void*)pc; | ||||
|         } | ||||
|     } | ||||
|     return _URC_NO_REASON; | ||||
| } | ||||
|  | ||||
| static void ggml_print_backtrace_symbols(void) { | ||||
|     const int max = 100; | ||||
|     void* buffer[max]; | ||||
|  | ||||
|     struct backtrace_state state = {buffer, buffer + max}; | ||||
|     _Unwind_Backtrace(unwind_callback, &state); | ||||
|  | ||||
|     int count = state.current - buffer; | ||||
|  | ||||
|     for (int idx = 0; idx < count; ++idx) { | ||||
|         const void * addr = buffer[idx]; | ||||
|         const char * symbol = ""; | ||||
|  | ||||
|         Dl_info info; | ||||
|         if (dladdr(addr, &info) && info.dli_sname) { | ||||
|             symbol = info.dli_sname; | ||||
|         } | ||||
|  | ||||
|         fprintf(stderr, "%d: %p %s\n", idx, addr, symbol); | ||||
|     } | ||||
| } | ||||
| #elif defined(__linux__) | ||||
| #include <execinfo.h> | ||||
| static void ggml_print_backtrace_symbols(void) { | ||||
|     void * trace[100]; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 l3utterfly
					l3utterfly