aboutsummaryrefslogtreecommitdiff
path: root/elf/rtld-debugger-interface.txt
diff options
context:
space:
mode:
Diffstat (limited to 'elf/rtld-debugger-interface.txt')
-rw-r--r--elf/rtld-debugger-interface.txt122
1 files changed, 0 insertions, 122 deletions
diff --git a/elf/rtld-debugger-interface.txt b/elf/rtld-debugger-interface.txt
deleted file mode 100644
index 61bc99e4b0..0000000000
--- a/elf/rtld-debugger-interface.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-Standard debugger interface
-===========================
-
-The run-time linker exposes a rendezvous structure to allow debuggers
-to interface with it. This structure, r_debug, is defined in link.h.
-If the executable's dynamic section has a DT_DEBUG element, the
-run-time linker sets that element's value to the address where this
-structure can be found.
-
-The r_debug structure contains (amongst others) the following fields:
-
- struct link_map *r_map:
- A linked list of loaded objects.
-
- enum { RT_CONSISTENT, RT_ADD, RT_DELETE } r_state:
- The current state of the r_map list. RT_CONSISTENT means that r_map
- is not currently being modified and may safely be inspected. RT_ADD
- means that an object is being added to r_map, and that the list is
- not guaranteed to be consistent. Likewise RT_DELETE means that an
- object is being removed from the list.
-
- ElfW(Addr) r_brk:
- The address of a function internal to the run-time linker which is
- called whenever r_state is changed. The debugger should set a
- breakpoint at this address if it wants to notice mapping changes.
-
-This protocol is widely supported, but somewhat limited in that it
-has no provision to provide access to multiple namespaces, and that
-the notifications (via r_brk) only refer to changes to r_map--the
-debugger is notified that a new object has been added, for instance,
-but there is no way for the debugger to discover whether any of the
-objects in the link-map have been relocated or not.
-
-
-Probe-based debugger interface
-==============================
-
-Systemtap is a dynamic tracing/instrumenting tool available on Linux.
-Probes that are not fired at run time have close to zero overhead.
-glibc contains a number of probes that debuggers can set breakpoints
-on in order to notice certain events.
-
-All rtld probes have the following arguments:
-
- arg1: Lmid_t lmid:
- The link-map ID of the link-map list that the object was loaded
- into. This will be LM_ID_BASE for the application's main link-map
- list, or some other value for different namespaces.
-
- arg2: struct r_debug *r_debug:
- A pointer to the r_debug structure containing the link-map list
- that the object was loaded into. This will be the value stored in
- DT_DEBUG for the application's main link-map list, or some other
- value for different namespaces.
-
-map_complete and reloc_complete may have the following additional
-argument:
-
- arg3: struct link_map *new:
- A pointer which, if not NULL, points to the entry in the specified
- r_debug structure's link-map list corresponding to the first new
- object to have been mapped or relocated, with new->l_next pointing
- to the link-map of the next new object to have been mapped or
- relocated, and so on. Note that because `new' is an entry in a
- larger list, new->l_prev (if not NULL) will point to what was the
- last link-map in the link-map list prior to the new objects being
- mapped or relocated.
-
-The following probes are available:
-
- init_start:
- This is called once, when the linker is about to fill in the main
- r_debug structure at application startup. init_start always has
- lmid set to LM_ID_BASE and r_debug set to the value stored in
- DT_DEBUG. r_debug is not guaranteed to be consistent until
- init_complete is fired.
-
- init_complete:
- This is called once, when the linker has filled in the main
- r_debug structure at application startup. init_complete always
- has lmid set to LM_ID_BASE and r_debug set to the value stored
- in DT_DEBUG. The r_debug structure is consistent and may be
- inspected, and all objects in the link-map are guaranteed to
- have been relocated.
-
- map_start:
- The linker is about to map new objects into the specified
- namespace. The namespace's r_debug structure is not guaranteed
- to be consistent until a corresponding map_complete is fired.
-
- map_complete:
- The linker has finished mapping new objects into the specified
- namespace. The namespace's r_debug structure is consistent and
- may be inspected, although objects in the namespace's link-map
- are not guaranteed to have been relocated.
-
- map_failed:
- The linker failed while attempting to map new objects into
- the specified namespace. The namespace's r_debug structure
- is consistent and may be inspected.
-
- reloc_start:
- The linker is about to relocate all unrelocated objects in the
- specified namespace. The namespace's r_debug structure is not
- guaranteed to be consistent until a corresponding reloc_complete
- is fired.
-
- reloc_complete:
- The linker has relocated all objects in the specified namespace.
- The namespace's r_debug structure is consistent and may be
- inspected, and all objects in the namespace's link-map are
- guaranteed to have been relocated.
-
- unmap_start:
- The linker is about to remove objects from the specified
- namespace. The namespace's r_debug structure is not guaranteed to
- be consistent until a corresponding unmap_complete is fired.
-
- unmap_complete:
- The linker has finished removing objects into the specified
- namespace. The namespace's r_debug structure is consistent and
- may be inspected.