[rfa] Contribute newlib Support for mep-elf (MeP
Jeff Johnston
jjohnstn@redhat.com
Thu Nov 8 16:20:00 GMT 2007
Looks good. Please go ahead and check it in unless you are unsure about
the regenerated files.
-- Jeff J.
Dave Brolley wrote:
> Thanks for reviewing this. Here is the updated patch, ChangeLog,
> Makefile.am and setjmp.S. Makefile.am has also been regenerated using
> automake 1.9.6.
>
> Please let me know if you would like me to do the commit or if you plan
> to do it yourself.
>
> Thanks,
> Dave
>
> Jeff Johnston wrote:
>> Minor comments.
>>
>> Please look at libc/machine/arm/Makefile.am. You are missing the
>> additional AM_ACLOCAL_FLAGS path pointing to the top-level src
>> directory. As well, please add a lib_a_CFLAGS statement; although you
>> currently only have a .S file, it makes life easier for anyone who
>> adds a C file to the directory in the future. An author, or "written
>> by", comment in setjmp.S would be helpful since this code will fall
>> under the default Red Hat license. The ChangeLog comment for
>> setjmp.S's creation should specify setjmp.S (it currently does not).
>>
>> Other than those minor comments, approved for check-in.
>>
>> -- Jeff J.
>>
>
> ------------------------------------------------------------------------
>
> ## Process this file with automake to generate Makefile.in
>
> AUTOMAKE_OPTIONS = cygnus
>
> INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
>
> AM_CCASFLAGS = $(INCLUDES)
>
> noinst_LIBRARIES = lib.a
>
> lib_a_SOURCES = setjmp.S
> lib_a_CFLAGS = $(AM_CFLAGS)
>
> ACLOCAL_AMFLAGS = -I ../../.. -I ../../../..
> CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
>
>
> ------------------------------------------------------------------------
>
> #
> # Setjmp/longjmp for MeP
> #
> # DJ Delorie, Red Hat Inc.
> #
> # 19 32-bit words in the jmpbuf:
> # $0
> # $1
> # ...
> # $15
> # $pc
> # $hi
> # $lo
> #
> # Note that $0 is saved but not restored. It can't be restored
> # as it's the return value of setjmp, but we save it in case
> # some application wants to see it in the jmp_buf. Ideally,
> # we should not need to save anything that is call-clobbered,
> # but you never know what the user is going to tell gcc with -f
> # options.
>
> .noregerr
> .text
>
> .globl setjmp
> .type setjmp,@function
>
> setjmp:
>
> # $1 is the address of the buffer. We return 0 in $0.
>
> sw $0, ($1)
> sw $1, 4($1)
> sw $2, 8($1)
> sw $3, 12($1)
> sw $4, 16($1)
> sw $5, 20($1)
> sw $6, 24($1)
> sw $7, 28($1)
> sw $8, 32($1)
> sw $9, 36($1)
> sw $10, 40($1)
> sw $11, 44($1)
> sw $12, 48($1)
> sw $13, 52($1)
> sw $14, 56($1)
> sw $15, 60($1)
>
> ldc $0, $lp
> sw $0, 64($1)
> ldc $0, $opt
> sra $0, 24
> and3 $0, $0, 3
> beqz $0, sj_skip_hilo
> ldc $0, $hi
> sw $0, 68($1)
> ldc $0, $lo
> sw $0, 72($1)
> sj_skip_hilo:
>
> mov $0, 0
> ret
>
> .globl longjmp
> .type longjmp,@function
>
> longjmp:
>
> # $1 is the address of the buffer. $2 is the value setjmp
> # returns. We do not faithfully restore $0 or $lp, because
> # the act of calling setjmp clobbered those anyway.
>
> bnez $2, rv_not_zero
> mov $2, 1
> rv_not_zero:
>
> # We restore $sp first so we can save the return value there,
> # otherwise we'd need to have another unrestored register.
> lw $15, 60($1)
> add3 $sp, $sp, -4
> sw $2, ($sp)
>
> # Now restore the general registers.
> lw $2, 8($1)
> lw $3, 12($1)
> lw $4, 16($1)
> lw $5, 20($1)
> lw $6, 24($1)
> lw $7, 28($1)
> lw $8, 32($1)
> lw $9, 36($1)
> lw $10, 40($1)
> lw $11, 44($1)
> lw $12, 48($1)
> lw $13, 52($1)
> lw $14, 56($1)
>
> # We restore $pc's value to $lp so that we can just ret later.
> lw $0, 64($1)
> stc $0, $lp
> ldc $0, $opt
> sra $0, 24
> and3 $0, $0, 3
> beqz $0, lj_skip_hilo
> lw $0, 68($1)
> stc $0, $hi
> lw $0, 72($1)
> stc $0, $lo
> lj_skip_hilo:
>
> # Restore $1
> lw $1, 8($1)
>
> # Get the return value off the stack, and restore the stack.
> lw $0, ($sp)
> add3 $sp, $sp, 4
>
> ret
>
>
> ------------------------------------------------------------------------
>
> 2007-11-07 Dave Brolley <brolley@redhat.com>
>
> * libc/machine/configure: Regenerated to pick up mep-elf changes.
>
> * Contribute mep-elf from Red Hat
> 2006-10-27 DJ Delorie <dj@redhat.com>
>
> * libc/include/machine/setjmp.h: Add MeP support.
>
> 2003-04-17 DJ Delorie <dj@redhat.com>
>
> * configure.host (mep-*-*): Support "long long" type.
>
> 2001-06-06 DJ Delorie <dj@redhat.com>
>
> * libc/include/machine/ieeefp.h (mep): Support little endian too.
>
> 2001-05-14 DJ Delorie <dj@redhat.com>
>
> * configure.host: Add mep's machine_dir.
> * libc/include/setjmp.h: Add mep support.
> * libc/machine/mep: New.
> * libc/machine/mep/setjmp.S: New, support mep's setjmp/longjmp.
>
> 2001-05-04 DJ Delorie <dj@redhat.com>
>
> * configure.host: Add mep.
> * libc/include/machine/ieeefp.h: Ditto.
>
>
>
> ------------------------------------------------------------------------
>
> Index: newlib/configure.host
> ===================================================================
> RCS file: /cvs/src/src/newlib/configure.host,v
> retrieving revision 1.96
> diff -r1.96 configure.host
> 192a193,195
>> mep)
>> machine_dir=mep
>> ;;
> 430a434,437
>> mep-*-*)
>> default_newlib_io_long_long="yes"
>> newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
>> ;;
> Index: newlib/libc/include/machine/ieeefp.h
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/include/machine/ieeefp.h,v
> retrieving revision 1.32
> diff -r1.32 ieeefp.h
> 312a313,320
>> #ifdef __mep__
>> #ifdef __LITTLE_ENDIAN__
>> #define __IEEE_LITTLE_ENDIAN
>> #else
>> #define __IEEE_BIG_ENDIAN
>> #endif
>> #endif
>>
> Index: newlib/libc/include/machine/setjmp.h
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/include/machine/setjmp.h,v
> retrieving revision 1.33
> diff -r1.33 setjmp.h
> 225a226,230
>> #ifdef __mep__
>> /* 16 GPRs, pc, hi, lo */
>> #define _JBLEN 19
>> #endif
>>
> Index: newlib/libc/machine/configure.in
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/machine/configure.in,v
> retrieving revision 1.8
> diff -r1.8 configure.in
> 44a45
>> mep ) AC_CONFIG_SUBDIRS(mep) ;;
More information about the Newlib
mailing list