[Midnightbsd-cvs] src [10648] trunk/lib/librtld_db: sync with freebsd

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Sat Jun 9 15:19:03 EDT 2018


Revision: 10648
          http://svnweb.midnightbsd.org/src/?rev=10648
Author:   laffer1
Date:     2018-06-09 15:19:03 -0400 (Sat, 09 Jun 2018)
Log Message:
-----------
sync with freebsd

Modified Paths:
--------------
    trunk/lib/librtld_db/Makefile
    trunk/lib/librtld_db/librtld_db.3
    trunk/lib/librtld_db/rtld_db.c
    trunk/lib/librtld_db/rtld_db.h

Property Changed:
----------------
    trunk/lib/librtld_db/librtld_db.3

Modified: trunk/lib/librtld_db/Makefile
===================================================================
--- trunk/lib/librtld_db/Makefile	2018-06-09 19:01:20 UTC (rev 10647)
+++ trunk/lib/librtld_db/Makefile	2018-06-09 19:19:03 UTC (rev 10648)
@@ -1,4 +1,5 @@
-# $FreeBSD$
+# $MidnightBSD$
+# $FreeBSD: stable/10/lib/librtld_db/Makefile 225227 2011-08-28 09:26:48Z kib $
 
 .include <bsd.own.mk>
 

Modified: trunk/lib/librtld_db/librtld_db.3
===================================================================
--- trunk/lib/librtld_db/librtld_db.3	2018-06-09 19:01:20 UTC (rev 10647)
+++ trunk/lib/librtld_db/librtld_db.3	2018-06-09 19:19:03 UTC (rev 10648)
@@ -1,3 +1,4 @@
+.\" $MidnightBSD$
 .\"-
 .\" Copyright (c) 2010 The FreeBSD Foundation
 .\" All rights reserved.
@@ -26,7 +27,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD$
+.\" $FreeBSD: stable/10/lib/librtld_db/librtld_db.3 269720 2014-08-08 14:53:01Z markj $
 .\"
 .Dd June 10, 2010
 .Dt LIBRTLD_DB 3
@@ -48,7 +49,7 @@
 .Fc
 .Ft rd_err_e
 .Fo rd_event_addr
-.Fa "rd_agent_t *rdap, rd_notify_t *notify"
+.Fa "rd_agent_t *rdap, rd_event_e event, rd_notify_t *notify"
 .Fc
 .Ft rd_err_e
 .Fo rd_event_enable
@@ -142,10 +143,10 @@
 This function always returns RD_OK.
 .Pp
 .Fn rd_event_addr
-returns the event address in the
+returns the event address corresponding to the
 .Ft event
 parameter.
-At the moment we only report RD_NOTIFY_BPT events.
+At the moment we only report events of type RD_NOTIFY_BPT.
 .Pp
 .Fn rd_event_getmsg
 returns the message associated with the latest event.


Property changes on: trunk/lib/librtld_db/librtld_db.3
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Modified: trunk/lib/librtld_db/rtld_db.c
===================================================================
--- trunk/lib/librtld_db/rtld_db.c	2018-06-09 19:01:20 UTC (rev 10647)
+++ trunk/lib/librtld_db/rtld_db.c	2018-06-09 19:19:03 UTC (rev 10648)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
 /*
  * Copyright (c) 2010 The FreeBSD Foundation 
  * All rights reserved. 
@@ -27,7 +28,7 @@
  * SUCH DAMAGE. 
  */ 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/lib/librtld_db/rtld_db.c 269720 2014-08-08 14:53:01Z markj $");
 
 #include <machine/_inttypes.h>
 #include <sys/types.h>
@@ -81,20 +82,40 @@
 }
 
 rd_err_e
-rd_event_addr(rd_agent_t *rdap, rd_event_e event __unused, rd_notify_t *notify)
+rd_event_addr(rd_agent_t *rdap, rd_event_e event, rd_notify_t *notify)
 {
-	DPRINTF("%s rdap %p notify %p\n", __func__, rdap, notify);	
+	rd_err_e ret;
 
-	notify->type = RD_NOTIFY_BPT;
-	notify->u.bptaddr = rdap->rda_addr;
+	DPRINTF("%s rdap %p event %d notify %p\n", __func__, rdap, event,
+	    notify);
 
-	return (RD_OK);
+	ret = RD_OK;
+	switch (event) {
+	case RD_NONE:
+		break;
+	case RD_PREINIT:
+		notify->type = RD_NOTIFY_BPT;
+		notify->u.bptaddr = rdap->rda_preinit_addr;
+		break;
+	case RD_POSTINIT:
+		notify->type = RD_NOTIFY_BPT;
+		notify->u.bptaddr = rdap->rda_postinit_addr;
+		break;
+	case RD_DLACTIVITY:
+		notify->type = RD_NOTIFY_BPT;
+		notify->u.bptaddr = rdap->rda_dlactivity_addr;
+		break;
+	default:
+		ret = RD_ERR;
+		break;
+	}
+	return (ret);
 }
 
 rd_err_e
 rd_event_enable(rd_agent_t *rdap __unused, int onoff)
 {
-	DPRINTF("%s onoff %d\n", __func__, onoff);	
+	DPRINTF("%s onoff %d\n", __func__, onoff);
 
 	return (RD_OK);
 }
@@ -220,7 +241,15 @@
 	    &sym) < 0)
 		return (RD_ERR);
 	DPRINTF("found r_debug_state at 0x%lx\n", (unsigned long)sym.st_value);
-	rdap->rda_addr = sym.st_value;
+	rdap->rda_preinit_addr = sym.st_value;
+	rdap->rda_dlactivity_addr = sym.st_value;
 
+	if (proc_name2sym(rdap->rda_php, "ld-elf.so.1", "_r_debug_postinit",
+	    &sym) < 0)
+		return (RD_ERR);
+	DPRINTF("found _r_debug_postinit at 0x%lx\n",
+	    (unsigned long)sym.st_value);
+	rdap->rda_postinit_addr = sym.st_value;
+
 	return (RD_OK);
 }

Modified: trunk/lib/librtld_db/rtld_db.h
===================================================================
--- trunk/lib/librtld_db/rtld_db.h	2018-06-09 19:01:20 UTC (rev 10647)
+++ trunk/lib/librtld_db/rtld_db.h	2018-06-09 19:19:03 UTC (rev 10648)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
 /*
  * Copyright (c) 2010 The FreeBSD Foundation 
  * All rights reserved. 
@@ -26,7 +27,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  * SUCH DAMAGE. 
  *
- * $FreeBSD$
+ * $FreeBSD: stable/10/lib/librtld_db/rtld_db.h 269720 2014-08-08 14:53:01Z markj $
  */ 
 
 #ifndef _RTLD_DB_H_
@@ -51,7 +52,9 @@
 
 typedef struct rd_agent {
 	struct proc_handle *rda_php;
-	uintptr_t rda_addr;		/* address of r_debug_state */
+	uintptr_t rda_dlactivity_addr;
+	uintptr_t rda_preinit_addr;
+	uintptr_t rda_postinit_addr;
 } rd_agent_t;
 
 typedef struct rd_loadobj {



More information about the Midnightbsd-cvs mailing list