Mercurial > nand-ecoscentric
changeset 2103:9169038683a3
Replace use of brk() system call with linker script magic to obtain
the memory for the system heap.
| author | bartv |
|---|---|
| date | Sun, 20 Nov 2005 16:21:18 +0000 |
| parents | ede282e6434e |
| children | 84bb9baeb0e1 |
| files | packages/hal/synth/arch/current/ChangeLog packages/hal/synth/arch/current/src/synth.ld packages/hal/synth/arch/current/src/synth_entry.c packages/hal/synth/i386linux/current/ChangeLog packages/hal/synth/i386linux/current/include/pkgconf/mlt_synth_i386_rom.ldi |
| diffstat | 5 files changed, 32 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/hal/synth/arch/current/ChangeLog +++ b/packages/hal/synth/arch/current/ChangeLog @@ -1,3 +1,12 @@ +2005-11-19 Bart Veer <bartv@ecoscentric.com> + + * src/synth_entry.c (_linux_entry): brk() is no longer needed to + get heap memory. + + * src/synth.ld: add new section to contain the heap memory rather + than rely on brk(). + + 2005-11-05 Andrew Lunn <andrew.lunn@ascom.ch> * include/hal_io.h (struct cyg_hal_sys_old_stat): Make the
--- a/packages/hal/synth/arch/current/src/synth.ld +++ b/packages/hal/synth/arch/current/src/synth.ld @@ -8,6 +8,7 @@ //####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2005 Bart Veer // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. // // eCos is free software; you can redistribute it and/or modify it under @@ -212,6 +213,11 @@ GROUP(libtarget.a libgcc.a) > _region_ \ __bss_end = .; +#define SECTIONS_HEAP(_region_, _start_, _end_) \ + .synth_heap _start_ : \ + { FORCE_OUTPUT; . = _end_ - _start_ ; } \ + > _region_ + #define SECTIONS_END . = ALIGN(4); _end = .; PROVIDE (end = .); #include <pkgconf/system.h>
--- a/packages/hal/synth/arch/current/src/synth_entry.c +++ b/packages/hal/synth/arch/current/src/synth_entry.c @@ -8,7 +8,7 @@ //####ECOSGPLCOPYRIGHTBEGIN#### // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 2002 Bart Veer +// Copyright (C) 2002, 2005 Bart Veer // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. // // eCos is free software; you can redistribute it and/or modify it under @@ -105,29 +105,16 @@ externC void synth_hardware_init2(voi void _linux_entry( void ) { - void* new_top = (void*) 0; - // "Initialize various cpu status registers, including disabling interrupts." // That is a no-op for the synthetic target, in particular interrupts are // already disabled. - // "Set up any CPU memory controller to access ROM, RAM, and I/O devices - // correctly". - // - // This involves using the brk() system call to allocate the RAM used - // for the heaps. There are no variables mapped there so the system - // will not have done this for us. Note that the implementation of - // brk() (mm/mmap.c) differs from the documentation - the return - // value is the new brk value, not an error code. - new_top = (void*) (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE); - if (new_top != cyg_hal_sys_brk(new_top)) { - CYG_FAIL("Failed to initialize memory"); - cyg_hal_sys_exit(1); - } - - // Again a no-op for the synthetic target. All memory is readily - // accessible. Arguably the auxiliary should be started up here, but - // instead that is left to platform initialization. + // "Set up any CPU memory controller to access ROM, RAM, and I/O + // devices correctly". The ROM and RAM are set up via the linker + // script and taken care of automatically during loading. There + // are no memory-mapped devices. Arguably the auxiliary should be + // started up here, but instead that is left to platform + // initialization. // "Enable the cache". Effectively the synthetic target has no cache, // anything provided by the hardware is not readily accessible.
--- a/packages/hal/synth/i386linux/current/ChangeLog +++ b/packages/hal/synth/i386linux/current/ChangeLog @@ -1,3 +1,8 @@ +2005-11-19 Bart Veer <bartv@ecoscentric.com> + + * include/pkgconf/mlt_synth_i386_rom.ldi: add new heap section to + avoid the use of brk() + 2005-11-05 Andrew Lunn <andrew.lunn@ascom.ch> * src/syscall-i386-linux-1.0.S: renamed prev_?stat to old?stat to
--- a/packages/hal/synth/i386linux/current/include/pkgconf/mlt_synth_i386_rom.ldi +++ b/packages/hal/synth/i386linux/current/include/pkgconf/mlt_synth_i386_rom.ldi @@ -6,14 +6,14 @@ MEMORY { - rom : ORIGIN = 0x1000000, LENGTH = 0x800000 - ram : ORIGIN = 0x2000000, LENGTH = 0x800000 + rom : ORIGIN = 0x01000000, LENGTH = 0x800000 + ram : ORIGIN = 0x02000000, LENGTH = 0x800000 } SECTIONS { SECTIONS_BEGIN - SECTION_vectors (rom, 0x1000000, LMA_EQ_VMA) + SECTION_vectors (rom, 0x01000000, LMA_EQ_VMA) SECTION_text (rom, ALIGN (0x4), LMA_EQ_VMA) SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) SECTION_rodata1 (rom, ALIGN (0x8), LMA_EQ_VMA) @@ -23,9 +23,10 @@ SECTIONS SECTION_eh_frame (rom, ALIGN (0x4), LMA_EQ_VMA) SECTION_rel__got (rom, ALIGN (0x1), LMA_EQ_VMA) SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_data (ram, 0x2000000, LMA_EQ_VMA) + SECTION_data (ram, 0x02000000, LMA_EQ_VMA) SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) CYG_LABEL_DEFN(__heap1) = ALIGN (0x10); + SECTIONS_HEAP(ram, __heap1, 0x02800000) SECTIONS_END }
