summary refs log tree commit diff
path: root/elf
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2005-06-14 00:56:49 +0000
committerUlrich Drepper <drepper@redhat.com>2005-06-14 00:56:49 +0000
commitc63d8f809b816fa51d2448a46fbf0ca6ec253b43 (patch)
treeb8c03533b22dde8bdc2ff71a696c144285614c7d /elf
parent74780cf659d1e5cd91e82b6e5314dcfc7bba033b (diff)
downloadglibc-c63d8f809b816fa51d2448a46fbf0ca6ec253b43.tar.gz
glibc-c63d8f809b816fa51d2448a46fbf0ca6ec253b43.tar.xz
glibc-c63d8f809b816fa51d2448a46fbf0ca6ec253b43.zip
[BZ #966]
2005-06-13  Ulrich Drepper  <drepper@redhat.com>
	* sysdeps/unix/clock_gettime.c (clock_gettime): Implement case
	where HANDLED_REALTIME is not defined.  [BZ #966]

2005-06-13  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/unix/sysv/linux/netlinkaccess.h (__netlink_sendreq,
	__netlink_receive): Remove prototypes.
	(__netlink_request): New prototype.
	* sysdeps/unix/sysv/linux/ifaddrs.c: Include <alloca.h> and
	<stdint.h>.
	(__netlink_sendreq): Make static.
	(__netlink_receive): Rename to...
	(__netlink_request): ... this.  Add type argument, call
	__netlink_sendreq.  If MSG_TRUNC is set after recvmsg, retry
	with a bigger buffer.  Don't record buffers that contain no
	messages we are expecting.
	(getifaddrs): Use __netlink_request instead of __netlink_sendreq
	and __netlink_receive pairs.  Formatting.
	* sysdeps/unix/sysv/linux/if_index.c (if_nameindex_netlink): Use
	__netlink_request instead of __netlink_sendreq and __netlink_receive
	pair.

2005-06-13  Thorsten Kukuk  <kukuk@suse.de>

	* sysdeps/unix/sysv/linux/netinet/if_tr.h: Don't include kernel
	headers, instead copy important structs/defines.

2005-06-13  Jakub Jelinek  <jakub@redhat.com>

	* elf/rtld.c (dl_main): Move DT_DEBUG setup before first
	_dl_debug_state call.
Diffstat (limited to 'elf')
-rw-r--r--elf/rtld.c41
1 files changed, 17 insertions, 24 deletions
diff --git a/elf/rtld.c b/elf/rtld.c
index 03096a38d8..bd171e977d 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -1558,6 +1558,23 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
 	}
     }
 
+  /* Set up debugging before the debugger is notified for the first time.  */
+#ifdef ELF_MACHINE_DEBUG_SETUP
+  /* Some machines (e.g. MIPS) don't use DT_DEBUG in this way.  */
+  ELF_MACHINE_DEBUG_SETUP (main_map, r);
+  ELF_MACHINE_DEBUG_SETUP (&GL(dl_rtld_map), r);
+#else
+  if (main_map->l_info[DT_DEBUG] != NULL)
+    /* There is a DT_DEBUG entry in the dynamic section.  Fill it in
+       with the run-time address of the r_debug structure  */
+    main_map->l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r;
+
+  /* Fill in the pointer in the dynamic linker's own dynamic section, in
+     case you run gdb on the dynamic linker directly.  */
+  if (GL(dl_rtld_map).l_info[DT_DEBUG] != NULL)
+    GL(dl_rtld_map).l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r;
+#endif
+
   /* We start adding objects.  */
   r->r_state = RT_ADD;
   _dl_debug_state ();
@@ -2076,30 +2093,6 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
     }
 
 
-  {
-    struct link_map *l = main_map;
-
-#ifdef ELF_MACHINE_DEBUG_SETUP
-
-    /* Some machines (e.g. MIPS) don't use DT_DEBUG in this way.  */
-
-    ELF_MACHINE_DEBUG_SETUP (l, r);
-    ELF_MACHINE_DEBUG_SETUP (&GL(dl_rtld_map), r);
-
-#else
-
-    if (l->l_info[DT_DEBUG] != NULL)
-      /* There is a DT_DEBUG entry in the dynamic section.  Fill it in
-	 with the run-time address of the r_debug structure  */
-      l->l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r;
-
-    /* Fill in the pointer in the dynamic linker's own dynamic section, in
-       case you run gdb on the dynamic linker directly.  */
-    if (GL(dl_rtld_map).l_info[DT_DEBUG] != NULL)
-      GL(dl_rtld_map).l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r;
-#endif
-  }
-
   /* Now set up the variable which helps the assembler startup code.  */
   GL(dl_ns)[LM_ID_BASE]._ns_main_searchlist = &main_map->l_searchlist;
   GL(dl_ns)[LM_ID_BASE]._ns_global_scope[0] = &main_map->l_searchlist;