diff --git a/board/netta2/u-boot.lds b/board/netta2/u-boot.lds
index 9001767..684ab81 100644
--- a/board/netta2/u-boot.lds
+++ b/board/netta2/u-boot.lds
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2000-2004
+ * (C) Copyright 2000-2010
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
  * See file CREDITS for list of people who contributed to this
@@ -22,62 +22,24 @@
  */
 
 OUTPUT_ARCH(powerpc)
-/* Do we need any of these for elf?
-   __DYNAMIC = 0;    */
+
 SECTIONS
 {
   /* Read-only sections, merged into text segment: */
   . = + SIZEOF_HEADERS;
-  .interp	: { *(.interp)		}
-  .hash         : { *(.hash)		}
-  .dynsym       : { *(.dynsym)		}
-  .dynstr       : { *(.dynstr)		}
-  .rel.text     : { *(.rel.text)	}
-  .rela.text    : { *(.rela.text)	}
-  .rel.data     : { *(.rel.data)	}
-  .rela.data    : { *(.rela.data)	}
-  .rel.rodata   : { *(.rel.rodata)	}
-  .rela.rodata  : { *(.rela.rodata)	}
-  .rel.got      : { *(.rel.got)		}
-  .rela.got     : { *(.rela.got)	}
-  .rel.ctors    : { *(.rel.ctors)	}
-  .rela.ctors   : { *(.rela.ctors)	}
-  .rel.dtors    : { *(.rel.dtors)	}
-  .rela.dtors   : { *(.rela.dtors)	}
-  .rel.bss      : { *(.rel.bss)		}
-  .rela.bss     : { *(.rela.bss)	}
-  .rel.plt      : { *(.rel.plt)		}
-  .rela.plt     : { *(.rela.plt)	}
-  .init         : { *(.init)		}
-  .plt		: { *(.plt)		}
   .text	:
   {
-    arch/powerpc/cpu/mpc8xx/start.o		(.text)
-    arch/powerpc/cpu/mpc8xx/traps.o		(.text)
-    common/dlmalloc.o		(.text)
-    arch/powerpc/lib/ppcstring.o		(.text)
-    lib/vsprintf.o	(.text)
-    lib/crc32.o		(.text)
-    lib/zlib.o		(.text)
-    arch/powerpc/lib/cache.o		(.text)
-    arch/powerpc/lib/time.o		(.text)
+    arch/powerpc/cpu/mpc8xx/start.o	(.text*)
+    arch/powerpc/cpu/mpc8xx/traps.o	(.text*)
 
-    . = DEFINED(env_offset) ? env_offset : .;
-    common/env_embedded.o	(.text)
-
-    *(.text)
-    *(.got1)
+    *(.text*)
   }
   _etext = .;
   PROVIDE (etext = .);
   .rodata    :
   {
-    *(.eh_frame)
     *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
   }
-  .fini      : { *(.fini)    } =0
-  .ctors     : { *(.ctors)   }
-  .dtors     : { *(.dtors)   }
 
   /* Read-write section, merged into data segment: */
   . = (. + 0x00FF) & 0xFFFFFF00;
@@ -85,23 +47,19 @@
   PROVIDE (erotext = .);
   .reloc   :
   {
-    *(.got)
+    KEEP(*(.got))
     _GOT2_TABLE_ = .;
-    *(.got2)
+    KEEP(*(.got2))
     _FIXUP_TABLE_ = .;
-    *(.fixup)
+    KEEP(*(.fixup))
   }
   __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
   __fixup_entries = (. - _FIXUP_TABLE_)>>2;
 
   .data    :
   {
-    *(.data)
-    *(.data1)
-    *(.sdata)
-    *(.sdata2)
-    *(.dynamic)
-    CONSTRUCTORS
+    *(.data*)
+    *(.sdata*)
   }
   _edata  =  .;
   PROVIDE (edata = .);
@@ -127,9 +85,8 @@
   __bss_start = .;
   .bss (NOLOAD)       :
   {
-   *(.sbss) *(.scommon)
-   *(.dynbss)
-   *(.bss)
+   *(.bss*)
+   *(.sbss*)
    *(COMMON)
    . = ALIGN(4);
   }
