All pastes #331659 Raw Edit

Cody Brocious

public python v1 · immutable
#331659 ·published 2007-01-29 02:32 UTC
rendered paste body
	def createLinkerscript(self):		ldscript = os.popen('ld -zcombreloc --verbose', 'r').read()				ldscript = ldscript.split('==================================================')[1]		ldscript = ldscript[:ldscript.rfind('}')] # Chop off last curly brace				phdrs = []		phdrs.append('headers PT_PHDR PHDRS;')		phdrs.append('interp PT_INTERP;')		phdrs.append('text PT_LOAD FILEHDR PHDRS;')		phdrs.append('data PT_LOAD;')		phdrs.append('dynamic PT_DYNAMIC;')				seg_map = dict(			interp=('.interp',),			text=(				'.interp', '.note.ABI-tag', '.hash', '.dynsym',				'.dynstr', '.gnu.version', '.gnu.version_r',				'.rel.got', '.rel.bss', '.rel.plt', '.init',				'.plt', '.text', '.fini', '.rodata'			),			data=('.dynamic', '.got', '.got.plt', '.data', '.bss'),			dynamic=('.dynamic',),		)				prev = ldscript.find('SECTIONS')		while True:			curly = ldscript.find('}', prev)						if curly < 0:				break						lcurly = ldscript.rfind('{', 0, curly)			colon = ldscript.rfind(':', 0, curly)			dot = ldscript.rfind('.', 0, lcurly)			slash = ldscript.rfind('/', 0, lcurly)			semi = ldscript.rfind(';', 0, curly)						curly += 1			prev = curly						if slash > dot:				continue						while True:				newdot = ldscript.rfind('.', 0, dot)				cut = ldscript[newdot+1:dot].lower()								right = True								for char in cut:					if char in loweralpha:						continue					else:						right = False						break								if not right:					break								dot = newdot						if not (curly > lcurly > colon > dot > semi):				continue						segname = ldscript[dot:colon].strip().split(' ', 1)[0]						segstr = ''						for seg in seg_map:				seglist = seg_map[seg]				if segname in seglist:					segstr += ' :%s' % seg						if segstr:				ldscript = ldscript[:curly] + segstr + ldscript[curly:]						prev += 6				segs = []				i = 0		for section in self.dest.sections:			phdrs.append('alky%i PT_LOAD;' % i)			segs.append('  %s 0x%08x : { *(%s) } :alky%i' % (section.name, section.addr, section.name, i))			i += 1				ldscript += '\n'.join(segs)		ldscript += '\n}\n'				ldscript = list(ldscript.split('SECTIONS', 1))				ldscript[0] += '\nPHDRS {\n  %s\n}\n' % '\n  '.join(phdrs)				ldscript = 'SECTIONS'.join(ldscript)				return ldscript