- Call post-boot fixup function in order to get proper static

symbols resolving in DDB
- When zeroing .bss/.sbss do not round end address to page boundary,
    it's not neccessary and might destroy data pased by trampoline or
    boot loader
This commit is contained in:
Oleksandr Tymoshenko 2010-01-25 00:44:05 +00:00
parent 55926a6616
commit d86043b594
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=202954
7 changed files with 33 additions and 20 deletions

View File

@ -94,7 +94,7 @@ mips_init(void)
}
/* phys_avail regions are in bytes */
phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
phys_avail[0] = MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
phys_avail[1] = ctob(realmem);
physmem = realmem;
@ -153,9 +153,11 @@ platform_start(__register_t a0 __unused, __register_t a1 __unused,
uint64_t platform_counter_freq = 175 * 1000 * 1000;
/* clear the BSS and SBSS segments */
kernend = round_page((vm_offset_t)&end);
kernend = (vm_offset_t)&end;
memset(&edata, 0, kernend - (vm_offset_t)(&edata));
mips_postboot_fixup();
/* Initialize pcpu stuff */
mips_pcpu0_init();

View File

@ -94,7 +94,7 @@ mips_init(void)
}
/* phys_avail regions are in bytes */
phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
phys_avail[0] = MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
phys_avail[1] = ctob(realmem);
physmem = realmem;
@ -154,9 +154,11 @@ platform_start(__register_t a0 __unused, __register_t a1 __unused,
uint64_t platform_counter_freq = 175 * 1000 * 1000;
/* clear the BSS and SBSS segments */
kernend = round_page((vm_offset_t)&end);
kernend = (vm_offset_t)&end;
memset(&edata, 0, kernend - (vm_offset_t)(&edata));
mips_postboot_fixup();
/* Initialize pcpu stuff */
mips_pcpu0_init();

View File

@ -57,8 +57,8 @@ __FBSDID("$FreeBSD$");
#include <mips/atheros/ar71xxreg.h>
extern int *edata;
extern int *end;
extern char edata[], end[];
uint32_t ar711_base_mac[ETHER_ADDR_LEN];
/* 4KB static data aread to keep a copy of the bootload env until
the dynamic kenv is setup */
@ -142,16 +142,21 @@ void
platform_start(__register_t a0 __unused, __register_t a1 __unused,
__register_t a2 __unused, __register_t a3 __unused)
{
vm_offset_t kernend;
uint64_t platform_counter_freq;
uint32_t reg;
int argc, i, count = 0;
char **argv, **envp;
vm_offset_t kernend;
/* clear the BSS and SBSS segments */
kernend = round_page((vm_offset_t)&end);
/*
* clear the BSS and SBSS segments, this should be first call in
* the function
*/
kernend = (vm_offset_t)&end;
memset(&edata, 0, kernend - (vm_offset_t)(&edata));
mips_postboot_fixup();
/* Initialize pcpu stuff */
mips_pcpu0_init();
@ -186,7 +191,7 @@ platform_start(__register_t a0 __unused, __register_t a1 __unused,
realmem = btoc(32*1024*1024);
/* phys_avail regions are in bytes */
phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
phys_avail[0] = MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
phys_avail[1] = ctob(realmem);
physmem = realmem;

View File

@ -134,9 +134,11 @@ platform_start(__register_t a0, __register_t a1,
/* clear the BSS and SBSS segments */
kernend = round_page((vm_offset_t)&end);
kernend = (vm_offset_t)&end;
memset(&edata, 0, kernend - (vm_offset_t)(&edata));
mips_postboot_fixup();
/* Initialize pcpu stuff */
mips_pcpu0_init();
@ -162,7 +164,7 @@ platform_start(__register_t a0, __register_t a1,
}
/* phys_avail regions are in bytes */
phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
phys_avail[0] = MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
phys_avail[1] = ctob(realmem);
physmem = realmem;

View File

@ -178,7 +178,7 @@ mips_init(void)
}
/* phys_avail regions are in bytes */
phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
phys_avail[0] = MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
phys_avail[1] = ctob(realmem);
physmem = realmem;
@ -293,9 +293,11 @@ platform_start(__register_t a0, __register_t a1, __register_t a2,
int i;
/* clear the BSS and SBSS segments */
kernend = round_page((vm_offset_t)&end);
kernend = (vm_offset_t)&end;
memset(&edata, 0, kernend - (vm_offset_t)(&edata));
mips_postboot_fixup();
mips_pcpu0_init();
platform_counter_freq = malta_cpu_freq();
mips_timer_early_init(platform_counter_freq);

View File

@ -119,7 +119,7 @@ mips_init(void)
* from CFE, omit the region at the start of physical
* memory where the kernel has been loaded.
*/
phys_avail[i] += MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
phys_avail[i] += MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
}
phys_avail[i + 1] = addr + len;
physmem += len;
@ -187,9 +187,11 @@ platform_start(__register_t a0, __register_t a1, __register_t a2,
uint64_t platform_counter_freq;
/* clear the BSS and SBSS segments */
kernend = round_page((vm_offset_t)&end);
kernend = (vm_offset_t)&end;
memset(&edata, 0, kernend - (vm_offset_t)(&edata));
mips_postboot_fixup();
/* Initialize pcpu stuff */
mips_pcpu0_init();

View File

@ -169,7 +169,7 @@ mips_init(void)
* from CFE, omit the region at the start of physical
* memory where the kernel has been loaded.
*/
phys_avail[i] += MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
phys_avail[i] += MIPS_KSEG0_TO_PHYS(kernel_kseg0_end);
}
phys_avail[i + 1] = addr + len;
physmem += len;
@ -246,8 +246,6 @@ void
platform_start(__register_t a0, __register_t a1, __register_t a2,
__register_t a3)
{
vm_offset_t kernend;
/*
* Make sure that kseg0 is mapped cacheable-coherent
*/
@ -255,7 +253,7 @@ platform_start(__register_t a0, __register_t a1, __register_t a2,
/* clear the BSS and SBSS segments */
memset(&edata, 0, (vm_offset_t)&end - (vm_offset_t)&edata);
kernend = round_page((vm_offset_t)&end);
mips_postboot_fixup();
/* Initialize pcpu stuff */
mips_pcpu0_init();