History log of /fuchsia/zircon/kernel/arch/x86/rules.mk
Revision Date Author Comments
# 8b4af924 03-Jul-2018 Francois Rousseau <frousseau@google.com>

[kernel][crashlog] move away from printf callback

instead of piggybacking on the printf messages, we build a crashlog
struct with the relevant fields that we then serialize to string

DX-230 # step 1

TESTED=manual run of `k crash` on device (arm64 and x64) and manual inspection of logs upon reboot

Change-Id: I6019c85cbd0d71084d543667850dea30ac06ea93


# 4889c868 07-Mar-2018 Todd Eisenberger <teisenbe@google.com>

[iommu][intel] Beginnings of implementation

This provides a basic implementation of VT-d. It has the following
known limitations:

- No support for first level translation or requests-with-PASID
- Only supports 48-bit second level address spaces
- Currently performs identity-mapping only (i.e. acts more as a MPU
rather than an MMU)
- Performs synchronous IOTLB invalidations rather than using the
queued-invalidation feature.
- Does not support handing off across mexec

ZX-693 #comment

Change-Id: I6b2a7e49c5064065c2b6d06787bbd467fd666119


# 649d170d 20-Apr-2018 Roland McGrath <mcgrathr@google.com>

[build][x86] Pass -malign-data=abi to GCC

Without this switch, GCC over-aligns data for bug-compatibility with
older GCC that did this though it was never supposed to.

TC-36

Change-Id: I4125efbb4e3b04dc4a4d39c782b1ce4e6d629fb5


# 1defcb2b 18-Apr-2018 Roland McGrath <mcgrathr@google.com>

[kernel] Use --emit-relocs to add self-fixups

SEC-31 #comment This applies relocations to the kernel.

Change-Id: I07b40308b768a56c889eeb9a9a89c0e897924617


# e6b2c54b 11-Mar-2018 Petr Hosek <phosek@google.com>

[build] Remove the SafeStack configuration

SafeStack is now enabled automatically by the toolchain driver.

Change-Id: Ic4e3e437baf2fe3569385c46e328f7bdc62ffe0a


# 88a0e892 05-Mar-2018 Mike Voydanoff <voydanoff@google.com>

[build] Rename x86 project to "x64"

Build output will now be in build-x64 instead of build-x86
Renamed and updated various scripts as appropriate

Within zircon, $ARCH remains "x86".
This avoids having to rename kernel/arch/x86/ and change a lot of #include paths
Removed unnecessary $SUBARCH build variable

Renamed the kernel target from pc-x86 to pc, and the board name in boards.list
from "x86" to "pc".

Change-Id: I0eb44a21ba731653b92f3ce2b78a7819c0a8f61c


# 1f7bd826 18-Feb-2018 Alex Legg <alexlegg@google.com>

[kernel][timer] Calibrate TSC with paravirtualized clock

Adds some support for KVM/PV clock. Currently only calibrating the TSC
via the information in the system time struct. This allows the
hypervisor to host Zircon while nested in KVM without implementing the
PIT timer.

Change-Id: I63f0961112b56dd09b1bc893b74f2646d844d7aa


# a550ecf9 30-Jan-2018 Christopher Anderson <cja@google.com>

[run-zircon] Add --debugger to run-zircon

- Adds DEBUG_HARD to make-parallel. If true, the build
will be built with -O0 -g3
- Move GLOBAL_OPTFLAGS and MODULE_OPTFLAGS later in the gcc flag list
so that they can override GLOBAL/KERNEL/ARCH flags as necessary.
- --debugger will start qemu with a GDB stub waiting for
connection.

Change-Id: I7f2425ef1f4f55c83ecd2f0e50197777af466c23


# ecd7e335 26-Jan-2018 Mark Seaborn <mseaborn@google.com>

[kernel][libc] printf(): Remove unused code for %f (floating point numbers)

Remove the code for handling %f and %a from the two copies of the
printf() implementation in the codebase:

* The kernel's copy (kernel/lib/libc/printf.c). In this case, the
"%f"-handling code was not being compiled -- it was conditional on
"#if !WITH_NO_FP", but kernel code was compiled with WITH_NO_FP set
to 1. We can also remove some related test code.

Note that using the double and float types is generally not allowed
in kernel code anyway (see docs/kernel_invariants.md).

* The bootloader's copy (bootloader/lib/printf.c). This was being
compiled in, but was not being used. (I checked that the
bootloader still works with this removed.)

Change-Id: Id3e7730ef66ce9d6e5f2f95e77625f33d8ddcb05


# 848861e1 01-Dec-2017 Todd Eisenberger <teisenbe@google.com>

[x86][mmu] Move the MMU code into a library

In the near future, there will be a user of this that is not the
logical CPU (VT-d).

Change-Id: I115ab92fb5730ac4575298e66f0d622cb8b4821e


# de8422b0 12-Sep-2017 Todd Eisenberger <teisenbe@google.com>

[dev][iommu] Define an IOMMU API and a no-op implementation

This defines an initial version of the IOMMU API. It is not expressive
enough to handle devices that use PASID support (multiple address spaces
for a single device), but ideally covers all other uses.

ZX-693

Change-Id: I8fbd17a2857e0e8be156c9c59073398a937de107


# 31352893 28-Nov-2017 Travis Geiselbrecht <travisg@google.com>

[kernel] remove MEMBASE and some other unused variables

Change-Id: I6e644de42f84b3a25e6e6e9697c32fabcedaa0d5


# 9fab09f1 30-Oct-2017 Todd Eisenberger <teisenbe@google.com>

[x86][suspend] Save registers in preparation for resume

ZX-1184

Change-Id: Iae2f2c46f731e987ceee19b9984aa735d6e27db2


# 0c28fc99 16-Aug-2017 Doug Evans <dje@google.com>

[dev][intel-pm] Intel Performance Monitor support

First pass.

Change-Id: Iede25087ac3c460c685d6b487eee0a830a03efec


# 63364cd5 19-Oct-2017 Travis Geiselbrecht <travisg@google.com>

[kernel][arch] remove KERNEL_LOAD_OFFSET from the kernel link address

-ARM64 kernels are now linked to run precisely at -4GB with no load
offset baked into the address.
-bake KERNEL_LOAD_OFFSET into KERNEL_BASE for x86 so that the initial
mmu table setup still works.
-remove PHYS_HEADER_LOAD_OFFSET which is no longer used

Change-Id: I33b293653346afbfc9aeaae5d2a433ef3a4be0b1


# 7b127970 13-Oct-2017 Roland McGrath <mcgrathr@google.com>

[kernel][x86] Build kernel code with -fPIE

Build x86 kernel as position-independent without any relocation for now.
The RELRO candidate special-case sections must be hand-placed in the
linker script to avoids "orphans" placement logic putting them into the
data segment but before the __data_end symbol.

SEC-31 #comment This resolves the code-generation and link layout issues.

Change-Id: I9428a989f8504ad8f3e690ebb8e373ffc2e2e726


# 07166ed7 13-Oct-2017 Roland McGrath <mcgrathr@google.com>

[kernel] Consolidate kernel linker script

There is much more that's the same than that's different between
the architectures. Maintaining a single linker script that works
for both is easier than keeping two in synch.

Change-Id: I0655919e3f7dc5f8788d47bbe733f444c87ec97b


# 650c7c1a 11-Oct-2017 Roland McGrath <mcgrathr@google.com>

[kernel][x86] Remove arch/x86/64/ subdirectory

Zircon only supports x86-64.
The historical subdirectory split just makes it harder to find all the code.

Change-Id: I7c828660bd1d4d277718aa74f35a3fab5f2333ea


# 9c6c8017 12-Oct-2017 Roland McGrath <mcgrathr@google.com>

[kernel][code_patching] Do code_patching as an init hook, earlier

Don't depend on kernel/lib/code_patching from kernel/vm, only
from kernel/arch/x86, where it's actually used. This avoids
the possibility of an empty patch list, necessitating __WEAK.
Apply the patches much earlier via an LK_INIT_HOOK. This means
patches can be applied to code that runs earlier. There's no
reason to delay it.

Change-Id: I797ed23b5d7ca165778eaec4caa6896d0b5940af


# 34d4529b 02-Oct-2017 Thomas Garnier <thgarnie@google.com>

[arm64] Build code as position independent

Build arm64 kernel as position independent without any relocation for
now. This change is straightforward on arm64 as everything is relative
and GOT usage is already limited.

Disable PIC only for x86_64 until the next commit. Also add a hidden.h
to enforce default hidden on all symbols.

SEC-31
Change-Id: I9ce4fcd33b9eddf817315f1329cff3c9c4842b8c


# 1efed7cd 23-Sep-2017 Travis Geiselbrecht <travisg@google.com>

[make] add more files to GENERATED, clean up the x86 kernel.ld rule

Change-Id: Id3eab9aaa010e80e38a553442758a435710e52a7


# bc6a1e82 23-Sep-2017 Travis Geiselbrecht <travisg@google.com>

[make] move the ENABLE_NEW_BOOTDATA switch logic into arch/x86 rules file

No functional change, just a bit of cleanup

Change-Id: Ia8075dbd4bd27a78bf06aed03ca011c4c5beaf39


# 8d4e292f 20-Sep-2017 Petr Hosek <phosek@google.com>

[build] Set -march=x86-64 for x86

This is the baseline architecture we support on x86_64. We also
explicitly enable cmpxchg16b.

Change-Id: Ibcab3f29713b4c9448e6365c591170a0919d6828


# 59e644b1 07-Sep-2017 George Kulakowski <kulakowski@google.com>

[zircon][mxtl->fbl] Rename mxtl to fbl

Change-Id: Ie21b6498e1bfb0a7fa0315e40b9e5c3ee78646be


# 8eb2e202 01-Sep-2017 Travis Geiselbrecht <travisg@google.com>

[kernel] remove extraneous #if checks for WITH_OBJECT

It's basically required now, so declare a dep on it and use the api directly.

Change-Id: I1febaf296cc51b9e016cc514bd7b7aa9c09d4829


# e5bdc68a 28-Aug-2017 Abdulla Kamar <abdulla@google.com>

[hypervisor] Invert build dependencies.

This allows us to depend on lib/magenta from lib/hypervisor, so we can remove
all of the WITH_LIB_MAGENTA defines and still build cleanly with the -test
targets.

Change-Id: I7a54c2ae4d812213a21ff67b963626a65879b2ea


# c58222d2 14-Aug-2017 George Kulakowski <kulakowski@google.com>

[kernel][mxtl] Clean up some dependencies of mxtl::count_of

This adds both explicit includes of mxtl/algorithm.h, and module
dependencies.

Change-Id: I3b102a42df56c982b9c2c8913d8151c9c66198b6


# 6e77e9af 31-Jul-2017 Gurjant Kalsi <gkalsi@google.com>

[x86][pc] Implements mexec for Intel x86 PC

Change-Id: Id257568884e91056bbaab64d8d4650ddfd49ddda


# 197d0327 25-Jun-2017 Doug Evans <dje@google.com>

[kernel][build] Emit .debug_frame instead of .eh_frame

Alas on our GCC this is (currently) not possible. MG-62
For now we're not getting either .eh_frame or .debug_frame (.eh_frame gets
discarded due to -gc-sections).
This is mostly ok for now as we compile with -fno-omit-frame-pointer.

MG-870 #done

Change-Id: I1637c014d188b80beec74f6ba8c9237c10ffb3d5


# ce8c0523 20-Jul-2017 Abdulla Kamar <abdulla@google.com>

[hypervisor] Restructure around VCPUs.

This changes the structure of the hypervisor to be modelled around
virtual CPUs. Each VCPU is associated with a thread and a CPU, in
order to increase performance and simplify communication with user
space.

While the kernel-side of the hypervisor has been restructured, the
user space-side has not been modified to take advantage of the
optimisations that are possible. This will come in a follow up CL.

Change-Id: Ic0c9be724f12c9de601fc4b892d74ba224b0d85e


# ef0702dd 19-Jul-2017 Andrew Krieger <andrewkrieger@google.com>

[x86][kernel][timer] Separate timer freq lookup

On modern x86 chips we can determine TSC frequency by inspecting the
CPU (without calibrating). This is useful for timing during early boot,
before our virtual memory manager is online.

To access the timer before the VM is up, on x86:

uint64_t tsc_freq = x86_lookup_tsc_freq();
if (tsc_freq) {
// Note: you might want to add e.g. cpuid() before/after rdtsc()
// for serialization purposes.
uint64_t timer_nanosecs = rdtsc() * 1'000'000'000 / tsc_freq;
}

Change-Id: I434a9acd92e6ec59fc5f6fd9690d8e232ccbbfec


# 79bb46c1 27-Jun-2017 Roland McGrath <mcgrathr@google.com>

[build] Consolidate Clang --target option setting via CLANG_ARCH

The arch rules.mk just sets CLANG_ARCH. Using $(CLANG_ARCH) for
--target=$(CLANG_ARCH)-fuchsia is in common code.

Change-Id: Ie4131e00bb73d3f92683cf7d5439789f7508ea03


# cf837023 22-Jun-2017 Yvonne Yip <yky@google.com>

[kernel] add command to enable HWP

'hwp enable' enables HWP with default parameters. 'hwp hint'
sets a hint to bias for performance or energy efficiency. (0-255)

Change-Id: I1a067a30ee1093784272842c46833ec6cc63d201


# 9e167cd9 09-Jun-2017 Jocelyn Dang <jocelyndang@google.com>

[kernel][timer] Remove non-dynamic timer from magenta.

MG-821 #done

Change-Id: I3e22dcfb4f72a702198c516be31f98037fdbdf60


# 911dc99c 03-Jun-2017 Roland McGrath <mcgrathr@google.com>

[kernel][arch][x86] Revamp stack-protector/safe-stack early setup

This moves the setup of the boot CPU's x86_percpu in %gs.base
into assembly and the most basic initialization of its x86_percpu
into a compile-time static initializer. This makes it possible
for all the C code on the startup path to use safe-stack and/or
stack-protector (which gets harder and harder to avoid with LTO).

Now the only C function that runs at all is x86_secondary_entry.
The work it does to discover its CPU number (and thus the right
address for its own x86_percpu) is too complex to do in assembly.
Instead, x86_secondary_entry is split so that the first C
function run on secondary CPUs is a simple one that manages to
avoid stack-protector/safe-stack code, and it sets up %gs.base
and enough of x86_percpu that it can then call the second C
function and that function can safely use safe-stack and/or
stack-protector code.

Change-Id: If8f0860a05a0bd98285a15d0f2f97699bf16d9d7


# c4b00c8a 01-Jun-2017 Travis Geiselbrecht <travisg@google.com>

[kernel] remove the WITH_SMP flag

Always build the kernel with full SMP support.

Change-Id: I105f8e4127a93113c795ae80e1dc4d4b0d43abe8


# d09aa883 31-May-2017 Mark Seaborn <mseaborn@google.com>

[docs] Fix references to docs/sysret_problem.md

The files docs/magenta/* were moved to docs/* a while ago.

Change-Id: I2c292c5603e71cb4c4c7570749b7a3b9a12d0f51


# cead3ded 22-May-2017 Abdulla Kamar <abdulla@google.com>

[hypervisor] Move APIC and EPT handling to user-space.

This means that the local APIC, IO APIC, and all related instruction
decoding moves to user-space.

Change-Id: I4c2dfd306dc5d30bb404f06e9fc9174101e472b6


# 436b12bb 03-May-2017 Gurjant Kalsi <me@gurjantkalsi.com>

[syscall][kexec] Implements mexec syscall.

Change-Id: Icc8a31f73521fef21ac3cbb1da3d3ef1286fb621


# 6d61dd7d 24-Apr-2017 Abdulla Kamar <abdulla@google.com>

[hypervisor] Initial IOAPIC handling.

This setups up the following:
1. EPT fault on IOAPIC address.
2. Guest linear to physical translation, for...
3. Instruction decode of IOAPIC access.

I'll expand on this in further CLs, but I thought I should get the
foundation out first with the first couple of instructions being
decoded.

Change-Id: I62b8c2e0074ac257f4847064a4afa6614235cd3b


# 1caa6023 25-Apr-2017 Abdulla Kamar <abdulla@google.com>

[hypervisor] Restructure VM exit handling.

Separate the VM exit handling code so that we can clearly specify the
interface for it and expand upon it.

Change-Id: Ica01c1c0c927ccabf690effbd82b5f1fbe353c5d


# d10fca36 23-Apr-2017 Travis Geiselbrecht <travisg@google.com>

[kernel][x86] brute force rename arch/x86/* files from .c to .cpp

Change-Id: I8ec0a28f71a7d4d3eba4f022873e59dbbbd0bd1e


# 50a2d07e 21-Mar-2017 Travis Geiselbrecht <travisg@google.com>

[make] add QUIET=1 option to the build to squelch all output

Change-Id: I57742bb6aa0ad1f0dc516c917dfecd65f6f65f43


# 06eb6a6c 10-Apr-2017 Brian Swetland <swetland@google.com>

[magenta] remove "zeropage" boot support

We boot via MultiBoot 0.96 or by our own boot header now,
and zeropage has been disabled. This removes it entirely.

Change-Id: I4de5b4f8b77fa26d339b5a95fe18dcf337121b93


# 16656ae0 05-Apr-2017 Brian Swetland <swetland@google.com>

[build] flatten the build

Previously we treated kernel/, system/, and third_party/ as
overlays on a shared namespace. This required the concept
of "canonical" module names, and a lot of complexity to ensure
that things didn't collide and the build worked.

This change gets rid of that, no longer passes -I to make,
so that include directives from our *.mk files do not magically
wildcard across various paths, etc.

The most user-visible change is that everywhere where a module
name is specified (MODULE_DEPS, MODULE_LIBS, etc), full module
names like kernel/lib/io or system/ulib/mxio must be used instead
of previously-allowed "short" names like lib/io and ulib/mxio.

The build output still has a similar shape, but the first segment
of the module path (kernel/, system/, or third_party/) is no
longer elided under $(BUILDDIR)

Change-Id: I525aba1da1c86eb7a86007bddc669f7eeebfedd5


# 2f4175d1 31-Mar-2017 Roland McGrath <mcgrathr@google.com>

[kernel][x86] Build x86 kernel with -fsanitize=safe-stack

Change-Id: Ifb0c51de5d0b5bd6a27b77a120759606de62ead7


# b2579ea4 30-Mar-2017 Brian Swetland <swetland@google.com>

[magenta] enable new boot path

We now handle >2GB memory under Qemu, so we should be able
to safely continue our switch to the new boot path.

Change-Id: Ib9ce2531630f71fec461f7938a517abaf557aca3


# 27f2ba32 29-Mar-2017 Brian Swetland <swetland@google.com>

[magenta] default ENABLE_NEW_BOOT back to "false" for now

Qemu does not tell us about memory above 2GB in multiboot
mode for some reason. We'll have to figure that out for
people who need more memory before we default to the new
boot path.

Change-Id: I8f53dfadfdafdfee4e5cab03e508086667ece334


# 4a2cb9bb 23-Mar-2017 Brian Swetland <swetland@google.com>

[magenta] enable new boot path by default

This causes magenta.bin to support booting via the Magenta Bootdata
or the MultiBoot v0.97 protocols. The old boot path was a hybrid
of Linux Zeropage + Magenta Extensions and MultiBoot 0.97, but the
latter was not capable of booting us with an external bootdata image.

Qemu already supports the MultiBoot path, and our local branch has
been patched to speed up ramdisk loading.

GigaBoot 0.5.1 (current version in Magenta) also supports the
new boot path.

If all goes well, the old boot path will be removed in a week or two.

Change-Id: I2a62282565c611f7152f84d2dfd4de870eea0036


# 4239e953 27-Mar-2017 Travis Geiselbrecht <travisg@google.com>

[arch][x86] remove kernel x86-32 code and some top level defines in user space

Change-Id: Ib557acd8ca3dea4e7e8b60a29d1ced9d2343cbc8


# 299cacf0 24-Mar-2017 Abdulla Kamar <abdulla@google.com>

[kernel] Move lib/hypervisor dep to arch/x86.

Change-Id: I85ffa469293b483d2724f6f132ac564bfea9dd8a


# 66883bac 10-Mar-2017 Brian Swetland <swetland@google.com>

[multiboot][bootdata] support non-zeropage boot path

This functionality is gated behind ENABLE_NEW_BOOT
which is not defined in the default build.

When enabled, the Magenta kernel image is a multiboot +
bootdata image and does not use the legacy linux zero
page data passing mechanism.

Since Qemu passes the multiboot commandline and
modules (including the ramdisk) immediately after
the last page of the BSS, we need to carefully avoid
clobbering that with boot_alloc_mem(). To do so
arch/x86's mtrr init now uses a static data structure
(removing the only boot alloc that happens prior to
platform init), and the boot allocator has a simple
boot_alloc_reserve() which pc platform init uses to
inform it of the location of the ramdisk so that it
can shift its "heap" after it if necessary.

After pmm init, pmm_alloc_range() is used to preserve
the ramdisk, the same way we do in zero page boot.

Kernel is now built at 1MB instead of 1MB - 8KB
thanks to changes from travisg.

Change-Id: Iff5a7e1e5dd3133ca93ffb6ee3159c38fe910089


# fd7baecb 20-Feb-2017 Abdulla Kamar <abdulla@google.com>

[magenta][hypervisor] Add logic for host save and load.

With this, we can enter and exit from a guest, and see the reason for
VM exit. We save the host's state right before we enter into the
guest, and return exactly to that point when exit from the guest. The
return value of vmx_host_save is used to determine whether we are
initially saving host state, or if we are loading the host state back
after a VM exit.

Change-Id: Ia15148b43b131b418fbc69b01d59b3e32945f724


# 2967173f 14-Feb-2017 Abdulla Kamar <abdulla@google.com>

[magenta][hypervisor] Add beginnings of a hypervisor.

This does the very basic task of enabling VMX on each CPU. Next step is to
setup MSRs and to launch into a VM.

I'd like some early feedback before I dive too deep. A lot of this is subject
to change as we learn more, and iterate on the implementation.

Change-Id: Idce0d36d73e9a3be8e607f6c9b1a29597cfc4f51
NOTE: Only Intel CPUs are currently supported.


# cc13fa9f 14-Feb-2017 Travis Geiselbrecht <travisg@google.com>

[kernel][make] move WITH_NO_FP define into KERNEL_DEFINES instead of command line

No functional change, just an itch to scratch.

Change-Id: I20abf227752567d04c08accba03295f794c55090


# 3f9ec741 30-Jan-2017 Doug Evans <dje@google.com>

[kernel][x86] First pass as Intel PT support

Intel PT (Processor Trace) is a h/w based instruction tracing
feature. See Intel Vol. 3 chapter 36.

This is the low level kernel support:
- support for reading/writing the PT MSRs
- support for starting/stopping full system traces
(tracing all cpus, regardless of thread running)
- logging of cr3->pid values for later post-processing of the trace

Support for tracing specific threads to follow.

The rest is in user-space driver "intel-pt".

Change-Id: Ib69a17e501a08dd6b0a661524cac9467d2d7f62e


# 8f3ca86e 25-Jan-2017 Roland McGrath <mcgrathr@google.com>

Revert "[ulib][runtime] Use rdfsbase/wrfsbase for x86-64 thread register"

This reverts commit d798c04dafbbd95172606f9351bde4c914dcb3a3.

Reason for revert: There are qemu issues with using wrfsbase on some host machines.

Change-Id: I80e7ce3472ba164a5f81376b4813bae10f440b99


# d798c04d 24-Jan-2017 Roland McGrath <mcgrathr@google.com>

[ulib][runtime] Use rdfsbase/wrfsbase for x86-64 thread register

These new(ish) instructions allow access without kernel assistance.
The current qemu supports them, while the old one did not.

Change-Id: I08bf64069a807bd94bc7581d5e6a35c42dba54f0


# a4f254d8 15-Dec-2016 Travis Geiselbrecht <travisg@google.com>

[kernel] fix all the arches building without SMP support

Also allow setting the maximum number of cpus in the build system.
Reduce the default PC count to 8 from 16. Saves some memory, and
we're not (currently) going to be very efficient above 8 right now.

Change-Id: I61c7f3773977b8d1409c755baf4d24c9a9800af9


# d6e95f78 10-Nov-2016 Roland McGrath <mcgrathr@google.com>

[build] Consolidate LIBGCC setting

The method for finding the compiler's runtime library is the same
for all machines and both compilers. Just do it in one place.

Change-Id: I5ba2f6299e200c6a321643b8558e8c6db886d381


# ee3d6ee6 31-Oct-2016 Travis Geiselbrecht <travisg@google.com>

[kernel] remove the no-vm path

Remove the no-vm build, which hasn't worked for quite some time. Cleans up
some clutter in some of the boot code.

Change-Id: Ia11c531c19d167538838a47f92e5d5c38d8fec71


# a57f10a6 28-Oct-2016 Petr Hosek <phosek@google.com>

[build][clang] Use -print-libgcc-file-name to find compile-rt path

Clang now supports -print-libgcc-file-name with compiler-rt, use
it find the correct path to libclang_rt.builtins library.

Change-Id: I38c9ca1d6bd1516ed6555476cbcfb587bb26d88f


# 1d837769 13-Oct-2016 Todd Eisenberger <teisenbe@google.com>

[x86] Reduce cost of io bitmap on context switch

Change-Id: I23a1440d0b6920dab74ea3d4f95c528b21c1c601


# 1f874866 25-Oct-2016 Todd Eisenberger <teisenbe@google.com>

[x86][ioport] Convert IO port bitmap code to C++

Change-Id: I3d27a27bc1d86b6cab6efbac091c549f75a7c940


# 0fa0d945 19-Oct-2016 Doug Evans <dje@google.com>

[kernel][engine.mk] Turn on -fasynchronous-unwind-tables.

We now have libunwind (third_party/ulib/ngunwind) for backtraces
on x86_64, arm64. .eh_frame is still disabled for arm32 as we
don't support unwinding there, and the build currently fails
(libgcc issues?) if we turn on -fasynchronous-unwind-tables for arm32.

Change-Id: I0e67e46c32aeca1dc5a9bccc2604fec4ad327b8c


# 275a1ab5 07-Oct-2016 Doug Evans <dje@google.com>

[kernel][x86_64] Remove -gdwarf-2, just use default.

The default in gcc is now dwarf 4 which has several improvements.

@ruffy:magenta$ l old-magenta.elf new-magenta.elf
-rwxr-x--- 1 dje eng 9745992 Oct 7 11:16 new-magenta.elf
-rwxr-x--- 1 dje eng 10156360 Oct 7 11:10 old-magenta.elf

Change-Id: I9374e8ea3aacd226863f79f6dd2ed7810e2aba67


# 8546fdb7 06-Oct-2016 Todd Eisenberger <teisenbe@google.com>

[x86][mmu] Fix bug related to unmapping large demand paged regions

If a demand-paged region of size >=2MB was created, and it was not
aligned to 2MB, and it straddle a 1GB boundary, crashing without
mapping any pages into it would cause misaccounting to occur in
the MMU code, resulting in an assert firing.

The same misaccounting could cause pages to not be unmapped when
requested.

MG-315 #done

Change-Id: I7526eb370b4aba3671c87d78681018f62ba95e26


# 0fe3b2cf 04-Oct-2016 Travis Geiselbrecht <travisg@google.com>

[make] move the linker garbage collect switch out of arch into top level make

Change-Id: Ie5fe2b435eba1574fe50998c3ece8815b584b567


# ae7910c0 30-Sep-2016 Petr Hosek <phosek@google.com>

[build] Use boolean flags to enable Clang

This is to match other flags used by the build.

Change-Id: Idd1c1714aff3d03dbc58b92a2cbe0ee0a75d8089


# fafe510a 30-Sep-2016 Travis Geiselbrecht <travisg@google.com>

[kernel][x86] have the i386 build use the x86-64 toolchain

Change-Id: Ie481fddceb740ca66699115827aa9b4fc3c3dd50


# 0d794034 07-Sep-2016 Doug Evans <dje@google.com>

[kernel][debug] beginnings of register r/w support

This provides two syscalls mx_thread_read_state,mx_thread_write_state
that can be used to r/w cpu registers.
It is built off of the idea of "register sets" (integer, floating point,
and so on) in common use at least in gdb.

Discussion of the ultimate name of these syscalls, and whether to
merge them with something else is being left until the raft of
dependencies relying on this code is ready.

Change-Id: Ic118a76292334dfeaa46278aaddca3140ed4441c


# b7ff8b58 29-Aug-2016 Todd Eisenberger <teisenbe@google.com>

[x86] Add cmdline flag for disabling hyperthreading

Change-Id: Id67599649bb1488d8f64e79687c7c35209c34da5


# 2fe462a2 29-Aug-2016 Todd Eisenberger <teisenbe@google.com>

[acpi] Reduce the amount of ACPICA built for the kernel

This also removes the suspend-to-RAM stub for x86, which broke
when we moved ACPI out of the kernel anyway.

Change-Id: Iece785ce429c11a00a1489340fc55d2e645b5b6f


# 7447ea1d 25-Aug-2016 Roland McGrath <mcgrathr@google.com>

[build] Remove support for fully-static linking

Everything links to libc (and libmagenta) dynamically now.
Fully-static linking is not supported at all.

Change-Id: I0c9dec52ee1bc7b360dd9127370b63be71a96d4f


# 3fb56fcb 10-Jun-2016 Todd Eisenberger <teisenbe@google.com>

[x86][suspend] Implement basic suspend-to-RAM

This is very early support. Most hardware is not being restored.
Currently only the following devices are reinitialized:
- bootstrap processor Local APIC
- Secondary CPUs
- Serial console

Change-Id: I7bde20031fd0cc460919f3e2e5b4dcd0b4e40f4d


# 7b63d794 14-Jul-2016 Todd Eisenberger <teisenbe@google.com>

[x86][registers] Rework extended register saving

This patch adds support for using xsave/xsaves to save register state.
It removes support for the optimization previously in place for
reducing FPU state saving, due to the xsaves/xsaveopt support making it
unnecessary. We could keep the optimization around for older hardware,
but it adds complications to the logic in order to support hardware
that is likely out of our scope of concern.

This patch additionally introduces support for using the YMM and ZMM
registers.

This patch supports the following configurations, in order of
preference:
- xsaves support
- xsaveopt support
- xsave support
- fxsave support only
- No fxsave/xsave support

Change-Id: I8cb4fe6cff00f8a0fe3644de4ab425a22f1cae15


# 8184582b 18-Jul-2016 Roland McGrath <mcgrathr@google.com>

[build] Use GLOBAL_LDFLAGS for ld -shared too

It turns out that --gc-sections works just fine with -shared (it takes
each exported symbol as a root rather than just the entry point). So
there is no problem using GLOBAL_LDFLAGS for that case too.

Change-Id: Ifadbe2c443407ff6914bfd1b9d45e1f18c2bc3be


# 1bc25f41 18-Jul-2016 Todd Eisenberger <teisenbe@google.com>

Revert "[x86][registers] Rework extended register saving"

This reverts commit 555b6fcb36c9b6677c98b3fb50409db81917bbc6.

Change-Id: I5af15db99074b78574ad4c7888c2e179af5b55c6


# 555b6fcb 14-Jul-2016 Todd Eisenberger <teisenbe@google.com>

[x86][registers] Rework extended register saving

This patch adds support for using xsave/xsaves to save register state.
It removes support for the optimization previously in place for
reducing FPU state saving, due to the xsaves support making it
unnecessary. We could keep the optimization around for older hardware,
but it adds complications to the logic in order to support hardware
that is likely out of our scope of concern.

This patch additionally introduces support for using the YMM and ZMM
registers.

This patch supports the following configurations, in order of
preference:
- xsaves support
- xsave support
- fxsave support only
- No fxsave/xsave support

Change-Id: Idace1428ff62ff94df2ae4a5a2dda5a0ec5cf72f


# a26a5056 15-Jul-2016 Roland McGrath <mcgrathr@google.com>

[build] Support MODULE_LDFLAGS, and USERLIB_SOLDFLAGS

The default ld -shared rules want some more ld options.
These go into USERLIB_SOLDFLAGS.

Some modules might need per-module ld options.
These go into MODULE_LDFLAGS.

Change-Id: I645c3c736c301718c5376f02b702220f42d6d7aa


# 201b60d8 14-Jul-2016 Travis Geiselbrecht <travisg@google.com>

[kernel][build] remove IS_64BIT #define, replace with _LP64

Change-Id: I35bfdf5ba241f84b54cb9d49bd928bf6a7099a08


# 93ceec31 14-Jul-2016 Travis Geiselbrecht <travisg@google.com>

[build] move some LK #defines into kernel space only and switch user space code to using compiler builtins

The user space ones that were specifically switched was
ARCH_* -> __x86_64__ (and friends)
IS_64 -> _LP64

Change-Id: Ide84907cbf7ae80e27b605454514fe06a604168d


# 31835875 12-Jul-2016 Travis Geiselbrecht <travisg@google.com>

[kernel] compile the kernel using -fno-pic on all architectures, not just x86

Change-Id: Ice4a64bf511cfce7405c99c87ff1082046b3abbd


# ab1c8134 08-Jul-2016 Brian Swetland <swetland@google.com>

[build] build shared libraries and separate crt1.o

- shared libraries are a work in progress, this change provides
the core build machinery to support them
- user library modules that declare a MODULE_SONAME cause a
shared library to be built
- user apps and libs may use MODULE_LIBS to depend on shared
libs and MODULE_STATIC_LIBS to depend on static libs
- MODULE_DEPS is currently converted to MODULE_STATIC_LIBS
- libc is arranged to build a separate shared version but
that is disabled at the moment due to build error
- all of userspace is being build -fPIC for the moment
- libruntime and libmagenta are configured to generate shared
libraries
- make the x86 -fno-pic only apply to KERNEL_COMPILEFLAGS

Change-Id: Iccebe078ad18069a97173228d1476a5e95a2b879


# fb601486 28-Jun-2016 Travis Geiselbrecht <travisg@google.com>

[make] clean up a bad variable addition in the clang path

preinitialize another variable to make the unused variable warning go away.

Change-Id: Id7cf9ab2980bf16e42d17abfe2bffb00e1eb07df


# 83ea7eb5 27-Jun-2016 Petr Hosek <phosek@google.com>

[build] Use Fuchsia triple when building with Clang

This is to ensure that the object files produced by the compiler
have the correct ELF header using Fuchsia as OS/ABI.

Change-Id: I994c67e72f549be3b6534cf7b00f3c582ef1eb06


# 1b7f271e 21-Jun-2016 Mark Seaborn <mseaborn@google.com>

[x86-64] Avoid problem with SYSRET on non-canonical addresses

Disallow mapping a page immediately below 0x0000800000000000 so that the
syscall return address can't be non-canonical. See the note I've added in
this change for more details.

Change-Id: Ic90e0fedf3ef3612e4b44a464d43cf75e47e169a


# caa3d673 19-Jun-2016 Travis Geiselbrecht <travisg@google.com>

[make] split the master config.h file into global_ kernel_ and user_ configs

Split most of the build-system-set #defines into their corresponding bucket,
which should reduce the amount of extraneous rebuilds by a bunch.

WITH_* defines are now limited to kernel space only, for example, so modifying
what user space apps are build shoudln't force a full rebuild like it does now.

This also stops leaking of a lot of kernel configuration out into user space.

*_ASPACE_BASE and *_ASPACE_SIZE seem to be used in at least one place, however,
but it seems pretty benign.

Change-Id: I4d9d68a7446cd6dd13348f0fbf8821e7894248dd


# 53b9e1c8 15-Jun-2016 The Fuchsia Authors <authors@fuchsia.local>

[magenta] Initial commit