Commit Graph

160 Commits

Author SHA1 Message Date
Jérôme Duval
04be20a75a Implement stack protection support
this adds kernel & libroot stack protector hooks. it uses /dev/random in userspace.
A configure option --enable-stack-protector is added to activate -fstack-protector
on selected system components (ATM apps, kits, servers).

Change-Id: If3a2920ba9aa0a85eaff4ba6778947f8c76ade31
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3895
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2021-05-03 17:52:31 +00:00
Alexander von Gluck IV
d123849688 build/cross-tools: explicitly set ISA for riscv64
* Enable TLS for riscv64. For now select a dummy
  implementation.
* RISC-V has a register (tp) dedicated to TLS
* All the "desktop-like" RV64 chipsets implement GC
* Same ISA we currently build for... but calls it out
  in-case defaults change.

Change-Id: I623b6e5c309b6a6e80ec378e456b2335c561269d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3632
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2021-01-20 19:38:01 +00:00
Alexander von Gluck IV
f8650bc2db jam/ArchitectureRules: Bump SDIMAGE_BEGIN to 2KiB
* If we start at 0 we overwrite the partition table
  with the EFI boot filesystem

Change-Id: I7d1d5d65cdaf78f3bd3b87672e1e8e161f78ce75
2021-01-12 15:03:40 -06:00
Alexander von Gluck IV
58332722cd build/mmc: Drop usage of mtools, use internal tooling
* Fixes the ARM image to actually include Haiku within
  a partition on the SD card.
* Drops the mtools requirement
* Drops the C/H/S requirements

Change-Id: Ie2776a09399ac181daab7a503e96e27ab7093af4
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3608
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2021-01-07 21:34:00 +00:00
PulkoMandy
c99c0d9d5a sparc: kernel needs to be position independant
Change-Id: Id3da074c1c02dfc5bdedb8e1d0d5c2130c978325
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3582
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2021-01-01 00:45:13 +00:00
Fredrik Holmqvist
cb26d04e81 arm: kernel link cleanup and fixes
* Removes several previous hacks, and makes kernel loading
  by our bootloader more reliable.
* Long list of "Couldn't find both text and data" errors
  no gone in our bootloader as it loads our kernel

Change-Id: Ic9f5ed44975d41fb22d7ab19536261432abe84ba
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3444
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2020-11-30 22:08:32 +00:00
Augustin Cavalier
fb0391c28b ArchitectureRules: Fix typo in CC_IS_CLANG test. 2020-10-10 16:26:41 -04:00
Augustin Cavalier
47320dd0ab configure & build: Rework legacy GCC detection to parse versions outside of Jam.
Jam comparison logic is string-based, and so was detecting GCC >= 10
as being < 2. This rectifies that by removing the GCC version parsing
from Jam logic entirely, and setting various BuildConfig variables
instead.

Change-Id: I0c0ae3b9002fb5e77f9ca7a78600c91871657f03
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3293
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
2020-10-09 01:20:02 +00:00
François Revol
5c9d51ef00 m68k: make sure boot & kernel code can run on 020-060
Change-Id: I5830085fcd6120600ff3be85a2fdd2602e1935fe
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2221
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2020-08-19 13:35:41 +00:00
François Revol
ec5a799719 m68k: add next_m68k boot platform
Since the boot ROM API structure is declared with a custom alignment, we
simulate it with padding bytes around, and use aligntest.prg to verify
using ARAnyM + TOS/MiNT as we know how to link simple PRG files.

It now prints something to the screen then panics when initializing the
heap.

For now one must insert the loader manually into an existing floppy
image:
dd if=generated-m68k/objects/haiku/m68k/release/system/boot/next_m68k/haiku_loader.next_m68k bs=$((0x8000)) seek=1 of=next_floppy.img conv=notrunc

Change-Id: I06d74e9d85a352aab68dedce545bbe5fe9e990d5
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2220
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2020-08-19 13:35:19 +00:00
Fredrik Holmqvist
d9f74c873b Graphite options only, replace dupes with floop-nest-optimize
Other loop optimization is enabled in -O3 already
2020-07-18 15:19:44 +02:00
Alexander von Gluck IV
b4e10d71e6 arm64: Attempt to build efi bootloader
Change-Id: I90a9440898994459f8d6de922a3f363fbeddaaf4
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2974
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2020-07-01 13:47:07 +00:00
Alexander von Gluck IV
9f739dd2e8 u-boot/arm: Break script out of Jamfile. Add EFI support.
* boot.scr was growing past Jam MAXLINE and was causing segfaults
* Break out to tree, data/boot could be used for other arches
* boot.scr is getting a bit complex, but supports the old
  u-boot haiku_loader, as well as u-boot starting our EFI loader.

Change-Id: I93a3167ab0bc78747c1d70fedd08595e9ac89662
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2963
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2020-06-29 16:18:32 +00:00
Alexander von Gluck IV
0ed9b677ee arm: switch to EFI, drop FDT in loader
* This should 'fix' the arm build
* No longer parse FDT in bootloader, just pass ptr.
* The EFI loader doesn't load yet on arm
* It compiles though. Ship it!

Change-Id: I7c8ce588298dfaf4fba8054c6b6d9a92733b5943
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2903
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2020-06-20 18:35:36 +00:00
Augustin Cavalier
a5ca573d27 ArchitectureRules: Add -fno-semantic-interposition to kernel rules.
Should constitute a minor performance gain, with no functional change
(the kernel ELF loader does not do any semantic interposition; or
any interposition for that matter.)
2020-03-28 14:52:17 -04:00
Jérôme Duval
2930142932 ArchitectureRules: define HAIKU_KERNEL_PIC_CCFLAGS for x86
fix broken x86_gcc2 build after 515ec47340
2020-03-23 17:24:13 +01:00
Augustin Cavalier
515ec47340 ArchitectureRules: Make HAIKU_KERNEL_PIC_CCFLAGS empty by default.
This makes it entirely up to the per-architecture setup as to
what to put into it.

No functional change.
2020-03-22 20:49:55 -04:00
Alexander von Gluck IV
04f1baa771 EFI: Make our haiku_loader architecture agnostic
* This is the bulk of the work. Anything else should be
  minor cleanups and tweaking.
* riscv64 isn't a viable EFI platform yet.. just acting
  as a stand-in to test a non-x86 EFI haiku_loader

Change-Id: Ib03de81e2b562e693987b86d7b4318209fb1c792
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2256
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2020-02-21 14:29:22 +00:00
Jaroslaw Pelczar
78fea2759f arm64: Enforce PIC build of kernel
Signed-off-by: Jaroslaw Pelczar <jarek@jpelczar.com>
Change-Id: I4d4acf91865b182d9fd5f500978705854e0638e5
Reviewed-on: https://review.haiku-os.org/c/haiku/+/1855
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2020-02-04 03:36:20 +00:00
Jaroslaw Pelczar
cbdb30f467 arm64: Add more random scripts to get stuff to compile
Signed-off-by: Jaroslaw Pelczar <jarek@jpelczar.com>
Change-Id: Ie043af5b7471f626a1ffe100848151c832dcc439
Reviewed-on: https://review.haiku-os.org/c/haiku/+/1853
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
2020-01-25 08:50:51 +00:00
Alexander von Gluck IV
1aab1c0e28 u-boot: cleanups on arm, load from more media
* Attempt to find haiku loader on mmc,nvme,virtio
* Fixes automatic boot under u-boot on qemu
* Remove boot.scr to ensure it's regenerated each build
* Remove obsolete HAIKU_BOARD_SDIMAGE_UBOOT_UENV

Change-Id: I60cd518ec69e408ddbd7ea17371f4f4f56fa7f7b
2020-01-20 16:26:37 -06:00
François Revol
494acd2185 m68k: update build to support MultiBootSubDirSetup
Change-Id: Idbbbb089286ad7d76f61993670a20d240bfe773c
2019-11-03 03:50:32 +01:00
Alexander von Gluck IV
f17664c8b1 arm/u-boot: Load dtb if specified, else fall back to u-boot built-in fdt
Change-Id: Icda4ac4c382770a1adcf593b6cf70f7575880f83
Reviewed-on: https://review.haiku-os.org/c/haiku/+/1894
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
2019-10-02 20:16:28 +00:00
Alexander von Gluck IV
bc71f97ed7 efi: Don't assume x86 and x86_64 build flags
Change-Id: If11a892665d08f61c46b5a6a5b4bf0453225c3ee
Reviewed-on: https://review.haiku-os.org/c/1533
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
2019-06-28 18:12:29 +00:00
Alexander von Gluck IV
75262df789 arm: Fix SD Image after haiku_loader changes
* haiku_loader.u-boot doesn't fit in fat32 like haiku_loader.ub
* Adjust when writing. Update u-boot scripts to expect new filename
* Shrink loader partition to 32M, add our filesystem to end

Change-Id: I62936526a7dea2c41e26a7c0f9e05a368622a6a3
2019-06-19 16:02:39 -05:00
Augustin Cavalier
750161f4c0 ArchitectureRules: Remove -Wcast-align from the default set.
It is incredibly noisy on GCC8, and not really that valuable
for us at present. Individual architectures (SPARC?) can turn
it on if desired.
2019-06-17 19:58:39 -04:00
Augustin Cavalier
c6b9a07f44 ArchitectureRules: Allow overriding HAIKU_LINK.
I am using this to use clang+lld for linking on ARM builds,
which seems to be more tolerant than binutils ld is, and
gets the build a bit farther for now.
2019-06-17 19:57:58 -04:00
Augustin Cavalier
b6b66df0c5 ArchitectureRules: Disable usage of -mapcs-frame on ARM.
It has been long since deprecated by GCC.
2019-06-17 19:57:22 -04:00
Augustin Cavalier
bac6edf06f ArchitectureRules: Clean up GCC >= 3 logic & disable -Werror for netfs. 2019-05-24 14:25:26 -04:00
Augustin Cavalier
fef13fb917 ArchitectureRules: Add -Wno-error=format-truncation for GCC 8.
It warns on snprintf's output "possibly" being truncated (e.g.,
two B_PATH_NAME_LENGTH chars being concatenated together) which may
be exactly the behavior the programmer wanted. So that's not very
helpful.
2019-05-23 19:50:51 -04:00
Augustin Cavalier
218a8c03cb Revert the Codec Kit.
All of Barrett's individual reverts have been squashed into this
one commit, save a few actual bugfixes.

Change-Id: Ib0a7d0a841d3ac40b1fca7372c58b7f9229bd1f0
2019-05-17 14:43:32 -04:00
Alexander von Gluck IV
d5ee99bbd7 riscv64: Ensure kernel is medany code model
Change-Id: I1b3386a072811bd068ab44190d16697dc7aad028
2019-04-09 20:25:04 -05:00
Alexander von Gluck IV
117af7ca90 build: Fix BOOT_PLATFORM to KERNEL_PLATFORM on rv64/arm64 2019-04-04 09:09:41 -05:00
Alexander von Gluck IV
c59cde3d69 riscv32: Drop any remaining mentions
* I added this early on, but to be honest, any interesting
  workstation class hardware would be riscv64.
* Since riscv32 is mostly embedded or low power, just drop.

Change-Id: Id36274c882c46e766268f2ab53eb1bd5f95227be
Reviewed-on: https://review.haiku-os.org/c/1352
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2019-04-04 13:23:32 +00:00
Augustin Cavalier
3e57265251 ArchitectureRules: -Wno-error=cast-align is only valid for GCC4+. 2019-03-03 16:52:11 -05:00
PulkoMandy
c5769c4f6b Make -Wcast-align only a warning
On x86 and x86_64, this warning is never emitted because it is perfectly
fine to do unaligned access. On sparc, such accesses are not supported
by the hardware and will generate a SIGBUS. This must be caught by a
trap handler, and the unaligned access performed there, slowly, using
byte by byte access.

However, making this a Werror is annoying because it will trigger
everytime one casts a byte pointer to something larger, even when
alignment is actually preserved. So, removing all such warnings would be
nearly impossible (for example, just for the mergesort function, there
is a whole GSoC project for it at FreeBSD).

Keep it as a warning for now. The warning can be silenced by using
BytePointer, if desired. We should also investigate where the SIGBUS
trap is triggered a lot and consider improving the alignment of data
where possible.

Change-Id: I6b90025e8c6d69ef1ccda3c10eee270ccc1ebd29
Reviewed-on: https://review.haiku-os.org/c/1103
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-03 20:56:20 +00:00
Adrien Destugues
5629675a32 sparc: add defines and minimum set of required files
Gets the stage0 bootstrap to run.
Imlementation is probably nonsense at this point.

Change-Id: I10876efbb54314b864c0ad951152757cdb2fd366
Reviewed-on: https://review.haiku-os.org/c/1061
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-02-23 16:30:50 +00:00
Augustin Cavalier
2fc0c84112 ArchitectureRules: Add -Wno-builtin-requires-header to Clang flags.
It warns when you try to use some standard library functions
without including the system headers, which we don't
care about as we are providing the system headers in the tree.
2019-02-21 14:04:05 -05:00
Augustin Cavalier
205beac382 ArchitectureRules: Enable more warnings. 2019-01-16 19:31:58 -05:00
Augustin Cavalier
f3441f9702 ArchitectureRules: Enable -Werror for the kernel. 2019-01-15 14:11:50 -05:00
Barrett17
df580f53de ArchitectureRules: Cleanup deprecated plugins defs 2018-12-25 11:36:01 +01:00
Augustin Cavalier
3d34cef833 build: Disable -Werror for bus.
Firewire errors out.
2018-11-25 12:44:43 -05:00
Augustin Cavalier
80d966a005 ArchitectureRules: Use the same warning flags for kernel as for userland.
This requires disabling some EnableWerror, as there are a lot of
sign-comparison warnings triggered in certain drivers that now
need to be fixed.
2018-11-24 17:49:20 -05:00
Augustin Cavalier
e5b11ae3c7 ArchitectureRules: Remove -Wno-unused-parameter.
I added this here so that one could set -Wextra in BuildConfig and
not be bombarded with useless warnings; but it seems that GCC2 chokes
on it instead of ignoring it. Oh well.
2018-11-23 19:58:22 -05:00
Augustin Cavalier
382fff8961 ArchitectureRules: Enable -Wuninitialized and -Wunused-but-set.
Also clean up the warning flags in general; they are now
more readable.
2018-11-23 19:14:49 -05:00
Augustin Cavalier
58b7901304 ArchitectureRules: Bootloader rules cleanup.
* Move -fPIC to ccBaseFlags, as we don't want it in ASFLAGS.
 * Remove -fPIC from BOOT_CCFLAGS, as we never want it in there.
 * Move EFI flags to the actual EFI setup location.
2018-11-23 00:06:23 -05:00
Augustin Cavalier
b54ed691ed ArchitectureRules: Remove duplicate GCC_BASE_FLAGS.
We append the full CC_FLAGS in KernelArchitectureSetup,
so these are redundant and not used anywhere else,
so scrap them completely.
2018-11-21 23:52:35 -05:00
Augustin Cavalier
a87c7773e8 EFI: Make the loader build under Clang.
Clang doesn't support -maccumulate-outgoing-args, -nostartfiles
is not needed in LDFLAGS (and lld doesn't know about it anyway),
and Clang uses .dynstr so we need to copy it also.
2018-11-21 22:02:06 -05:00
Alexander von Gluck IV
5bd0fbd13a build: Add riscv architecture
* I mean, qemu 3.0 supports it.
* Nobody get excited, we need all the triplets added to
  our gcc buildtools. clang 7.0 seems to be cool with riscv though.

Change-Id: I17728163e4f28a3c16cee482a253364724b06f3a
2018-11-04 13:47:50 -06:00
Alexander von Gluck IV
d787141342 efi: Only no-red-zone and accumulate on x86_64
* We're making the assumption about EFI here, but it's
  fine since those defines will just go unused on non-efi builds.
* Jam segfaults when we get two for's, a case, and an if deep.
  (adding an x86_64 check to efi section just below)

Change-Id: Id98e87b6570ddc7d9c2195cd05b0526e71771675
2018-10-28 19:35:14 -05:00