Blob Blame History Raw
diff -Burp ltrace-0.5-orig/elf.c ltrace-0.5/elf.c
--- ltrace-0.5-orig/elf.c	2006-08-30 02:38:17.000000000 +0200
+++ ltrace-0.5/elf.c	2006-08-30 03:42:30.000000000 +0200
@@ -478,10 +478,17 @@ struct library_symbol *read_elf(struct p
 
 		name = lte->dynstr + sym.st_name;
 		if (in_load_libraries(name, lte)) {
-			addr = arch_plt_sym_val(lte, i, &rela);
-			add_library_symbol(addr, name, &library_symbols,
-					   (PLTS_ARE_EXECUTABLE(lte)
-					   ?  LS_TOPLT_EXEC : LS_TOPLT_POINT),
+			enum toplt pltt;
+			if (lte->ehdr.e_machine == EM_PPC) {
+				addr = sym.st_value;
+				pltt = LS_TOPLT_EXEC;
+			}
+			else {
+				addr = arch_plt_sym_val(lte, i, &rela);
+				pltt = (PLTS_ARE_EXECUTABLE(lte)
+					?  LS_TOPLT_EXEC : LS_TOPLT_POINT);
+			}
+			add_library_symbol(addr, name, &library_symbols, pltt,
 					   ELF64_ST_BIND(sym.st_info) == STB_WEAK);
 			if (!lib_tail)
 				lib_tail = &(library_symbols->next);