Hi,

Ok, once again an issue stemming from the sloppy Binutils support. Thank you 
very much for your patch. I will apply it, further increasing the state of 
mess the Linux port is in, but solving the problem on the short term. If 
someday LM32 has a good support from the GNU toolchain (haha) or if I can find 
enough time for serious work on Clang, LLVM and a LM32 assembler/linker, we 
will revert that and use the correct architecture number that has been 
eventually attributed by the bearded hippies to LM32 (0x8a).

Regards,
Sébastien

On Wednesday 17 March 2010 08:31:21 you wrote:
> On Tue, Mar 16, 2010 at 10:40 PM, Richard Sharpe
> 
> <realrichardsha...@gmail.com> wrote:
> > On Tue, Mar 16, 2010 at 9:40 PM, Richard Sharpe
> >
> > <realrichardsha...@gmail.com> wrote:
> >> Some stuff now deleted ...
> >
> > OK, so I figured out the problem. If I change the value of EM_LM32 to
> > match what the toolchain builds, I get a loop in kmod trying to load
> > binfmt-xxxx, but that is because, as shown below, my initrd.bin (root
> > file system) has been built with a tool chain that embeds 0x666 in the
> > Machine/Arch field. Thus, I need to rebuild my initrd with the
> > toolchain.
> >
> > [r...@localhost linux-2.6]# lm32-elf-readelf -h
> >  /mnt/root-loop/bin/busybox ELF Header:
> >  Magic:   7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
> >  Class:                             ELF32
> >  Data:                              2's complement, big endian
> >  Version:                           1 (current)
> >  OS/ABI:                            UNIX - System V
> >  ABI Version:                       0
> >  Type:                              EXEC (Executable file)
> >  Machine:                           <unknown>: 0x666
> >  Version:                           0x1
> >  Entry point address:               0x1c
> >  Start of program headers:          52 (bytes into file)
> >  Start of section headers:          834236 (bytes into file)
> >  Flags:                             0x1
> >  Size of this header:               52 (bytes)
> >  Size of program headers:           32 (bytes)
> >  Number of program headers:         3
> >  Size of section headers:           40 (bytes)
> >  Number of section headers:         18
> >  Section header string table index: 15
> > [r...@localhost linux-2.6]# lm32-elf-readelf -h  ../m
> > micotoolchain44.tar.bz2  module-simple/
> > [r...@localhost linux-2.6]# lm32-elf-readelf -h
> >  ../module-simple/hello.ko ELF Header:
> >  Magic:   7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
> >  Class:                             ELF32
> >  Data:                              2's complement, big endian
> >  Version:                           1 (current)
> >  OS/ABI:                            UNIX - System V
> >  ABI Version:                       0
> >  Type:                              REL (Relocatable file)
> >  Machine:                           Lattice Mico32
> >  Version:                           0x1
> >  Entry point address:               0x0
> >  Start of program headers:          0 (bytes into file)
> >  Start of section headers:          16340 (bytes into file)
> >  Flags:                             0x1
> >  Size of this header:               52 (bytes)
> >  Size of program headers:           0 (bytes)
> >  Number of program headers:         0
> >  Size of section headers:           40 (bytes)
> >  Number of section headers:         25
> >  Section header string table index: 22
> 
> This patch will work. It works for the existing rootfs as well as
> modules built by the toolchain. Now, on to the next problem, which is
> that some modules will not even build.
> 
> index dd6eb92..df604de 100644
> --- a/arch/lm32/include/asm/elf.h
> +++ b/arch/lm32/include/asm/elf.h
> @@ -63,7 +63,8 @@ typedef struct fp_regs elf_fpregset_t;
>  /*
>   * This is used to ensure we don't load something for the wrong
>  architecture. */
> -#define elf_check_arch(x) ((x)->e_machine == EM_LM32)
> +#define elf_check_arch(x) ((x)->e_machine == EM_LM32 || \
> +                          (x)->e_machine == EM_LM32_OLD)
>  #define elf_check_fdpic(x) (1)
>  #define elf_check_const_displacement(x) (1)
> 
> @@ -73,7 +74,8 @@ typedef struct fp_regs elf_fpregset_t;
>  #define ELF_CLASS      ELFCLASS32
>  #define ELF_DATA       ELFDATA2MSB
>  #define ELF_ARCH       EM_LM32
> -#define EM_LM32 0x666 // FIXME
> +#define EM_LM32  0x8A // FIXME
> +#define EM_LM32_OLD 0x666 // The old value
> 
>  #define ELF_PLAT_INIT(_r, load_addr)   do { } while(0)
> 
_______________________________________________
http://lists.milkymist.org/listinfo.cgi/devel-milkymist.org
IRC: #milkym...@freenode
Webchat: www.milkymist.org/irc.html
Wiki: www.milkymist.org/wiki

Reply via email to