support application.

This commit is contained in:
root
2023-08-22 00:26:34 +08:00
parent 56e53a1eae
commit 6ee0deb010
56 changed files with 440 additions and 98 deletions

View File

@@ -1,4 +1,5 @@
cmake_minimum_required(VERSION 3.13)
add_subdirectory(server)
add_subdirectory(lib)

View File

@@ -1,10 +1,11 @@
cmake_minimum_required(VERSION 3.13)
set(CMAKE_C_FLAGS "${GLOBAL_C_FLAG} -w \
-fPIC -n -pie -fpie -fPIC -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
-Wl,--gc-sections -Wall -g -D__dietlibc__ -D__arm__ -D__WORDSIZE=32\
" )
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
-Wl,--gc-sections -D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
" )
set(CMAKE_ASM_FLAGS ${CMAKE_C_FLAGS})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/dietlibc-0.34/arm/softfpu)
@@ -16,16 +17,22 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/dietlibc-0.34/include)
add_subdirectory(src)
add_library(diet
$<TARGET_OBJECTS:dietlibc_src>
$<TARGET_OBJECTS:dietlibc_arm>
$<TARGET_OBJECTS:dietlibc_lib>
$<TARGET_OBJECTS:dietlibc_libcompat>
$<TARGET_OBJECTS:dietlibc_libm>
$<TARGET_OBJECTS:dietlibc_libshell>
$<TARGET_OBJECTS:dietlibc_libstdio>
$<TARGET_OBJECTS:dietlibc_libugly>
$<TARGET_OBJECTS:dietlibc_profiling>
# $<TARGET_OBJECTS:dietlibc_softfpu>
$<TARGET_OBJECTS:dietlibc_builtins>
)
$<TARGET_OBJECTS:dietlibc_arm>
$<TARGET_OBJECTS:dietlibc_lib>
$<TARGET_OBJECTS:dietlibc_libcompat>
$<TARGET_OBJECTS:dietlibc_libm>
$<TARGET_OBJECTS:dietlibc_libshell>
$<TARGET_OBJECTS:dietlibc_libstdio>
$<TARGET_OBJECTS:dietlibc_libugly>
$<TARGET_OBJECTS:dietlibc_profiling>
# $<TARGET_OBJECTS:dietlibc_softfpu>
$<TARGET_OBJECTS:dietlibc_builtins>
)
target_link_libraries(diet
PUBLIC
dietlibc_src
)
add_dependencies(diet dietlibc_src)

View File

@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.13)
file(GLOB deps *.c *.S)
add_subdirectory(dietlibc-0.34)
add_library(dietlibc_src OBJECT ${deps})
add_library(dietlibc_src STATIC ${deps})
target_include_directories(
dietlibc_src
PUBLIC

View File

@@ -10,5 +10,5 @@ void __main(int *args, int start_addr)
__app_start_addr__ = start_addr;
ret = main(args[0], (char **)&args[1]);
exit(ret);
// exit(ret);
}

View File

@@ -1,4 +1,7 @@
#include "arm-features.h"
.syntax unified
.cpu cortex-m3
.thumb
FUNC_START __testandset
mov r2, r0

View File

View File

@@ -8,7 +8,7 @@ extern int __rel_end__;
/*
* @brief gbase ram<61>Ŀ<EFBFBD>ʼ<EFBFBD><CABC>ַ,tbase text<78>Ŀ<EFBFBD>ʼ<EFBFBD><CABC>ַ
*/
void reloc(unsigned int *gbase, unsigned int tbase)
void _reloc(unsigned int *gbase, unsigned int tbase)
{
int i;
unsigned int s;

View File

@@ -1,6 +1,7 @@
.syntax unified
.section .first, #execinstr
.globl reloc
.align 2
.globl _start_
.type _start_, %function
@@ -81,13 +82,13 @@ LoopInitStack:
mov r0, r12
push {r0, r4}
ldr r0, = __stack_end__
mov sp, r0
//ldr r0, = __stack_end__
//mov sp, r0
mov r0, r9
adr r1, _start_
bic r1, r1, #1
bl reloc
bl _reloc
pop {r0, r12}
adr r1, _start_

View File

@@ -0,0 +1,31 @@
cmake_minimum_required(VERSION 3.13)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
-Wl,--gc-sections -D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
" )
set(CMAKE_ASM_FLAGS ${CMAKE_C_FLAGS})
add_subdirectory(src)
file(GLOB deps *.c *.S)
add_library(
sys
STATIC
${deps}
)
target_link_directories(
sys
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/src/dietlibc-0.34/include
)
target_link_libraries(
sys
PUBLIC
diet
)
add_dependencies(sys diet)

View File

@@ -0,0 +1,3 @@
#pragma once
#include <stdint.h>

View File

@@ -0,0 +1,2 @@
#include <stdint.h>

View File

@@ -0,0 +1,2 @@
#include <stdint.h>

View File

@@ -1,9 +1,11 @@
cmake_minimum_required(VERSION 3.13)
set(CMAKE_C_FLAGS "${GLOBAL_C_FLAG} -fPIC -n -pie -fpie -fpic \
-msingle-pic-base -mno-pic-data-is-text-relative --specs=nosys.specs \
-fmessage-length=0 -Wall -Xlinker --cref \
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w \
-fPIC -n -pie -fpie -fpic -msingle-pic-base -mno-pic-data-is-text-relative \
-Wl,--gc-sections -D__dietlibc__ -D__arm__ -D__WORDSIZE=32 -D__ARM_ARCH_7M__ \
")
set(CMAKE_ASM_FLAGS ${CMAKE_C_FLAGS})
add_subdirectory(init)

View File

@@ -9,6 +9,7 @@ target_link_libraries(init.elf
PUBLIC
diet
)
add_dependencies(init.elf diet)
set_target_properties(init.elf PROPERTIES LINK_FLAGS
"-T ${CMAKE_CURRENT_SOURCE_DIR}/link.lds")

View File

@@ -0,0 +1,17 @@
#define HEAP_SIZE 1024 * 2
#define STACK_SIZE 1024 * 1
#if defined(__CC_ARM)
#define HEAP_ATTR SECTION("HEAP") __attribute__((zero_init))
#define STACK_ATTR SECTION("STACK") __attribute__((zero_init))
#elif defined(__GNUC__)
#define HEAP_ATTR
#define STACK_ATTR
#elif defined(__IAR_SYSTEMS_ICC__)
#define HEAP_ATTR
#define STACK_ATTR
#endif
__attribute__((used)) HEAP_ATTR static char heap[HEAP_SIZE];
__attribute__((used)) STACK_ATTR static char stack[STACK_SIZE];

View File

@@ -1,5 +1,25 @@
int syscall(int nr, ...);
#define uint32_t unsigned int
typedef union msg_tag
{
uint32_t raw;
union
{
uint32_t type : 4;
uint32_t type2 : 6;
uint32_t prot : (sizeof(uint32_t) * 8) - 12;
};
} msg_tag_t;
#define msg_tag_init(r) \
((msg_tag_t){.raw = (r)})
#define msg_tag_init3(t, t2, p) \
msg_tag_init(((uint32_t)(t)&0xf) | (((uint32_t)(t2)&0x3f) << 4) | (((uint32_t)(p)) << 10))
int main(int argc, char *args[])
{
syscall(4, msg_tag_init3(0, 1, 4).raw, 'a', 2, 3, 4, 5);
return 0;
}

View File

@@ -0,0 +1,19 @@
.syntax unified
.text
/*
int syscall(int nr, ...)
*/
.global syscall
.type syscall, %function
syscall:
push {r4-r7}
mov r7, r0
mov r0, r1
mov r1, r2
mov r2, r3
add r6, sp,#16
ldmia r6,{r3-r5}
svc 128
pop {r4-r7}
bx lr