Author: emaste
Date: Wed Dec 28 14:25:04 2016
New Revision: 310702
URL: https://svnweb.freebsd.org/changeset/base/310702

Log:
  btxldr: process all PT_LOAD segments, not just the first two
  
  With default settings GNU ld generates two PT_LOADs for loader.sym while
  LLD generates three, because it creates a rodata segment. Previously
  btxldr terminated phdr processing after two PT_LOADs. Remove the early
  termination to process all PT_LOADs.
  
  Reviewed by:  kib, tsoome
  MFC after:    2 weeks
  Sponsored by: The FreeBSD Foundation
  Differential Revision:        https://reviews.freebsd.org/D8929

Modified:
  head/sys/boot/i386/btx/btxldr/btxldr.S

Modified: head/sys/boot/i386/btx/btxldr/btxldr.S
==============================================================================
--- head/sys/boot/i386/btx/btxldr/btxldr.S      Wed Dec 28 14:10:33 2016        
(r310701)
+++ head/sys/boot/i386/btx/btxldr/btxldr.S      Wed Dec 28 14:25:04 2016        
(r310702)
@@ -198,7 +198,6 @@ start.3:
                call putstr                     #  message
                movl $m_segs,%esi               # Format string
 #endif
-               movl $0x2,%edi                  # Segment count
                movl 0x1c(%ebx),%edx            # Get e_phoff
                addl %ebx,%edx                  # To pointer
                movzwl 0x2c(%ebx),%ecx          # Get e_phnum
@@ -216,8 +215,7 @@ start.4:    cmpl $0x1,(%edx)                # Is p_type P
                call putstr                     # End message
 #endif
                pushl %esi                      # Save
-               pushl %edi                      #  working
-               pushl %ecx                      #  registers
+               pushl %ecx                      #  working registers
                movl 0x4(%edx),%esi             # Get p_offset
                addl %ebx,%esi                  #  as pointer
                movl 0x8(%edx),%edi             # Get p_vaddr
@@ -232,13 +230,9 @@ start.4:   cmpl $0x1,(%edx)                # Is p_type P
                rep                             #  zero
                stosb                           #  them
 start.5:       popl %ecx                       # Restore
-               popl %edi                       #  working
                popl %esi                       #  registers
-               decl %edi                       # Segments to do
-               je start.7                      # If none
 start.6:       addl $0x20,%edx                 # To next entry
                loop start.4                    # Till done
-start.7:
 #ifdef BTXLDR_VERBOSE
                movl $m_done,%esi               # Display done
                call putstr                     #  message
_______________________________________________
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