* microblaze/_exception_handler.S: Adjust to be weak.
* microblaze/Makefile.in: Add LINUX_BSP. * microblaze/elf-gloss-linux.ld: New file. * microblaze/elf-gloss-linux.specs: Likewise. * microblaze/linux-crt0.S: Likewise. * microblaze/linux-inbyte.c: Likewise. * microblaze/linux-outbyte.c: Likewise. * microblaze/linux-syscalls-wrap.c: Likewise. * microblaze/linux-syscalls.S: Likewise. * microblaze/linux-syscalls.h: Likewise.
This commit is contained in:
parent
b143d094ee
commit
2635a8d6df
|
@ -1,3 +1,19 @@
|
||||||
|
2013-07-23 Nagaraju Mekala <nagaraju.mekala@xilinx.com>
|
||||||
|
|
||||||
|
* microblaze/_exception_handler.S: Adjust to be weak.
|
||||||
|
|
||||||
|
2013-07-23 Edgar E. Iglesias <edgar.iglesias@xilinx.com>
|
||||||
|
|
||||||
|
* microblaze/Makefile.in: Add LINUX_BSP.
|
||||||
|
* microblaze/elf-gloss-linux.ld: New file.
|
||||||
|
* microblaze/elf-gloss-linux.specs: Likewise.
|
||||||
|
* microblaze/linux-crt0.S: Likewise.
|
||||||
|
* microblaze/linux-inbyte.c: Likewise.
|
||||||
|
* microblaze/linux-outbyte.c: Likewise.
|
||||||
|
* microblaze/linux-syscalls-wrap.c: Likewise.
|
||||||
|
* microblaze/linux-syscalls.S: Likewise.
|
||||||
|
* microblaze/linux-syscalls.h: Likewise.
|
||||||
|
|
||||||
2013-07-17 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
|
2013-07-17 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
|
||||||
|
|
||||||
* lm32/configure: Regenerate.
|
* lm32/configure: Regenerate.
|
||||||
|
|
|
@ -84,25 +84,37 @@ OBJS = ${GENOBJS} sbrk.o timer.o _exception_handler.o _hw_exception_handler.o \
|
||||||
xil_malloc.o xil_sbrk.o xil_printf.o
|
xil_malloc.o xil_sbrk.o xil_printf.o
|
||||||
SCRIPTS = xilinx.ld
|
SCRIPTS = xilinx.ld
|
||||||
|
|
||||||
|
# Tiny Linux BSP.
|
||||||
|
LINUX_BSP = libgloss-linux.a
|
||||||
|
CRT += linux-crt0.o
|
||||||
|
LINUX_OBJS = linux-syscalls.o linux-syscalls-wrap.o
|
||||||
|
LINUX_OBJS += linux-outbyte.o linux-inbyte.o
|
||||||
|
LINUX_SCRIPTS = elf-gloss-linux.specs
|
||||||
|
|
||||||
CPU = @CPU@
|
CPU = @CPU@
|
||||||
|
|
||||||
#### Host specific Makefile fragment comes in here.
|
#### Host specific Makefile fragment comes in here.
|
||||||
@host_makefile_frag@
|
@host_makefile_frag@
|
||||||
|
|
||||||
all: ${CRT} ${LIB}
|
all: ${CRT} ${LIB} ${LINUX_BSP}
|
||||||
|
|
||||||
install: ${CRT} ${LIB}
|
install: ${CRT} ${LIB} install-linux
|
||||||
@for crt in ${CRT}; do \
|
@for crt in ${CRT}; do \
|
||||||
$(INSTALL_PROGRAM) $${crt} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$${crt}; \
|
$(INSTALL_PROGRAM) $${crt} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$${crt}; \
|
||||||
done
|
done
|
||||||
$(INSTALL_PROGRAM) ${LIB} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}
|
$(INSTALL_PROGRAM) ${LIB} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}
|
||||||
$(INSTALL_PROGRAM) $(srcdir)/${SCRIPTS} $(DESTDIR)$(tooldir)/lib/
|
$(INSTALL_PROGRAM) $(srcdir)/${SCRIPTS} $(DESTDIR)$(tooldir)/lib/
|
||||||
|
|
||||||
|
install-linux: ${LINUX_BSP}
|
||||||
|
$(INSTALL_PROGRAM) ${LINUX_BSP} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}
|
||||||
|
set -e; for x in ${LINUX_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done
|
||||||
|
|
||||||
crt0.o: crt0.S
|
crt0.o: crt0.S
|
||||||
crt1.o: crt1.S
|
crt1.o: crt1.S
|
||||||
crt2.o: crt2.S
|
crt2.o: crt2.S
|
||||||
crt3.o: crt3.S
|
crt3.o: crt3.S
|
||||||
crt4.o: crt4.S
|
crt4.o: crt4.S
|
||||||
|
linux-crt0.o: linux-crt0.S
|
||||||
crtinit.o: crtinit.S
|
crtinit.o: crtinit.S
|
||||||
sim-crtinit.o: sim-crtinit.S
|
sim-crtinit.o: sim-crtinit.S
|
||||||
sim-pgcrtinit.o: sim-pgcrtinit.S
|
sim-pgcrtinit.o: sim-pgcrtinit.S
|
||||||
|
@ -120,6 +132,10 @@ ${LIB}: ${OBJS}
|
||||||
${AR} ${ARFLAGS} $@ ${OBJS}
|
${AR} ${ARFLAGS} $@ ${OBJS}
|
||||||
${RANLIB} $@
|
${RANLIB} $@
|
||||||
|
|
||||||
|
${LINUX_BSP}: ${LINUX_OBJS}
|
||||||
|
${AR} ${ARFLAGS} $@ ${LINUX_OBJS}
|
||||||
|
${RANLIB} $@
|
||||||
|
|
||||||
.PHONY: info dvi doc install-info clean-info
|
.PHONY: info dvi doc install-info clean-info
|
||||||
info doc dvi:
|
info doc dvi:
|
||||||
install-info:
|
install-info:
|
||||||
|
|
|
@ -30,9 +30,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.globl _exception_handler # Exception Handler Label
|
|
||||||
.align 2
|
.align 2
|
||||||
|
.weakext _exception_handler
|
||||||
|
.ent _exception_handler
|
||||||
|
.type _exception_handler, @function
|
||||||
|
|
||||||
_exception_handler:
|
_exception_handler:
|
||||||
rtsd r17, 0
|
addi r11,r11,8
|
||||||
nop
|
bra r11
|
||||||
|
|
|
@ -0,0 +1,159 @@
|
||||||
|
/* Default linker script, for normal executables */
|
||||||
|
/*OUTPUT_FORMAT("elf32-microblaze", "", "") */
|
||||||
|
/*SEARCH_DIR("/proj/fv1/gnu_builds/head/mb/release/lin/mb/microblaze-xilinx-elf/lib");*/
|
||||||
|
/*SEARCH_DIR("/proj/fv1/gnu_builds/head/mb/release/lin/mb/microblaze-xilinx-elf/lib");*/
|
||||||
|
OUTPUT_ARCH(microblaze)
|
||||||
|
ENTRY(_start)
|
||||||
|
_TEXT_START_ADDR = DEFINED(_TEXT_START_ADDR) ? _TEXT_START_ADDR : 0x50;
|
||||||
|
|
||||||
|
PHDRS
|
||||||
|
{
|
||||||
|
text PT_LOAD FILEHDR PHDRS;
|
||||||
|
data PT_LOAD;
|
||||||
|
bss PT_LOAD;
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
. = SIZEOF_HEADERS;
|
||||||
|
_ftext = .;
|
||||||
|
.text : {
|
||||||
|
*(.text)
|
||||||
|
*(.text.*)
|
||||||
|
*(.gnu.linkonce.t.*)
|
||||||
|
} : text
|
||||||
|
_etext = .;
|
||||||
|
.init : { KEEP (*(.init)) } =0
|
||||||
|
.fini : { KEEP (*(.fini)) } =0
|
||||||
|
PROVIDE (__CTOR_LIST__ = .);
|
||||||
|
PROVIDE (___CTOR_LIST__ = .);
|
||||||
|
.ctors :
|
||||||
|
{
|
||||||
|
/* 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))
|
||||||
|
} : text
|
||||||
|
PROVIDE (__CTOR_END__ = .);
|
||||||
|
PROVIDE (___CTOR_END__ = .);
|
||||||
|
PROVIDE (__DTOR_LIST__ = .);
|
||||||
|
PROVIDE (___DTOR_LIST__ = .);
|
||||||
|
.dtors :
|
||||||
|
{
|
||||||
|
KEEP (*crtbegin.o(.dtors))
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||||
|
KEEP (*(SORT(.dtors.*)))
|
||||||
|
KEEP (*(.dtors))
|
||||||
|
} : text
|
||||||
|
PROVIDE (__DTOR_END__ = .);
|
||||||
|
PROVIDE (___DTOR_END__ = .);
|
||||||
|
. = ALIGN(4);
|
||||||
|
_frodata = . ;
|
||||||
|
.rodata : {
|
||||||
|
*(.rodata)
|
||||||
|
*(.rodata.*)
|
||||||
|
*(.gnu.linkonce.r.*)
|
||||||
|
CONSTRUCTORS; /* Is this needed? */
|
||||||
|
} : text
|
||||||
|
_erodata = .;
|
||||||
|
/* New page. */
|
||||||
|
. += 0x1000;
|
||||||
|
/* Alignments by 8 to ensure that _SDA2_BASE_ on a word boundary */
|
||||||
|
/* Note that .sdata2 and .sbss2 must be contiguous */
|
||||||
|
. = ALIGN(8);
|
||||||
|
_ssrw = .;
|
||||||
|
.sdata2 : {
|
||||||
|
*(.sdata2)
|
||||||
|
*(.sdata2.*)
|
||||||
|
*(.gnu.linkonce.s2.*)
|
||||||
|
} : data
|
||||||
|
. = ALIGN(4);
|
||||||
|
.sbss2 : {
|
||||||
|
PROVIDE (__sbss2_start = .);
|
||||||
|
*(.sbss2)
|
||||||
|
*(.sbss2.*)
|
||||||
|
*(.gnu.linkonce.sb2.*)
|
||||||
|
PROVIDE (__sbss2_end = .);
|
||||||
|
} : data
|
||||||
|
. = ALIGN(8);
|
||||||
|
_essrw = .;
|
||||||
|
_ssrw_size = _essrw - _ssrw;
|
||||||
|
PROVIDE (_SDA2_BASE_ = _ssrw + (_ssrw_size / 2 ));
|
||||||
|
. = ALIGN(4);
|
||||||
|
_fdata = .;
|
||||||
|
.data : {
|
||||||
|
*(.data)
|
||||||
|
*(.gnu.linkonce.d.*)
|
||||||
|
CONSTRUCTORS; /* Is this needed? */
|
||||||
|
PROVIDE (__bss_start = .);
|
||||||
|
} : data
|
||||||
|
_edata = . ;
|
||||||
|
/* Added to handle pic code */
|
||||||
|
.got : {
|
||||||
|
*(.got)
|
||||||
|
}
|
||||||
|
.got1 : {
|
||||||
|
*(.got1)
|
||||||
|
}
|
||||||
|
.got2 : {
|
||||||
|
*(.got2)
|
||||||
|
}
|
||||||
|
/* Added by Sathya to handle C++ exceptions */
|
||||||
|
.eh_frame : {
|
||||||
|
*(.eh_frame)
|
||||||
|
}
|
||||||
|
.jcr : {
|
||||||
|
*(.jcr)
|
||||||
|
. = ALIGN(4096);
|
||||||
|
}
|
||||||
|
.gcc_except_table : {
|
||||||
|
*(.gcc_except_table)
|
||||||
|
}
|
||||||
|
. = ALIGN(4096);
|
||||||
|
/* Alignments by 8 to ensure that _SDA_BASE_ on a word boundary */
|
||||||
|
/* Note that .sdata and .sbss must be contiguous */
|
||||||
|
. = ALIGN(8);
|
||||||
|
_ssro = .;
|
||||||
|
.sdata : {
|
||||||
|
*(.sdata)
|
||||||
|
*(.sdata.*)
|
||||||
|
*(.gnu.linkonce.s.*)
|
||||||
|
}
|
||||||
|
. = ALIGN(4);
|
||||||
|
.sbss : {
|
||||||
|
PROVIDE (__sbss_start = .);
|
||||||
|
*(.sbss)
|
||||||
|
*(.sbss.*)
|
||||||
|
*(.gnu.linkonce.sb.*)
|
||||||
|
PROVIDE (__sbss_end = .);
|
||||||
|
}
|
||||||
|
. = ALIGN(8);
|
||||||
|
_essro = .;
|
||||||
|
_ssro_size = _essro - _ssro;
|
||||||
|
PROVIDE (_SDA_BASE_ = _ssro + (_ssro_size / 2 ));
|
||||||
|
. = ALIGN(4);
|
||||||
|
_fbss = .;
|
||||||
|
.bss : {
|
||||||
|
PROVIDE (__bss_start = .);
|
||||||
|
*(.bss)
|
||||||
|
*(.bss.*)
|
||||||
|
*(.gnu.linkonce.b.*)
|
||||||
|
*(COMMON)
|
||||||
|
. = ALIGN(4);
|
||||||
|
PROVIDE (__bss_end = .);
|
||||||
|
. = ALIGN(4096);
|
||||||
|
} : bss
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
%rename link old_link
|
||||||
|
%rename lib libc
|
||||||
|
|
||||||
|
*link:
|
||||||
|
%(old_link) -defsym _TEXT_START_ADDR=0x10000 -z max-page-size=4096 -z common-page-size=4096 --no-omagic
|
||||||
|
|
||||||
|
*libgloss:
|
||||||
|
-lgloss-linux
|
||||||
|
|
||||||
|
*lib:
|
||||||
|
-start-group -lgloss-linux -lxil-linux -lc -lm -end-group
|
||||||
|
|
||||||
|
*startfile:
|
||||||
|
linux-crt0%O%s crtbegin%O%s
|
|
@ -0,0 +1,58 @@
|
||||||
|
/* linux-crt0 -- Startup routines for the Linux BSP.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011 Edgar E. Iglesias
|
||||||
|
*
|
||||||
|
* The authors hereby grant permission to use, copy, modify, distribute,
|
||||||
|
* and license this software and its documentation for any purpose, provided
|
||||||
|
* that existing copyright notices are retained in all copies and that this
|
||||||
|
* notice is included verbatim in any distributions. No written agreement,
|
||||||
|
* license, or royalty fee is required for any of the authorized uses.
|
||||||
|
* Modifications to this software may be copyrighted by their authors
|
||||||
|
* and need not follow the licensing terms described here, provided that
|
||||||
|
* the new terms are clearly indicated on the first page of each file where
|
||||||
|
* they apply.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.section .text
|
||||||
|
.globl _start
|
||||||
|
.ent _start
|
||||||
|
.type _start, @function
|
||||||
|
_start:
|
||||||
|
la r13, r0, _SDA_BASE_
|
||||||
|
la r2, r0, _SDA2_BASE_
|
||||||
|
|
||||||
|
brlid r15, __init
|
||||||
|
nop
|
||||||
|
|
||||||
|
lwi r5, r1, 0
|
||||||
|
addik r6, r1, 4
|
||||||
|
|
||||||
|
# Add argc * 4.
|
||||||
|
addk r7, r5, r5
|
||||||
|
addk r7, r7, r7
|
||||||
|
|
||||||
|
brlid r15, main
|
||||||
|
# Now add 4 + r1 (i.e r6) in the delayslot.
|
||||||
|
addk r7, r7, r6
|
||||||
|
|
||||||
|
brlid r15, exit
|
||||||
|
addik r5, r3, 0
|
||||||
|
.size _start, . - _start
|
||||||
|
.end _start
|
||||||
|
|
||||||
|
/* Replacement for the GCC provided crti.S. This one avoids the
|
||||||
|
setup of stack protection regs (which result in privilieged
|
||||||
|
insn exceptions when running in user-space). */
|
||||||
|
.section .init, "ax"
|
||||||
|
.global __init
|
||||||
|
.align 2
|
||||||
|
__init:
|
||||||
|
addik r1, r1, -8
|
||||||
|
sw r15, r0, r1
|
||||||
|
|
||||||
|
.section .fini, "ax"
|
||||||
|
.global __fini
|
||||||
|
.align 2
|
||||||
|
__fini:
|
||||||
|
addik r1, r1, -8
|
||||||
|
sw r15, r0, r1
|
|
@ -0,0 +1,6 @@
|
||||||
|
int inbyte(void)
|
||||||
|
{
|
||||||
|
char ch = 0;
|
||||||
|
read(0, &ch, 1);
|
||||||
|
return ch;
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
void outbyte (unsigned char c)
|
||||||
|
{
|
||||||
|
_write(1, &c, 1);
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
int isatty (int fd) {
|
||||||
|
return 1;
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
/* linux-syscalls - Syscall interface to microblaze linux
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011 Edgar E. Iglesias
|
||||||
|
*
|
||||||
|
* The authors hereby grant permission to use, copy, modify, distribute,
|
||||||
|
* and license this software and its documentation for any purpose, provided
|
||||||
|
* that existing copyright notices are retained in all copies and that this
|
||||||
|
* notice is included verbatim in any distributions. No written agreement,
|
||||||
|
* license, or royalty fee is required for any of the authorized uses.
|
||||||
|
* Modifications to this software may be copyrighted by their authors
|
||||||
|
* and need not follow the licensing terms described here, provided that
|
||||||
|
* the new terms are clearly indicated on the first page of each file where
|
||||||
|
* they apply.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "linux-syscalls.h"
|
||||||
|
|
||||||
|
#define FUNC(name) .type name, %function; name:
|
||||||
|
|
||||||
|
#define GLOBAL(name) .global name; FUNC(name)
|
||||||
|
#define SIZE(name) .size name, .-name
|
||||||
|
|
||||||
|
# define SYSCALL_BODY(name) \
|
||||||
|
addik r12, r0, SYS_ ## name; \
|
||||||
|
brki r14, 8; \
|
||||||
|
rtsd r15, 8; \
|
||||||
|
nop;
|
||||||
|
|
||||||
|
# define SYSCALL(name) \
|
||||||
|
GLOBAL(_ ## name); \
|
||||||
|
SYSCALL_BODY(name); \
|
||||||
|
SIZE(_ ## name)
|
||||||
|
|
||||||
|
SYSCALL(brk)
|
||||||
|
SYSCALL(exit)
|
||||||
|
SYSCALL(read)
|
||||||
|
SYSCALL(write)
|
||||||
|
SYSCALL(open)
|
||||||
|
SYSCALL(close)
|
||||||
|
SYSCALL(lseek)
|
||||||
|
SYSCALL(fstat)
|
||||||
|
SYSCALL(unlink)
|
||||||
|
SYSCALL(getpid)
|
||||||
|
SYSCALL(kill)
|
||||||
|
SYSCALL(rt_sigaction)
|
|
@ -0,0 +1,28 @@
|
||||||
|
/** Linux system call interface for the MicroBlaze processor.
|
||||||
|
* Copyright (c) 2009 Edgar E. Iglesias.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software
|
||||||
|
* is freely granted, provided that this notice is preserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SYS_exit 1
|
||||||
|
#define SYS_fork 2
|
||||||
|
#define SYS_read 3
|
||||||
|
#define SYS_write 4
|
||||||
|
#define SYS_open 5
|
||||||
|
#define SYS_close 6
|
||||||
|
#define SYS_waitpid 7
|
||||||
|
#define SYS_creat 8
|
||||||
|
#define SYS_link 9
|
||||||
|
#define SYS_unlink 10
|
||||||
|
#define SYS_execve 11
|
||||||
|
#define SYS_chdir 12
|
||||||
|
#define SYS_time 13
|
||||||
|
|
||||||
|
#define SYS_lseek 19
|
||||||
|
#define SYS_getpid 20
|
||||||
|
#define SYS_kill 37
|
||||||
|
#define SYS_brk 45
|
||||||
|
#define SYS_fstat 108
|
||||||
|
|
||||||
|
#define SYS_rt_sigaction 174
|
Loading…
Reference in New Issue