[newlib-cygwin] Update crt0.S for ARC.

Jeff Johnston jjohnstn@sourceware.org
Mon May 2 16:00:00 GMT 2016


https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=cd494f7038ac739bee69775f91e02693f2734e79

commit cd494f7038ac739bee69775f91e02693f2734e79
Author: Jeff Johnston <jjohnstn@redhat.com>
Date:   Mon May 2 11:58:47 2016 -0400

    Update crt0.S for ARC.
    
    This is similar to commit 06537f05d4b6a0d2db01c6afda1d2a0ea2588126 to the
    newlib for ARC.
    
    GCC for ARC has been updated to provide consistent naming of preprocessor
    definitions for different optional architecture features:
    
        * __ARC_BARREL_SHIFTER__ instead of __Xbarrel_shifter for
          -mbarrel-shifter
        * __ARCEM__ instead of __EM__ for ARC EM cores
        * __ARCHS__ instead of __HS__ for ARC HS cores
        * etc (not used in libgloss)
    
    This patch updates crt0.S for ARC to use new definitions instead of a
    deprecated ones. To ensure compatibility with older compiler new definitions
    are also defined in crt0.S if needed, based on presence of deprecated
    preprocessor definitions.
    
    libgloss/ChangeLog
    
    2016-04-29  Anton Kolesov  <Anton.Kolesov@synopsys.com>
    
            * arc/crt0.S: Use new GCC defines to detect processor features.

Diff:
---
 libgloss/arc/crt0.S | 32 +++++++++++++++++++++++---------
 1 file changed, 23 insertions(+), 9 deletions(-)

diff --git a/libgloss/arc/crt0.S b/libgloss/arc/crt0.S
index e4a15eb..b93b63e 100644
--- a/libgloss/arc/crt0.S
+++ b/libgloss/arc/crt0.S
@@ -1,5 +1,5 @@
 /*
-   Copyright (c) 2015, Synopsys, Inc. All rights reserved.
+   Copyright (c) 2015-2016, Synopsys, Inc. All rights reserved.
 
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are met:
@@ -41,10 +41,24 @@
    the initialization code.
 */
 
+/* Compatibility with older ARC GCC, that doesn't provide some of the
+   preprocessor defines used by newlib and libgloss for ARC.  */
+#if defined (__Xbarrel_shifter) && !defined (__ARC_BARREL_SHIFTER__)
+#define __ARC_BARREL_SHIFTER__ 1
+#endif
+
+#if defined (__EM__) && !defined (__ARCEM__)
+#define __ARCEM__ 1
+#endif
+
+#if defined (__HS__) && !defined (__ARCHS__)
+#define __ARCHS__ 1
+#endif
+
 	.file	"crt0.S"
 	.extern main
 
-#if defined (__EM__) || defined (__HS__)
+#if defined (__ARCEM__) || defined (__ARCHS__)
 	.section .ivt, "a", @progbits
 
 ; handler's name,          type,    number,name,   offset in IVT (hex/dec)
@@ -74,7 +88,7 @@
 	.section .text.__startup, "ax", @progbits
 #else
 	.text
-#endif
+#endif /* __ARCEM__ || __ARCHS__ */
 
 	.global	__start
 	.type	__start, @function
@@ -111,7 +125,7 @@ __start:
 ;   instruction
 ; - loop body should have at least two instruction words
 __start:
-#if defined (__HS__)
+#if defined (__ARCHS__)
 	; Allow unaligned accesses.
 	lr	r2, [0xA]
 	bset	r2, r2, 19
@@ -163,21 +177,21 @@ __start:
 	jl	@_init
 #else
 	bl	@_init
-#endif
+#endif /* __ARCEM__ || __ARCHS__ */
 	mov_s	r0, r13
 	mov_s	r1, r14
 ; branch to main
-#if defined (__EM__) || defined (__HS__)
+#if defined (__ARCEM__) || defined (__ARCHS__)
 	mov	fp,0			; initialize frame pointer
 	jl	@main
 #else
 	bl.d	@main
 	mov	fp, 0			; initialize frame pointer
-#endif
+#endif /* __ARCEM__ || __ARCHS__ */
 	; r0 contains exit code
 	j	@exit
 
-#if defined (__EM__) || defined (__HS__)
+#if defined (__ARCEM__) || defined (__ARCHS__)
 ; ARCv2 default interrupt routines, defined as weak symbols.
 ; Default implementation halts the core.  To conserve code size those symbols
 ; share a single implementation, however as a downside debugger and
@@ -225,7 +239,7 @@ IRQ_20              :
 	nop
 	b	.Lloop_halt
 	nop
-#endif
+#endif /* __ARCEM__ || __ARCHS__ */
 
 	.section .text._exit_halt,"ax",@progbits
 	.global	 _exit_halt



More information about the Newlib-cvs mailing list