2014-03-21 Sabrini Ni <sabrinanitw@gmail.com>

* nds32/_argv.S: Replace syscall with break.
        * nds32/_argvlen.S: Ditto.
        * nds32/_chdir.S: Ditto.
        * nds32/_chmod.S: Ditto.
        * nds32/_close.S: Ditto.
        * nds32/_exit.S: Ditto.
        * nds32/_fstat.S: Ditto.
        * nds32/_getpid.S: Ditto.
        * nds32/_gettimeofday.S: Ditto.
        * nds32/_isatty.S: Ditto.
        * nds32/_kill.S: Ditto.
        * nds32/_link.S: Ditto.
        * nds32/_lseek.S: Ditto.
        * nds32/_open.S: Ditto.
        * nds32/_read.S: Ditto.
        * nds32/_rename.S: Ditto.
        * nds32/_stat.S: Ditto.
        * nds32/_system.S: Ditto.
        * nds32/_time.S: Ditto.
        * nds32/_times.S: Ditto.
        * nds32/_unlink.S: Ditto.
        * nds32/_utime.S: Ditto.
        * nds32/_write.S: Ditto.
        * nds32/syscall_error_handler.S: Ditto.
        * nds32/vh.h: New.
This commit is contained in:
Jeff Johnston 2014-03-21 21:02:52 +00:00
parent e59026e844
commit 23cf8028ec
26 changed files with 329 additions and 46 deletions

View File

@ -1,3 +1,31 @@
2014-03-21 Sabrini Ni <sabrinanitw@gmail.com>
* nds32/_argv.S: Replace syscall with break.
* nds32/_argvlen.S: Ditto.
* nds32/_chdir.S: Ditto.
* nds32/_chmod.S: Ditto.
* nds32/_close.S: Ditto.
* nds32/_exit.S: Ditto.
* nds32/_fstat.S: Ditto.
* nds32/_getpid.S: Ditto.
* nds32/_gettimeofday.S: Ditto.
* nds32/_isatty.S: Ditto.
* nds32/_kill.S: Ditto.
* nds32/_link.S: Ditto.
* nds32/_lseek.S: Ditto.
* nds32/_open.S: Ditto.
* nds32/_read.S: Ditto.
* nds32/_rename.S: Ditto.
* nds32/_stat.S: Ditto.
* nds32/_system.S: Ditto.
* nds32/_time.S: Ditto.
* nds32/_times.S: Ditto.
* nds32/_unlink.S: Ditto.
* nds32/_utime.S: Ditto.
* nds32/_write.S: Ditto.
* nds32/syscall_error_handler.S: Ditto.
* nds32/vh.h: New.
2014-03-21 Sabrini Ni <sabrinanitw@gmail.com>
* nds32/crt0.S: Initialize ITB base.

View File

@ -27,8 +27,10 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __NDS32_VH__
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _argv, SYS_argv
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,10 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __NDS32_VH__
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _argvlen, SYS_argvlen
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,10 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __NDS32_VH__
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _chdir, SYS_chdir
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,11 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __NDS32_VH__
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _chmod, SYS_chmod
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,16 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef __NDS32_VH__
#include "vh.h"
.extern _impure_ptr
TYPE1 _close, VH_CLOSE
#else /* not __NDS32_VH__ */
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _close, SYS_close
#endif /* not __NDS32_VH__ */

View File

@ -27,10 +27,16 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef __NDS32_VH__
#include "vh.h"
.extern _impure_ptr
TYPE3 _exit, VH_EXIT
#else /* not __NDS32_VH__ */
#include "../syscall.h"
#include "syscall_extra.h"
.section .text
.global _exit
.type _exit, @function
@ -38,3 +44,5 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
_exit:
syscall SYS_exit /* Make syscall 'SYS_exit'. */
.size _exit, .-_exit
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,17 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef __NDS32_VH__
#include "vh.h"
.extern _impure_ptr
TYPE1 _fstat, VH_FSTAT
#else /* not __NDS32_VH__ */
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _fstat, SYS_fstat
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,11 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __NDS32_VH__
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _getpid, SYS_getpid
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,16 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef __NDS32_VH__
#include "vh.h"
.extern _impure_ptr
TYPE3 _gettimeofday, VH_GETTIMEOFDAY
#else /* not __NDS32_VH__ */
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _gettimeofday, SYS_gettimeofday
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,16 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef __NDS32_VH__
#include "vh.h"
.extern _impure_ptr
TYPE0 _isatty, VH_ISATTY
#else /* not __NDS32_VH__ */
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _isatty, SYS_isatty
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,11 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __NDS32_VH__
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _kill, SYS_kill
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,10 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __NDS32_VH__
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _link, SYS_link
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,16 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef __NDS32_VH__
#include "vh.h"
.extern _impure_ptr
TYPE1 _lseek, VH_LSEEK
#else /* not __NDS32_VH__ */
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _lseek, SYS_lseek
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,16 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef __NDS32_VH__
#include "vh.h"
.extern _impure_ptr
TYPE1 _open, VH_OPEN
#else /* not __NDS32_VH__ */
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _open, SYS_open
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,16 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef __NDS32_VH__
#include "vh.h"
.extern _impure_ptr
TYPE1 _read, VH_READ
#else /* not __NDS32_VH__ */
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _read, SYS_read
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,16 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef __NDS32_VH__
#include "vh.h"
.extern _impure_ptr
TYPE1 _rename, VH_RENAME
#else /* not __NDS32_VH__ */
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _rename, SYS_rename
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,16 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef __NDS32_VH__
#include "vh.h"
.extern _impure_ptr
TYPE1 _stat, VH_STAT
#else /* not __NDS32_VH__ */
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _stat, SYS_stat
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,16 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef __NDS32_VH__
#include "vh.h"
.extern _impure_ptr
TYPE1 _system, VH_SYSTEM
#else /* not __NDS32_VH__ */
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _system, SYS_system
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,10 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __NDS32_VH__
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _time, SYS_time
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,10 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __NDS32_VH__
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _times, SYS_times
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,17 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef __NDS32_VH__
#include "vh.h"
.extern _impure_ptr
TYPE1 _lseek, VH_LSEEK
#else /* not __NDS32_VH__ */
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _unlink, SYS_unlink
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,10 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __NDS32_VH__
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _utime, SYS_utime
#endif /* not __NDS32_VH__ */

View File

@ -27,8 +27,16 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef __NDS32_VH__
#include "vh.h"
.extern _impure_ptr
TYPE1 _write, VH_WRITE
#else /* not __NDS32_VH__ */
#include "../syscall.h"
#include "syscall_extra.h"
SYS_WRAPPER _write, SYS_write
#endif /* not __NDS32_VH__ */

View File

@ -27,6 +27,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __NDS32_VH__
#include "../syscall.h"
#include "syscall_extra.h"
@ -47,3 +49,4 @@ __syscall_error_handler:
1:
ret
.size __syscall_error_handler, .-__syscall_error_handler
#endif /* not __NDS32_VH__ */

123
libgloss/nds32/vh.h Normal file
View File

@ -0,0 +1,123 @@
#ifndef _VH_H
#define _VH_H
/*
BREAK #SWID definition:
0x00 0x1F: Free to use
0x20 0x1FF: Reserved for EX9
0x0200 0x7EFF: Free to use
0x7F00 0x7FFF: Reserved for virtual hosting
*/
/* These are #SWID defined for Virtual Hosting. */
#define VH_FOPEN 0x7F00
#define VH_FREOPEN 0x7F01
#define VH_FCLOSE 0x7F02
#define VH_FFLUSH 0x7F03
#define VH_FREAD 0x7F04
#define VH_FWRITE 0x7F05
#define VH_FGETC 0x7F06
#define VH_FGETS 0x7F07
#define VH_FPUTC 0x7F08
#define VH_FPUTS 0x7F09
#define VH_UNGETC 0x7F0A
#define VH_FTELL 0x7F0B
#define VH_FSEEK 0x7F0C
#define VH_REWIND 0x7F0D
#define VH_CLEARERR 0x7F0E
#define VH_FEOF 0x7F0F
#define VH_FERROR 0x7F10
#define VH_REMOVE 0x7F11
#define VH_TMPFILE 0x7F12
/* From here, define Low-level routines. */
#define VH_EXIT 0x7F20
#define VH_OPEN 0x7F21
#define VH_CLOSE 0x7F22
#define VH_READ 0x7F23
#define VH_WRITE 0x7F24
#define VH_LSEEK 0x7F25
#define VH_UNLINK 0x7F26
#define VH_RENAME 0x7F27
#define VH_FSTAT 0x7F28
#define VH_STAT 0x7F29
#define VH_GETTIMEOFDAY 0x7F2A
#define VH_ISATTY 0x7F2B
#define VH_SYSTEM 0x7F2C
#define VH_GETERR 0x7F2D /* The method we get errno. */
/* Define macros that generate assembly output.
Generate a System Call exception to notify GDB
to handle this virtual I/O routine. */
.macro TYPE0 name num
/* If r0 is not NULL(0), set errno. */
.text
.global \name
.type \name, @function
.align 2
\name:
BREAK \num /* Generate_Exception(Breakpoint); */
bnez $r0, 1f /* Branch if success.
r0 value is not NULL(0). */
BREAK VH_GETERR
l.w $r15, _impure_ptr
swi $r0, [$r15] /* Set errno. */
move $r0, 0 /* Set return value as 0. */
1:
ret
.size \name, .-\name
.endm
.macro TYPE1 name num
/* If r0 is EOF(-1), set errno. */
.text
.global \name
.type \name, @function
.align 2
\name:
BREAK \num /* Generate_Exception(Breakpoint); */
addi $r15, $r0, 1
bnezs8 1f /* Branch if success.
r0 value is EOF(-1). */
BREAK VH_GETERR
l.w $r15, _impure_ptr
swi $r0, [$r15] /* Set errno. */
move $r0, -1 /* Set return value as -1. */
1:
ret
.size \name, .-\name
.endm
.macro TYPE2 name num
/* If r0 is less than r2, set errno. */
.text
.global \name
.type \name, @function
.align 2
\name:
BREAK \num /* Generate_Exception(Breakpoint); */
slt $r15, $r0, $r2 /* If r15 is set, set errno. */
beqzs8 1f /* Branch if success.
r15 is zero. */
move $r4, $r0 /* Keep return value r0. */
BREAK VH_GETERR
l.w $r15, _impure_ptr
swi $r0, [$r15] /* Set errno. */
move $r0, $r4 /* Restore r0. */
1:
ret
.size \name, .-\name
.endm
.macro TYPE3 name num
/* No errors are defined. */
.text
.global \name
.type \name, @function
.align 2
\name:
BREAK \num /* Generate_Exception(Breakpoint); */
ret
.size \name, .-\name
.endm
#endif /* _VH_H */