From a5c3b84db4546158a8d8439f89166cbe8ff06435 Mon Sep 17 00:00:00 2001 From: uebayasi Date: Sat, 22 Jun 2013 15:13:55 +0000 Subject: [PATCH] Use END() markers, etc. Pure ELF .symtab (size) changes. --- sys/arch/amd64/amd64/locore.S | 136 +++++++++++++++++++++++++--------- sys/arch/i386/i386/locore.S | 79 +++++++++++++------- 2 files changed, 151 insertions(+), 64 deletions(-) diff --git a/sys/arch/amd64/amd64/locore.S b/sys/arch/amd64/amd64/locore.S index ed9eff0eaff9..61af473ee6a8 100644 --- a/sys/arch/amd64/amd64/locore.S +++ b/sys/arch/amd64/amd64/locore.S @@ -1,4 +1,4 @@ -/* $NetBSD: locore.S,v 1.70 2012/07/15 15:17:56 dsl Exp $ */ +/* $NetBSD: locore.S,v 1.71 2013/06/22 15:13:56 uebayasi Exp $ */ /* * Copyright-o-rama! @@ -187,6 +187,9 @@ /* Get definitions for IOM_BEGIN, IOM_END, and IOM_SIZE */ #include +#define _RELOC(x) ((x) - KERNBASE) +#define RELOC(x) _RELOC(_C_LABEL(x)) + #ifdef XEN /* @@ -216,53 +219,92 @@ #if NLAPIC > 0 .align NBPG - .globl _C_LABEL(local_apic), _C_LABEL(lapic_id), _C_LABEL(lapic_tpr) -_C_LABEL(local_apic): + .globl _C_LABEL(local_apic) + .globl _C_LABEL(lapic_id) + .globl _C_LABEL(lapic_tpr) + + .type _C_LABEL(local_apic), @object +LABEL(local_apic) .space LAPIC_ID -_C_LABEL(lapic_id): +END(local_apic) + .type _C_LABEL(lapic_id), @object +LABEL(lapic_id) .long 0x00000000 .space LAPIC_TPRI-(LAPIC_ID+4) -_C_LABEL(lapic_tpr): +END(lapic_id) + .type _C_LABEL(lapic_tpr), @object +LABEL(lapic_tpr) .space LAPIC_PPRI-LAPIC_TPRI +END(lapic_tpr) + .type _C_LABEL(lapic_ppr), @object _C_LABEL(lapic_ppr): .space LAPIC_ISR-LAPIC_PPRI +END(lapic_ppr) + .type _C_LABEL(lapic_isr), @object _C_LABEL(lapic_isr): .space NBPG-LAPIC_ISR +END(lapic_isr) #endif - .globl _C_LABEL(cpu_id),_C_LABEL(cpu_vendorname), _C_LABEL(cpu_brand_id) + .globl _C_LABEL(cpu_id) + .globl _C_LABEL(cpu_vendorname) + .globl _C_LABEL(cpu_brand_id) .globl _C_LABEL(cpuid_level) - .globl _C_LABEL(esym),_C_LABEL(eblob),_C_LABEL(boothowto) - .globl _C_LABEL(bootinfo),_C_LABEL(atdevbase) + .globl _C_LABEL(esym) + .globl _C_LABEL(eblob) + .globl _C_LABEL(boothowto) + .globl _C_LABEL(bootinfo) + .globl _C_LABEL(atdevbase) .globl _C_LABEL(PDPpaddr) - .globl _C_LABEL(biosbasemem),_C_LABEL(biosextmem) - .globl _C_LABEL(gdtstore),_C_LABEL(cputype) + .globl _C_LABEL(biosbasemem) + .globl _C_LABEL(biosextmem) + .globl _C_LABEL(gdtstore) + .globl _C_LABEL(cputype) -_C_LABEL(cputype): .long 0 # are we 386, 386sx, or 486, + .type _C_LABEL(cputype), @object +LABEL(cputype) .long 0 # are we 386, 386sx, or 486, # or Pentium, or.. -_C_LABEL(cpu_id): .long 0 # saved from `cpuid' instruction -_C_LABEL(cpuid_level): .long -1 # max. level accepted by 'cpuid' +END(cputype) + .type _C_LABEL(cpu_id), @object +LABEL(cpu_id) .long 0 # saved from `cpuid' instruction +END(cpu_id) + .type _C_LABEL(cpuid_level), @object +LABEL(cpuid_level) .long -1 # max. level accepted by 'cpuid' # instruction -_C_LABEL(cpu_vendorname): .space 16 # vendor string returned by `cpuid' +END(cpuid_level) + .type _C_LABEL(cpu_vendorname), @object +LABEL(cpu_vendorname) .space 16 # vendor string returned by `cpuid' # instruction -_C_LABEL(cpu_brand_id): .long 0 # brand ID from 'cpuid' instruction -_C_LABEL(esym): .quad 0 # ptr to end of syms -_C_LABEL(eblob): .quad 0 # ptr to end of modules -_C_LABEL(atdevbase): .quad 0 # location of start of iomem in virtual -_C_LABEL(PDPpaddr): .quad 0 # paddr of PTD, for libkvm +END(cpu_vendorname) + .type _C_LABEL(cpu_brand_id), @object +LABEL(cpu_brand_id) .long 0 # brand ID from 'cpuid' instruction +END(cpu_brand_id) + .type _C_LABEL(esym), @object +LABEL(esym) .quad 0 # ptr to end of syms +END(esym) + .type _C_LABEL(eblob), @object +LABEL(eblob) .quad 0 # ptr to end of modules +END(eblob) + .type _C_LABEL(atdevbase), @object +LABEL(atdevbase) .quad 0 # location of start of iomem in virtual +END(atdevbase) + .type _C_LABEL(PDPpaddr), @object +LABEL(PDPpaddr) .quad 0 # paddr of PTD, for libkvm +END(PDPpaddr) + .type _C_LABEL(biosbasemem), @object #ifndef REALBASEMEM -_C_LABEL(biosbasemem): .long 0 # base memory reported by BIOS +LABEL(biosbasemem) .long 0 # base memory reported by BIOS #else -_C_LABEL(biosbasemem): .long REALBASEMEM +LABEL(biosbasemem) .long REALBASEMEM #endif +END(biosbasemem) + .type _C_LABEL(biosextmem), @object #ifndef REALEXTMEM -_C_LABEL(biosextmem): .long 0 # extended memory reported by BIOS +LABEL(biosextmem) .long 0 # extended memory reported by BIOS #else -_C_LABEL(biosextmem): .long REALEXTMEM +LABEL(biosextmem) .long REALEXTMEM #endif - -#define _RELOC(x) ((x) - KERNBASE) -#define RELOC(x) _RELOC(_C_LABEL(x)) +END(biosextmem) #ifndef XEN .globl gdt64_lo @@ -271,30 +313,40 @@ _C_LABEL(biosextmem): .long REALEXTMEM #define GDT64_LIMIT gdt64_end-gdt64_start-1 /* Temporary gdt64, with base address in low memory */ -gdt64_lo: + .type _C_LABEL(gdt64_lo), @object +LABEL(gdt64_lo) .word GDT64_LIMIT .quad _RELOC(gdt64_start) +END(gdt64_lo) .align 64 /* Temporary gdt64, with base address in high memory */ -gdt64_hi: + .type _C_LABEL(gdt64_hi), @object +LABEL(gdt64_hi) .word GDT64_LIMIT .quad gdt64_start +END(gdt64_hi) .align 64 #undef GDT64_LIMIT -gdt64_start: + .type _C_LABEL(gdt64_start), @object +_C_LABEL(gdt64_start): .quad 0x0000000000000000 /* always empty */ .quad 0x00af9a000000ffff /* kernel CS */ .quad 0x00cf92000000ffff /* kernel DS */ +END(gdt64_start) gdt64_end: -farjmp64: + .type _C_LABEL(farjmp64), @object +_C_LABEL(farjmp64): .long _RELOC(longmode) .word GSEL(GCODE_SEL, SEL_KPL) +END(farjmp64) #endif /* !XEN */ + + .size tmpstk, tmpstk - . .space 512 tmpstk: @@ -311,12 +363,10 @@ tmpstk: .globl _C_LABEL(kernel_text) .set _C_LABEL(kernel_text),KERNTEXTOFF +ENTRY(start) #ifndef XEN -.code32 - - .globl start -start: movw $0x1234,0x472 # warm boot - + .code32 + movw $0x1234,0x472 # warm boot /* * Load parameters from stack * (howto, [bootdev], bootinfo, esym, basemem, extmem). @@ -717,8 +767,6 @@ longmode_hi: leaq (TABLESIZE+IOM_SIZE)(%rsi),%rdi #else /* XEN */ - .globl start -start: /* First, reset the PSL. */ pushq $2 popfq @@ -814,6 +862,7 @@ start: call _C_LABEL(init_x86_64) call _C_LABEL(main) +END(start) #ifdef XEN /* space for the hypercall call page */ @@ -821,6 +870,7 @@ start: .org HYPERCALL_PAGE_OFFSET ENTRY(hypercall_page) .skip 0x1000 +END(hypercall_page) #endif /* XEN */ /* @@ -846,6 +896,7 @@ ENTRY(setjmp) movq %rdx,56(%rax) xorl %eax,%eax ret +END(setjmp) /* * int longjmp(label_t *) @@ -865,6 +916,7 @@ ENTRY(longjmp) movq %rdx,(%rsp) movl $1,%eax ret +END(longjmp) ENTRY(dumpsys) # mimic cpu_switchto() for postmortem debugging. @@ -885,6 +937,7 @@ ENTRY(dumpsys) addq $(5*8), %rsp # sizeof(switchframe) - sizeof(%rip) ret +END(dumpsys) /* * struct lwp *cpu_switchto(struct lwp *oldlwp, struct lwp *newlwp, @@ -1045,6 +1098,7 @@ ENTRY(cpu_switchto) je 2b movq %rax,TF_RIP(%rbx) jmp 2b +END(cpu_switchto) /* * void savectx(struct pcb *pcb); @@ -1056,9 +1110,11 @@ ENTRY(savectx) movq %rsp,PCB_RSP(%rdi) movq %rbp,PCB_RBP(%rdi) ret +END(savectx) IDTVEC(syscall32) sysret /* go away please */ +IDTVEC_END(syscall32) /* * syscall() @@ -1204,6 +1260,7 @@ do_syscall: movq %rsp,%rdi call _C_LABEL(trap) jmp .Lsyscall_checkast /* re-check ASTs */ +IDTVEC_END(syscall) /* * void lwp_trampoline(void); @@ -1220,6 +1277,7 @@ NENTRY(lwp_trampoline) movq %r13,%rdi call *%r12 jmp .Lsyscall_checkast +END(lwp_trampoline) /* * oosyscall() @@ -1240,6 +1298,7 @@ IDTVEC(oosyscall) popq 16(%rsp) pushq $7 # size of instruction for restart jmp osyscall1 +IDTVEC_END(oosyscall) /* * osyscall() @@ -1258,6 +1317,7 @@ osyscall1: INTRENTRY STI(si) jmp do_syscall +IDTVEC_END(osyscall) /* * bool sse2_idlezero_page(void *pg) @@ -1294,6 +1354,7 @@ ENTRY(sse2_idlezero_page) sfence popq %rbp ret +END(sse2_idlezero_page) /* * void pagezero(vaddr_t va) @@ -1318,3 +1379,4 @@ ENTRY(pagezero) jne 1b sfence ret +END(pagezero) diff --git a/sys/arch/i386/i386/locore.S b/sys/arch/i386/i386/locore.S index c4d05145102f..e1af29c699cd 100644 --- a/sys/arch/i386/i386/locore.S +++ b/sys/arch/i386/i386/locore.S @@ -1,4 +1,4 @@ -/* $NetBSD: locore.S,v 1.103 2012/10/26 14:46:44 chs Exp $ */ +/* $NetBSD: locore.S,v 1.104 2013/06/22 15:13:55 uebayasi Exp $ */ /* * Copyright-o-rama! @@ -129,7 +129,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.103 2012/10/26 14:46:44 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.104 2013/06/22 15:13:55 uebayasi Exp $"); #include "opt_compat_oldboot.h" #include "opt_ddb.h" @@ -163,6 +163,13 @@ __KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.103 2012/10/26 14:46:44 chs Exp $"); /* Get definitions for IOM_BEGIN, IOM_END, and IOM_SIZE */ #include +#ifndef XEN +#define _RELOC(x) ((x) - KERNBASE) +#else +#define _RELOC(x) ((x)) +#endif /* XEN */ +#define RELOC(x) _RELOC(_C_LABEL(x)) + #ifdef XEN /* * Xen guest identifier and loader selection @@ -194,7 +201,8 @@ __KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.103 2012/10/26 14:46:44 chs Exp $"); .globl _C_LABEL(esym) .globl _C_LABEL(eblob) .globl _C_LABEL(atdevbase) - .globl _C_LABEL(lwp0uarea),_C_LABEL(PDPpaddr) + .globl _C_LABEL(lwp0uarea) + .globl _C_LABEL(PDPpaddr) .globl _C_LABEL(gdt) .globl _C_LABEL(idt) .globl _C_LABEL(lapic_tpr) @@ -206,52 +214,68 @@ __KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.103 2012/10/26 14:46:44 chs Exp $"); .align 12 #endif .globl _C_LABEL(local_apic), _C_LABEL(lapic_id) -_C_LABEL(local_apic): + .type _C_LABEL(local_apic), @object +LABEL(local_apic) .space LAPIC_ID -_C_LABEL(lapic_id): +END(local_apic) + .type _C_LABEL(lapic_id), @object +LABEL(lapic_id) .long 0x00000000 .space LAPIC_TPRI-(LAPIC_ID+4) -_C_LABEL(lapic_tpr): +END(lapic_id) + .type _C_LABEL(lapic_tpr), @object +LABEL(lapic_tpr) .space LAPIC_PPRI-LAPIC_TPRI +END(lapic_tpr) + .type _C_LABEL(lapic_ppr), @object _C_LABEL(lapic_ppr): .space LAPIC_ISR-LAPIC_PPRI +END(lapic_ppr) + .type _C_LABEL(lapic_isr), @object _C_LABEL(lapic_isr): .space PAGE_SIZE-LAPIC_ISR +END(lapic_isr) #else -_C_LABEL(lapic_tpr): + .type _C_LABEL(lapic_tpr), @object +LABEL(lapic_tpr) .long 0 +END(lapic_tpr) #endif - -_C_LABEL(cputype): .long 0 # are we 80486, Pentium, or.. -_C_LABEL(cpuid_level): .long 0 -_C_LABEL(atdevbase): .long 0 # location of start of iomem in virtual -_C_LABEL(lwp0uarea): .long 0 -_C_LABEL(PDPpaddr): .long 0 # paddr of PDP, for libkvm + .type _C_LABEL(cputype), @object +LABEL(cputype) .long 0 # are we 80486, Pentium, or.. +END(cputype) + .type _C_LABEL(cpuid_level), @object +LABEL(cpuid_level) .long 0 +END(cpuid_level) + .type _C_LABEL(atdevbase), @object +LABEL(atdevbase) .long 0 # location of start of iomem in virtual +END(atdevbase) + .type _C_LABEL(lwp0uarea), @object +LABEL(lwp0uarea) .long 0 +END(lwp0uarea) + .type _C_LABEL(PDPpaddr), @object +LABEL(PDPpaddr) .long 0 # paddr of PDP, for libkvm +END(PDPpaddr) + .type _C_LABEL(tablesize), @object _C_LABEL(tablesize): .long 0 - +END(tablesize) + .size tmpstk, tmpstk - . .space 512 tmpstk: #ifdef XEN .align PAGE_SIZE, 0x0 # Align on page boundary - .globl tmpgdt -_C_LABEL(tmpgdt): +LABEL(tmpgdt) .space PAGE_SIZE # Xen expects a page +END(tmpgdt) #endif /* XEN */ -#ifndef XEN -#define _RELOC(x) ((x) - KERNBASE) -#else -#define _RELOC(x) ((x)) -#endif /* XEN */ -#define RELOC(x) _RELOC(_C_LABEL(x)) .text .globl _C_LABEL(kernel_text) .set _C_LABEL(kernel_text),KERNTEXTOFF - .globl start +ENTRY(start) #ifndef XEN -start: movw $0x1234,0x472 # warm boot - + movw $0x1234,0x472 # warm boot #if defined(MULTIBOOT) jmp 1f @@ -752,7 +776,6 @@ begin: call _C_LABEL(main) #else /* XEN */ -start: /* First, reset the PSL. */ pushl $PSL_MBO popfl @@ -816,6 +839,8 @@ start: call _C_LABEL(init386) # wire 386 chip for unix operation addl $PDE_SIZE,%esp # pop paddr_t call _C_LABEL(main) +#endif /* defined(XEN) */ +END(start) #if defined(XEN) /* space for the hypercall call page */ @@ -823,7 +848,7 @@ start: .org HYPERCALL_PAGE_OFFSET ENTRY(hypercall_page) .skip 0x1000 -#endif /* defined(XEN) */ +END(hypercall_page) /* * void lgdt_finish(void);