未验证 提交 4ffc675f 编写于 作者: B Bernard Xiong 提交者: GitHub

Merge pull request #1835 from RT-Thread/feature_clang_arm

[Kernel] Add ARMCC 6.x support.
...@@ -55,7 +55,9 @@ ...@@ -55,7 +55,9 @@
static struct rt_thread finsh_thread; static struct rt_thread finsh_thread;
ALIGN(RT_ALIGN_SIZE) ALIGN(RT_ALIGN_SIZE)
static char finsh_thread_stack[FINSH_THREAD_STACK_SIZE]; static char finsh_thread_stack[FINSH_THREAD_STACK_SIZE];
struct finsh_shell _shell;
#endif #endif
struct finsh_shell *shell; struct finsh_shell *shell;
static char *finsh_prompt_custom = RT_NULL; static char *finsh_prompt_custom = RT_NULL;
...@@ -473,9 +475,6 @@ static void shell_push_history(struct finsh_shell *shell) ...@@ -473,9 +475,6 @@ static void shell_push_history(struct finsh_shell *shell)
} }
#endif #endif
#ifndef RT_USING_HEAP
struct finsh_shell _shell;
#endif
void finsh_thread_entry(void *parameter) void finsh_thread_entry(void *parameter)
{ {
char ch; char ch;
...@@ -792,7 +791,7 @@ int finsh_system_init(void) ...@@ -792,7 +791,7 @@ int finsh_system_init(void)
rt_thread_t tid; rt_thread_t tid;
#ifdef FINSH_USING_SYMTAB #ifdef FINSH_USING_SYMTAB
#ifdef __CC_ARM /* ARM C Compiler */ #if defined(__CC_ARM) || defined(__CLANG_ARM) /* ARM C Compiler */
extern const int FSymTab$$Base; extern const int FSymTab$$Base;
extern const int FSymTab$$Limit; extern const int FSymTab$$Limit;
extern const int VSymTab$$Base; extern const int VSymTab$$Base;
...@@ -867,4 +866,3 @@ int finsh_system_init(void) ...@@ -867,4 +866,3 @@ int finsh_system_init(void)
return 0; return 0;
} }
INIT_APP_EXPORT(finsh_system_init); INIT_APP_EXPORT(finsh_system_init);
...@@ -16,8 +16,11 @@ ...@@ -16,8 +16,11 @@
#include "rtthread.h" #include "rtthread.h"
#ifdef RT_USING_HEAP #ifdef RT_USING_HEAP
#ifdef __CC_ARM
/* avoid the heap and heap-using library functions supplied by arm */ /* avoid the heap and heap-using library functions supplied by arm */
#pragma import(__use_no_heap) #pragma import(__use_no_heap)
#endif
void *malloc(size_t n) void *malloc(size_t n)
{ {
......
...@@ -37,7 +37,11 @@ ...@@ -37,7 +37,11 @@
#include "dfs_posix.h" #include "dfs_posix.h"
#endif #endif
#ifdef __CLANG_ARM
__asm(".global __use_no_semihosting\n\t");
#else
#pragma import(__use_no_semihosting_swi) #pragma import(__use_no_semihosting_swi)
#endif
/* Standard IO device handles. */ /* Standard IO device handles. */
#define STDIN 0 #define STDIN 0
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
#define X32_F "lx" #define X32_F "lx"
#ifdef RT_USING_LIBC #ifdef RT_USING_LIBC
#if defined(__CC_ARM) || defined(__IAR_SYSTEMS_ICC__) #if defined(__CC_ARM) || defined(__CLANG_ARM) || defined(__IAR_SYSTEMS_ICC__)
#include <sys/errno.h> #include <sys/errno.h>
#else #else
#include <errno.h> #include <errno.h>
......
...@@ -71,7 +71,7 @@ typedef struct siginfo siginfo_t; ...@@ -71,7 +71,7 @@ typedef struct siginfo siginfo_t;
#include <sys/signal.h> #include <sys/signal.h>
#endif #endif
#ifdef __CC_ARM #if defined(__CC_ARM) || defined(__CLANG_ARM)
#include <signal.h> #include <signal.h>
typedef unsigned long sigset_t; typedef unsigned long sigset_t;
......
...@@ -88,14 +88,19 @@ typedef rt_base_t rt_off_t; /**< Type for offset */ ...@@ -88,14 +88,19 @@ typedef rt_base_t rt_off_t; /**< Type for offset */
#define RT_UINT32_MAX 0xffffffff /**< Maxium number of UINT32 */ #define RT_UINT32_MAX 0xffffffff /**< Maxium number of UINT32 */
#define RT_TICK_MAX RT_UINT32_MAX /**< Maxium number of tick */ #define RT_TICK_MAX RT_UINT32_MAX /**< Maxium number of tick */
#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
#define __CLANG_ARM
#endif
/* Compiler Related Definitions */ /* Compiler Related Definitions */
#ifdef __CC_ARM /* ARM Compiler */ #if defined(__CC_ARM) || defined(__CLANG_ARM) /* ARM Compiler */
#include <stdarg.h> #include <stdarg.h>
#define SECTION(x) __attribute__((section(x))) #define SECTION(x) __attribute__((section(x)))
#define RT_UNUSED __attribute__((unused)) #define RT_UNUSED __attribute__((unused))
#define RT_USED __attribute__((used)) #define RT_USED __attribute__((used))
#define ALIGN(n) __attribute__((aligned(n))) #define ALIGN(n) __attribute__((aligned(n)))
#define RT_WEAK __weak
#define RT_WEAK __attribute__((weak))
#define rt_inline static __inline #define rt_inline static __inline
/* module compiling */ /* module compiling */
#ifdef RT_USING_MODULE #ifdef RT_USING_MODULE
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include "libc/libc_signal.h" #include "libc/libc_signal.h"
#include "libc/libc_fdset.h" #include "libc/libc_fdset.h"
#if defined(__CC_ARM) || defined(__IAR_SYSTEMS_ICC__) #if defined(__CC_ARM) || defined(__CLANG_ARM) || defined(__IAR_SYSTEMS_ICC__)
typedef signed long off_t; typedef signed long off_t;
typedef int mode_t; typedef int mode_t;
#endif #endif
......
...@@ -501,7 +501,7 @@ rt_int32_t rt_strncmp(const char *cs, const char *ct, rt_ubase_t count); ...@@ -501,7 +501,7 @@ rt_int32_t rt_strncmp(const char *cs, const char *ct, rt_ubase_t count);
rt_int32_t rt_strcmp(const char *cs, const char *ct); rt_int32_t rt_strcmp(const char *cs, const char *ct);
rt_size_t rt_strlen(const char *src); rt_size_t rt_strlen(const char *src);
char *rt_strdup(const char *s); char *rt_strdup(const char *s);
#ifdef __CC_ARM #if defined(__CC_ARM) || defined(__CLANG_ARM)
/* leak strdup interface */ /* leak strdup interface */
char* strdup(const char* str); char* strdup(const char* str);
#endif #endif
......
...@@ -22,9 +22,14 @@ ...@@ -22,9 +22,14 @@
#include <rtthread.h> #include <rtthread.h>
#define USE_FPU /* ARMCC */ ( (defined ( __CC_ARM ) && defined ( __TARGET_FPU_VFP )) \ #if /* ARMCC */ ( (defined ( __CC_ARM ) && defined ( __TARGET_FPU_VFP )) \
/* IAR */ || (defined ( __ICCARM__ ) && defined ( __ARMVFP__ )) \ /* Clang */ || (defined ( __CLANG_ARM ) && defined ( __TARGET_FPU_VFP )) \
/* IAR */ || (defined ( __ICCARM__ ) && defined ( __ARMVFP__ )) \
/* GNU */ || (defined ( __GNUC__ ) && defined ( __VFP_FP__ ) && !defined(__SOFTFP__)) ) /* GNU */ || (defined ( __GNUC__ ) && defined ( __VFP_FP__ ) && !defined(__SOFTFP__)) )
#define USE_FPU 1
#else
#define USE_FPU 0
#endif
/* exception and interrupt handler table */ /* exception and interrupt handler table */
rt_uint32_t rt_interrupt_from_thread; rt_uint32_t rt_interrupt_from_thread;
...@@ -452,7 +457,7 @@ RT_WEAK void rt_hw_cpu_reset(void) ...@@ -452,7 +457,7 @@ RT_WEAK void rt_hw_cpu_reset(void)
* @return return the index of the first bit set. If value is 0, then this function * @return return the index of the first bit set. If value is 0, then this function
* shall return 0. * shall return 0.
*/ */
#if defined(__CC_ARM) #if defined(__CC_ARM) || defined(__CLANG_ARM)
__asm int __rt_ffs(int value) __asm int __rt_ffs(int value)
{ {
CMP r0, #0x00 CMP r0, #0x00
......
...@@ -22,9 +22,14 @@ ...@@ -22,9 +22,14 @@
#include <rtthread.h> #include <rtthread.h>
#define USE_FPU /* ARMCC */ ( (defined ( __CC_ARM ) && defined ( __TARGET_FPU_VFP )) \ #if /* ARMCC */ ( (defined ( __CC_ARM ) && defined ( __TARGET_FPU_VFP )) \
/* IAR */ || (defined ( __ICCARM__ ) && defined ( __ARMVFP__ )) \ /* Clang */ || (defined ( __CLANG_ARM ) && defined ( __TARGET_FPU_VFP )) \
/* IAR */ || (defined ( __ICCARM__ ) && defined ( __ARMVFP__ )) \
/* GNU */ || (defined ( __GNUC__ ) && defined ( __VFP_FP__ ) && !defined(__SOFTFP__)) ) /* GNU */ || (defined ( __GNUC__ ) && defined ( __VFP_FP__ ) && !defined(__SOFTFP__)) )
#define USE_FPU 1
#else
#define USE_FPU 0
#endif
/* exception and interrupt handler table */ /* exception and interrupt handler table */
rt_uint32_t rt_interrupt_from_thread; rt_uint32_t rt_interrupt_from_thread;
...@@ -452,7 +457,7 @@ RT_WEAK void rt_hw_cpu_reset(void) ...@@ -452,7 +457,7 @@ RT_WEAK void rt_hw_cpu_reset(void)
* @return return the index of the first bit set. If value is 0, then this function * @return return the index of the first bit set. If value is 0, then this function
* shall return 0. * shall return 0.
*/ */
#if defined(__CC_ARM) #if defined(__CC_ARM) || defined(__CLANG_ARM)
__asm int __rt_ffs(int value) __asm int __rt_ffs(int value)
{ {
CMP r0, #0x00 CMP r0, #0x00
......
...@@ -136,7 +136,7 @@ void rt_application_init(void); ...@@ -136,7 +136,7 @@ void rt_application_init(void);
void rt_hw_board_init(void); void rt_hw_board_init(void);
int rtthread_startup(void); int rtthread_startup(void);
#if defined (__CC_ARM) #if defined(__CC_ARM) || defined(__CLANG_ARM)
extern int $Super$$main(void); extern int $Super$$main(void);
/* re-define main function */ /* re-define main function */
int $Sub$$main(void) int $Sub$$main(void)
...@@ -185,7 +185,7 @@ void main_thread_entry(void *parameter) ...@@ -185,7 +185,7 @@ void main_thread_entry(void *parameter)
rt_components_init(); rt_components_init();
/* invoke system main function */ /* invoke system main function */
#if defined (__CC_ARM) #if defined(__CC_ARM) || defined(__CLANG_ARM)
$Super$$main(); /* for ARMCC. */ $Super$$main(); /* for ARMCC. */
#elif defined(__ICCARM__) || defined(__GNUC__) #elif defined(__ICCARM__) || defined(__GNUC__)
main(); main();
......
...@@ -525,7 +525,7 @@ char *rt_strdup(const char *s) ...@@ -525,7 +525,7 @@ char *rt_strdup(const char *s)
return tmp; return tmp;
} }
RTM_EXPORT(rt_strdup); RTM_EXPORT(rt_strdup);
#ifdef __CC_ARM #if defined(__CC_ARM) || defined(__CLANG_ARM)
char *strdup(const char *s) __attribute__((alias("rt_strdup"))); char *strdup(const char *s) __attribute__((alias("rt_strdup")));
#endif #endif
#endif #endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册