[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XenPPC] PHDR link failure testcase
On Aug 16, 2006, at 10:00 PM, Tony Breeds wrote: On Wed, Aug 16, 2006 at 08:10:20AM -0400, Jimi Xenidis wrote:Thanks for getting to the bottom of this Tony.As it's empty the linker decides to start a 3rd segment rather than waste disk space.Hmm, what is "empty"?By empty I mean "filled with 0s", which I believe is because all the per_cpu variables are initialised at runtime. so why does LONG(0) (from option (2)) fix this? Initially the linker guessedit would need 2 segments, but due to this decision it actually uses 3,causeing the abort. Aparently the newer (read current CVS) tools don't abort here but do the right thing.What _is_ the "right thing"?Use 3 PHDRS. Ok. Perhaps, this is just mythology/warm-n-fuzzy for me, but I really like having 1 PHDR. Lemmy collect my thoughts and come up with a rational reason.Sure. Wouldn't that mean that everything will end up being in a read/write/execute PHDR. Do we care about that? Not really its not like we protect any of it :) and the section separation still exits after-all we all (kernels/xen) link with -N/--omagic, which does not page align the data sections which has always implied a single PHDR. Besides, the more I do this the less I trust FW and bootloaders so a single segment is just cleaner. Placing everything in one PHDR would look like: --- diff -r 279843441136 xen/arch/powerpc/xen.lds.S --- a/xen/arch/powerpc/xen.lds.S Wed Aug 16 17:19:38 2006 -0500 +++ b/xen/arch/powerpc/xen.lds.S Thu Aug 17 11:30:50 2006 +1000 @@ -10,11 +10,15 @@ SEARCH_DIR("=/usr/local/lib64"); SEARCH_SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR ("=/usr/lib64"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/ lib"); SEARCH_DIR("=/usr/lib");/* Do we need any of these for elf? __DYNAMIC = 0; */ +PHDRS +{ + text PT_LOAD FILEHDR PHDRS; +} I think this is all we need, not other changes are required. SECTIONS { /* Read-only sections, merged into text segment: */PROVIDE (__executable_start = 0x10000000); . = 0x10000000 + SIZEOF_HEADERS; Actually the above line should just be: PROVIDE (__executable_start = .);We always specific the link address on the command line and not that we define PHDRS there is no need for SIZEOF_HEADERS (as the linker docs indicate) I'm pretty sure the rest of the changes are unnecessary. -JX - .interp : { *(.interp) } + .interp : { *(.interp) } :text .hash : { *(.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } @@ -121,7 +125,7 @@ SECTIONS __inithcall_end = .; __per_cpu_start = .; - .data.percpu : { *(.data.percpu) } :text + .data.percpu : { *(.data.percpu) } __per_cpu_data_end = .; . = __per_cpu_start + (NR_CPUS << PERCPU_SHIFT); . = ALIGN(STACK_SIZE); Yours Tonylinux.conf.au http://linux.conf.au/ || http:// lca2007.linux.org.au/Jan 15-20 2007 The Australian Linux Technical Conference! _______________________________________________ Xen-ppc-devel mailing list Xen-ppc-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ppc-devel _______________________________________________ Xen-ppc-devel mailing list Xen-ppc-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ppc-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |