summaryrefslogtreecommitdiffhomepage
path: root/dev/boot/src
diff options
context:
space:
mode:
Diffstat (limited to 'dev/boot/src')
-rw-r--r--dev/boot/src/BootSupport.cc66
-rw-r--r--dev/boot/src/BootThread.cc6
-rw-r--r--dev/boot/src/HEL/AMD64/BootATA.cc13
-rw-r--r--dev/boot/src/HEL/ARM64/BootCB.S4
-rw-r--r--dev/boot/src/HEL/ARM64/BootPlatform.cc3
-rw-r--r--dev/boot/src/New+Delete.cc3
6 files changed, 78 insertions, 17 deletions
diff --git a/dev/boot/src/BootSupport.cc b/dev/boot/src/BootSupport.cc
index ce824e0f..4bf3e68a 100644
--- a/dev/boot/src/BootSupport.cc
+++ b/dev/boot/src/BootSupport.cc
@@ -18,6 +18,69 @@
/// @param dst destination pointer.
/// @param byte value to fill in.
/// @param len length of of src.
+EXTERN_C VoidPtr memnset(void* dst, int byte, long long unsigned int len,
+ long long unsigned int dst_size) {
+ if (!dst || len > dst_size) {
+ // For now, we return nullptr or an error status.
+ return nullptr;
+ }
+ unsigned char* p = (unsigned char*) dst;
+ unsigned char val = (unsigned char) byte;
+ for (size_t i = 0UL; i < len; ++i) {
+ p[i] = val;
+ }
+ return dst;
+}
+
+/// @brief memcpy definition in C++.
+/// @param dst destination pointer.
+/// @param src source pointer.
+/// @param len length of of src.
+EXTERN_C VoidPtr memncpy(void* dst, const void* src, long long unsigned int len,
+ long long unsigned int dst_size) {
+ if (!dst || !src || len > dst_size) {
+ // Similar to memset, this is a critical failure.
+ return nullptr;
+ }
+ unsigned char* d = (unsigned char*) dst;
+ const unsigned char* s = (const unsigned char*) src;
+ for (size_t i = 0UL; i < len; ++i) {
+ d[i] = s[i];
+ }
+ return dst;
+}
+
+/// @brief strlen definition in C++.
+EXTERN_C size_t strnlen(const char* whatToCheck, size_t max_len) {
+ size_t len = 0;
+ while (len < max_len && whatToCheck[len] != '\0') {
+ ++len;
+ }
+ return len;
+}
+
+/// @brief strcmp definition in C++.
+EXTERN_C int strncmp(const char* whatToCheck, const char* whatToCheckRight, size_t max_len) {
+ size_t i = 0;
+ while (i < max_len && whatToCheck[i] == whatToCheckRight[i]) {
+ if (whatToCheck[i] == '\0') return 0;
+ ++i;
+ }
+ if (i == max_len) {
+ return 0;
+ }
+ return (unsigned char) whatToCheck[i] - (unsigned char) whatToCheckRight[i];
+}
+
+/// @brief something specific to the Microsoft's ABI, When the stack grows too big.
+EXTERN_C void ___chkstk_ms(void) {}
+
+/// @note GCC expects them to be here.
+
+/// @brief memset definition in C++.
+/// @param dst destination pointer.
+/// @param byte value to fill in.
+/// @param len length of of src.
EXTERN_C VoidPtr memset(void* dst, int byte, long long unsigned int len) {
for (size_t i = 0UL; i < len; ++i) {
((int*) dst)[i] = byte;
@@ -62,7 +125,4 @@ EXTERN_C int strcmp(const char* whatToCheck, const char* whatToCheckRight) {
return len;
}
-/// @brief something specific to the Microsoft's ABI, When the stack grows too big.
-EXTERN_C void ___chkstk_ms(void) {}
-
#endif
diff --git a/dev/boot/src/BootThread.cc b/dev/boot/src/BootThread.cc
index c477d659..377e6e3a 100644
--- a/dev/boot/src/BootThread.cc
+++ b/dev/boot/src/BootThread.cc
@@ -105,6 +105,12 @@ BootThread::BootThread(VoidPtr blob) : fStartAddress(nullptr), fBlob(blob) {
writer.Write("BootZ: Executable entry address: ")
.Write((UIntPtr) fStartAddress)
.Write("\r");
+
+ /// @note .text region shall be marked as executable on ARM.
+
+#ifdef __NE_ARM64__
+
+#endif
} else if (StrCmp(sectionForBootZ, sect->Name) == 0) {
struct HANDOVER_INFORMATION_STUB {
UInt64 HandoverMagic;
diff --git a/dev/boot/src/HEL/AMD64/BootATA.cc b/dev/boot/src/HEL/AMD64/BootATA.cc
index 25810222..e5e0d8c2 100644
--- a/dev/boot/src/HEL/AMD64/BootATA.cc
+++ b/dev/boot/src/HEL/AMD64/BootATA.cc
@@ -88,8 +88,7 @@ ATAInit_Retry:
/// fetch serial info
/// model, speed, number of sectors...
- while (!(rt_in8(IO + ATA_REG_STATUS) & ATA_SR_DRQ))
- ;
+ while (!(rt_in8(IO + ATA_REG_STATUS) & ATA_SR_DRQ));
for (SizeT indexData = 0ul; indexData < kATADataLen; ++indexData) {
kATAData[indexData] = rt_in16(IO + ATA_REG_DATA);
@@ -115,15 +114,14 @@ Void boot_ata_read(UInt64 Lba, UInt16 IO, UInt8 Master, CharacterTypeASCII* Buf,
rt_out8(IO + ATA_REG_SEC_COUNT0, ((Size + SectorSz) / SectorSz));
- rt_out8(IO + ATA_REG_LBA0, (Lba) &0xFF);
+ rt_out8(IO + ATA_REG_LBA0, (Lba) & 0xFF);
rt_out8(IO + ATA_REG_LBA1, (Lba) >> 8);
rt_out8(IO + ATA_REG_LBA2, (Lba) >> 16);
rt_out8(IO + ATA_REG_LBA3, (Lba) >> 24);
rt_out8(IO + ATA_REG_COMMAND, ATA_CMD_READ_PIO);
- while (!(rt_in8(IO + ATA_REG_STATUS) & ATA_SR_DRQ))
- ;
+ while (!(rt_in8(IO + ATA_REG_STATUS) & ATA_SR_DRQ));
for (SizeT IndexOff = 0; IndexOff < Size; IndexOff += 2) {
boot_ata_wait_io(IO);
@@ -149,15 +147,14 @@ Void boot_ata_write(UInt64 Lba, UInt16 IO, UInt8 Master, CharacterTypeASCII* Buf
rt_out8(IO + ATA_REG_SEC_COUNT0, ((Size + (SectorSz)) / SectorSz));
- rt_out8(IO + ATA_REG_LBA0, (Lba) &0xFF);
+ rt_out8(IO + ATA_REG_LBA0, (Lba) & 0xFF);
rt_out8(IO + ATA_REG_LBA1, (Lba) >> 8);
rt_out8(IO + ATA_REG_LBA2, (Lba) >> 16);
rt_out8(IO + ATA_REG_LBA3, (Lba) >> 24);
rt_out8(IO + ATA_REG_COMMAND, ATA_CMD_WRITE_PIO);
- while (!(rt_in8(IO + ATA_REG_STATUS) & ATA_SR_DRQ))
- ;
+ while (!(rt_in8(IO + ATA_REG_STATUS) & ATA_SR_DRQ));
for (SizeT IndexOff = 0; IndexOff < Size; IndexOff += 2) {
boot_ata_wait_io(IO);
diff --git a/dev/boot/src/HEL/ARM64/BootCB.S b/dev/boot/src/HEL/ARM64/BootCB.S
index 3b0e1737..d52c1dcf 100644
--- a/dev/boot/src/HEL/ARM64/BootCB.S
+++ b/dev/boot/src/HEL/ARM64/BootCB.S
@@ -4,7 +4,7 @@
------------------------------------------- */
-#ifdef __NE_COREBOOT__
+#ifdef __NE_NEBOOT__
.section .boot_hdr
.align 4
@@ -37,4 +37,4 @@ bootloader_start:
bl bootloader_main
ret
-#endif // __NE_COREBOOT__ \ No newline at end of file
+#endif // __NE_NEBOOT__ \ No newline at end of file
diff --git a/dev/boot/src/HEL/ARM64/BootPlatform.cc b/dev/boot/src/HEL/ARM64/BootPlatform.cc
index 9dd03afe..683245fb 100644
--- a/dev/boot/src/HEL/ARM64/BootPlatform.cc
+++ b/dev/boot/src/HEL/ARM64/BootPlatform.cc
@@ -13,8 +13,7 @@
using namespace Boot;
EXTERN_C void rt_halt() {
- while (Yes)
- ;
+ while (Yes);
}
EXTERN_C void rt_cli() {}
diff --git a/dev/boot/src/New+Delete.cc b/dev/boot/src/New+Delete.cc
index d4d5dfed..f7ad2898 100644
--- a/dev/boot/src/New+Delete.cc
+++ b/dev/boot/src/New+Delete.cc
@@ -17,8 +17,7 @@
void* operator new(size_t sz) {
void* buf = nullptr;
- while (BS->AllocatePool(EfiMemoryType::EfiLoaderData, sz, &buf) != kEfiOk)
- ;
+ while (BS->AllocatePool(EfiMemoryType::EfiLoaderData, sz, &buf) != kEfiOk);
return buf;
}