.
This commit is contained in:
parent
40cc5affc0
commit
10b97045df
35 changed files with 395 additions and 958 deletions
69
GNUmakefile
69
GNUmakefile
|
@ -15,16 +15,6 @@ $(TOPDIR)/Makeconf:
|
||||||
|
|
||||||
include $(TOPDIR)/Makeconf
|
include $(TOPDIR)/Makeconf
|
||||||
|
|
||||||
# armstub8.bin: armstub8.S
|
|
||||||
# @echo "CC -DGIC=1 $<"
|
|
||||||
# @$(CC) -DGIC=1 -o ${<:S=o} -c $<
|
|
||||||
# @echo "LD --section-start=.text=0 ${<:S=o}"
|
|
||||||
# @$(LD) --section-start=.text=0 -o ${<:S=elf} ${<:S=o}
|
|
||||||
# @echo "DUMP ${<:S=elf}"
|
|
||||||
# @$(OBJDUMP) -D ${<:S=elf} > ${<:S=lst}
|
|
||||||
# @echo "COPY ${<:S=elf}"
|
|
||||||
# @$(OBJCOPY) ${<:S=elf} -O binary $@
|
|
||||||
|
|
||||||
include/$(CONFIG_TARGET_TRIPLE):
|
include/$(CONFIG_TARGET_TRIPLE):
|
||||||
@echo "GEN $@"
|
@echo "GEN $@"
|
||||||
@./gen-headers.sh $@
|
@./gen-headers.sh $@
|
||||||
|
@ -55,6 +45,9 @@ SRCS= kernel.c timer.c led.c interrupt_handler.c exception_handler.c \
|
||||||
|
|
||||||
ASMS= startup.S exception_stub.S
|
ASMS= startup.S exception_stub.S
|
||||||
|
|
||||||
|
SRCS:=$(addprefix kernel/,$(SRCS))
|
||||||
|
ASMS:=$(addprefix kernel/,$(ASMS))
|
||||||
|
|
||||||
OBJS= $(SRCS:c=o) $(ASMS:S=o)
|
OBJS= $(SRCS:c=o) $(ASMS:S=o)
|
||||||
|
|
||||||
%.o: %.S
|
%.o: %.S
|
||||||
|
@ -65,7 +58,7 @@ OBJS= $(SRCS:c=o) $(ASMS:S=o)
|
||||||
@echo "CC $@"
|
@echo "CC $@"
|
||||||
@$(CC) $(CFLAGS) -c -o $@ $<
|
@$(CC) $(CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
libgilbraltar.a: $(OBJS)
|
kernel/libgilbraltar.a: $(OBJS)
|
||||||
@echo "AR $@"
|
@echo "AR $@"
|
||||||
@rm -f $@
|
@rm -f $@
|
||||||
@$(AR) cr $@ $^
|
@$(AR) cr $@ $^
|
||||||
|
@ -77,6 +70,37 @@ phony-openlibm: include/$(CONFIG_TARGET_TRIPLE)
|
||||||
|
|
||||||
openlibm/libopenlibm.a: phony-openlibm
|
openlibm/libopenlibm.a: phony-openlibm
|
||||||
|
|
||||||
|
ocaml:
|
||||||
|
test ! -d $@
|
||||||
|
cp -r "$$(ocamlfind query ocaml-src)" $@
|
||||||
|
VERSION="$$(head -n1 ocaml/VERSION)" ; \
|
||||||
|
if test -d "patches/$$VERSION" ; then \
|
||||||
|
git apply --directory=$@ "patches/$$VERSION"/*; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
ocaml/Makefile.config: | ocaml
|
||||||
|
PATH="$$PWD/$(TOOLDIR_FOR_BUILD):$$PATH" ;
|
||||||
|
cd ocaml && \
|
||||||
|
./configure \
|
||||||
|
--target="$(MAKECONF_TARGET_ARCH)-gilbraltar-ocaml" \
|
||||||
|
--prefix="$(MAKECONF_SYSROOT)" \
|
||||||
|
--disable-shared \
|
||||||
|
--disable-systhreads \
|
||||||
|
--disable-unix-lib \
|
||||||
|
--disable-instrumented-runtime \
|
||||||
|
--disable-debug-runtime \
|
||||||
|
--disable-ocamltest \
|
||||||
|
--disable-ocamldoc \
|
||||||
|
--disable-zstd \
|
||||||
|
$(MAKECONF_OCAML_CONFIGURE_OPTIONS)
|
||||||
|
|
||||||
|
OCAML_IS_BUILT := _build/ocaml_is_built
|
||||||
|
$(OCAML_IS_BUILT): ocaml/Makefile.config | _build
|
||||||
|
PATH="$$PWD/$(TOOLDIR_FOR_BUILD):$$PATH" $(MAKE) -C ocaml cross.opt
|
||||||
|
cd ocaml && ocamlrun tools/stripdebug ocamlc ocamlc.tmp
|
||||||
|
cd ocaml && ocamlrun tools/stripdebug ocalmopt ocamlopt.tmp
|
||||||
|
touch $@
|
||||||
|
|
||||||
NOLIBC_CFLAGS= $(CFLAGS) -I $(TOPDIR)/nolibc/include -I $(TOPDIR)/openlibm/src -I $(TOPDIR)/openlibm/include
|
NOLIBC_CFLAGS= $(CFLAGS) -I $(TOPDIR)/nolibc/include -I $(TOPDIR)/openlibm/src -I $(TOPDIR)/openlibm/include
|
||||||
|
|
||||||
.PHONY: phony-nolibc
|
.PHONY: phony-nolibc
|
||||||
|
@ -87,35 +111,28 @@ phony-nolibc: include/$(CONFIG_TARGET_TRIPLE)
|
||||||
nolibc/libnolibc.a: phony-nolibc
|
nolibc/libnolibc.a: phony-nolibc
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: libgilbraltar.a
|
all: kernel/libgilbraltar.a
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
$(RM) -f *.o *.a *.elf *.bin *.lst *.img
|
$(RM) -f kernel/*.o kernel/*.a *.elf *.bin *.img *.map
|
||||||
$(RM) -rf include/$(CONFIG_TARGET_TRIPLE)
|
$(RM) -rf include/$(CONFIG_TARGET_TRIPLE)
|
||||||
|
$(RM) -rf _build
|
||||||
|
if [ -d ocaml ] ; then $(MAKE) -C ocaml clean ; fi
|
||||||
$(RM) -f test/*.o
|
$(RM) -f test/*.o
|
||||||
$(MAKE) -C openlibm clean
|
$(MAKE) -C openlibm clean
|
||||||
$(MAKE) -C nolibc clean FREESTANDING_CFLAGS=_
|
$(MAKE) -C nolibc clean FREESTANDING_CFLAGS=_
|
||||||
|
|
||||||
.PHONY: distclean
|
.PHONY: distclean
|
||||||
distclean: clean
|
distclean: clean
|
||||||
$(RM) -f Makeconf
|
$(RM) -f Makeconf Makeconf.sh
|
||||||
|
if [ -d ocaml ] ; then $(MAKE) -C ocaml distclean ; fi
|
||||||
|
|
||||||
test/%.o: test/%.c
|
test/%.o: test/%.c
|
||||||
@echo "CC $@"
|
@echo "CC $@"
|
||||||
@$(CC) $(CFLAGS) -c -o $@ $<
|
@$(CC) $(CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
test01.img: libgilbraltar.a nolibc/libnolibc.a openlibm/libopenlibm.a test/test01.o
|
kernel_2712.img: kernel/libgilbraltar.a nolibc/libnolibc.a openlibm/libopenlibm.a test/test.o
|
||||||
@echo "LD ${@:img=elf}"
|
@echo "LD ${@:img=elf}"
|
||||||
@$(LD) test/${@:img=o} -o ${@:img=elf} $(LDFLAGS) -Wl,-T gilbraltar.ld
|
@$(LD) test/test.o -o ${@:img=elf} $(LDFLAGS) -Wl,-Map ${@:img=map} -Wl,-T gilbraltar.ld
|
||||||
@$(OBJCOPY) ${@:img=elf} -O binary $@
|
|
||||||
|
|
||||||
test02.img: libgilbraltar.a nolibc/libnolibc.a openlibm/libopenlibm.a test/test02.o
|
|
||||||
@echo "LD ${@:img=elf}"
|
|
||||||
@$(LD) test/${@:img=o} -o ${@:img=elf} $(LDFLAGS) -Wl,-T gilbraltar.ld
|
|
||||||
@$(OBJCOPY) ${@:img=elf} -O binary $@
|
|
||||||
|
|
||||||
test03.img: libgilbraltar.a nolibc/libnolibc.a openlibm/libopenlibm.a test/test03.o
|
|
||||||
@echo "LD ${@:img=elf}"
|
|
||||||
@$(LD) test/${@:img=o} -o ${@:img=elf} $(LDFLAGS) -Wl,-Map ${@:img=map} -Wl,-T gilbraltar.ld
|
|
||||||
@$(OBJCOPY) ${@:img=elf} -O binary $@
|
@$(OBJCOPY) ${@:img=elf} -O binary $@
|
||||||
|
|
213
armstub8.S
213
armstub8.S
|
@ -1,213 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2024 Romain Calascibetta <romain.calascibetta@gmail.com>
|
|
||||||
* Copyright (c) 2016-2019 Raspberry Pi (Trading) Ltd.
|
|
||||||
* Copyright (c) 2016 Stephen Warren <swarren@wwwdotorg.org>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
* * Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
* * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
* * Neither the name of the copyright holder nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define BIT(x) (1 << (x))
|
|
||||||
|
|
||||||
#define LOCAL_CONTROL 0xff800000
|
|
||||||
#define LOCAL_PRESCALER 0xff800008
|
|
||||||
#define GIC_DISTB 0xff841000
|
|
||||||
#define GIC_CPUB 0xff842000
|
|
||||||
#define OSC_FREQ 54000000
|
|
||||||
|
|
||||||
#define SCR_RW BIT(10)
|
|
||||||
#define SCR_HCE BIT(8)
|
|
||||||
#define SCR_SMD BIT(7)
|
|
||||||
#define SCR_RES1_5 BIT(5)
|
|
||||||
#define SCR_RES1_4 BIT(4)
|
|
||||||
#define SCR_NS BIT(0)
|
|
||||||
#define SCR_VAL \
|
|
||||||
(SCR_RW | SCR_HCE | SCR_SMD | SCR_RES1_5 | SCR_RES1_4 | SCR_NS)
|
|
||||||
|
|
||||||
#define ACTLR_VAL \
|
|
||||||
(BIT(0) | BIT(1) | BIT(4) | BIT(5) | BIT(6))
|
|
||||||
|
|
||||||
#define CPUECTLR_EL1 S3_1_C15_C2_1
|
|
||||||
#define CPUECTLR_EL1_SMPEN BIT(6)
|
|
||||||
|
|
||||||
#define SPSR_EL3_D BIT(9)
|
|
||||||
#define SPSR_EL3_A BIT(8)
|
|
||||||
#define SPSR_EL3_I BIT(7)
|
|
||||||
#define SPSR_EL3_F BIT(6)
|
|
||||||
#define SPSR_EL3_MODE_EL2H 9
|
|
||||||
#define SPSR_EL3_VAL \
|
|
||||||
(SPSR_EL3_D | SPSR_EL3_A | SPSR_EL3_I | SPSR_EL3_F | SPSR_EL3_MODE_EL2H)
|
|
||||||
|
|
||||||
#define L2CTLR_EL1 S3_1_C11_C0_2
|
|
||||||
#define GICC_CTRLR 0x0
|
|
||||||
#define GICC_PMR 0x4
|
|
||||||
#define IT_NR 0x8 // Number of interrupt enable registers (256 total irqs)
|
|
||||||
#define GICD_CTRLR 0x0
|
|
||||||
#define GICD_IGROUPR 0x80
|
|
||||||
|
|
||||||
.globl _start
|
|
||||||
_start:
|
|
||||||
// LOCAL_CONTROL:
|
|
||||||
// Bit 9 clear: Increment by 1 (vs. 2).
|
|
||||||
// Bit 8 clear: Timer source is 19.2MHz crystal (vs. APB).
|
|
||||||
ldr x0, =LOCAL_CONTROL
|
|
||||||
str wzr, [x0]
|
|
||||||
// LOCAL_PRESCALER; divide-by (0x80000000 / register_val) == 1
|
|
||||||
mov w1, 0x80000000
|
|
||||||
str w1, [x0, #(LOCAL_PRESCALER - LOCAL_CONTROL)]
|
|
||||||
|
|
||||||
// Set L2 read/write cache latency to 3
|
|
||||||
mrs x0, L2CTLR_EL1
|
|
||||||
mov x1, #0x22
|
|
||||||
orr x0, x0, x1
|
|
||||||
msr L2CTLR_EL1, x0
|
|
||||||
|
|
||||||
// Set up CNTFRQ_EL0
|
|
||||||
ldr x0, =OSC_FREQ
|
|
||||||
msr CNTFRQ_EL0, x0
|
|
||||||
|
|
||||||
// Set up CNTVOFF_EL2
|
|
||||||
msr CNTVOFF_EL2, xzr
|
|
||||||
|
|
||||||
// Enable FP/SIMD
|
|
||||||
// Bit 10 (TFP) is set to 0
|
|
||||||
msr CPTR_EL3, xzr
|
|
||||||
|
|
||||||
// Set up SCR
|
|
||||||
mov x0, #SCR_VAL
|
|
||||||
msr SCR_EL3, x0
|
|
||||||
|
|
||||||
// Set up ACTLR
|
|
||||||
mov x0, #ACTLR_VAL
|
|
||||||
msr ACTLR_EL3, x0
|
|
||||||
|
|
||||||
// Set SMPEN
|
|
||||||
mov x0, #CPUECTLR_EL1_SMPEN
|
|
||||||
msr CPUECTLR_EL1, x0
|
|
||||||
|
|
||||||
#ifdef GIC
|
|
||||||
bl setup_gic
|
|
||||||
#endif
|
|
||||||
// Set up SCTLR_EL2
|
|
||||||
// All set bits below are res1. LE, no WXN/I/SA/C/A/M
|
|
||||||
ldr x0, =0x30c50830
|
|
||||||
msr SCTLR_EL2, x0
|
|
||||||
|
|
||||||
// Switch to EL2
|
|
||||||
mov x0, #SPSR_EL3_VAL
|
|
||||||
msr spsr_el3, x0
|
|
||||||
adr x0, in_el2
|
|
||||||
msr elr_el3, x0
|
|
||||||
eret
|
|
||||||
in_el2:
|
|
||||||
mrs x6, MPIDR_EL1
|
|
||||||
and x6, x6, #0x3
|
|
||||||
cbz x6, primary_cpu
|
|
||||||
|
|
||||||
adr x5, spin_cpu0
|
|
||||||
secondary_spin:
|
|
||||||
wfe
|
|
||||||
ldr x4, [x5, x6, lsl #3]
|
|
||||||
cbz x4, secondary_spin
|
|
||||||
mov x0, #0
|
|
||||||
b boot_kernel
|
|
||||||
|
|
||||||
primary_cpu:
|
|
||||||
ldr w4, kernel_entry32
|
|
||||||
ldr w0, dtb_ptr32
|
|
||||||
|
|
||||||
boot_kernel:
|
|
||||||
mov x1, #0
|
|
||||||
mov x2, #0
|
|
||||||
mov x3, #0
|
|
||||||
br x4
|
|
||||||
|
|
||||||
.ltorg
|
|
||||||
|
|
||||||
.org 0xd8
|
|
||||||
.globl spin_cpu0
|
|
||||||
spin_cpu0:
|
|
||||||
.quad 0
|
|
||||||
.org 0xe0
|
|
||||||
.globl spin_cpu1
|
|
||||||
spin_cpu1:
|
|
||||||
.quad 0
|
|
||||||
.org 0xe8
|
|
||||||
.globl spin_cpu2
|
|
||||||
spin_cpu2:
|
|
||||||
.quad 0
|
|
||||||
.org 0xf0
|
|
||||||
.globl spin_cpu3
|
|
||||||
spin_cpu3:
|
|
||||||
# Shared with next two symbols/.word
|
|
||||||
# FW clears the next 8 bytes after reading the initial value, leaving
|
|
||||||
# the location suitable for use as spin_cpu3
|
|
||||||
.org 0xf0
|
|
||||||
.globl stub_magic
|
|
||||||
stub_magic:
|
|
||||||
.word 0x5afe570b
|
|
||||||
.org 0xf4
|
|
||||||
.globl stub_version
|
|
||||||
stub_version:
|
|
||||||
.word 0
|
|
||||||
.org 0xf8
|
|
||||||
.globl dtb_ptr32
|
|
||||||
dtb_ptr32:
|
|
||||||
.word 0x0
|
|
||||||
.org 0xfc
|
|
||||||
.globl kernel_entry32
|
|
||||||
kernel_entry32:
|
|
||||||
.word 0x0
|
|
||||||
|
|
||||||
.org 0x100
|
|
||||||
|
|
||||||
#ifdef GIC
|
|
||||||
|
|
||||||
setup_gic: // Called from secure mode - set all interrupts to group 1 and enable.
|
|
||||||
mrs x0, MPIDR_EL1
|
|
||||||
ldr x2, =GIC_DISTB
|
|
||||||
tst x0, #0x3
|
|
||||||
b.eq 2f // primary core
|
|
||||||
|
|
||||||
mov w0, #3 // Enable group 0 and 1 IRQs from distributor
|
|
||||||
str w0, [x2, #GICD_CTRLR]
|
|
||||||
2:
|
|
||||||
add x1, x2, #(GIC_CPUB - GIC_DISTB)
|
|
||||||
mov w0, #0x1e7
|
|
||||||
str w0, [x1, #GICC_CTRLR] // Enable group 1 IRQs from CPU interface
|
|
||||||
mov w0, #0xff
|
|
||||||
str w0, [x1, #GICC_PMR] // priority mask
|
|
||||||
add x2, x2, #GICD_IGROUPR
|
|
||||||
mov x0, #(IT_NR * 4)
|
|
||||||
mov w1, #~0 // group 1 all the things
|
|
||||||
3:
|
|
||||||
subs x0, x0, #4
|
|
||||||
str w1, [x2, x0]
|
|
||||||
b.ne 3b
|
|
||||||
ret
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.globl dtb_space
|
|
||||||
dtb_space:
|
|
7
doc.txt
7
doc.txt
|
@ -47,12 +47,11 @@ BCM2712 is the Broadcom chip used by Raspberry Pi 5
|
||||||
| 00350000 | 32 KByte | for Core 2 |
|
| 00350000 | 32 KByte | for Core 2 |
|
||||||
| 00358000 | 32 KByte | for Core 3 |
|
| 00358000 | 32 KByte | for Core 3 |
|
||||||
| 00360000 | | End of FIQ stacks |
|
| 00360000 | | End of FIQ stacks |
|
||||||
| | Page Table | |
|
|
||||||
| 00360000 | 16 KByte | |
|
|
||||||
| 00364000 | | End of page table |
|
|
||||||
| 00500000 | 4 MByte | Coherent region |
|
| 00500000 | 4 MByte | Coherent region |
|
||||||
| 00900000 | | |
|
| 00900000 | | |
|
||||||
|
| 1b000000 | 16 MByte | Pager |
|
||||||
|
| 1c000000 | | |
|
||||||
| 40000000 | | Heap |
|
| 40000000 | | Heap |
|
||||||
| ...
|
| ...
|
||||||
| 1FFFFFFFF | 8192 MB | Heap |
|
| 100000000 | 8192 MB | Heap |
|
||||||
| 1000000000 | 16 MByte | AXI peripherals |
|
| 1000000000 | 16 MByte | AXI peripherals |
|
||||||
|
|
133
gen_toolchain_tool.sh
Executable file
133
gen_toolchain_tool.sh
Executable file
|
@ -0,0 +1,133 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Generate a wrapper for Gilbraltar (G)CC, ld, objcopy and any other binutil
|
||||||
|
# Expected argument: the tool to generate
|
||||||
|
# Expected environment variables:
|
||||||
|
# ARCH: the target architecture (x86_64 or aarch64)
|
||||||
|
# TOOL_CFLAGS and TOOL_LDFLAGS: extra flags
|
||||||
|
# GILBRALTAR_TOOLCHAIN: the target for the wrapped Gilbraltar toolchain
|
||||||
|
# OTHERTOOLPREFIX: the prefix for tools not in the Gilbraltar toolchain
|
||||||
|
# TARGET_X: overrides the command for binutil X
|
||||||
|
|
||||||
|
gen_cc() {
|
||||||
|
# Note that -nostdlib is not required, as it is injected by Solo5' cc, ld
|
||||||
|
|
||||||
|
CFLAGS="$TOOL_CFLAGS"
|
||||||
|
LDFLAGS="$TOOL_LDFLAGS"
|
||||||
|
EXTRALIBS=""
|
||||||
|
|
||||||
|
case "$ARCH" in
|
||||||
|
aarch64)
|
||||||
|
EXTRALIBS="-lgcc"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Add the -Wno-unused-command-line-argument option for clang, as we always
|
||||||
|
# give it compiling options, even if it will be only linking
|
||||||
|
# Reuse the test from Solo5 to detect clang
|
||||||
|
if "$SOLO5_TOOLCHAIN-cc" -dM -E - </dev/null | grep -Eq '^#define __clang__ 1$'
|
||||||
|
then CFLAGS="-Wno-unused-command-line-argument $CFLAGS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Just like the Solo5 cc, we assume that we are linking, unless we find an
|
||||||
|
# argument suggesting we are compiling but we call Solo5' cc regardless
|
||||||
|
|
||||||
|
compiling=
|
||||||
|
for arg in "\$@"; do
|
||||||
|
case "\$arg" in
|
||||||
|
-[cSE])
|
||||||
|
compiling="\$arg"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
set -- \\
|
||||||
|
$CFLAGS \\
|
||||||
|
-include _solo5/overrides.h \\
|
||||||
|
-D__BSD_VISIBLE=0 \\
|
||||||
|
-D__XSI_VISIBLE=0 \\
|
||||||
|
"\$@"
|
||||||
|
|
||||||
|
if [ -z "\$compiling" ]; then
|
||||||
|
# linking options
|
||||||
|
set -- \\
|
||||||
|
"\$@" \\
|
||||||
|
$LDFLAGS \\
|
||||||
|
-Wl,--start-group \\
|
||||||
|
-lnolibc \\
|
||||||
|
-lopenlibm \\
|
||||||
|
$EXTRALIBS \\
|
||||||
|
-Wl,--end-group
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -n "\${__V}" ] && set -x
|
||||||
|
exec "$SOLO5_TOOLCHAIN-cc" "\$@"
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
gen_tool() {
|
||||||
|
TOOL="$1"
|
||||||
|
case "$TOOL" in
|
||||||
|
ar)
|
||||||
|
TARGET_TOOL="$TARGET_AR"
|
||||||
|
;;
|
||||||
|
as)
|
||||||
|
TARGET_TOOL="$TARGET_AS"
|
||||||
|
;;
|
||||||
|
ld)
|
||||||
|
TARGET_TOOL="$TARGET_LD"
|
||||||
|
;;
|
||||||
|
nm)
|
||||||
|
TARGET_TOOL="$TARGET_NM"
|
||||||
|
;;
|
||||||
|
objcopy)
|
||||||
|
TARGET_TOOL="$TARGET_OBJCOPY"
|
||||||
|
;;
|
||||||
|
objdump)
|
||||||
|
TARGET_TOOL="$TARGET_OBJDUMP"
|
||||||
|
;;
|
||||||
|
ranlib)
|
||||||
|
TARGET_TOOL="$TARGET_RANLIB"
|
||||||
|
;;
|
||||||
|
readelf)
|
||||||
|
TARGET_TOOL="$TARGET_READELF"
|
||||||
|
;;
|
||||||
|
strip)
|
||||||
|
TARGET_TOOL="$TARGET_STRIP"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if test "$TARGET_TOOL" ; then
|
||||||
|
TOOL="$TARGET_TOOL"
|
||||||
|
elif command -v -- "$SOLO5_TOOLCHAIN-$TOOL" > /dev/null; then
|
||||||
|
TOOL="$SOLO5_TOOLCHAIN-$TOOL"
|
||||||
|
else
|
||||||
|
case "$TOOL" in
|
||||||
|
as)
|
||||||
|
TOOL="$SOLO5_TOOLCHAIN-cc -c"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if command -v -- "$OTHERTOOLPREFIX$TOOL" > /dev/null; then
|
||||||
|
TOOL="$OTHERTOOLPREFIX$TOOL"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
#!/bin/sh
|
||||||
|
exec $TOOL "\$@"
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
cc|gcc)
|
||||||
|
gen_cc
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
gen_tool "$1"
|
||||||
|
;;
|
||||||
|
esac
|
|
@ -2,5 +2,6 @@
|
||||||
#define __GILBRALTAR_MEMORY__
|
#define __GILBRALTAR_MEMORY__
|
||||||
|
|
||||||
void gilbraltar_memory_init(void);
|
void gilbraltar_memory_init(void);
|
||||||
|
void gilbraltar_get_heap(uintptr_t *, uintptr_t *);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
78
kernel.c
78
kernel.c
|
@ -1,78 +0,0 @@
|
||||||
#include <crt.h>
|
|
||||||
#include <dtb.h>
|
|
||||||
#include <log.h>
|
|
||||||
#include <mem.h>
|
|
||||||
#include <memory.h>
|
|
||||||
#include <power.h>
|
|
||||||
#include <serial.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <synchronize.h>
|
|
||||||
#include <tag.h>
|
|
||||||
|
|
||||||
extern int main(int, char *const *);
|
|
||||||
|
|
||||||
extern char __bss_start;
|
|
||||||
extern char _etext[];
|
|
||||||
extern char _end[];
|
|
||||||
|
|
||||||
#define PROPTAG_GET_COMMAND_LINE 0x00050001
|
|
||||||
|
|
||||||
struct __attribute__((packed)) command_line {
|
|
||||||
uint32_t id;
|
|
||||||
uint32_t value_len;
|
|
||||||
uint32_t param_len;
|
|
||||||
uint8_t str[2048];
|
|
||||||
};
|
|
||||||
|
|
||||||
static size_t split(char *src, char *dst[], size_t len) {
|
|
||||||
int i = 0;
|
|
||||||
char *rem = src;
|
|
||||||
|
|
||||||
while (rem != NULL && *rem != '\0' && i < len) {
|
|
||||||
char *e = strstr(rem, " ");
|
|
||||||
dst[i++] = rem;
|
|
||||||
if (e != NULL) {
|
|
||||||
*e = '\0';
|
|
||||||
while (*(++e) == ' ')
|
|
||||||
;
|
|
||||||
}
|
|
||||||
rem = e;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (i);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gilbraltar_sysinit(void) {
|
|
||||||
enable_fiqs();
|
|
||||||
enable_irqs();
|
|
||||||
memset(&__bss_start, 0, (uintptr_t)_end - (uintptr_t)__bss_start);
|
|
||||||
crt_init_ssp();
|
|
||||||
|
|
||||||
gilbraltar_serial_init();
|
|
||||||
gilbraltar_memory_init();
|
|
||||||
|
|
||||||
struct command_line p;
|
|
||||||
char *cmdline[64] = {NULL};
|
|
||||||
size_t ac = 1;
|
|
||||||
cmdline[0] = "gilbraltar";
|
|
||||||
|
|
||||||
if (!gilbraltar_get_tag(PROPTAG_GET_COMMAND_LINE, &p, sizeof(p), 2048)) {
|
|
||||||
gilbraltar_log(ERROR, "Impossible to retrieve cmdline.txt.\r\n");
|
|
||||||
ac = 1;
|
|
||||||
} else if (p.param_len >= sizeof(p.str)) {
|
|
||||||
gilbraltar_log(ERROR, "cmdline.txt too long.\r\n");
|
|
||||||
ac = 1;
|
|
||||||
} else {
|
|
||||||
p.str[p.param_len] = '\0';
|
|
||||||
ac = split((char *)p.str, cmdline + 1, 62);
|
|
||||||
}
|
|
||||||
|
|
||||||
gilbraltar_dtb_init();
|
|
||||||
|
|
||||||
int ret = main(ac + 1, cmdline);
|
|
||||||
gilbraltar_log(DEBUG, "End of program: %3d.", ret);
|
|
||||||
|
|
||||||
if (ret == 0)
|
|
||||||
poweroff();
|
|
||||||
}
|
|
|
@ -39,10 +39,5 @@ bool gilbraltar_dtb_init(void) {
|
||||||
if (total_size < sizeof(struct header) || total_size > DTB_MAX_SIZE)
|
if (total_size < sizeof(struct header) || total_size > DTB_MAX_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
gilbraltar_log(INFO, " dtb magic : %04x\r\n", be32toh(hdr->magic));
|
|
||||||
gilbraltar_log(INFO, "dtb version : %d\r\n", be32toh(hdr->last_comp_version));
|
|
||||||
gilbraltar_log(INFO, " dtb size : %d byte(s)\r\n",
|
|
||||||
be32toh(hdr->total_size));
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
126
kernel/kernel.c
Normal file
126
kernel/kernel.c
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
#include <crt.h>
|
||||||
|
#include <dtb.h>
|
||||||
|
#include <log.h>
|
||||||
|
#include <mem.h>
|
||||||
|
#include <memory.h>
|
||||||
|
#include <power.h>
|
||||||
|
#include <serial.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <synchronize.h>
|
||||||
|
#include <sysconfig.h>
|
||||||
|
#include <tag.h>
|
||||||
|
|
||||||
|
extern int main(int, char *const *);
|
||||||
|
|
||||||
|
extern char __bss_start;
|
||||||
|
extern char _etext[];
|
||||||
|
extern char _end[];
|
||||||
|
|
||||||
|
#define PROPTAG_GET_COMMAND_LINE 0x00050001
|
||||||
|
|
||||||
|
struct __attribute__((packed)) command_line {
|
||||||
|
uint32_t id;
|
||||||
|
uint32_t value_len;
|
||||||
|
uint32_t param_len;
|
||||||
|
uint8_t str[2048];
|
||||||
|
};
|
||||||
|
|
||||||
|
static size_t split(char *src, char *dst[], size_t len) {
|
||||||
|
int i = 0;
|
||||||
|
char *rem = src;
|
||||||
|
|
||||||
|
while (rem != NULL && *rem != '\0' && i < len) {
|
||||||
|
char *e = strstr(rem, " ");
|
||||||
|
dst[i++] = rem;
|
||||||
|
if (e != NULL) {
|
||||||
|
*e = '\0';
|
||||||
|
while (*(++e) == ' ')
|
||||||
|
;
|
||||||
|
}
|
||||||
|
rem = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (i);
|
||||||
|
}
|
||||||
|
|
||||||
|
void gilbraltar_dump(void) {
|
||||||
|
uintptr_t heap_start;
|
||||||
|
uintptr_t heap_end;
|
||||||
|
|
||||||
|
gilbraltar_get_heap(&heap_start, &heap_end);
|
||||||
|
uintptr_t kernel_start = MEM_KERNEL_START;
|
||||||
|
uintptr_t kernel_end = (uintptr_t)_etext;
|
||||||
|
uintptr_t kernel_top = (uintptr_t)_end;
|
||||||
|
uintptr_t kernel_stack_start = MEM_KERNEL_STACK - KERNEL_STACK_SIZE;
|
||||||
|
uintptr_t kernel_stack_end = MEM_KERNEL_STACK;
|
||||||
|
uintptr_t exn_stack_start = MEM_EXCEPTION_STACK - EXCEPTION_STACK_SIZE;
|
||||||
|
uintptr_t exn_stack_end = MEM_EXCEPTION_STACK;
|
||||||
|
uintptr_t irq_stack_start = MEM_IRQ_STACK - EXCEPTION_STACK_SIZE;
|
||||||
|
uintptr_t irq_stack_end = MEM_IRQ_STACK;
|
||||||
|
uintptr_t fiq_stack_start = MEM_FIQ_STACK - EXCEPTION_STACK_SIZE;
|
||||||
|
uintptr_t fiq_stack_end = MEM_FIQ_STACK;
|
||||||
|
uintptr_t page_table_start = MEM_PAGE_TABLE1;
|
||||||
|
uintptr_t page_table_end = MEM_PAGE_TABLE1_END;
|
||||||
|
uintptr_t coherent_region_start = MEM_COHERENT_REGION;
|
||||||
|
uintptr_t coherent_region_end = MEM_COHERENT_REGION + 4 * MEGABYTE;
|
||||||
|
|
||||||
|
gilbraltar_log(INFO, " _____ _ _ _ _ _ \r\n");
|
||||||
|
gilbraltar_log(INFO, "| __|_| | |_ ___ ___| | |_ ___ ___ \r\n");
|
||||||
|
gilbraltar_log(INFO, "| | | | | . | _| .'| | _| .'| _|\r\n");
|
||||||
|
gilbraltar_log(INFO, "|_____|_|_|___|_| |__,|_|_| |__,|_| \r\n");
|
||||||
|
gilbraltar_log(INFO, " BL31 @ 0x%08x - 0x%08x\r\n", 0x0, 0x8000);
|
||||||
|
gilbraltar_log(INFO, " EL3 stack @ 0x%08x\r\n", 0x6f000);
|
||||||
|
gilbraltar_log(INFO, " kernel @ 0x%08lx - 0x%08lx | 0x%08lx\r\n",
|
||||||
|
kernel_start, kernel_end, kernel_top);
|
||||||
|
gilbraltar_log(INFO, " stack @ 0x%08lx - 0x%08lx\r\n",
|
||||||
|
kernel_stack_start, kernel_stack_end);
|
||||||
|
gilbraltar_log(INFO, "exception stack @ 0x%08lx - 0x%08lx\r\n",
|
||||||
|
exn_stack_start, exn_stack_end);
|
||||||
|
gilbraltar_log(INFO, " irq stack @ 0x%08lx - 0x%08lx\r\n",
|
||||||
|
irq_stack_start, irq_stack_end);
|
||||||
|
gilbraltar_log(INFO, " fiq stack @ 0x%08lx - 0x%08lx\r\n",
|
||||||
|
fiq_stack_start, fiq_stack_end);
|
||||||
|
gilbraltar_log(INFO, " pages table @ 0x%08lx - 0x%08lx\r\n",
|
||||||
|
page_table_start, page_table_end);
|
||||||
|
gilbraltar_log(INFO, "coherent region @ 0x%08lx - 0x%08lx\r\n",
|
||||||
|
coherent_region_start, coherent_region_end);
|
||||||
|
gilbraltar_log(INFO, " heap @ 0x%08lx - 0x%08lx\r\n", heap_start,
|
||||||
|
heap_end);
|
||||||
|
gilbraltar_log(INFO, "\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void gilbraltar_sysinit(void) {
|
||||||
|
enable_fiqs();
|
||||||
|
enable_irqs();
|
||||||
|
memset(&__bss_start, 0, (uintptr_t)_end - (uintptr_t)__bss_start);
|
||||||
|
crt_init_ssp();
|
||||||
|
|
||||||
|
gilbraltar_serial_init();
|
||||||
|
gilbraltar_memory_init();
|
||||||
|
|
||||||
|
struct command_line p;
|
||||||
|
char *cmdline[64] = {NULL};
|
||||||
|
size_t ac = 1;
|
||||||
|
cmdline[0] = "gilbraltar";
|
||||||
|
|
||||||
|
if (!gilbraltar_get_tag(PROPTAG_GET_COMMAND_LINE, &p, sizeof(p), 2048)) {
|
||||||
|
gilbraltar_log(ERROR, "Impossible to retrieve cmdline.txt.\r\n");
|
||||||
|
ac = 1;
|
||||||
|
} else if (p.param_len >= sizeof(p.str)) {
|
||||||
|
gilbraltar_log(ERROR, "cmdline.txt too long.\r\n");
|
||||||
|
ac = 1;
|
||||||
|
} else {
|
||||||
|
p.str[p.param_len] = '\0';
|
||||||
|
ac = split((char *)p.str, cmdline + 1, 62);
|
||||||
|
}
|
||||||
|
|
||||||
|
gilbraltar_dtb_init();
|
||||||
|
gilbraltar_dump();
|
||||||
|
|
||||||
|
int ret = main(ac + 1, cmdline);
|
||||||
|
gilbraltar_log(DEBUG, "End of program: %3d.", ret);
|
||||||
|
|
||||||
|
if (ret == 0)
|
||||||
|
poweroff();
|
||||||
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
#include <serial.h>
|
#include <serial.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
static enum log_level actual_level = DEBUG;
|
static enum log_level actual_level = INFO;
|
||||||
|
|
||||||
size_t gilbraltar_log(enum log_level level, const char *fmt, ...) {
|
size_t gilbraltar_log(enum log_level level, const char *fmt, ...) {
|
||||||
if (actual_level < level)
|
if (actual_level < level)
|
|
@ -1,7 +1,9 @@
|
||||||
|
#include <assert.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
#include <mem.h>
|
#include <mem.h>
|
||||||
#include <pager.h>
|
#include <pager.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <sysconfig.h>
|
#include <sysconfig.h>
|
||||||
#include <tag.h>
|
#include <tag.h>
|
||||||
#include <translation_table.h>
|
#include <translation_table.h>
|
||||||
|
@ -84,14 +86,89 @@ static void enable_mmu(void) {
|
||||||
__asm__ __volatile("msr sctlr_el1, %0" : : "r"(sctlr_el1) : "memory");
|
__asm__ __volatile("msr sctlr_el1, %0" : : "r"(sctlr_el1) : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uintptr_t sbrk_start;
|
||||||
|
static uintptr_t sbrk_end;
|
||||||
|
static uintptr_t sbrk_cur;
|
||||||
|
static uintptr_t sbrk_guard_size;
|
||||||
|
|
||||||
|
void *sbrk(intptr_t increment) {
|
||||||
|
uintptr_t prev, brk;
|
||||||
|
uintptr_t max = (uintptr_t)&prev - sbrk_guard_size;
|
||||||
|
prev = brk = sbrk_cur;
|
||||||
|
|
||||||
|
brk += increment;
|
||||||
|
|
||||||
|
if (brk >= max || brk >= sbrk_end || brk < sbrk_start)
|
||||||
|
return ((void *)(-1));
|
||||||
|
|
||||||
|
sbrk_cur = brk;
|
||||||
|
return ((void *)prev);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PROPTAG_GET_BOARD_REVISION 0x00010002
|
||||||
|
|
||||||
|
struct __attribute__((packed)) board_revision {
|
||||||
|
uint32_t id;
|
||||||
|
uint32_t value_len;
|
||||||
|
uint32_t param_len;
|
||||||
|
uint32_t revision;
|
||||||
|
};
|
||||||
|
|
||||||
void gilbraltar_memory_init(void) {
|
void gilbraltar_memory_init(void) {
|
||||||
size_t rsv = ARM_MEM_SIZE - MEM_HEAP_START - PAGE_RESERVE;
|
size_t rsv = ARM_MEM_SIZE - MEM_HEAP_START - PAGE_RESERVE;
|
||||||
|
|
||||||
gilbraltar_pager_init(MEM_HEAP_START + rsv, PAGE_RESERVE);
|
gilbraltar_pager_init(MEM_HEAP_START + rsv, PAGE_RESERVE);
|
||||||
gilbraltar_log(INFO, " pager @ 0x%08lx - 0x%08lx\r\n",
|
|
||||||
MEM_HEAP_START + rsv, MEM_HEAP_START + rsv + PAGE_RESERVE);
|
|
||||||
|
|
||||||
gilbraltar_translation_table_init(ARM_MEM_SIZE);
|
gilbraltar_translation_table_init(ARM_MEM_SIZE);
|
||||||
enable_mmu();
|
enable_mmu();
|
||||||
instruction_sync_barrier();
|
instruction_sync_barrier();
|
||||||
|
|
||||||
|
struct board_revision b;
|
||||||
|
|
||||||
|
if (!gilbraltar_get_tag(PROPTAG_GET_BOARD_REVISION, &b, sizeof(b), 4)) {
|
||||||
|
gilbraltar_log(ERROR, "Impossible to retrieve the board revision.\r\n");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(b.revision & (1 << 23)); // new revision scheme
|
||||||
|
size_t ram_size = 256 << ((b.revision >> 20) & 7);
|
||||||
|
size_t heap_size = (ram_size - 1024) * MEGABYTE;
|
||||||
|
heap_size = (heap_size > (8 * GIGABYTE) - GIGABYTE)
|
||||||
|
? (8 * GIGABYTE) - GIGABYTE
|
||||||
|
: heap_size;
|
||||||
|
sbrk_guard_size = (heap_size >= MEGABYTE) ? MEGABYTE : (heap_size / 2);
|
||||||
|
sbrk_start = sbrk_cur = GIGABYTE;
|
||||||
|
sbrk_end = GIGABYTE + heap_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gilbraltar_get_heap(uintptr_t *start, uintptr_t *end) {
|
||||||
|
*start = sbrk_start;
|
||||||
|
*end = sbrk_end;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#define ABORT_ON_ASSERT_FAILURE 0
|
||||||
|
|
||||||
|
#undef WIN32
|
||||||
|
#define HAVE_MMAP 0
|
||||||
|
#define HAVE_MREMAP 0
|
||||||
|
#define MMAP_CLEARS 0
|
||||||
|
#define NO_MALLOC_STATS 1
|
||||||
|
#define LACKS_FCNTL_H
|
||||||
|
#define LACKS_SYS_PARAM_H
|
||||||
|
#define LACKS_SYS_MMAN_H
|
||||||
|
#define LACKS_STRINGS_H
|
||||||
|
#define LACKS_SYS_TYPES_H
|
||||||
|
#define LACKS_SCHED_H
|
||||||
|
#define LACKS_TIME_H
|
||||||
|
#define MALLOC_FAILURE_ACTION
|
||||||
|
#define USE_LOCKS 0 // TODO(dinosaure): for multicore.
|
||||||
|
#define STRUCT_MALLINFO_DECLARED 1
|
||||||
|
#define FOOTERS 1
|
||||||
|
|
||||||
|
/* disable null-pointer-arithmetic warning on clang */
|
||||||
|
#if defined(__clang__) && __clang_major__ >= 6
|
||||||
|
#pragma clang diagnostic ignored "-Wnull-pointer-arithmetic"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* inline the dlmalloc implementation into this module */
|
||||||
|
#include "dlmalloc.i"
|
|
@ -60,7 +60,7 @@ uintptr_t gilbraltar_translation_table_base(void) {
|
||||||
|
|
||||||
void gilbraltar_translation_table_init(size_t size) {
|
void gilbraltar_translation_table_init(size_t size) {
|
||||||
l2_table = (union TARMV8MMU_LEVEL2_DESCRIPTOR *)gilbraltar_palloc();
|
l2_table = (union TARMV8MMU_LEVEL2_DESCRIPTOR *)gilbraltar_palloc();
|
||||||
gilbraltar_log(INFO, "L2 table allocated.\r\n");
|
gilbraltar_log(DEBUG, "L2 table allocated.\r\n");
|
||||||
|
|
||||||
memset(l2_table, 0, PAGE_SIZE);
|
memset(l2_table, 0, PAGE_SIZE);
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ void gilbraltar_translation_table_init(size_t size) {
|
||||||
!(MEM_IOMEM_PCIE_START <= base_addr && base_addr <= MEM_IOMEM_PCIE_END))
|
!(MEM_IOMEM_PCIE_START <= base_addr && base_addr <= MEM_IOMEM_PCIE_END))
|
||||||
continue; // as far as we can
|
continue; // as far as we can
|
||||||
|
|
||||||
gilbraltar_log(INFO, "New L3 table.\r\n");
|
gilbraltar_log(DEBUG, "New L3 table.\r\n");
|
||||||
union TARMV8MMU_LEVEL3_DESCRIPTOR *l3_table = new_level_l3_table(base_addr);
|
union TARMV8MMU_LEVEL3_DESCRIPTOR *l3_table = new_level_l3_table(base_addr);
|
||||||
struct TARMV8MMU_LEVEL2_TABLE_DESCRIPTOR *desc = &l2_table[entry].table;
|
struct TARMV8MMU_LEVEL2_TABLE_DESCRIPTOR *desc = &l2_table[entry].table;
|
||||||
|
|
BIN
libgilbraltar.a
Normal file
BIN
libgilbraltar.a
Normal file
Binary file not shown.
6
test/test.c
Normal file
6
test/test.c
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#include <log.h>
|
||||||
|
|
||||||
|
int main(int ac, const char *av[]) {
|
||||||
|
gilbraltar_log(INFO, "Hello World!\r\n");
|
||||||
|
return (0);
|
||||||
|
}
|
|
@ -1,15 +0,0 @@
|
||||||
#include <led.h>
|
|
||||||
#include <timer.h>
|
|
||||||
|
|
||||||
/* The kernel should start and the LED should blink.
|
|
||||||
* The time between blinks should be "fairly" long (around 1s).
|
|
||||||
*/
|
|
||||||
|
|
||||||
void main(void) {
|
|
||||||
while (1) {
|
|
||||||
gilbraltar_led(false);
|
|
||||||
gilbraltar_delay_hot_loop(0x3f0000);
|
|
||||||
gilbraltar_led(true);
|
|
||||||
gilbraltar_delay_hot_loop(0x3f0000);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
#include <serial.h>
|
|
||||||
|
|
||||||
/* The kernel should start and you should see
|
|
||||||
* "Hello World!" in your terminal!
|
|
||||||
*/
|
|
||||||
void main(void) {
|
|
||||||
gilbraltar_serial_init();
|
|
||||||
gilbraltar_serial_puts("Hello World!\r\n");
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
#include <log.h>
|
|
||||||
#include <sysconfig.h>
|
|
||||||
|
|
||||||
extern char _etext[];
|
|
||||||
|
|
||||||
void main(void) {
|
|
||||||
gilbraltar_log(INFO, " _____ _ _ _ _ _ \r\n");
|
|
||||||
gilbraltar_log(INFO, "| __|_| | |_ ___ ___| | |_ ___ ___ \r\n");
|
|
||||||
gilbraltar_log(INFO, "| | | | | . | _| .'| | _| .'| _|\r\n");
|
|
||||||
gilbraltar_log(INFO, "|_____|_|_|___|_| |__,|_|_| |__,|_| \r\n");
|
|
||||||
gilbraltar_log(INFO, " BL31 @ 0x%08x - 0x%08x\r\n", 0x0, 0x8000);
|
|
||||||
gilbraltar_log(INFO, " EL3 stack @ 0x%08x\r\n", 0x6f000);
|
|
||||||
gilbraltar_log(INFO, " kernel @ 0x%08x - 0x%08lx\r\n",
|
|
||||||
MEM_KERNEL_START, (uintptr_t) _etext);
|
|
||||||
gilbraltar_log(INFO, " stack @ 0x%08x - 0x%08x\r\n",
|
|
||||||
MEM_KERNEL_STACK - KERNEL_STACK_SIZE, MEM_KERNEL_STACK);
|
|
||||||
gilbraltar_log(INFO, "exception stack @ 0x%08x - 0x%08x\r\n",
|
|
||||||
MEM_EXCEPTION_STACK - EXCEPTION_STACK_SIZE,
|
|
||||||
MEM_EXCEPTION_STACK);
|
|
||||||
gilbraltar_log(INFO, " irq stack @ 0x%08x - 0x%08x\r\n",
|
|
||||||
MEM_IRQ_STACK - EXCEPTION_STACK_SIZE, MEM_IRQ_STACK);
|
|
||||||
gilbraltar_log(INFO, " fiq stack @ 0x%08x - 0x%08x\r\n",
|
|
||||||
MEM_FIQ_STACK - EXCEPTION_STACK_SIZE, MEM_FIQ_STACK);
|
|
||||||
gilbraltar_log(INFO, " pages table @ 0x%08x - 0x%08x\r\n", MEM_PAGE_TABLE1,
|
|
||||||
MEM_PAGE_TABLE1_END);
|
|
||||||
gilbraltar_log(INFO, "coherent region @ 0x%08x - 0x%08x\r\n",
|
|
||||||
MEM_COHERENT_REGION, MEM_COHERENT_REGION + 4 * MEGABYTE);
|
|
||||||
}
|
|
574
test03.map
574
test03.map
|
@ -1,574 +0,0 @@
|
||||||
Archive member included to satisfy reference by file (symbol)
|
|
||||||
|
|
||||||
./libgilbraltar.a(log.o) test/test03.o (gilbraltar_log)
|
|
||||||
./libgilbraltar.a(startup.o) (_start)
|
|
||||||
./libgilbraltar.a(exception_stub.o)
|
|
||||||
./libgilbraltar.a(startup.o) (VectorTable)
|
|
||||||
./libgilbraltar.a(kernel.o) ./libgilbraltar.a(startup.o) (gilbraltar_sysinit)
|
|
||||||
./libgilbraltar.a(interrupt_handler.o)
|
|
||||||
./libgilbraltar.a(exception_stub.o) (gilbraltar_interrupt_handler)
|
|
||||||
./libgilbraltar.a(exception_handler.o)
|
|
||||||
./libgilbraltar.a(exception_stub.o) (gilbraltar_exception_handler)
|
|
||||||
./libgilbraltar.a(crt.o) ./libgilbraltar.a(log.o) (__stack_chk_guard)
|
|
||||||
./libgilbraltar.a(serial.o) ./libgilbraltar.a(kernel.o) (gilbraltar_serial_init)
|
|
||||||
./libgilbraltar.a(power.o) ./libgilbraltar.a(kernel.o) (poweroff)
|
|
||||||
./libgilbraltar.a(tag.o) ./libgilbraltar.a(kernel.o) (gilbraltar_get_tag)
|
|
||||||
./libgilbraltar.a(coherent_page.o)
|
|
||||||
./libgilbraltar.a(tag.o) (get_coherent_page)
|
|
||||||
./libgilbraltar.a(dtb.o) ./libgilbraltar.a(kernel.o) (gilbraltar_dtb_init)
|
|
||||||
./libgilbraltar.a(memory.o) ./libgilbraltar.a(kernel.o) (gilbraltar_memory_init)
|
|
||||||
./libgilbraltar.a(pager.o) ./libgilbraltar.a(memory.o) (gilbraltar_pager_init)
|
|
||||||
./libgilbraltar.a(translation_table.o)
|
|
||||||
./libgilbraltar.a(memory.o) (gilbraltar_translation_table_base)
|
|
||||||
./libgilbraltar.a(mbox.o) ./libgilbraltar.a(tag.o) (gilbraltar_mbox_write_read)
|
|
||||||
./libgilbraltar.a(clock.o) ./libgilbraltar.a(serial.o) (gilbraltar_get_rate_of_clock)
|
|
||||||
./libgilbraltar.a(spinlock.o)
|
|
||||||
./libgilbraltar.a(pager.o) (gilbraltar_spinlock_acquire)
|
|
||||||
./libgilbraltar.a(synchronize.o)
|
|
||||||
./libgilbraltar.a(spinlock.o) (gilbraltar_enter_critical)
|
|
||||||
nolibc/libnolibc.a(assert.o) ./libgilbraltar.a(serial.o) (_assert_fail)
|
|
||||||
nolibc/libnolibc.a(memcpy.o) ./libgilbraltar.a(tag.o) (memcpy)
|
|
||||||
nolibc/libnolibc.a(memset.o) ./libgilbraltar.a(kernel.o) (memset)
|
|
||||||
nolibc/libnolibc.a(strstr.o) ./libgilbraltar.a(kernel.o) (strstr)
|
|
||||||
nolibc/libnolibc.a(puts.o) nolibc/libnolibc.a(assert.o) (puts)
|
|
||||||
nolibc/libnolibc.a(vsnprintf.o)
|
|
||||||
./libgilbraltar.a(log.o) (vsnprintf)
|
|
||||||
nolibc/libnolibc.a(sysdeps.o)
|
|
||||||
./libgilbraltar.a(coherent_page.o) (abort)
|
|
||||||
nolibc/libnolibc.a(memchr.o) nolibc/libnolibc.a(strstr.o) (memchr)
|
|
||||||
nolibc/libnolibc.a(memcmp.o) nolibc/libnolibc.a(strstr.o) (memcmp)
|
|
||||||
nolibc/libnolibc.a(strlen.o) nolibc/libnolibc.a(puts.o) (strlen)
|
|
||||||
nolibc/libnolibc.a(strchr.o) nolibc/libnolibc.a(strstr.o) (strchr)
|
|
||||||
nolibc/libnolibc.a(strchrnul.o)
|
|
||||||
nolibc/libnolibc.a(strchr.o) (__strchrnul)
|
|
||||||
nolibc/libnolibc.a(vfprintf.o)
|
|
||||||
nolibc/libnolibc.a(vsnprintf.o) (vfprintf)
|
|
||||||
nolibc/libnolibc.a(ctype.o) nolibc/libnolibc.a(vfprintf.o) (isdigit)
|
|
||||||
nolibc/libnolibc.a(stubs.o) nolibc/libnolibc.a(vfprintf.o) (strerror)
|
|
||||||
nolibc/libnolibc.a(printf.o) nolibc/libnolibc.a(stubs.o) (printf)
|
|
||||||
openlibm/libopenlibm.a(s_frexp.c.o)
|
|
||||||
nolibc/libnolibc.a(vfprintf.o) (frexp)
|
|
||||||
openlibm/libopenlibm.a(s_isfinite.c.o)
|
|
||||||
nolibc/libnolibc.a(vfprintf.o) (__isfinite)
|
|
||||||
openlibm/libopenlibm.a(s_signbit.c.o)
|
|
||||||
nolibc/libnolibc.a(vfprintf.o) (__signbit)
|
|
||||||
/usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
nolibc/libnolibc.a(vfprintf.o) (__extenddftf2)
|
|
||||||
/usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
nolibc/libnolibc.a(vfprintf.o) (__trunctfdf2)
|
|
||||||
/usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
/usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o) (__sfp_handle_exceptions)
|
|
||||||
|
|
||||||
There are no discarded input sections
|
|
||||||
|
|
||||||
Memory Configuration
|
|
||||||
|
|
||||||
Name Origin Length Attributes
|
|
||||||
*default* 0x0000000000000000 0xffffffffffffffff
|
|
||||||
|
|
||||||
Linker script and memory map
|
|
||||||
|
|
||||||
LOAD test/test03.o
|
|
||||||
Address of section .init set to 0x80000
|
|
||||||
START GROUP
|
|
||||||
LOAD ./libgilbraltar.a
|
|
||||||
LOAD nolibc/libnolibc.a
|
|
||||||
LOAD openlibm/libopenlibm.a
|
|
||||||
LOAD /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a
|
|
||||||
END GROUP
|
|
||||||
|
|
||||||
.init 0x0000000000080000 0xa8
|
|
||||||
*(.init)
|
|
||||||
.init 0x0000000000080000 0xa8 ./libgilbraltar.a(startup.o)
|
|
||||||
0x0000000000080000 _start
|
|
||||||
|
|
||||||
.text 0x0000000000080800 0x7960
|
|
||||||
*(.text*)
|
|
||||||
.text 0x0000000000080800 0x7c test/test03.o
|
|
||||||
0x0000000000080800 main
|
|
||||||
.text 0x000000000008087c 0x1b0 ./libgilbraltar.a(log.o)
|
|
||||||
0x000000000008087c gilbraltar_log
|
|
||||||
0x0000000000080a08 gilbraltar_log_set
|
|
||||||
.text 0x0000000000080a2c 0x0 ./libgilbraltar.a(startup.o)
|
|
||||||
*fill* 0x0000000000080a2c 0x5d4
|
|
||||||
.text 0x0000000000081000 0x9d8 ./libgilbraltar.a(exception_stub.o)
|
|
||||||
0x0000000000081000 VectorTable
|
|
||||||
0x0000000000081784 unexpected_stub
|
|
||||||
0x00000000000817bc synchronous_stub
|
|
||||||
0x00000000000817f4 system_error_stub
|
|
||||||
0x000000000008182c IRQ_stub
|
|
||||||
0x00000000000818dc FIQ_stub
|
|
||||||
0x0000000000081988 SMC_stub
|
|
||||||
.text 0x00000000000819d8 0x2dc ./libgilbraltar.a(kernel.o)
|
|
||||||
0x0000000000081ac0 gilbraltar_sysinit
|
|
||||||
.text 0x0000000000081cb4 0x28 ./libgilbraltar.a(interrupt_handler.o)
|
|
||||||
0x0000000000081cb4 gilbraltar_interrupt_handler
|
|
||||||
0x0000000000081cd4 gilbraltar_secure_monitor_handler
|
|
||||||
.text 0x0000000000081cdc 0x400 ./libgilbraltar.a(exception_handler.o)
|
|
||||||
0x0000000000081cdc gilbraltar_exception_handler
|
|
||||||
.text 0x00000000000820dc 0x1c ./libgilbraltar.a(crt.o)
|
|
||||||
0x00000000000820dc __stack_chk_fail
|
|
||||||
.text 0x00000000000820f8 0x440 ./libgilbraltar.a(serial.o)
|
|
||||||
0x0000000000082224 gilbraltar_serial_init
|
|
||||||
0x0000000000082354 gilbraltar_serial_send
|
|
||||||
0x000000000008243c gilbraltar_serial_recv
|
|
||||||
0x0000000000082484 gilbraltar_serial_puts
|
|
||||||
0x00000000000824c8 gilbraltar_serial_putchar
|
|
||||||
0x00000000000824ec gilbraltar_serial_write
|
|
||||||
.text 0x0000000000082538 0x7c ./libgilbraltar.a(power.o)
|
|
||||||
0x000000000008255c reboot
|
|
||||||
0x000000000008259c poweroff
|
|
||||||
.text 0x00000000000825b4 0x5ac ./libgilbraltar.a(tag.o)
|
|
||||||
0x00000000000825b4 gilbraltar_get_tags
|
|
||||||
0x0000000000082810 gilbraltar_get_tag
|
|
||||||
.text 0x0000000000082b60 0x44 ./libgilbraltar.a(coherent_page.o)
|
|
||||||
0x0000000000082b60 get_coherent_page
|
|
||||||
.text 0x0000000000082ba4 0x20c ./libgilbraltar.a(dtb.o)
|
|
||||||
0x0000000000082ba4 gilbraltar_dtb_init
|
|
||||||
.text 0x0000000000082db0 0x104 ./libgilbraltar.a(memory.o)
|
|
||||||
0x0000000000082e50 gilbraltar_memory_init
|
|
||||||
.text 0x0000000000082eb4 0x268 ./libgilbraltar.a(pager.o)
|
|
||||||
0x0000000000082eb4 gilbraltar_pager_init
|
|
||||||
0x0000000000082f0c gilbraltar_pager_free_space
|
|
||||||
0x0000000000082f2c gilbraltar_palloc
|
|
||||||
0x00000000000830a8 gilbraltar_pager_free
|
|
||||||
.text 0x000000000008311c 0x554 ./libgilbraltar.a(translation_table.o)
|
|
||||||
0x00000000000833d8 gilbraltar_translation_table_base
|
|
||||||
0x00000000000833e8 gilbraltar_translation_table_init
|
|
||||||
.text 0x0000000000083670 0x10c ./libgilbraltar.a(mbox.o)
|
|
||||||
0x00000000000836ac gilbraltar_mbox_write_read
|
|
||||||
.text 0x000000000008377c 0x184 ./libgilbraltar.a(clock.o)
|
|
||||||
0x000000000008377c gilbraltar_get_rate_of_clock
|
|
||||||
.text 0x0000000000083900 0x108 ./libgilbraltar.a(spinlock.o)
|
|
||||||
0x0000000000083900 gilbraltar_spinlock_init
|
|
||||||
0x0000000000083918 gilbraltar_spinlock_acquire
|
|
||||||
0x00000000000839b8 gilbraltar_spinlock_release
|
|
||||||
.text 0x0000000000083a08 0x21c ./libgilbraltar.a(synchronize.o)
|
|
||||||
0x0000000000083a08 gilbraltar_enter_critical
|
|
||||||
0x0000000000083b44 gilbraltar_leave_critical
|
|
||||||
*fill* 0x0000000000083c24 0x1c
|
|
||||||
.text 0x0000000000083c40 0x50 nolibc/libnolibc.a(assert.o)
|
|
||||||
0x0000000000083c40 _assert_fail
|
|
||||||
*fill* 0x0000000000083c90 0x10
|
|
||||||
.text 0x0000000000083ca0 0x3e0 nolibc/libnolibc.a(memcpy.o)
|
|
||||||
0x0000000000083ca0 memcpy
|
|
||||||
.text 0x0000000000084080 0xe0 nolibc/libnolibc.a(memset.o)
|
|
||||||
0x0000000000084080 memset
|
|
||||||
.text 0x0000000000084160 0x584 nolibc/libnolibc.a(strstr.o)
|
|
||||||
0x0000000000084520 strstr
|
|
||||||
*fill* 0x00000000000846e4 0x1c
|
|
||||||
.text 0x0000000000084700 0x64 nolibc/libnolibc.a(puts.o)
|
|
||||||
0x0000000000084700 puts
|
|
||||||
0x0000000000084740 putchar
|
|
||||||
*fill* 0x0000000000084764 0x1c
|
|
||||||
.text 0x0000000000084780 0x14c nolibc/libnolibc.a(vsnprintf.o)
|
|
||||||
0x00000000000847d0 vsnprintf
|
|
||||||
*fill* 0x00000000000848cc 0x14
|
|
||||||
.text 0x00000000000848e0 0xbc nolibc/libnolibc.a(sysdeps.o)
|
|
||||||
0x000000000008490c write
|
|
||||||
0x0000000000084960 exit
|
|
||||||
0x0000000000084968 abort
|
|
||||||
0x0000000000084988 __getauxval
|
|
||||||
*fill* 0x000000000008499c 0x4
|
|
||||||
.text 0x00000000000849a0 0xbc nolibc/libnolibc.a(memchr.o)
|
|
||||||
0x00000000000849a0 memchr
|
|
||||||
*fill* 0x0000000000084a5c 0x4
|
|
||||||
.text 0x0000000000084a60 0x38 nolibc/libnolibc.a(memcmp.o)
|
|
||||||
0x0000000000084a60 memcmp
|
|
||||||
*fill* 0x0000000000084a98 0x8
|
|
||||||
.text 0x0000000000084aa0 0x78 nolibc/libnolibc.a(strlen.o)
|
|
||||||
0x0000000000084aa0 strlen
|
|
||||||
*fill* 0x0000000000084b18 0x8
|
|
||||||
.text 0x0000000000084b20 0x2c nolibc/libnolibc.a(strchr.o)
|
|
||||||
0x0000000000084b20 strchr
|
|
||||||
*fill* 0x0000000000084b4c 0x14
|
|
||||||
.text 0x0000000000084b60 0xd8 nolibc/libnolibc.a(strchrnul.o)
|
|
||||||
0x0000000000084b60 __strchrnul
|
|
||||||
*fill* 0x0000000000084c38 0x8
|
|
||||||
.text 0x0000000000084c40 0x1e38 nolibc/libnolibc.a(vfprintf.o)
|
|
||||||
0x0000000000084f88 printf_core
|
|
||||||
0x00000000000869c8 vfprintf
|
|
||||||
*fill* 0x0000000000086a78 0x8
|
|
||||||
.text 0x0000000000086a80 0x70 nolibc/libnolibc.a(ctype.o)
|
|
||||||
0x0000000000086a80 isalpha
|
|
||||||
0x0000000000086aa0 isdigit
|
|
||||||
0x0000000000086ab0 isprint
|
|
||||||
0x0000000000086ac0 isspace
|
|
||||||
0x0000000000086ae0 isupper
|
|
||||||
*fill* 0x0000000000086af0 0x10
|
|
||||||
.text 0x0000000000086b00 0xec0 nolibc/libnolibc.a(stubs.o)
|
|
||||||
0x0000000000086b00 fflush
|
|
||||||
0x0000000000086b6c rename
|
|
||||||
0x0000000000086b8c sscanf
|
|
||||||
0x0000000000086bac fread
|
|
||||||
0x0000000000086c20 getc
|
|
||||||
0x0000000000086c90 ungetc
|
|
||||||
0x0000000000086d00 fwrite
|
|
||||||
0x0000000000086d70 fputc
|
|
||||||
0x0000000000086de0 fputs
|
|
||||||
0x0000000000086e50 putc
|
|
||||||
0x0000000000086ec0 ferror
|
|
||||||
0x0000000000086f30 fopen
|
|
||||||
0x0000000000086fa0 fclose
|
|
||||||
0x0000000000087010 getenv
|
|
||||||
0x0000000000087080 secure_getenv
|
|
||||||
0x00000000000870f0 system
|
|
||||||
0x0000000000087110 chdir
|
|
||||||
0x0000000000087180 close
|
|
||||||
0x00000000000871a0 getcwd
|
|
||||||
0x00000000000871c0 getpid
|
|
||||||
0x0000000000087230 getppid
|
|
||||||
0x00000000000872a0 isatty
|
|
||||||
0x00000000000872c0 lseek
|
|
||||||
0x00000000000872e0 read
|
|
||||||
0x0000000000087300 readlink
|
|
||||||
0x0000000000087320 unlink
|
|
||||||
0x0000000000087340 rmdir
|
|
||||||
0x0000000000087360 ftruncate
|
|
||||||
0x0000000000087380 execv
|
|
||||||
0x00000000000873a0 closedir
|
|
||||||
0x0000000000087410 opendir
|
|
||||||
0x0000000000087480 readdir
|
|
||||||
0x00000000000874f0 fcntl
|
|
||||||
0x0000000000087510 open
|
|
||||||
0x0000000000087580 setjmp
|
|
||||||
0x00000000000875a0 signal
|
|
||||||
0x00000000000875c0 raise
|
|
||||||
0x00000000000875e0 strerror
|
|
||||||
0x0000000000087600 stat
|
|
||||||
0x0000000000087670 mkdir
|
|
||||||
0x0000000000087690 pthread_join
|
|
||||||
0x00000000000876a4 pthread_create
|
|
||||||
0x00000000000876c0 pthread_attr_init
|
|
||||||
0x00000000000876e0 pthread_cleanup_push
|
|
||||||
0x0000000000087700 pthread_cleanup_pop
|
|
||||||
0x0000000000087720 pthread_mutex_lock
|
|
||||||
0x0000000000087740 pthread_mutex_trylock
|
|
||||||
0x0000000000087760 pthread_mutex_unlock
|
|
||||||
0x0000000000087780 pthread_mutex_destroy
|
|
||||||
0x00000000000877a0 pthread_mutex_init
|
|
||||||
0x00000000000877c0 pthread_mutexattr_init
|
|
||||||
0x00000000000877e0 pthread_mutexattr_destroy
|
|
||||||
0x0000000000087800 pthread_mutexattr_settype
|
|
||||||
0x0000000000087820 pthread_sigmask
|
|
||||||
0x0000000000087840 pthread_equal
|
|
||||||
0x0000000000087860 pthread_condattr_init
|
|
||||||
0x0000000000087880 pthread_cond_init
|
|
||||||
0x00000000000878a0 pthread_cond_destroy
|
|
||||||
0x00000000000878c0 pthread_cond_wait
|
|
||||||
0x00000000000878e0 pthread_cond_signal
|
|
||||||
0x0000000000087900 pthread_cond_broadcast
|
|
||||||
0x0000000000087920 pthread_self
|
|
||||||
0x0000000000087940 pthread_detach
|
|
||||||
0x0000000000087960 sigfillset
|
|
||||||
0x0000000000087980 sigwait
|
|
||||||
0x00000000000879a0 usleep
|
|
||||||
.text 0x00000000000879c0 0xbc nolibc/libnolibc.a(printf.o)
|
|
||||||
0x00000000000879c0 printf
|
|
||||||
*fill* 0x0000000000087a7c 0x4
|
|
||||||
.text 0x0000000000087a80 0x78 openlibm/libopenlibm.a(s_frexp.c.o)
|
|
||||||
0x0000000000087a80 frexp
|
|
||||||
*fill* 0x0000000000087af8 0x8
|
|
||||||
.text 0x0000000000087b00 0x64 openlibm/libopenlibm.a(s_isfinite.c.o)
|
|
||||||
0x0000000000087b00 __isfinite
|
|
||||||
0x0000000000087b20 __isfinitef
|
|
||||||
0x0000000000087b40 __isfinitel
|
|
||||||
*fill* 0x0000000000087b64 0x1c
|
|
||||||
.text 0x0000000000087b80 0x38 openlibm/libopenlibm.a(s_signbit.c.o)
|
|
||||||
0x0000000000087b80 __signbit
|
|
||||||
0x0000000000087b8c __signbitf
|
|
||||||
0x0000000000087ba0 __signbitl
|
|
||||||
.text 0x0000000000087bb8 0x0 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
*fill* 0x0000000000087bb8 0x8
|
|
||||||
.text.__extenddftf2
|
|
||||||
0x0000000000087bc0 0x158 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
0x0000000000087bc0 __extenddftf2
|
|
||||||
.text 0x0000000000087d18 0x0 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
*fill* 0x0000000000087d18 0x8
|
|
||||||
.text.__trunctfdf2
|
|
||||||
0x0000000000087d20 0x3c4 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
0x0000000000087d20 __trunctfdf2
|
|
||||||
.text 0x00000000000880e4 0x0 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
*fill* 0x00000000000880e4 0xc
|
|
||||||
.text.__sfp_handle_exceptions
|
|
||||||
0x00000000000880f0 0x70 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
0x00000000000880f0 __sfp_handle_exceptions
|
|
||||||
0x0000000000088160 _etext = .
|
|
||||||
|
|
||||||
.iplt 0x0000000000088160 0x0
|
|
||||||
.iplt 0x0000000000088160 0x0 test/test03.o
|
|
||||||
|
|
||||||
.rodata 0x0000000000088160 0xa40
|
|
||||||
*(.rodata*)
|
|
||||||
.rodata 0x0000000000088160 0x22 test/test03.o
|
|
||||||
*fill* 0x0000000000088182 0x6
|
|
||||||
.rodata 0x0000000000088188 0x6d ./libgilbraltar.a(kernel.o)
|
|
||||||
*fill* 0x00000000000881f5 0x3
|
|
||||||
.rodata 0x00000000000881f8 0x10 ./libgilbraltar.a(interrupt_handler.o)
|
|
||||||
.rodata 0x0000000000088208 0x97 ./libgilbraltar.a(exception_handler.o)
|
|
||||||
*fill* 0x000000000008829f 0x1
|
|
||||||
.rodata 0x00000000000882a0 0x23 ./libgilbraltar.a(crt.o)
|
|
||||||
*fill* 0x00000000000882c3 0x5
|
|
||||||
.rodata 0x00000000000882c8 0x21 ./libgilbraltar.a(serial.o)
|
|
||||||
*fill* 0x00000000000882e9 0x7
|
|
||||||
.rodata 0x00000000000882f0 0x8b ./libgilbraltar.a(tag.o)
|
|
||||||
*fill* 0x000000000008837b 0x5
|
|
||||||
.rodata 0x0000000000088380 0x4b ./libgilbraltar.a(dtb.o)
|
|
||||||
*fill* 0x00000000000883cb 0x5
|
|
||||||
.rodata 0x00000000000883d0 0x26 ./libgilbraltar.a(memory.o)
|
|
||||||
*fill* 0x00000000000883f6 0x2
|
|
||||||
.rodata 0x00000000000883f8 0x9c ./libgilbraltar.a(pager.o)
|
|
||||||
*fill* 0x0000000000088494 0x4
|
|
||||||
.rodata 0x0000000000088498 0x28 ./libgilbraltar.a(translation_table.o)
|
|
||||||
.rodata 0x00000000000884c0 0x1f ./libgilbraltar.a(mbox.o)
|
|
||||||
*fill* 0x00000000000884df 0x1
|
|
||||||
.rodata 0x00000000000884e0 0x9b ./libgilbraltar.a(clock.o)
|
|
||||||
*fill* 0x000000000008857b 0x5
|
|
||||||
.rodata 0x0000000000088580 0x2a ./libgilbraltar.a(spinlock.o)
|
|
||||||
*fill* 0x00000000000885aa 0x6
|
|
||||||
.rodata 0x00000000000885b0 0xf2 ./libgilbraltar.a(synchronize.o)
|
|
||||||
*fill* 0x00000000000886a2 0x6
|
|
||||||
.rodata.str1.8
|
|
||||||
0x00000000000886a8 0x297 nolibc/libnolibc.a(assert.o)
|
|
||||||
0x23 (size before relaxing)
|
|
||||||
.rodata.str1.8
|
|
||||||
0x000000000008893f 0xa nolibc/libnolibc.a(sysdeps.o)
|
|
||||||
*fill* 0x000000000008893f 0x1
|
|
||||||
.rodata 0x0000000000088940 0x260 nolibc/libnolibc.a(vfprintf.o)
|
|
||||||
.rodata.str1.8
|
|
||||||
0x0000000000088ba0 0x52 nolibc/libnolibc.a(vfprintf.o)
|
|
||||||
.rodata.str1.8
|
|
||||||
0x0000000000088ba0 0x207 nolibc/libnolibc.a(stubs.o)
|
|
||||||
|
|
||||||
.rela.dyn 0x0000000000088ba0 0x0
|
|
||||||
.rela.iplt 0x0000000000088ba0 0x0 test/test03.o
|
|
||||||
.rela.text 0x0000000000088ba0 0x0 test/test03.o
|
|
||||||
|
|
||||||
.ARM.exidx 0x0000000000088ba0 0x0
|
|
||||||
0x0000000000088ba0 __exidx_start = .
|
|
||||||
*(.ARM.exidx*)
|
|
||||||
0x0000000000088ba0 __exidx_end = .
|
|
||||||
|
|
||||||
.eh_frame
|
|
||||||
*(.eh_frame*)
|
|
||||||
|
|
||||||
.data 0x0000000000088ba0 0xc4
|
|
||||||
*(.data*)
|
|
||||||
.data 0x0000000000088ba0 0x0 test/test03.o
|
|
||||||
.data 0x0000000000088ba0 0x4 ./libgilbraltar.a(log.o)
|
|
||||||
.data 0x0000000000088ba4 0x0 ./libgilbraltar.a(startup.o)
|
|
||||||
*fill* 0x0000000000088ba4 0x4
|
|
||||||
.data 0x0000000000088ba8 0x20 ./libgilbraltar.a(exception_stub.o)
|
|
||||||
0x0000000000088ba8 FIQ_data
|
|
||||||
0x0000000000088bc0 IRQ_return_address
|
|
||||||
.data 0x0000000000088bc8 0x0 ./libgilbraltar.a(kernel.o)
|
|
||||||
.data 0x0000000000088bc8 0x0 ./libgilbraltar.a(interrupt_handler.o)
|
|
||||||
.data 0x0000000000088bc8 0x18 ./libgilbraltar.a(exception_handler.o)
|
|
||||||
.data 0x0000000000088be0 0x8 ./libgilbraltar.a(crt.o)
|
|
||||||
0x0000000000088be0 __stack_chk_guard
|
|
||||||
.data 0x0000000000088be8 0x0 ./libgilbraltar.a(serial.o)
|
|
||||||
.data 0x0000000000088be8 0x0 ./libgilbraltar.a(power.o)
|
|
||||||
.data 0x0000000000088be8 0x0 ./libgilbraltar.a(tag.o)
|
|
||||||
.data 0x0000000000088be8 0x0 ./libgilbraltar.a(coherent_page.o)
|
|
||||||
.data 0x0000000000088be8 0x0 ./libgilbraltar.a(dtb.o)
|
|
||||||
.data 0x0000000000088be8 0x0 ./libgilbraltar.a(memory.o)
|
|
||||||
.data 0x0000000000088be8 0x0 ./libgilbraltar.a(pager.o)
|
|
||||||
.data 0x0000000000088be8 0x0 ./libgilbraltar.a(translation_table.o)
|
|
||||||
.data 0x0000000000088be8 0x0 ./libgilbraltar.a(mbox.o)
|
|
||||||
.data 0x0000000000088be8 0x0 ./libgilbraltar.a(clock.o)
|
|
||||||
.data 0x0000000000088be8 0x0 ./libgilbraltar.a(spinlock.o)
|
|
||||||
.data 0x0000000000088be8 0x0 ./libgilbraltar.a(synchronize.o)
|
|
||||||
.data 0x0000000000088be8 0x0 nolibc/libnolibc.a(assert.o)
|
|
||||||
.data 0x0000000000088be8 0x0 nolibc/libnolibc.a(memcpy.o)
|
|
||||||
.data 0x0000000000088be8 0x0 nolibc/libnolibc.a(memset.o)
|
|
||||||
.data 0x0000000000088be8 0x0 nolibc/libnolibc.a(strstr.o)
|
|
||||||
.data 0x0000000000088be8 0x0 nolibc/libnolibc.a(puts.o)
|
|
||||||
.data 0x0000000000088be8 0x0 nolibc/libnolibc.a(vsnprintf.o)
|
|
||||||
.data 0x0000000000088be8 0x28 nolibc/libnolibc.a(sysdeps.o)
|
|
||||||
0x0000000000088be8 stdout
|
|
||||||
0x0000000000088bf0 stderr
|
|
||||||
.data 0x0000000000088c10 0x0 nolibc/libnolibc.a(memchr.o)
|
|
||||||
.data 0x0000000000088c10 0x0 nolibc/libnolibc.a(memcmp.o)
|
|
||||||
.data 0x0000000000088c10 0x0 nolibc/libnolibc.a(strlen.o)
|
|
||||||
.data 0x0000000000088c10 0x0 nolibc/libnolibc.a(strchr.o)
|
|
||||||
.data 0x0000000000088c10 0x0 nolibc/libnolibc.a(strchrnul.o)
|
|
||||||
.data 0x0000000000088c10 0x0 nolibc/libnolibc.a(vfprintf.o)
|
|
||||||
.data 0x0000000000088c10 0x0 nolibc/libnolibc.a(ctype.o)
|
|
||||||
.data 0x0000000000088c10 0x54 nolibc/libnolibc.a(stubs.o)
|
|
||||||
.data 0x0000000000088c64 0x0 nolibc/libnolibc.a(printf.o)
|
|
||||||
.data 0x0000000000088c64 0x0 openlibm/libopenlibm.a(s_frexp.c.o)
|
|
||||||
.data 0x0000000000088c64 0x0 openlibm/libopenlibm.a(s_isfinite.c.o)
|
|
||||||
.data 0x0000000000088c64 0x0 openlibm/libopenlibm.a(s_signbit.c.o)
|
|
||||||
.data 0x0000000000088c64 0x0 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
.data 0x0000000000088c64 0x0 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
.data 0x0000000000088c64 0x0 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
|
|
||||||
.igot.plt 0x0000000000088c68 0x0
|
|
||||||
.igot.plt 0x0000000000088c68 0x0 test/test03.o
|
|
||||||
|
|
||||||
.tdata 0x0000000000088c64 0x0
|
|
||||||
0x0000000000088c64 _stdata = .
|
|
||||||
*(.tdata)
|
|
||||||
0x0000000000088c64 _edata = .
|
|
||||||
|
|
||||||
.tbss
|
|
||||||
*(.tbss)
|
|
||||||
|
|
||||||
.bss 0x0000000000088c70 0x1364
|
|
||||||
0x0000000000088c70 __bss_start = .
|
|
||||||
*(.bss*)
|
|
||||||
.bss 0x0000000000088c70 0x0 test/test03.o
|
|
||||||
.bss 0x0000000000088c70 0x0 ./libgilbraltar.a(log.o)
|
|
||||||
.bss 0x0000000000088c70 0x0 ./libgilbraltar.a(startup.o)
|
|
||||||
.bss 0x0000000000088c70 0x80 ./libgilbraltar.a(exception_stub.o)
|
|
||||||
.bss 0x0000000000088cf0 0x0 ./libgilbraltar.a(kernel.o)
|
|
||||||
.bss 0x0000000000088cf0 0x0 ./libgilbraltar.a(interrupt_handler.o)
|
|
||||||
.bss 0x0000000000088cf0 0x0 ./libgilbraltar.a(exception_handler.o)
|
|
||||||
.bss 0x0000000000088cf0 0x0 ./libgilbraltar.a(crt.o)
|
|
||||||
.bss 0x0000000000088cf0 0x100a ./libgilbraltar.a(serial.o)
|
|
||||||
.bss 0x0000000000089cfa 0x0 ./libgilbraltar.a(power.o)
|
|
||||||
.bss 0x0000000000089cfa 0x0 ./libgilbraltar.a(tag.o)
|
|
||||||
.bss 0x0000000000089cfa 0x0 ./libgilbraltar.a(coherent_page.o)
|
|
||||||
*fill* 0x0000000000089cfa 0x6
|
|
||||||
.bss 0x0000000000089d00 0x8 ./libgilbraltar.a(dtb.o)
|
|
||||||
.bss 0x0000000000089d08 0x0 ./libgilbraltar.a(memory.o)
|
|
||||||
.bss 0x0000000000089d08 0x1c ./libgilbraltar.a(pager.o)
|
|
||||||
*fill* 0x0000000000089d24 0x4
|
|
||||||
.bss 0x0000000000089d28 0x10 ./libgilbraltar.a(translation_table.o)
|
|
||||||
.bss 0x0000000000089d38 0x0 ./libgilbraltar.a(mbox.o)
|
|
||||||
.bss 0x0000000000089d38 0x0 ./libgilbraltar.a(clock.o)
|
|
||||||
.bss 0x0000000000089d38 0x1 ./libgilbraltar.a(spinlock.o)
|
|
||||||
*fill* 0x0000000000089d39 0x7
|
|
||||||
.bss 0x0000000000089d40 0x290 ./libgilbraltar.a(synchronize.o)
|
|
||||||
.bss 0x0000000000089fd0 0x0 nolibc/libnolibc.a(assert.o)
|
|
||||||
.bss 0x0000000000089fd0 0x0 nolibc/libnolibc.a(memcpy.o)
|
|
||||||
.bss 0x0000000000089fd0 0x0 nolibc/libnolibc.a(memset.o)
|
|
||||||
.bss 0x0000000000089fd0 0x0 nolibc/libnolibc.a(strstr.o)
|
|
||||||
.bss 0x0000000000089fd0 0x0 nolibc/libnolibc.a(puts.o)
|
|
||||||
.bss 0x0000000000089fd0 0x0 nolibc/libnolibc.a(vsnprintf.o)
|
|
||||||
.bss 0x0000000000089fd0 0x4 nolibc/libnolibc.a(sysdeps.o)
|
|
||||||
0x0000000000089fd0 errno
|
|
||||||
.bss 0x0000000000089fd4 0x0 nolibc/libnolibc.a(memchr.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 nolibc/libnolibc.a(memcmp.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 nolibc/libnolibc.a(strlen.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 nolibc/libnolibc.a(strchr.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 nolibc/libnolibc.a(strchrnul.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 nolibc/libnolibc.a(vfprintf.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 nolibc/libnolibc.a(ctype.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 nolibc/libnolibc.a(stubs.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 nolibc/libnolibc.a(printf.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 openlibm/libopenlibm.a(s_frexp.c.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 openlibm/libopenlibm.a(s_isfinite.c.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 openlibm/libopenlibm.a(s_signbit.c.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
.bss 0x0000000000089fd4 0x0 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
*(COMMON)
|
|
||||||
0x0000000000089fd4 _end = .
|
|
||||||
OUTPUT(test03.elf elf64-littleaarch64)
|
|
||||||
LOAD linker stubs
|
|
||||||
|
|
||||||
.comment 0x0000000000000000 0x45
|
|
||||||
.comment 0x0000000000000000 0x45 test/test03.o
|
|
||||||
0x46 (size before relaxing)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(log.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(kernel.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(interrupt_handler.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(exception_handler.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(crt.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(serial.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(power.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(tag.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(coherent_page.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(dtb.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(memory.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(pager.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(translation_table.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(mbox.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(clock.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(spinlock.o)
|
|
||||||
.comment 0x0000000000000045 0x46 ./libgilbraltar.a(synchronize.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(assert.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(memcpy.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(memset.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(strstr.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(puts.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(vsnprintf.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(sysdeps.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(memchr.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(memcmp.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(strlen.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(strchr.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(strchrnul.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(vfprintf.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(ctype.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(stubs.o)
|
|
||||||
.comment 0x0000000000000045 0x46 nolibc/libnolibc.a(printf.o)
|
|
||||||
.comment 0x0000000000000045 0x46 openlibm/libopenlibm.a(s_frexp.c.o)
|
|
||||||
.comment 0x0000000000000045 0x46 openlibm/libopenlibm.a(s_isfinite.c.o)
|
|
||||||
.comment 0x0000000000000045 0x46 openlibm/libopenlibm.a(s_signbit.c.o)
|
|
||||||
.comment 0x0000000000000045 0x46 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
.comment 0x0000000000000045 0x46 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
.comment 0x0000000000000045 0x46 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
|
|
||||||
.debug_info 0x0000000000000000 0x76a
|
|
||||||
.debug_info 0x0000000000000000 0x2ef /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
.debug_info 0x00000000000002ef 0x39e /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
.debug_info 0x000000000000068d 0xdd /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
|
|
||||||
.debug_abbrev 0x0000000000000000 0x35e
|
|
||||||
.debug_abbrev 0x0000000000000000 0x159 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
.debug_abbrev 0x0000000000000159 0x183 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
.debug_abbrev 0x00000000000002dc 0x82 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
|
|
||||||
.debug_loclists
|
|
||||||
0x0000000000000000 0xacb
|
|
||||||
.debug_loclists
|
|
||||||
0x0000000000000000 0x451 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
.debug_loclists
|
|
||||||
0x0000000000000451 0x653 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
.debug_loclists
|
|
||||||
0x0000000000000aa4 0x27 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
|
|
||||||
.debug_aranges 0x0000000000000000 0x90
|
|
||||||
.debug_aranges
|
|
||||||
0x0000000000000000 0x30 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
.debug_aranges
|
|
||||||
0x0000000000000030 0x30 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
.debug_aranges
|
|
||||||
0x0000000000000060 0x30 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
|
|
||||||
.debug_rnglists
|
|
||||||
0x0000000000000000 0x1d6
|
|
||||||
.debug_rnglists
|
|
||||||
0x0000000000000000 0x84 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
.debug_rnglists
|
|
||||||
0x0000000000000084 0x13b /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
.debug_rnglists
|
|
||||||
0x00000000000001bf 0x17 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
|
|
||||||
.debug_line 0x0000000000000000 0xb07
|
|
||||||
.debug_line 0x0000000000000000 0x276 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
.debug_line 0x0000000000000276 0x7f9 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
.debug_line 0x0000000000000a6f 0x98 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
|
|
||||||
.debug_str 0x0000000000000000 0x294
|
|
||||||
.debug_str 0x0000000000000000 0x294 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
0x1f3 (size before relaxing)
|
|
||||||
.debug_str 0x0000000000000294 0x252 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
.debug_str 0x0000000000000294 0x11c /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
|
|
||||||
.debug_line_str
|
|
||||||
0x0000000000000000 0x213
|
|
||||||
.debug_line_str
|
|
||||||
0x0000000000000000 0x213 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
0x19c (size before relaxing)
|
|
||||||
.debug_line_str
|
|
||||||
0x0000000000000213 0x199 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
.debug_line_str
|
|
||||||
0x0000000000000213 0x193 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
||||||
|
|
||||||
.debug_frame 0x0000000000000000 0xb0
|
|
||||||
.debug_frame 0x0000000000000000 0x38 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(extenddftf2.o)
|
|
||||||
.debug_frame 0x0000000000000038 0x50 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(trunctfdf2.o)
|
|
||||||
.debug_frame 0x0000000000000088 0x28 /usr/bin/../lib/gcc/aarch64-none-elf/13.3.1/libgcc.a(sfp-exceptions.o)
|
|
Loading…
Reference in a new issue