From 35bd78fa5f141882c43b1bcaa0c90436ff3974f1 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Mon, 10 Sep 2012 21:24:52 +0800 Subject: [PATCH] ARMv7 Compile Fixes - arm-elf is deprecated, arm-eabi is the new one --- BuildConf/armv7/Makefile.cfg | 6 +++--- KernelLand/Kernel/Makefile | 2 +- KernelLand/Kernel/arch/armv7/lib.c | 10 ++++++++++ KernelLand/Kernel/arch/armv7/link.ld | 16 +++++++++++++--- KernelLand/Kernel/arch/armv7/mm_virt.c | 6 +++--- Usermode/Libraries/ld-acess.so_src/arch/armv7.ld | 2 ++ .../ld-acess.so_src/include_exp/unistd.h | 2 +- Usermode/Libraries/ld-acess.so_src/main.c | 5 +++++ 8 files changed, 38 insertions(+), 11 deletions(-) diff --git a/BuildConf/armv7/Makefile.cfg b/BuildConf/armv7/Makefile.cfg index 167e0224..340fa0d9 100644 --- a/BuildConf/armv7/Makefile.cfg +++ b/BuildConf/armv7/Makefile.cfg @@ -1,8 +1,8 @@ ARM_CPUNAME = gerneric-armv7 -CC = arm-elf-gcc -mcpu=$(ARM_CPUNAME) -AS = arm-elf-gcc -mcpu=$(ARM_CPUNAME) -c -LD = arm-elf-ld +CC = arm-eabi-gcc -mcpu=$(ARM_CPUNAME) +AS = arm-eabi-gcc -mcpu=$(ARM_CPUNAME) -c +LD = arm-eabi-ld OBJDUMP = arm-elf-objdump DISASM = $(OBJDUMP) -d -S ARCHDIR = armv7 diff --git a/KernelLand/Kernel/Makefile b/KernelLand/Kernel/Makefile index 16d63b44..454dd098 100644 --- a/KernelLand/Kernel/Makefile +++ b/KernelLand/Kernel/Makefile @@ -106,7 +106,7 @@ $(BIN): $(OBJ) $(MODS) arch/$(ARCHDIR)/link.ld Makefile ../../BuildConf/$(ARCH)/ @echo BUILD_NUM = $$(( $(BUILD_NUM) + 1 )) > Makefile.BuildNum.$(ARCH) $(POSTBUILD) @cp $(BIN) $(BIN)_ - @-$(STRIP) $(BIN)_ + @$(STRIP) $(BIN)_ || true @gzip -c $(BIN)_ > $(GZBIN) @$(RM) $(BIN)_ diff --git a/KernelLand/Kernel/arch/armv7/lib.c b/KernelLand/Kernel/arch/armv7/lib.c index 5a6928e7..65c457c1 100644 --- a/KernelLand/Kernel/arch/armv7/lib.c +++ b/KernelLand/Kernel/arch/armv7/lib.c @@ -14,12 +14,15 @@ extern Uint32 __divmod32_asm(Uint32 Num, Uint32 Den, Uint32 *Rem); // === PROTOTYPES === Uint64 __divmod64(Uint64 Num, Uint64 Den, Uint64 *Rem); Uint32 __divmod32(Uint32 Num, Uint32 Den, Uint32 *Rem); +#if 0 Uint64 __udivdi3(Uint64 Num, Uint64 Den); Uint64 __umoddi3(Uint64 Num, Uint64 Den); Uint32 __udivsi3(Uint32 Num, Uint32 Den); Uint32 __umodsi3(Uint32 Num, Uint32 Den); Sint32 __divsi3(Sint32 Num, Sint32 Den); Sint32 __modsi3(Sint32 Num, Sint32 Den); +#endif +void abort(void); // === CODE === void *memcpy(void *_dest, const void *_src, size_t _length) @@ -160,6 +163,7 @@ Uint64 DivMod64U(Uint64 Num, Uint64 Den, Uint64 *Rem) return ret; } +#if 0 // Unsigned Divide 64-bit Integer Uint64 __udivdi3(Uint64 Num, Uint64 Den) { @@ -215,3 +219,9 @@ Sint32 __modsi3(Sint32 Num, Sint32 Den) DivMod32S(Num, Den, &rem); return rem; } +#endif + +void abort(void) +{ + for(;;); +} diff --git a/KernelLand/Kernel/arch/armv7/link.ld b/KernelLand/Kernel/arch/armv7/link.ld index d10dcc46..e45101bf 100644 --- a/KernelLand/Kernel/arch/armv7/link.ld +++ b/KernelLand/Kernel/arch/armv7/link.ld @@ -27,9 +27,19 @@ SECTIONS *(.usertext) } . += gUsertextPhysStart + _kernel_base - _usertext_vbase; - + + /DISCARD/ : { *(.ARM.extab.init .ARM.exidx.init) } + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } + PROVIDE_HIDDEN ( __exidx_start = . ); + .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } + PROVIDE_HIDDEN ( __exidx_end = . ); + .eh_frame_hdr : { *(.eh_frame_hdr) } + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } + .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } + /* 0x4000 (4 pages) alignment needed for root table */ - .data ALIGN(0x4000) : AT( ADDR(.data) - _kernel_base ) + . = ALIGN(0x4000); + .data : AT( ADDR(.data) - _kernel_base ) { *(.padata) *(.data*) @@ -42,7 +52,7 @@ SECTIONS *(KMODULES) gKernelModulesEnd = .; } - .bss : AT( ADDR(.bss) - _kernel_base ) + .bss ALIGN(0x1000) : AT( ADDR(.bss) - _kernel_base ) { bss_start = .; *(.bss*) diff --git a/KernelLand/Kernel/arch/armv7/mm_virt.c b/KernelLand/Kernel/arch/armv7/mm_virt.c index 4583b7b2..85f9b27f 100644 --- a/KernelLand/Kernel/arch/armv7/mm_virt.c +++ b/KernelLand/Kernel/arch/armv7/mm_virt.c @@ -320,12 +320,12 @@ int MM_int_GetPageInfo(tVAddr VAddr, tMM_PageInfo *pi) } // --- Exports --- -tPAddr MM_GetPhysAddr(tVAddr VAddr) +tPAddr MM_GetPhysAddr(const void *Ptr) { tMM_PageInfo pi; - if( MM_int_GetPageInfo(VAddr, &pi) ) + if( MM_int_GetPageInfo((tVAddr)Ptr, &pi) ) return 0; - return pi.PhysAddr | (VAddr & ((1 << pi.Size)-1)); + return pi.PhysAddr | ((tVAddr)Ptr & ((1 << pi.Size)-1)); } Uint MM_GetFlags(tVAddr VAddr) diff --git a/Usermode/Libraries/ld-acess.so_src/arch/armv7.ld b/Usermode/Libraries/ld-acess.so_src/arch/armv7.ld index c1387840..fdbfb021 100644 --- a/Usermode/Libraries/ld-acess.so_src/arch/armv7.ld +++ b/Usermode/Libraries/ld-acess.so_src/arch/armv7.ld @@ -44,11 +44,13 @@ SECTIONS { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } + __exidx_start = .; .text : AT(ADDR(.text)) { code = .; *(.text) *(.rodata*) } + __exidx_end = .; .data ALIGN (0x1000) : AT(ADDR(.data)) { data = .; diff --git a/Usermode/Libraries/ld-acess.so_src/include_exp/unistd.h b/Usermode/Libraries/ld-acess.so_src/include_exp/unistd.h index 36ed5345..a20a2042 100644 --- a/Usermode/Libraries/ld-acess.so_src/include_exp/unistd.h +++ b/Usermode/Libraries/ld-acess.so_src/include_exp/unistd.h @@ -6,7 +6,7 @@ #define O_RD (OPENFLAG_READ) #define O_CREAT (OPENFLAG_CREATE) -typedef intptr_t ssize_t; +//typedef intptr_t ssize_t; #include "acess/sys.h" diff --git a/Usermode/Libraries/ld-acess.so_src/main.c b/Usermode/Libraries/ld-acess.so_src/main.c index 49b2f863..985f9c8c 100644 --- a/Usermode/Libraries/ld-acess.so_src/main.c +++ b/Usermode/Libraries/ld-acess.so_src/main.c @@ -101,3 +101,8 @@ int CallUser(void *entry, void *sp) #endif for(;;); } + +void abort(void) +{ + _exit(-4); +} -- 2.20.1