rpms/ltrace/devel ltrace-0.4-exec.patch, NONE, 1.1 ltrace-0.4-fork.patch, NONE, 1.1 ltrace-0.5-a2bp.patch, NONE, 1.1 ltrace-0.5-attach.patch, NONE, 1.1 ltrace-0.5-ppc-symval.patch, NONE, 1.1 ltrace-ppc32fc5.patch, 1.3, 1.4 ltrace.spec, 1.52, 1.53 1152117672-exec-patch, 1.1, NONE 1153220107-fork-patch, 1.1, NONE ltrace-0.5-ppc32-2.patch, 1.1, NONE

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Mon Sep 4 11:47:27 UTC 2006


Author: pmachata

Update of /cvs/dist/rpms/ltrace/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv11078

Modified Files:
	ltrace-ppc32fc5.patch ltrace.spec 
Added Files:
	ltrace-0.4-exec.patch ltrace-0.4-fork.patch 
	ltrace-0.5-a2bp.patch ltrace-0.5-attach.patch 
	ltrace-0.5-ppc-symval.patch 
Removed Files:
	1152117672-exec-patch 1153220107-fork-patch 
	ltrace-0.5-ppc32-2.patch 
Log Message:
- fix plt handling on ppc32 (symval patch)
- fix attaching to process (attach patch)
- add fork & exec patches from IBM
- adjust weak symbol handling (ppc32fc5 patch)


ltrace-0.4-exec.patch:
 process_event.fix |    3 ---
 1 files changed, 3 deletions(-)

--- NEW FILE ltrace-0.4-exec.patch ---
--- process_event.c	2006-02-20 16:48:07.000000000 -0500
+++ process_event.fix	2006-07-04 04:20:27.000000000 -0400
@@ -239,7 +239,6 @@ static void process_sysret(struct event 
 			     sysname(event->proc, event->e_un.sysnum));
 	}
 	if (exec_p(event->proc, event->e_un.sysnum)) {
-		if (gimme_arg(LT_TOF_SYSCALLR, event->proc, -1) == 0) {
 			pid_t saved_pid;
 			event->proc->mask_32bit = 0;
 			event->proc->personality = 0;
@@ -251,8 +250,6 @@ static void process_sysret(struct event 
 			event->proc->pid = 0;
 			breakpoints_init(event->proc);
 			event->proc->pid = saved_pid;
-		} else
-			enable_all_breakpoints(event->proc);
 	}
 	continue_process(event->proc->pid);
 }

ltrace-0.4-fork.patch:
 ltrace.h                  |    5 +++--
 proc.c                    |    8 +++++---
 process_event.c           |   10 ----------
 sysdeps/linux-gnu/trace.c |   32 +++++++++++++++++++++++++++++---
 wait_for_something.c      |   22 ++++++++++++++++++++--
 5 files changed, 57 insertions(+), 20 deletions(-)

--- NEW FILE ltrace-0.4-fork.patch ---
diff -Naurp ltrace-0.4/ltrace.h ltrace-0.4-Getmsg/ltrace.h
--- ltrace-0.4/ltrace.h	2006-02-20 16:48:07.000000000 -0500
+++ ltrace-0.4-Getmsg/ltrace.h	2006-07-18 02:23:36.000000000 -0400
@@ -12,6 +12,7 @@
 #include "sysdep.h"
 
 #define MAX_LIBRARY	30
+#define TRACE_FORK	1
 
 #if defined HAVE_LIBIBERTY || defined HAVE_LIBSUPC__
 # define USE_DEMANGLE
@@ -170,7 +171,7 @@ extern void show_summary(void);
 
 /* Arch-dependent stuff: */
 extern char *pid2name(pid_t pid);
-extern void trace_set_options(struct process *proc, pid_t pid);
+extern void trace_set_options(struct process *proc, pid_t pid, int option);
 extern void trace_me(void);
 extern int trace_pid(pid_t pid);
 extern void untrace_pid(pid_t pid);
@@ -198,5 +199,5 @@ extern void *plt2addr(struct process *, 
 #if 0				/* not yet */
 extern int umoven(struct process *proc, void *addr, int len, void *laddr);
 #endif
-
+extern ulong get_child_pid(pid_t pid);
 #endif
diff -Naurp ltrace-0.4/proc.c ltrace-0.4-Getmsg/proc.c
--- ltrace-0.4/proc.c	2006-02-20 16:48:07.000000000 -0500
+++ ltrace-0.4-Getmsg/proc.c	2006-07-17 06:00:36.000000000 -0400
@@ -22,10 +22,11 @@ struct process *open_program(char *filen
 	}
 	proc->filename = filename;
 	proc->breakpoints_enabled = -1;
+	proc->pid = 0;
+	breakpoints_init(proc); 
 	if (pid) {
 		proc->pid = pid;
 	}
-	breakpoints_init(proc);
 
 	proc->next = list_of_processes;
 	list_of_processes = proc;
@@ -37,11 +38,13 @@ void open_pid(pid_t pid, int verbose)
 	struct process *proc;
 	char *filename;
 
+#if 0
 	if (trace_pid(pid) < 0) {
 		fprintf(stderr, "Cannot attach to pid %u: %s\n", pid,
 			strerror(errno));
 		return;
 	}
+#endif
 
 	filename = pid2name(pid);
 
@@ -54,7 +57,6 @@ void open_pid(pid_t pid, int verbose)
 		return;
 	}
 #endif
-
 	proc = open_program(filename, pid);
-	proc->breakpoints_enabled = 1;
+	proc->breakpoints_enabled = -1;
 }
diff -Naurp ltrace-0.4/process_event.c ltrace-0.4-Getmsg/process_event.c
--- ltrace-0.4/process_event.c	2006-02-20 16:48:07.000000000 -0500
+++ ltrace-0.4-Getmsg/process_event.c	2006-07-18 03:05:16.000000000 -0400
@@ -223,16 +223,6 @@ static void process_sysret(struct event 
 	if (opt_T || opt_c) {
 		calc_time_spent(event->proc);
 	}
-	if (fork_p(event->proc, event->e_un.sysnum)) {
-		if (opt_f) {
-			pid_t child =
-			    gimme_arg(LT_TOF_SYSCALLR, event->proc, -1);
-			if (child > 0) {
-				open_pid(child, 0);
-			}
-		}
-		enable_all_breakpoints(event->proc);
-	}
 	callstack_pop(event->proc);
 	if (opt_S) {
 		output_right(LT_TOF_SYSCALLR, event->proc,
diff -Naurp ltrace-0.4/sysdeps/linux-gnu/trace.c ltrace-0.4-Getmsg/sysdeps/linux-gnu/trace.c
--- ltrace-0.4/sysdeps/linux-gnu/trace.c	2006-02-20 16:48:07.000000000 -0500
+++ ltrace-0.4-Getmsg/sysdeps/linux-gnu/trace.c	2006-07-18 02:49:35.000000000 -0400
@@ -90,7 +90,7 @@ int trace_pid(pid_t pid)
 	return 0;
 }
 
-void trace_set_options(struct process *proc, pid_t pid)
+void trace_set_options(struct process *proc, pid_t pid, int option)
 {
 #ifndef PTRACE_SETOPTIONS
 #define PTRACE_SETOPTIONS 0x4200
@@ -101,10 +101,21 @@ void trace_set_options(struct process *p
 #ifndef PTRACE_O_TRACESYSGOOD
 #define PTRACE_O_TRACESYSGOOD 0x00000001
 #endif
+#ifndef PTRACE_O_TRACEFORK
+#define PTRACE_O_TRACEFORK 0x00000002
+#endif
+      
+	ulong setoptions = 0;
+
 	if (proc->tracesysgood & 0x80)
 		return;
-	if (ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_TRACESYSGOOD) < 0 &&
-	    ptrace(PTRACE_OLDSETOPTIONS, pid, 0, PTRACE_O_TRACESYSGOOD) < 0) {
+ 
+	setoptions |= PTRACE_O_TRACESYSGOOD;
+	if (TRACE_FORK == option){
+		setoptions |= PTRACE_O_TRACEFORK;
+	}
+	if (ptrace(PTRACE_SETOPTIONS, pid, 0, setoptions) < 0 &&
+	    ptrace(PTRACE_OLDSETOPTIONS, pid, 0, PTRACE_O_TRACESYSGOOD) < 0){
 		perror("PTRACE_SETOPTIONS");
 		return;
 	}
@@ -175,3 +186,18 @@ int umovestr(struct process *proc, void 
 	*(char *)(laddr + offset) = '\0';
 	return 0;
 }
+
+ulong get_child_pid(pid_t pid)
+{
+#ifndef PTRACE_GETEVENTMSG
+#define PTRACE_GETEVENTMSG 0x4201
+#endif
+        ulong child_pid = 9999;
+                                                                                                                             
+       if( ptrace(PTRACE_GETEVENTMSG, pid, 0, &child_pid) < 0) {
+                perror("PTRACE_GETEVENTMSG");
+                return 0;
+        }
+        return child_pid;
+}
+
diff -Naurp ltrace-0.4/wait_for_something.c ltrace-0.4-Getmsg/wait_for_something.c
--- ltrace-0.4/wait_for_something.c	2006-02-20 16:48:07.000000000 -0500
+++ ltrace-0.4-Getmsg/wait_for_something.c	2006-07-18 02:32:26.000000000 -0400
@@ -14,15 +14,17 @@
 #include "options.h"
 #include "debug.h"
 
+#define FORK_MASK 0x00010000
 static struct event event;
 
 /* This should also update `current_process' */
 
 static struct process *pid2proc(int pid);
+void verify(int sig_status);
 
 struct event *wait_for_something(void)
 {
-	pid_t pid;
+	pid_t pid, child_pid;
 	int status;
 	int tmp;
 
@@ -54,7 +56,11 @@ struct event *wait_for_something(void)
 	if (event.proc->breakpoints_enabled == -1) {
 		enable_all_breakpoints(event.proc);
 		event.thing = LT_EV_NONE;
-		trace_set_options(event.proc, event.proc->pid);
+  		if(opt_f){
+			trace_set_options(event.proc, event.proc->pid, TRACE_FORK);
+		}else{
+			trace_set_options(event.proc, event.proc->pid, 0);
+		}
 		continue_process(event.proc->pid);
 		return &event;
 	}
@@ -92,6 +98,17 @@ struct event *wait_for_something(void)
 		event.e_un.signum = WSTOPSIG(status);
 		return &event;
 	}
+        if((WSTOPSIG(status) == SIGTRAP) && (status & FORK_MASK)) {
+		event.thing = LT_EV_NONE;
+		event.e_un.signum = WSTOPSIG(status);
+		child_pid = (pid_t) get_child_pid(event.proc->pid);
+                if (child_pid){
+			open_pid(child_pid,0);
+                }
+                enable_all_breakpoints(event.proc);
+		continue_after_signal(event.proc->pid, event.e_un.signum);
+		return &event;
+	}
 	event.thing = LT_EV_BREAKPOINT;
 	if (!event.proc->instruction_pointer) {
 		event.proc->instruction_pointer =
@@ -115,3 +132,4 @@ static struct process *pid2proc(pid_t pi
 	}
 	return NULL;
 }
+

ltrace-0.5-a2bp.patch:
 breakpoints.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletion(-)

--- NEW FILE ltrace-0.5-a2bp.patch ---
diff -Bburp ltrace-0.5/breakpoints.c ltrace-0.5-pm/breakpoints.c
--- ltrace-0.5/breakpoints.c	2006-08-30 08:03:25.000000000 -0400
+++ ltrace-0.5-pm/breakpoints.c	2006-08-30 08:02:39.000000000 -0400
@@ -20,6 +20,10 @@
 
 struct breakpoint *address2bpstruct(struct process *proc, void *addr)
 {
+	if (!proc->breakpoints) {
+		proc->breakpoints =
+		  dict_init(dict_key2hash_int, dict_key_cmp_int);
+	}
 	return dict_find_entry(proc->breakpoints, addr);
 }
 
@@ -33,7 +39,6 @@ insert_breakpoint(struct process *proc, 
 	if (!proc->breakpoints) {
 		proc->breakpoints =
 		    dict_init(dict_key2hash_int, dict_key_cmp_int);
-		/* atexit(brk_dict_clear); *//* why bother to do this on exit? */
 	}
 
 	if (!addr)

ltrace-0.5-attach.patch:
 proc.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

--- NEW FILE ltrace-0.5-attach.patch ---
--- ltrace-0.5/proc.c	2006-02-20 16:48:07.000000000 -0500
+++ ltrace-0.5-pm/proc.c	2006-09-04 07:14:50.000000000 -0400
@@ -55,6 +55,6 @@ void open_pid(pid_t pid, int verbose)
 	}
 #endif
 
-	proc = open_program(filename, pid);
-	proc->breakpoints_enabled = 1;
+	proc = open_program(filename, 0);
+	proc->pid = pid;
 }

ltrace-0.5-ppc-symval.patch:
 elf.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)

--- NEW FILE ltrace-0.5-ppc-symval.patch ---
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);

ltrace-ppc32fc5.patch:
 breakpoints.c                |    5 ++---
 elf.c                        |    6 +++---
 output.c                     |    1 -
 sysdeps/linux-gnu/ppc/arch.h |    4 +---
 sysdeps/linux-gnu/ppc/plt.c  |    8 ++++++--
 sysdeps/linux-gnu/ppc/regs.c |   11 +++++++++--
 6 files changed, 21 insertions(+), 14 deletions(-)

Index: ltrace-ppc32fc5.patch
===================================================================
RCS file: /cvs/dist/rpms/ltrace/devel/ltrace-ppc32fc5.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ltrace-ppc32fc5.patch	15 Jul 2006 00:51:09 -0000	1.3
+++ ltrace-ppc32fc5.patch	4 Sep 2006 11:47:24 -0000	1.4
@@ -120,33 +120,6 @@
 -
 -
 -#endif
-Index: process_event.c
-===================================================================
---- process_event.c	(revision 45)
-+++ process_event.c	(working copy)
-@@ -263,7 +263,7 @@ static void process_breakpoint(struct ev
- 	struct breakpoint *sbp, *nxtbp;
- 
- 	debug(2, "event: breakpoint (%p)", event->e_un.brk_addr);
--	if ((sbp = event->proc->breakpoint_being_enabled) != 0) {
-+	if ((sbp = event->proc->breakpoint_being_enabled) != NULL) {
- #ifdef __powerpc__
- 		char nop_inst[] = PPC_NOP;
-                 if (memcmp(sbp->orig_value, nop_inst, PPC_NOP_LENGTH) == 0) {
-@@ -344,8 +344,11 @@ static void process_breakpoint(struct ev
- 		event->proc->stack_pointer = get_stack_pointer(event->proc);
- 		event->proc->return_addr =
- 		    get_return_addr(event->proc, event->proc->stack_pointer);
--		output_left(LT_TOF_FUNCTION, event->proc, sbp->libsym->name);
--		callstack_push_symfunc(event->proc, sbp->libsym);
-+		if (!sbp->libsym->is_weak || event->proc->return_addr == NULL) {
-+			debug (2, "libsym name=%s", sbp->libsym->name);
-+			output_left(LT_TOF_FUNCTION, event->proc, sbp->libsym->name);
-+			callstack_push_symfunc(event->proc, sbp->libsym);
-+		}
- #ifdef PLT_REINITALISATION_BP
- 		if (event->proc->need_to_reinitialize_breakpoints
- 		    && (strcmp(sbp->libsym->name, PLTs_initialized_by_here) ==
 Index: breakpoints.c
 ===================================================================
 --- breakpoints.c	(revision 45)


Index: ltrace.spec
===================================================================
RCS file: /cvs/dist/rpms/ltrace/devel/ltrace.spec,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- ltrace.spec	30 Aug 2006 02:14:13 -0000	1.52
+++ ltrace.spec	4 Sep 2006 11:47:24 -0000	1.53
@@ -1,13 +1,17 @@
 Summary: Tracks runtime library calls from dynamically linked executables.
 Name: ltrace
 Version: 0.5
-Release: 4.45svn%{?dist}
+Release: 5.45svn%{?dist}
 Source: ltrace-0.5.tar.gz
+Patch0: ltrace-0.4-exec.patch
+Patch1: ltrace-0.4-fork.patch
 Patch2: ltrace-0.5-opd.patch
 Patch3: ltrace-ppc32fc5.patch
 Patch4: ltrace-0.5-gnuhash.patch
 Patch5: ltrace-0.5-testsuite.patch
-Patch6: ltrace-0.5-ppc32-2.patch
+Patch6: ltrace-0.5-ppc-symval.patch
+Patch7: ltrace-0.5-a2bp.patch
+Patch8: ltrace-0.5-attach.patch
 License: GPL
 Group: Development/Debuggers
 ExclusiveArch: %{ix86} x86_64 ia64 ppc ppc64 s390 s390x alpha sparc
@@ -27,11 +31,14 @@
 
 %prep
 %setup -q
+%patch0 -p0
+%patch1 -p1
 %patch2 -p1
 %patch3 -p0
 %patch4 -p1
 %patch5 -p1
 %patch6 -p1
+%patch8 -p1
 sed -i -e 's/-o root -g root//' Makefile.in
 
 %build
@@ -59,9 +66,11 @@
 %config /etc/ltrace.conf
 
 %changelog
-* Wed Aug 28 2006 Petr Machata <pmachata at redhat.com> - 0.5-4.45svn
-- enabling testsuite in hunt for testsuite fail on ppc
-- first take on ppc32 testsuite problems...
+* Mon Sep  4 2006 Petr Machata <pmachata at redhat.com> - 0.5-5.45svn
+- fix plt handling on ppc32 (symval patch)
+- fix attaching to process (attach patch)
+- add fork & exec patches from IBM
+- adjust weak symbol handling (ppc32fc5 patch)
 
 * Wed Aug 23 2006 Petr Machata <pmachata at redhat.com> - 0.5-3.45svn
 - use "{X}.{release}svn" release string per naming guidelines


--- 1152117672-exec-patch DELETED ---


--- 1153220107-fork-patch DELETED ---


--- ltrace-0.5-ppc32-2.patch DELETED ---




More information about the fedora-cvs-commits mailing list