I've got some really strange (for me, of course) problems, here. When trying
to build the 'sash', something is in the elf2flt.ld script seems to be
wrong, since the sparc-elf-ld dies with a 'parse error', when linking
everything together, with the following command:

sparc-elf-gcc -O1 -g  -Dlinux -D__linux__ -Dunix -D__uClinux__ -DEMBED
-I/uclinux/lib/libc/include -I/uclinux/lib/libm -I/uclinux -fno-builtin
-mcpu=v8 -I/uclinux/linux-2.0.x/include -Wl,-d -Wl,-elf2flt -o sh sash.o
cmds.o cmd_uclinux.o ls.o ps.o hexdump.o df.o free.o hostname.o
date.olibsash/libsash.a -L/uclinux/lib/libc/. -L/uclinux/lib/libc/lib
-L/uclinux/lib/libm -L/uclinux/lib/libnet -L/uclinux/lib/libdes
-L/uclinux/lib/libaes -L/uclinux/lib/libpcap -L/uclinux/lib/libssl -lc

The error output:

/opt/compilers/leox/gnu/lib/gcc/sparc-elf/4.1.2/../../../../sparc-elf/bin/ld.real:/tmp/flt-Z10404:99:
parse error

The temporary script file (/tmp/flt-Z10404):

================== /tmp/flt-Z10404 ================
ENTRY (_start)

MEMORY {
   flatmem : ORIGIN = 0x0, LENGTH = 0xfffffff
}

SECTIONS {

   .text 0x0 : {
       . = . + 4;
       . = ALIGN(0x4) ;
       _stext = . ;
       *(.text)
       *(.text.*)
       *(.gnu.warning)
       *(.stub)
       *(.gnu.linkonce.t*)
       *(.glue_7t)
       *(.glue_7)
       *(.jcr)
       *(.init)
       *(.fini)


       /* This is special code area at the end of the normal
          text section.  It contains a small lookup table at
          the start followed by the code pointed to by entries
          in the lookup table.  */
       . = ALIGN (4) ;
       PROVIDE(__ctbp = .);
       *(.call_table_data)
       *(.call_table_text)

       . = ALIGN(0x20) ;
       _etext = . ;
   } > flatmem

   .data : {
       . = ALIGN(0x4) ;
       _sdata = . ;
       __data_start = . ;
       data_start = . ;
       *(.got.plt)
       *(.got)
       FILL(0) ;
       . = ALIGN(0x20) ;
       LONG(-1)
       . = ALIGN(0x20) ;
       *(.rodata)
       *(.rodata1)
       *(.rodata.*)
       *(.gnu.linkonce.r*)
       *(.data)
       *(.data1)
       *(.data.*)
       *(.gnu.linkonce.d*)
       *(.data1)
       *(.eh_frame)
       *(.gcc_except_table)

       /* Microblaze has .sdata and .sbss (small bss).  They must
          be contiguous, so please don't move any of this. JW */
       _ssrw = . ;
       *(.sdata)
       *(.sdata.*)
       *(.sbss)            /* Don't move this! */
       _essrw = . ;

       _ssrw_size = _essrw - _ssrw;
       PROVIDE(_SDA_BASE_ = _ssrw + (_ssrw_size / 2));

       *(.gnu.linkonce.s.*)
       *(__libc_atexit)
       *(__libc_subinit)
       *(__libc_subfreeres)
       *(.note.ABI-tag)

       /* microblaze-specific read-only small data area
          and associated locating symbols */
       _ssro = . ;
       *(.sdata2)
       _essro = . ;
       _ssro_size = _essro - _ssro;
       PROVIDE(_SDA2_BASE_ = _ssro + (_ssro_size / 2));

       . = ALIGN(4) ;
       __CTOR_LIST__ = .;
       LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
   /* gcc uses crtbegin.o to find the start of
      the constructors, so we make sure it is
      first.  Because this is a wildcard, it
      doesn't matter if the user does not
      actually link against crtbegin.o; the
      linker won't look for a file to match a
      wildcard.  The wildcard also means that it
      doesn't matter which directory crtbegin.o
      is in.  */
   KEEP (*crtbegin*.o(.ctors))
   /* We don't want to include the .ctor section from
      from the crtend.o file until after the sorted ctors.
      The .ctor section from the crtend file contains the
      end of ctors marker and it must be last */
   KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
   KEEP (*(SORT(.ctors.*)))
       KEEP (*(.ctors))
       LONG(0)
       __CTOR_END__ = .;
       __DTOR_LIST__ = .;
       LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
   KEEP (*crtbegin*.o(.dtors))
   KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
   KEEP (*(SORT(.dtors.*)))
       KEEP (*(.dtors))
       LONG(0)
       __DTOR_END__ = .;

       PROVIDE (__preinit_array_start = .);
       KEEP (*(.preinit_array))
       PROVIDE (__preinit_array_end = .);

       PROVIDE (__init_array_start = .);
       KEEP (*(SORT(.init_array.*)))
       KEEP (*(.init_array))
       PROVIDE (__init_array_end = .);

       PROVIDE (__fini_array_start = .);
       KEEP (*(.fini_array))
       KEEP (*(SORT(.fini_array.*)))
       PROVIDE (__fini_array_end = .);

       . = ALIGN(0x10) ;
       _edata = . ;
   } > flatmem

   .bss : {
       . = ALIGN(0x4) ;
       _sbss = ALIGN(0x4) ;
       __bss_start = . ;
       *(.dynsbss)
       *(.sbss)
       *(.sbss.*)
       *(.scommon)
       *(.dynbss)
       *(.bss)
       *(.bss.*)
       *(.bss*)
       *(.gnu.linkonce.b*)
       *(COMMON)
       . = ALIGN(0x10) ;
       _ebss = . ;
       _end = . ;
       end = . ;
   } > flatmem

   .stack : {
       . = ALIGN(0x4);
       __stack_start = .;
   }

   .junk 0 : { *(.rel*) *(.rela*) }
   /* Stabs debugging sections.    */
   .stab 0 : { *(.stab) }
   .stabstr 0 : { *(.stabstr) }
   .stab.excl 0 : { *(.stab.excl) }
   .stab.exclstr 0 : { *(.stab.exclstr) }
   .stab.index 0 : { *(.stab.index) }
   .stab.indexstr 0 : { *(.stab.indexstr) }
   .comment 0 : { *(.comment) }
   .debug_abbrev 0 : { *(.debug_abbrev) }
   .debug_info 0 : { *(.debug_info) }
   .debug_line 0 : { *(.debug_line) }
   .debug_pubnames 0 : { *(.debug_pubnames) }
   .debug_aranges 0 : { *(.debug_aranges) }
}
=========================================

As far as I investigated, my 'ld' doesn't seems to recognize the 'KEEP'
directive, as if I comment anyone of them, the build fails in the next
occurency of it... Am I missing something important? Is the script really
bugged?

Thanks (and sorry the bad english),

Thiago Lima

ps: my cross-compile tools versions:
- sparc-elf-binutils-2.9.1
- sparc-elf-gcc-4.1.2
- sparc-elf-g++-4.1.2
- genromfs-0.5.1
- sparc-elf-gdb-6.6
- sparc-elf-insight-6.6
_______________________________________________
uClinux-dev mailing list
[email protected]
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by [email protected]
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev

Reply via email to