Author: kib
Date: Fri Aug 19 08:44:37 2016
New Revision: 304456
URL: https://svnweb.freebsd.org/changeset/base/304456

Log:
  MFC r304011:
  Remove all remaining uses of TAILQ_FOREACH_FROM() from rtld-elf.
  
  MFC r304012:
  Fill phdr and phsize for rtld object.
  
  Approved by:  re (gjb)

Modified:
  releng/11.0/libexec/rtld-elf/rtld.c
Directory Properties:
  releng/11.0/   (props changed)

Modified: releng/11.0/libexec/rtld-elf/rtld.c
==============================================================================
--- releng/11.0/libexec/rtld-elf/rtld.c Fri Aug 19 08:07:04 2016        
(r304455)
+++ releng/11.0/libexec/rtld-elf/rtld.c Fri Aug 19 08:44:37 2016        
(r304456)
@@ -1916,6 +1916,7 @@ static void
 init_rtld(caddr_t mapbase, Elf_Auxinfo **aux_info)
 {
     Obj_Entry objtmp;  /* Temporary rtld object */
+    const Elf_Ehdr *ehdr;
     const Elf_Dyn *dyn_rpath;
     const Elf_Dyn *dyn_soname;
     const Elf_Dyn *dyn_runpath;
@@ -1954,6 +1955,9 @@ init_rtld(caddr_t mapbase, Elf_Auxinfo *
 
        relocate_objects(&objtmp, true, &objtmp, 0, NULL);
     }
+    ehdr = (Elf_Ehdr *)mapbase;
+    objtmp.phdr = (Elf_Phdr *)((char *)mapbase + ehdr->e_phoff);
+    objtmp.phsize = ehdr->e_phnum * sizeof(objtmp.phdr[0]);
 
     /* Initialize the object list. */
     TAILQ_INIT(&obj_list);
@@ -2164,8 +2168,7 @@ load_needed_objects(Obj_Entry *first, in
 {
     Obj_Entry *obj;
 
-    obj = first;
-    TAILQ_FOREACH_FROM(obj, &obj_list, next) {
+    for (obj = first; obj != NULL; obj = TAILQ_NEXT(obj, next)) {
        if (obj->marker)
            continue;
        if (process_needed(obj, obj->needed, flags) == -1)
@@ -2769,9 +2772,8 @@ relocate_objects(Obj_Entry *first, bool 
        Obj_Entry *obj;
        int error;
 
-       error = 0;
-       obj = first;
-       TAILQ_FOREACH_FROM(obj, &obj_list, next) {
+       for (error = 0, obj = first;  obj != NULL;
+           obj = TAILQ_NEXT(obj, next)) {
                if (obj->marker)
                        continue;
                error = relocate_object(obj, bind_now, rtldobj, flags,
@@ -2811,8 +2813,7 @@ resolve_objects_ifunc(Obj_Entry *first, 
 {
        Obj_Entry *obj;
 
-       obj = first;
-       TAILQ_FOREACH_FROM(obj, &obj_list, next) {
+       for (obj = first; obj != NULL; obj = TAILQ_NEXT(obj, next)) {
                if (obj->marker)
                        continue;
                if (resolve_object_ifunc(obj, bind_now, flags, lockstate) == -1)
@@ -4316,7 +4317,7 @@ trace_loaded_objects(Obj_Entry *obj)
 
     list_containers = getenv(_LD("TRACE_LOADED_OBJECTS_ALL"));
 
-    TAILQ_FOREACH_FROM(obj, &obj_list, next) {
+    for (; obj != NULL; obj = TAILQ_NEXT(obj, next)) {
        Needed_Entry            *needed;
        char                    *name, *path;
        bool                    is_lib;
@@ -4661,8 +4662,7 @@ allocate_tls(Obj_Entry *objs, void *oldt
         */
        free_tls(oldtls, 2*sizeof(Elf_Addr), sizeof(Elf_Addr));
     } else {
-       obj = objs;
-       TAILQ_FOREACH_FROM(obj, &obj_list, next) {
+       for (obj = objs; obj != NULL; obj = TAILQ_NEXT(obj, next)) {
                if (obj->marker || obj->tlsoffset == 0)
                        continue;
                addr = segbase - obj->tlsoffset;
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to