WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-ppc-devel

Re: [XenPPC] PHDR link failure testcase

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.
 
> >  Initially the linker guessed
> >it 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.

> 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?

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;
+}
 SECTIONS
 {
   /* Read-only sections, merged into text segment: */
   PROVIDE (__executable_start = 0x10000000); . = 0x10000000 + SIZEOF_HEADERS;
-  .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 Tony

   linux.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