Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Dec 2016 14:25:04 +0000 (UTC)
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r310702 - head/sys/boot/i386/btx/btxldr
Message-ID:  <201612281425.uBSEP4qO037214@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201612281425.uBSEP4qO037214>