Author: kib
Date: Wed May  9 14:39:24 2018
New Revision: 333411
URL: https://svnweb.freebsd.org/changeset/base/333411

Log:
  Avoid calls to bzero() before ireloc.
  
  Evaluate cpu_stdext_feature early to have moved link_elf_ireloc() see
  correct flags, most important is SMAP.
  
  Tested by:    mjg
  Sponsored by: The FreeBSD Foundation
  Differential revision:        https://reviews.freebsd.org/D15367

Modified:
  head/sys/amd64/amd64/machdep.c
  head/sys/kern/link_elf.c

Modified: head/sys/amd64/amd64/machdep.c
==============================================================================
--- head/sys/amd64/amd64/machdep.c      Wed May  9 14:38:07 2018        
(r333410)
+++ head/sys/amd64/amd64/machdep.c      Wed May  9 14:39:24 2018        
(r333411)
@@ -1556,19 +1556,24 @@ hammer_time(u_int64_t modulep, u_int64_t physfree)
 
        TSRAW(&thread0, TS_ENTER, __func__, NULL);
 
-       /*
-        * This may be done better later if it gets more high level
-        * components in it. If so just link td->td_proc here.
-        */
-       proc_linkup0(&proc0, &thread0);
-
        kmdp = init_ops.parse_preload_data(modulep);
 
        identify_cpu1();
        identify_hypervisor();
+       /*
+        * hw.cpu_stdext_disable is ignored by the call, it will be
+        * re-evaluted by the below call to finishidentcpu().
+        */
+       identify_cpu2();
 
-       /* link_elf_ireloc(kmdp); */
+       link_elf_ireloc(kmdp);
 
+       /*
+        * This may be done better later if it gets more high level
+        * components in it. If so just link td->td_proc here.
+        */
+       proc_linkup0(&proc0, &thread0);
+
        /* Init basic tunables, hz etc */
        init_param1();
 
@@ -1753,7 +1758,6 @@ hammer_time(u_int64_t modulep, u_int64_t physfree)
                cninit();
                amd64_kdb_init();
        }
-       link_elf_ireloc(kmdp);
 
        getmemsize(kmdp, physfree);
        init_param2(physmem);

Modified: head/sys/kern/link_elf.c
==============================================================================
--- head/sys/kern/link_elf.c    Wed May  9 14:38:07 2018        (r333410)
+++ head/sys/kern/link_elf.c    Wed May  9 14:39:24 2018        (r333411)
@@ -1692,9 +1692,15 @@ link_elf_ireloc(caddr_t kmdp)
 {
        struct elf_file eff;
        elf_file_t ef;
+       volatile char *c;
+       size_t i;
 
        ef =  &eff;
-       bzero(ef, sizeof(*ef));
+
+       /* Do not use bzero/memset before ireloc is done. */
+       for (c = (char *)ef, i = 0; i < sizeof(*ef); i++)
+               c[i] = 0;
+
        ef->modptr = kmdp;
        ef->dynamic = (Elf_Dyn *)&_DYNAMIC;
        parse_dynamic(ef);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to