aboutsummaryrefslogtreecommitdiff
path: root/i386/Makefrag.am
Commit message (Collapse)AuthorAgeFilesLines
* Make -fno-PIE etc. architecture-dependentSergey Bugaev2024-03-271-0/+4
| | | | | | | | | | There might be good reasons why Mach on x86 shouldn't be built as PIC/ PIE, but there are also very good reasons to support PIE on other architectures. Potentially implementing KASLR is one such reason; but also the Linux AArch64 boot protocol (that the AArch64 port will use for booting) lets the bootloader load the kernel image at any address, which makes PIC pretty much required. Message-ID: <20240327161841.95685-11-bugaevc@gmail.com>
* move x86 copy_user.[ch] to ipc/ and make it arch-indipendentLD2024-03-091-1/+0
| | | | Message-ID: <20240309140244.347835-3-luca@orpolo.org>
* Xen: fix buildSamuel Thibault2023-12-031-2/+2
|
* percpu area using gs segmentDamien Zammit2023-09-241-0/+2
| | | | | | | | | | | | | | | This speeds up smp again, by storing the struct processor in a percpu area and avoiding an expensive cpu_number every call of current_processor(), as well as getting the cpu_number by an offset into the percpu area. Untested on 64 bit and work remains to use other percpu arrays. TESTED: (NCPUS=8) -smp 1 boots to login shell ~2x slower than uniprocessor TESTED: (NCPUS=8) -smp 2 boots to INIT but hangs there TESTED: (NCPUS=8) -smp 4 gets stuck seemingly within rumpdisk and hangs TESTED: (NCPUS=1) uniprocessor is a bit faster than normal Message-Id: <20230924103428.455966-3-damien@zamaudio.com>
* Ship missing msr.h fileSamuel Thibault2023-05-201-0/+1
|
* Fix missing shipping required headerSamuel Thibault2023-04-101-0/+1
|
* Fix makefragsDamien Zammit2023-01-311-2/+3
| | | | Message-Id: <20230131093428.756906-11-damien@zamaudio.com>
* Do not include seg.c when building for x86_64Flavio Cruz2023-01-261-67/+2
| | | | | | | | | File was removed in a previous patch for i386. To avoid future problems, include some common files between i386 and x86_64 in i386/Makefrag_x86.am. It is also easier to see what is different and what lacks support for x86_64 (e.g., SMP). Message-Id: <Y9DXOiP+ClYdj68Z@jupiter.tail36e24.ts.net>
* Fix several warnings for -Wmissing-prototypes (part 2)Flavio Cruz2023-01-251-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | * i386/i386/io_map.c: code is unused. * i386/i386/io_perm.c: include mig prototypes. * i386/i386/mp_desc.c: Deleted interrupt_stack_alloc since it is not used. * i386/i386/seg.h: Moved descriptor structs to i386/include/mach/i386/mach_i386_types.h as that represents the interface types for RPCs. Defined aliases for real_descriptor since those are used by the i386 RPCs. Inlined many functions here too and removed seg.c. * i386/i386/seg.c: Removed. All the functions are inline now. * i386/i386/trap.c: Use static. * i386/i386/trap.h: Define missing prototypes. * i386/i386/tss.h: Use static inline for ltr. * i386/i386/user_ldt.c: Include mig prototypes. * i386/include/mach/i386/mach_i386.defs: Define real_descriptor_t types since those are used in the RPC definition. Now both prototypes and definitions will match. * i386/include/mach/i386/mach_i386_types.h: Move struct descriptor from seg.h since we need those for the RPC interfaces. Removed include of io_perm.h since it generates circular includes otherwise. * i386/intel/pmap.c: pmap_map is unused. Added static qualifier for several functions. * i386/intel/pmap.h: pmap_update_interrupt declared for non-SMP and SMP. Message-Id: <Y89+R2VekOQK4IUo@jupiter.lan>
* Remove custom stdint.h and rely on freestanding headersFlavio Cruz2022-12-191-1/+0
| | | | | GCC already provides this so we don't need to have our own. Message-Id: <Y5+02FVA6jf4GPgA@mars>
* Fix inclusability of <mach/mach_types.h>Samuel Thibault2022-08-281-0/+1
| | | | | Now that mach/machine/vm_types.h uses stdint types, we have to ship a header that defines them.
* Makefrag.am: Move architecture condition inside architecture Makefrag.amSamuel Thibault2022-02-061-17/+14
| | | | | Otherwise we cannot use _DIST there and have them all taken into account. As a consequence, we can drop duplicate _DIST between i386 and x86_64.
* Add ioapic support disabled by defaultDamien Zammit2021-04-041-3/+10
| | | | | | | Use --enable-ncpus=x --enable-apic where x > 1 for SMP+APIC support. Use neither for no SMP and old PIC support. Message-Id: <20210404050812.145483-1-damien@zamaudio.com>
* smp: Add generic smp pseudoclassAlmudena Garcia2020-09-191-0/+2
| | | | | | | | | | This pseudoclass generalize the initialization and access of SMP data, allowing expands it to other architectures. In x86, the functions calls to apic functions. *kern/smp.c: Source file. Implements a interface to load the SMP functions for the current architecture. *kern/smp.h: Header file. Add declaration for smp_data structure. *i386/i386/smp.c: Source file. Implements a set of functions to manage the SMP actions in i386 *i386/i386/smp.h: Header file. Add declarations for SMP functions in i386.
* smp: Add APIC finder and parserAlmudena Garcia2020-09-191-0/+2
| | | | | | | | | | | To find the processors, It's necessary to find the APIC (MADT) table This table is found inside ACPI tables. This set of functions find the MADT table, and parse it to find the APIC structures and register it in the kernel. *acpi_parse_apic.h: ACPI structures and function prototypes. *acpi_parse_apic.c: ACPI/APIC function definitions.
* smp: Add pseudoclass to manage APIC operationsAlmudena Garcia2020-08-121-0/+2
| | | | | | | | | | | | | | The SMP support requires access, register and configure some APIC structures, like Local APIC and IOAPIC. This pseudoclass includes functions to register some APIC structures into the kernel, and access to these structures to extract some information. *apic.h: Header file recovered from Mach 4 source code, and updated for xAPIC. Includes some structs with Local APIC and IOAPIC fields, and the declaration of the functions. *apic.c: Source file. Includes the definition of the functions, within some globals of apic_info structures and the lapic reference.
* Fix xen buildSamuel Thibault2020-07-151-2/+2
| | | | | | | | * device/ds_routines.c (ds_device_intr_register, ds_device_intr_ack) [MACH_XEN]: Return D_INVALID_OPERATION. * i386/Makefrag.am [!PLATFORM_at] (libkernel_a_SOURCES): Remove i386/i386/irq.c and i386/i386/irq.h. * i386/i386/irq.c: Include <kern/assert.h>.
* Add hardware interrupt notification mechanismSamuel Thibault2020-07-101-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This allows privileged userland drivers to get notifications of hardware interrupts. Initial work by Zheng Da, reworked by Damien Zammit and myself. * Makefrag.am (libkernel_a_SOURCES): Add device/intr.c and device/intr.h. (include_device_HEADERS): Add include/device/notify.defs and include/device/notify.h. * device/dev_hdr.h (name_equal): Add declaration. * device/ds_routines.c: Include <device/intr.h> (ds_device_intr_register, ds_device_intr_ack): New functions. * device/intr.c, device/intr.h: New files. * doc/mach.texi (Device Interrupt): New section. * i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386/irq.c and i386/i386/irq.h. * i386/i386/irq.c, i386/i386/irq.h: New files. * i386/i386at/conf.c: Include <device/intr.h>. (irqname): New macro. (dev_name_list): Add irq device. * include/device/device.defs (device_intr_register, device_intr_ack): New RPCs. * include/device/notify.defs, include/device/notify.h: New files. * kern/startup.c: Include <device/intr.h> (start_kernel_threads): Start intr_thread thread. * linux/dev/arch/i386/kernel/irq.c: Include <device/intr.h> (linux_action): Add user_intr field. (linux_intr): Call user_intr action if any. (mask_irq, unmask_irq): Move functions to i386/i386/pic.c (__disable_irq, __enable_irq): Move functions to i386/i386/irq.c. (install_user_intr_handler): New function. (request_irq): Initialize user_intr field. * linux/src/include/asm-i386/irq.h (__disable_irq, __enable_irq): Remove prototypes. * i386/i386/pic.c (mask_irq, unmask_irq): New functions. * i386/i386/pic.h (mask_irq, unmask_irq): New prototypes.
* Revert "i386: use ACPI to power off the machine"Justus Winter2016-11-061-19/+0
| | | | | | | | | This reverts commit c031b41b783cc99c0bd5aac7d14c1d6e34520397. Adding the ACPI parser from GRUB was a mistake as its license conflicts with the one used by the legacy Linux drivers. Furthermore, adding support for ACPI to the kernel violates the minimality principle.
* i386: import string functions from X15 and relicense to GPLv2+Richard Braun2016-08-161-0/+1
| | | | | * i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386/strings.c. * i386/i386/strings.c: New file.
* Make kernel mapping start address configurableSamuel Thibault2016-03-191-2/+2
| | | | | | | | and move it to 16MiB by default to free 24bit DMA area * i386/configfrag.ac (--with-_START_MAP): Add option, default to 0x1000000. * i386/Makefrag.am (_START_MAP): Set to $(_START_MAP). (_START): Set to _START_MAP+0xC0000000.
* Ship missing filesSamuel Thibault2016-03-111-0/+1
| | | | | | Makefrag.am (libkernel_a_SOURCES): Add kern/log2.h. (EXTRA_DIST): Add kern/exc.defs. i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386at/elf.h.
* i386: add parts of cpu.h from x15Justus Winter2016-02-281-0/+1
| | | | | * i386/Makefrag.am (libkernel_a_SOURCES): Add new file. * i386/i386/cpu.h: New file.
* Fix early page allocation on XenRichard Braun2016-01-301-2/+2
| | | | | | | | | | | | | | | | | | | | | | The Xen target was completely ignored when porting the biosmem and vm_page physical memory allocators. Let's fix this. * i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386at/biosmem.{c,h}. * i386/i386/vm_page.h (VM_PAGE_MAX_SEGS, VM_PAGE_DIRECTMAP_LIMIT, VM_PAGE_HIGHMEM_LIMIT): Define for Xen. * i386/i386at/biosmem.c: Include mach/xen.h. (biosmem_panic_setup_msg): Comment out for Xen since it's unused. (biosmem_map_build, biosmem_map_build_simple, biosmem_save_cmdline_sizes, biosmem_find_boot_data_update, biosmem_find_boot_data, biosmem_setup_allocator): Likewise. (biosmem_bootstrap_common): New function. (biosmem_xen_bootstrap): Likewise, for Xen. (biosmem_bootalloc): Perform bottom-up allocations for Xen. * i386/i386at/biosmem.h (biosmem_xen_bootstrap): New prototype, for Xen. * i386/i386at/model_dep.c (i386at_init): Call biosmem_xen_bootstrap instead of biosmem_bootstrap on Xen. * i386/include/mach/i386/vm_types.h (phys_addr_t): Define as an unsigned 64-bits integer when PAE is enabled.
* Use vm_page as the physical memory allocatorRichard Braun2016-01-231-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change replaces the historical page allocator with a buddy allocator implemented in vm/vm_page.c. This allocator allows easy contiguous allocations and also manages memory inside segments. In a future change, these segments will be used to service requests with special constraints, such as "usable for 16-bits DMA" or "must be part of the direct physical mapping". * Makefrag.am (libkernel_a_SOURCES): Add vm/vm_page.c. * i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386at/biosmem.{c,h}. * i386/i386/vm_param.h: Include kern/macros.h. (VM_PAGE_DMA_LIMIT, VM_PAGE_MAX_SEGS, VM_PAGE_DMA32_LIMIT, VM_PAGE_DIRECTMAP_LIMIT, VM_PAGE_HIGHMEM_LIMIT, VM_PAGE_SEG_DMA, VM_PAGE_SEG_DMA32, VM_PAGE_SEG_DIRECTMAP, VM_PAGE_SEG_HIGHMEM): New macros. * i386/i386at/model_dep.c: Include i386at/biosmem.h. (avail_next, avail_remaining): Remove variables. (mem_size_init): Remove function. (i386at_init): Initialize and use the biosmem module for early physical memory management. (pmap_free_pages): Return phys_last_addr instead of avail_remaining. (init_alloc_aligned): Turn into a wrapper for biosmem_bootalloc. (pmap_grab_page): Directly call init_alloc_aligned instead of pmap_next_page. * i386/include/mach/i386/vm_types.h (phys_addr_t): New type. * kern/bootstrap.c (free_bootstrap_pages): New function. (bootstrap_create): Call free_bootstrap_pages instead of vm_page_create. * kern/cpu_number.h (CPU_L1_SIZE): New macro. * kern/slab.h: Include kern/cpu_number.h. (CPU_L1_SIZE): Remove macro, moved to kern/cpu_number.h. * kern/startup.c (setup_main): Change the value of machine_info.memory_size. * linux/dev/glue/glue.h (alloc_contig_mem, free_contig_mem): Update prototypes. * linux/dev/glue/kmem.c (linux_kmem_init): Don't use defunct page queue. * linux/dev/init/main.c (linux_init): Don't free unused memory. (alloc_contig_mem, free_contig_mem): Turn into wrappers for the vm_page allocator. * linux/pcmcia-cs/glue/ds.c (PAGE_SHIFT): Don't undefine. * vm/pmap.h (pmap_startup, pmap_next_page): Remove prototypes. * vm/vm_fault.c (vm_fault_page): Update calls to vm_page_convert. * vm/vm_init.c (vm_mem_init): Call vm_page_info_all. * vm/vm_object.c (vm_object_page_map): Update call to vm_page_init. * vm/vm_page.h (vm_page_queue_free): Remove variable declaration. (vm_page_create, vm_page_release_fictitious, vm_page_release): Remove declarations. (vm_page_convert, vm_page_init): Update prototypes. (vm_page_grab_contig, vm_page_free_contig): New prototypes. * vm/vm_resident.c (vm_page_template, vm_page_queue_free, vm_page_big_pagenum): Remove variables. (vm_page_bootstrap): Update and call vm_page_setup. (pmap_steal_memory): Update and call vm_page_bootalloc. (pmap_startup, vm_page_create, vm_page_grab_contiguous_pages): Remove functions. (vm_page_init_template, vm_page_grab_contig, vm_page_free_contig): New functions. (vm_page_init): Update and call vm_page_init_template. (vm_page_release_fictitious): Make static. (vm_page_more_fictitious): Update call to vm_page_init. (vm_page_convert): Rewrite to comply with vm_page. (vm_page_grab): Update and call vm_page_alloc_pa. (vm_page_release): Update and call vm_page_free_pa.
* remove unnused disk code and headersFlavio Cruz2016-01-011-1/+0
| | | | | | | * i386/Makefrag.am: Remove disk.h. * i386/i386at/disk.h: Remove unnused definitions. * i386/include/mach/i386/disk.h: Remove. * linux/dev/glue/block.c (device_get_status): Remove V_GETPARMS case.
* i386: use ACPI to power off the machineJustus Winter2014-07-061-0/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | This is a mostly verbatim copy of acpihalt.c from GRUB2 with a little bit of glue code. * i386/Makefrag.am (libkernel_a_SOURCES): Add the new files. * i386/grub/acpi.h: Verbatim copy from GRUB2. * i386/grub/compiler.h: Likewise. * i386/grub/cpu/io.h: Likewise. * i386/grub/cpu/time.h: Likewise. * i386/grub/cpu/types.h: Likewise. * i386/grub/err.h: Likewise. * i386/grub/misc.h: Likewise. * i386/grub/mm.h: Likewise. * i386/grub/symbol.h: Likewise. * i386/grub/time.h: Likewise. * i386/grub/types.h: Likewise. * i386/i386at/acpi.c: Likewise. * i386/i386at/acpihalt.c: Likewise. (grub_acpi_halt): Map physical addresses. * i386/i386at/acpihalt.h: New file. * i386/grub/glue.h: Some glue macros. * i386/grub/i18n.h: Stub out i18n. * i386/i386at/grub_glue.c: Some glue code. * i386/i386at/model_dep.c (halt_all_cpus): Use grub_acpi_halt.
* i386/i386/db_trace.c: remove forward declarationMarin Ramesa2013-12-111-0/+1
| | | | | | | | | | | * i386/Makefrag.am: List i386/i386/db_trace.h. * i386/i386/db_trace.c: Include machine/db_trace.h. (db_i386_stack_trace): Remove forward declaration. * i386/i386/db_trace.h: New file. Add copyright. [_I386_DB_TRACE_H_]: Add ifndef. (i386_frame): Declare forward. (db_i386_stack_trace): Add prototype.
* i386/i386at/pic_isa.c: remove forward declarationMarin Ramesa2013-12-091-0/+1
| | | | | | | | | | * i386/Makefrag.am: Include i386/i386/hardclock.h. * i386/i386/hardclock.h: New file. Add copyright. [_I386_HARDCLOCK_H_]: Add ifndef. (hardclock): Add prototype. * i386/i386at/pic_isa.c (hardclock): Remove forward declaration. Include i386/hardclock.h.
* Remove unnecessary fileSamuel Thibault2013-12-051-1/+0
| | | | | * i386/Makefrag.am: Don't include i386/include/mach/i386/rpc.h. * i386/include/mach/i386/rpc.h: Remove file.
* i386/i386at/conf.c: remove forward declarationsMarin Ramesa2013-12-051-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * i386/Makefrag.am: Include i386/i386at/model_dep.h and i386/i386at/mem.h. * i386/i386at/com.h (comgetstat, comsetstat): Declare as extern. (comopen, comclose, comread, comwrite, comportdeath): Add prototypes. * i386/i386at/conf.c: Include kern/mach_clock.h and i386at/model_dep.h. (timeopen, timeclose, timemmap): Remove forward declarations. (kdopen, kdclose, kdread, kdwrite, kdgetstat, kdsetstat, kdportdeath, kdmmap): Likewise. (comopen, comclose, comread, comwrite, comportdeath, comgetstat, comsetstat): Likewise. (lpropen, lprclose, lprread, lprwrite, lprportdeath, lprgetstat, lprsetstat): Likewise. (kbdopen, kbdclose, kbdread, kbdgetstat, kbdsetstat): Likewise. (mouseopen, mouseclose, mouseread, mousegetstat): Likewise. (memmmap): Likewise. (kmsgopen, kmsgclose, kmsgread, kmsggetstat): Likewise. (hypcnopen, hypcnclose, hypcnread, hypcnwrite, hypcnportdeath, hypcngetstat, hypcnsetstat): Likewise. Include i386at/kd.h. Include i386at/com.h. Include i386at/lpr.h. Include i386at/kd_event.h. Include i386at/kd_mouse.h. Include i386at/mem.h. Include device/kmsg.h. Include xen/console.h. * i386/i386at/kd.h: Include device/io_req.h. (kdopen, kdclose, kdread, kdwrite, kdgetstat, kdsetstat, kdportdeath, kdmmap): Add prototypes. * i386/i386at/kd_event.h (kbdopen, kbdclose, kbdread, kbdgetstat, kbdsetstat): Likewise. * i386/i386at/kd_mouse.h (mouseopen, mouseclose, mouseread, mousegetstat): Likewise. * i386/i386at/lpr.h (lpropen, lprclose, lprread, lprwrite, lprportdeath): Likewise. (lprgetstat, lprsetstat): Declare as extern. * i386/i386at/mem.h: New file. Add copyright. [_MEM_H_]: Add ifndef. (memmmap): Add prototype. * i386/i386at/model_dep.c: Include i386/i386at/model_dep.h. (timemmap): Fix argument list. * i386/i386at/model_dep.h: New file. Add copyright. [_MODEL_DEP_H_]: Add ifndef. (timemmap): Add prototype. * kern/mach_clock.h (timeopen, timeclose): Add prototypes. * xen/console.h (hypcnopen, hypcnclose, hypcnread, hypcnwrite, hypcnportdeath, hypcngetstat, hypcnsetstat): Add prototypes.
* i386/i386at/autoconf.c, com.c, lpr.c: remove forward declarationsMarin Ramesa2013-12-051-1/+1
| | | | | | | | | | | | | | * i386/i386/autoconf.c (comintr, lprintr): Remove forward declarations. Include i386at/com.h. Include i386at/lprreg.h. * i386/i386at/com.c (comprobe, commctl, comstart, comstop, comattach, comintr, comgetstat, comsetstat): Remove forward declarations. * i386/i386at/com.h: Include device/tty.h. (comprobe, commctl, comstart, comstop, comattach, comintr, comgetstat, comsetstat): Add prototypes. * i386/i386at/lpr.c (lprprobe, lprstop, lprintr, lprstart, lprattach, lprgetstat, lprsetstat, lprpr_addr): Remove forward declarations. (lprprobe): Fix argument list. (lprpr): Define argument type. lprpr_addr): Likewise. * i386/i386at/lprreg.h (lprprobe, lprstop, lprintr, lprstart, lprattach, lprgetstat, lprsetstat, lprpr_addr): Add prototypes.
* i386/i386/vm_tuning.h: remove fileMarin Ramesa2013-11-151-1/+0
| | | | | | * i386/Makefrag.am: Remove i386/i386/vm_tuning.h. * i386/i386/vm_tuning.h: Remove file. * vm/vm_pageout.c: Don't include i386/i386/vm_tuning.h.
* Prevent the kernel from making any FPU useSamuel Thibault2013-02-031-0/+6
| | | | * i386/Makefrag.am (AM_CFLAGS): Add -mno-3dnow -mno-mmx -mno-sse -mno-sse2.
* Offset kernel addresses by 3GiBSamuel Thibault2012-05-051-1/+1
| | | | | | | This permits better trace support in kdb. * i386/i386/vm_param.h (VM_MIN_KERNEL_ADDRESS): Set to 0xC0000000 * i386/Makefrag.am (_START): Set to 0xC0100000.
* Fix Xen boot after c74adfeSamuel Thibault2012-03-241-0/+1
| | | | | | * i386/Makefrag.am (_START_MAP): Define symbol to 0x100000. * i386/xen/Makefrag.am (_START_MAP): Define symbol to 0xC0000000. * i386/ldscript: Use _START_MAP instead of hardcoding 0x100000.
* Import the slab allocatorRichard Braun2011-12-171-1/+0
| | | | | | | | | | | | | | | | | | | As it is intended to completely replace the zone allocator, remove it on the way. So long to the venerable code ! * Makefrag.am (libkernel_a_SOURCES): Add kern/slab.{c,h}, remove kern/kalloc.c and kern/zalloc.{c,h}. * configfrag.ac (SLAB_VERIFY, SLAB_USE_CPU_POOLS): Add defines. * i386/Makefrag.am (libkernel_a_SOURCES): Remove i386/i386/zalloc.h. * i386/configfrag.ac (CPU_L1_SHIFT): Remove define. * include/mach_debug/slab_info.h: New file. * kern/slab.c: Likewise. * kern/slab.h: Likewise. * i386/i386/zalloc.h: Remove file. * include/mach_debug/zone_info.h: Likewise. * kern/kalloc.c: Likewise. * kern/zalloc.c: Likewise. * kern/zalloc.h: Likewise.
* Fix build with kdb from make dist-generated tarballSamuel Thibault2011-04-031-0/+1
| | | | | | * Makefrag.am (libkernel_a_SOURCES): Add ddb/db_cond.h, ddb/db_examine.h, ddb/db_input.h, ddb/db_macro.h, ddb/db_trap.h. * i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386/db_interface.h
* Drop kbd device on xenSamuel Thibault2011-01-311-4/+4
| | | | | | * i386/Makefrag.am (libkernel_a_SOURCES): Move i386/i386at/kd_event.[ch] and i386/i386at/kd_queue.[ch] to [PLATFORM_at]. * i386/i386at/conf.c (dev_name_list): Move kbd device to [!MACH_HYP].
* Fix "make dist"Guillem Jover2010-08-271-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Makefile.am (EXTRA_DIST): Remove ChangeLog.0, ChangeLog.00 and Makefile.correct_output_files_for_.S_files.patch. * Makefrag.am (libkernel_a_SOURCES): Add ipc/mach_port.h, kern/ipc_mig.h, kern/machine.h, util/putchar.h, util/atoi.h, vm/vm_resident.h, vm/vm_types.h and device/subrs.h. Remove kern/time_out.h. * i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386at/autoconf.h, i386/i386at/com.h, i386/i386at/int_init.h, i386/i386/loose_ends.h, i386/i386/model_dep.h, i386/intel/read_fault.h and i386/i386/xen.h. Remove i386/i386/timer.h. * linux/Makefrag.am (liblinux_a_SOURCES): Add linux/src/drivers/net/sis900.h. * xen/Makefrag.am (libkernel_a_SOURCES): Add xen/public/arch-x86_32.h xen/public/arch-x86_64.h, xen/public/arch-x86/xen.h, xen/public/arch-x86/xen-mca.h, xen/public/arch-x86/xen-x86_32.h, xen/public/arch-x86/xen-x86_64.h, xen/public/callback.h, xen/public/COPYING, xen/public/dom0_ops.h, xen/public/domctl.h, xen/public/elfnote.h, xen/public/elfstructs.h, xen/public/event_channel.h, xen/public/features.h, xen/public/grant_table.h, xen/public/io/blkif.h, xen/public/io/console.h, xen/public/io/fbif.h, xen/public/io/fsif.h, xen/public/io/kbdif.h, xen/public/io/netif.h, xen/public/io/pciif.h, xen/public/io/protocols.h, xen/public/io/ring.h, xen/public/io/tpmif.h, xen/public/io/xenbus.h, xen/public/io/xs_wire.h, xen/public/kexec.h, xen/public/libelf.h, xen/public/memory.h, xen/public/nmi.h, xen/public/physdev.h, xen/public/platform.h, xen/public/sched.h, xen/public/sysctl.h, xen/public/trace.h, xen/public/vcpu.h, xen/public/version.h, xen/public/xencomm.h, xen/public/xen-compat.h, xen/public/xen.h, xen/public/xenoprof.h, xen/block.h, xen/console.h, xen/evt.h, xen/grant.h, xen/net.h, xen/ring.h, xen/store.h, xen/time.h and xen/xen.h.
* Add mem deviceSamuel Thibault2010-03-141-0/+1
| | | | | | | | | * i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386at/iopl.c. * i386/i386at/conf.c [!MACH_HYP] (memmmap): Declare function. (memname): Add macro. (dev_name_list): Add mem device. * i386/i386at/mem.c: New file.
* Add Xen supportSamuel Thibault2009-12-161-16/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2009-03-11 Samuel Thibault <samuel.thibault@ens-lyon.org> * i386/i386/vm_param.h (VM_MIN_KERNEL_ADDRESS) [MACH_XEN]: Set to 0x20000000. * i386/i386/i386asm.sym (pfn_list) [VM_MIN_KERNEL_ADDRESS == LINEAR_MIN_KERNEL_ADDRESS]: Define to constant PFN_LIST. 2009-02-27 Samuel Thibault <samuel.thibault@ens-lyon.org> * i386/intel/pmap.c [MACH_HYP] (INVALIDATE_TLB): Call hyp_invlpg instead of flush_tlb when e - s is compile-time known to be PAGE_SIZE. 2008-11-27 Samuel Thibault <samuel.thibault@ens-lyon.org> * i386/configfrag.ac (enable_pae): Enable by default on the Xen platform. 2007-11-14 Samuel Thibault <samuel.thibault@ens-lyon.org> * i386/i386at/model_dep.c (machine_relax): New function. (c_boot_entry): Refuse to boot as dom0. 2007-10-17 Samuel Thibault <samuel.thibault@ens-lyon.org> * i386/i386/fpu.c [MACH_XEN]: Disable unused fpintr(). 2007-08-12 Samuel Thibault <samuel.thibault@ens-lyon.org> * Makefile.am (clib_routines): Add _START. * i386/xen/xen_boothdr: Use _START for VIRT_BASE and PADDR_OFFSET. Add GUEST_VERSION and XEN_ELFNOTE_FEATURES. 2007-06-13 Samuel Thibault <samuel.thibault@ens-lyon.org> * i386/i386/user_ldt.h (user_ldt) [MACH_XEN]: Add alloc field. * i386/i386/user_ldt.c (i386_set_ldt) [MACH_XEN]: Round allocation of LDT to a page, set back LDT pages read/write before freeing them. (user_ldt_free) [MACH_XEN]: Likewise. 2007-04-18 Samuel Thibault <samuel.thibault@ens-lyon.org> * device/ds_routines.c [MACH_HYP]: Add hypervisor block and net devices. 2007-02-19 Thomas Schwinge <tschwinge@gnu.org> * i386/xen/Makefrag.am [PLATFORM_xen] (gnumach_LINKFLAGS): Define. * Makefrag.am: Include `xen/Makefrag.am'. * configure.ac: Include `xen/configfrag.ac'. (--enable-platform): Support the `xen' platform. * i386/configfrag.ac: Likewise. * i386/Makefrag.am [PLATFORM_xen]: Include `i386/xen/Makefrag.am'. 2007-02-19 Samuel Thibault <samuel.thibault@ens-lyon.org> Thomas Schwinge <tschwinge@gnu.org> * i386/xen/Makefrag.am: New file. * xen/Makefrag.am: Likewise. * xen/configfrag.ac: Likewise. 2007-02-11 (and later dates) Samuel Thibault <samuel.thibault@ens-lyon.org> Xen support * Makefile.am (clib_routines): Add _start. * Makefrag.am (include_mach_HEADERS): Add include/mach/xen.h. * device/cons.c (cnputc): Call hyp_console_write. * i386/Makefrag.am (libkernel_a_SOURCES): Move non-Xen source to [PLATFORM_at]. * i386/i386/debug_trace.S: Include <i386/xen.h> * i386/i386/fpu.c [MACH_HYP] (init_fpu): Call set_ts() and clear_ts(), do not enable CR0_EM. * i386/i386/gdt.c: Include <mach/xen.h> and <intel/pmap.h>. [MACH_XEN]: Make gdt array extern. [MACH_XEN] (gdt_init): Register gdt with hypervisor. Request 4gb segments assist. Shift la_shift. [MACH_PSEUDO_PHYS] (gdt_init): Shift pfn_list. * i386/i386/gdt.h [MACH_XEN]: Don't define KERNEL_LDT and LINEAR_DS. * i386/i386/i386asm.sym: Include <i386/xen.h>. [MACH_XEN]: Remove KERNEL_LDT, Add shared_info's CPU_CLI, CPU_PENDING, CPU_PENDING_SEL, PENDING, EVTMASK and CR2. * i386/i386/idt.c [MACH_HYP] (idt_init): Register trap table with hypervisor. * i386/i386/idt_inittab.S: Include <i386/i386asm.h>. [MACH_XEN]: Set IDT_ENTRY() for hypervisor. Set trap table terminator. * i386/i386/ktss.c [MACH_XEN] (ktss_init): Request exception task switch from hypervisor. * i386/i386/ldt.c: Include <mach/xen.h> and <intel/pmap.h> [MACH_XEN]: Make ldt array extern. [MACH_XEN] (ldt_init): Set ldt readwrite. [MACH_HYP] (ldt_init): Register ldt with hypervisor. * i386/i386/locore.S: Include <i386/xen.h>. Handle KERNEL_RING == 1 case. [MACH_XEN]: Read hyp_shared_info's CR2 instead of %cr2. [MACH_PSEUDO_PHYS]: Add mfn_to_pfn computation. [MACH_HYP]: Drop Cyrix I/O-based detection. Read cr3 instead of %cr3. Make hypervisor call for pte invalidation. * i386/i386/mp_desc.c: Include <mach/xen.h>. [MACH_HYP] (mp_desc_init): Panic. * i386/i386/pcb.c: Include <mach/xen.h>. [MACH_XEN] (switch_ktss): Request stack switch from hypervisor. [MACH_HYP] (switch_ktss): Request ldt and gdt switch from hypervisor. * i386/i386/phys.c: Include <mach/xen.h> [MACH_PSEUDO_PHYS] (kvtophys): Do page translation. * i386/i386/proc_reg.h [MACH_HYP] (cr3): New declaration. (set_cr3, get_cr3, set_ts, clear_ts): Implement macros. * i386/i386/seg.h [MACH_HYP]: Define KERNEL_RING macro. Include <mach/xen.h> [MACH_XEN] (fill_descriptor): Register descriptor with hypervisor. * i386/i386/spl.S: Include <i386/xen.h> and <i386/i386/asm.h> [MACH_XEN] (pic_mask): #define to int_mask. [MACH_XEN] (SETMASK): Implement. * i386/i386/vm_param.h [MACH_XEN] (HYP_VIRT_START): New macro. [MACH_XEN]: Set VM_MAX_KERNEL_ADDRESS to HYP_VIRT_START- LINEAR_MIN_KERNEL_ADDRESS + VM_MIN_KERNEL_ADDRESS. Increase KERNEL_STACK_SIZE and INTSTACK_SIZE to 4 pages. * i386/i386at/conf.c [MACH_HYP]: Remove hardware devices, add hypervisor console device. * i386/i386at/cons_conf.c [MACH_HYP]: Add hypervisor console device. * i386/i386at/model_dep.c: Include <sys/types.h>, <mach/xen.h>. [MACH_XEN] Include <xen/console.h>, <xen/store.h>, <xen/evt.h>, <xen/xen.h>. [MACH_PSEUDO_PHYS]: New boot_info, mfn_list, pfn_list variables. [MACH_XEN]: New la_shift variable. [MACH_HYP] (avail_next, mem_size_init): Drop BIOS skipping mecanism. [MACH_HYP] (machine_init): Call hyp_init(), drop hardware initialization. [MACH_HYP] (machine_idle): Call hyp_idle(). [MACH_HYP] (halt_cpu): Call hyp_halt(). [MACH_HYP] (halt_all_cpus): Call hyp_reboot() or hyp_halt(). [MACH_HYP] (i386at_init): Initialize with hypervisor. [MACH_XEN] (c_boot_entry): Add Xen-specific initialization. [MACH_HYP] (init_alloc_aligned, pmap_valid_page): Drop zones skipping mecanism. * i386/intel/pmap.c: Include <mach/xen.h>. [MACH_PSEUDO_PHYS] (WRITE_PTE): Do page translation. [MACH_HYP] (INVALIDATE_TLB): Request invalidation from hypervisor. [MACH_XEN] (pmap_map_bd, pmap_create, pmap_destroy, pmap_remove_range) (pmap_page_protect, pmap_protect, pmap_enter, pmap_change_wiring) (pmap_attribute_clear, pmap_unmap_page_zero, pmap_collect): Request MMU update from hypervisor. [MACH_XEN] (pmap_bootstrap): Request pagetable initialization from hypervisor. [MACH_XEN] (pmap_set_page_readwrite, pmap_set_page_readonly) (pmap_set_page_readonly_init, pmap_clear_bootstrap_pagetable) (pmap_map_mfn): New functions. * i386/intel/pmap.h [MACH_XEN] (INTEL_PTE_GLOBAL): Disable global page support. [MACH_PSEUDO_PHYS] (pte_to_pa): Do page translation. [MACH_XEN] (pmap_set_page_readwrite, pmap_set_page_readonly) (pmap_set_page_readonly_init, pmap_clear_bootstrap_pagetable) (pmap_map_mfn): Declare functions. * i386/i386/xen.h: New file. * i386/xen/xen.c: New file. * i386/xen/xen_boothdr.S: New file. * i386/xen/xen_locore.S: New file. * include/mach/xen.h: New file. * kern/bootstrap.c [MACH_XEN] (boot_info): Declare variable. [MACH_XEN] (bootstrap_create): Rebase multiboot header. * kern/debug.c: Include <mach/xen.h>. [MACH_HYP] (panic): Call hyp_crash() without delay. * linux/dev/include/asm-i386/segment.h [MACH_HYP] (KERNEL_CS) (KERNEL_DS): Use ring 1. * xen/block.c: New file. * xen/block.h: Likewise. * xen/console.c: Likewise. * xen/console.h: Likewise. * xen/evt.c: Likewise. * xen/evt.h: Likewise. * xen/grant.c: Likewise. * xen/grant.h: Likewise. * xen/net.c: Likewise. * xen/net.h: Likewise. * xen/ring.c: Likewise. * xen/ring.h: Likewise. * xen/store.c: Likewise. * xen/store.h: Likewise. * xen/time.c: Likewise. * xen/time.h: Likewise. * xen/xen.c: Likewise. * xen/xen.h: Likewise. * xen/public/COPYING: Import file from Xen. * xen/public/callback.h: Likewise. * xen/public/dom0_ops.h: Likewise. * xen/public/domctl.h: Likewise. * xen/public/elfnote.h: Likewise. * xen/public/elfstructs.h: Likewise. * xen/public/event_channel.h: Likewise. * xen/public/features.h: Likewise. * xen/public/grant_table.h: Likewise. * xen/public/kexec.h: Likewise. * xen/public/libelf.h: Likewise. * xen/public/memory.h: Likewise. * xen/public/nmi.h: Likewise. * xen/public/physdev.h: Likewise. * xen/public/platform.h: Likewise. * xen/public/sched.h: Likewise. * xen/public/sysctl.h: Likewise. * xen/public/trace.h: Likewise. * xen/public/vcpu.h: Likewise. * xen/public/version.h: Likewise. * xen/public/xen-compat.h: Likewise. * xen/public/xen.h: Likewise. * xen/public/xencomm.h: Likewise. * xen/public/xenoprof.h: Likewise. * xen/public/arch-x86/xen-mca.h: Likewise. * xen/public/arch-x86/xen-x86_32.h: Likewise. * xen/public/arch-x86/xen-x86_64.h: Likewise. * xen/public/arch-x86/xen.h: Likewise. * xen/public/arch-x86_32.h: Likewise. * xen/public/arch-x86_64.h: Likewise. * xen/public/io/blkif.h: Likewise. * xen/public/io/console.h: Likewise. * xen/public/io/fbif.h: Likewise. * xen/public/io/fsif.h: Likewise. * xen/public/io/kbdif.h: Likewise. * xen/public/io/netif.h: Likewise. * xen/public/io/pciif.h: Likewise. * xen/public/io/protocols.h: Likewise. * xen/public/io/ring.h: Likewise. * xen/public/io/tpmif.h: Likewise. * xen/public/io/xenbus.h: Likewise. * xen/public/io/xs_wire.h: Likewise.
* 2007-12-10 Thomas Schwinge <tschwinge@gnu.org>Thomas Schwinge2009-06-181-10/+0
| | | | | | | | * i386/Makefrag.am (i386/i386at/boothdr.o, i386/i386at/interrupt.o) (i386/i386/cswitch.o, i386/i386/locore.o): Remove targets. * configure.ac <Dependency tracking for `.S' files>: Add a hack to re-add the four targets with have been removed above for the (legacy) case only where they are actually needed.
* 2007-12-05 Guillem Jover <guillem@hadrons.org>Samuel Thibault2009-06-181-0/+3
| | | | | | | * i386/Makefrag.am (i386/i386at/interrupt.o): New target, depends on i386/i386/i386asm.h (i386/i386/cswitch.o): Likewise. (i386/i386/locore.o): Likewise.
* 2007-06-02 Thomas Schwinge <tschwinge@gnu.org>Thomas Schwinge2009-06-181-1/+2
| | | | | | | * Makerules.mig.am: New file, factored out of code of... * Makefrag.am: ... this file and... * Makerules.am: ... this file. * i386/Makefrag.am: Update comment.
* 2007-05-07 Thomas Schwinge <tschwinge@gnu.org>Thomas Schwinge2009-06-181-4/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [bug #15295 --- ``Mach lets processes write to I/O ports''] * i386/Makefrag.am (libkernel_a_SOURCES): Add `i386/i386/io_perm.c', `i386/i386/io_perm.h', `i386/i386/machine_task.c', `i386/i386/task.h' and remove `i386/i386/io_port.h', `i386/i386/iopb.c', `i386/i386/iopb.h'. * i386/i386/io_port.h: Remove file. * i386/i386at/kd.c: Don't include <i386/io_port.h>. (vga_port_list, kd_io_device, kd_io_map_open, kd_io_map_close): Don't define and don't use anymore. * include/stddef.h: New file. * i386/i386/io_perm.c: Include <string.h>, <device/device_emul.h>, <ipc/ipc_space.h> and don't include <oskit/ds_oskit.h>. (io_perm_device_emulation_ops): New variable. (dev_open_alloc, setup_no_senders): Remove declarations. (convert_io_perm_to_port, convert_port_to_io_perm, io_perm_deallocate): Rewrite. (no_senders): New function. (i386_io_perm_create, i386_io_perm_modify): Rewrite partially, to adapt to the GNU Mach environment. * i386/i386/io_perm.h: Include <device/dev_hdr.h> and <ipc/ipc_types.h>. (io_perm, io_perm_t): New structure and accompanying type definition. (IO_PERM_NULL): Define. * i386/i386/locore.S (ktss): Move variable to... * i386/i386/ktss.c: ... here, make it a ``struct task_tss''. (ktss_init): Initialize the `task_tss' structure and the i/o permission bit map. * i386/i386/ktss.h: Adapt to that. * i386/i386/machine_task.c (machine_task_module_init): Adapt the `zinit' call to the GNU Mach environment. * i386/i386/mp_desc.c: Include <machine/ktss.h>. * i386/i386/tss.h: Include <machine/io_perm.h>. (task_tss): New structure, equivalent to the OSKit-Mach one. * i386/include/mach/i386/mach_i386.defs: Don't include <device/device_types.defs>. (device_list_t): Remove type. * i386/include/mach/i386/mach_i386_types.h (device_list_t): Remove type definition. 2007-05-07 Marcus Brinkmann <marcus@gnu.org> [bug #15295 --- ``Mach lets processes write to I/O ports''] * i386/i386/iopb.h, i386/i386/iopb.c: Obsolete files removed. * i386/i386/pcb.c (switch_context): Update the I/O permission bitmap from stack_handoff() here (not only in stack_handoff()). * i386/i386/machine_task.c (machine_task_module_init): Set ZONE_COLLECTABLE and ZONE_EXHAUSTIBLE flags for the iopb zone. Requested by Roland McGrath <roland@frob.com>. * i386/i386/io_perm.h: New file. * i386/i386/io_perm.c: New file. * i386/i386/machine_task.c: New file. * i386/i386/mp_desc.h: (struct mp_desc_table): Change type of ktss to struct task_tss. (mp_ktss): Likewise for array of pointers to the struct. * i386/i386/mp_desc.c: Include `machine/tss.h' and `machine/io_perm.h'. (mp_ktss): Change type to array of struct task_tss. (mp_desc_init): Cast pointer to x86_tss into pointer to task_tss, and use size of struct task_tss instead size of struct x86_tss. Initialize the task_tss structure. * i386/i386/pcb.c: Include `stddef.h' and `machine/tss.h'. (iopb_create, iopb_destroy): Prototypes removed. (curr_ktss): Cast pointer to base_tss to pointer to struct task_tss. (switch_ktss): Always use kernel TSS. (update_ktss_iopb): New function. (stack_handoff): Call update_ktss_iopb. (pcb_module_init): Do not call iopb_init. (pcb_terminate): Do not call iopb_destroy. (thread_setstatus): Remove local variable tss. (thread_getstatus): Rewrite i386_ISA_PORT_MAP_STATE case handler. * i386/i386/task.h: New file. * i386/i386/thread.h: Do not include `i386/iopb.h'. (struct i386_machine_state): Remove member io_tss. * i386/include/mach/i386/mach_i386.defs [KERNEL_SERVER]: Include `machine/io_perm.h'. Define intran, outtran and destructor. (io_port_t): New type. (io_perm_t): Likewise. (i386_io_port_add): Interface removed. (i386_io_port_remove): Likewise. (i386_io_port_list): Likewise. (i386_io_perm_create): New interface. (i386_io_perm_modify): Likewise. * i386/include/mach/i386/mach_i386_types.h [MACH_KERNEL]: Include `i386/io_perm.h'. [!MACH_KERNEL]: Define types io_port_t and io_perm_t. * kern/task.c (task_init): Call machine_task_module_init. (task_create): Call machine_task_init. (task_deallocate): Call machine_task_terminate. (task_collect_scan): Call machine_task_collect. * task.h: Include `machine/task.h'. (struct task): Add member machine.
* 2007-04-02 Thomas Schwinge <tschwinge@gnu.org>Thomas Schwinge2009-06-181-3/+0
| | | | | | | | | | | | | * i386/i386/io_emulate.c: Remove file. * i386/i386/io_emulate.h: Likewise. * i386/i386at/iopl.c: Likewise. * i386/Makefrag.am (libkernel_a_SOURCES): Remove the aforementioned files. * i386/i386/trap.c: Don't include <i386/io_emulate.h>. (v86_assist, check_io_fault): Remove functions. (user_trap): Remove the code referencing the above functions. * i386/i386at/conf.c (dev_name_list): Remove the `iopl' device. * DEVELOPMENT: Document this.
* 2007-03-27 Thomas Schwinge <tschwinge@gnu.org>Thomas Schwinge2009-06-181-3/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Unconditionally use the device driver multiplexing. Suggested by Gianluca Guida <glguida@gmail.com>. * i386/i386at/dev_hdr.h: Merge into `device/dev_hdr.h' and remove. * i386/i386at/device_emul.h: Rename to `device/device_emul.h'. Adapt all users. * i386/i386at/i386at_ds_routines.c: Merge into `device/ds_routines.c' and remove. * i386/linux/dev/include/linux_emul.h: Remove file. * Makefrag.am (libkernel_a_SOURCES): Add `device/device_emul.h'. * i386/Makefrag.am (libkernel_a_SOURCES): Remove `i386/i386at/dev_hdr.h', `i386/i386at/device_emul.h' and `i386/i386at/i386at_ds_routines.c'. * i386/linux/Makefrag.am (liblinux_a_SOURCES): Remove `i386/linux/dev/include/linux_emul.h'. * dev/dev_hdr.h: Adapt all users of `i386' as if it were always defined. * device/dev_lookup.c: Likewise. * device/ds_routines.c: Likewise. * device/device_init.c (ds_init): Rename to `mach_device_init'. * device/ds_routines.c (ds_init): Likewise. (ds_trap_init): Rename to `mach_device_trap_init'. (mach_device_trap_init): Make it `static'. * linux/dev/glue/block.c: Don't include <linux_emul.h>, but instead include <device/device_emul.h> and <i386at/disk.h>. * linux/dev/glue/net.c: Don't include <linux_emul.h>, but instead include <device/device_emul.h>. * linux/pcmcia-cs/glue/ds.c: Likewise.
* 2007-03-23 Thomas Schwinge <tschwinge@gnu.org>Thomas Schwinge2009-06-181-1/+2
| | | | | | | | | * Makerules.am (%.server.msgids, %.user.msgids): Merge into the existing ``%.h %.c'' rules. Comment out the currently unused rpc stub rules. * Makefrag.am (gnumach.msgids): Rewrite. (nodist_libkernel_a_SOURCES): Add all ``.msgids'' files. * i386/Makefrag.am (nodist_libkernel_a_SOURCES): Likewise.
* 2007-02-19 Thomas Schwinge <tschwinge@gnu.org>Thomas Schwinge2009-06-181-1/+4
| | | | | | | | | | * Makefile.am (gnumach_LINKFLAGS): New variable. (gnumach_LINK): Use that one instead of the previously used `LINKFLAGS_gnumach'. * i386/Makefrag.am (LINKFLAGS_gnumach): Rename to `gnumach_LINKFLAGS', move into [PLATFORM_at] and pass `_START'. * i386/ldscript: Don't hardcode a _start address of 0x100000, but make it configurable via `_START'.