[haiku-commits] Change in haiku[master]: Split bss and data segments in EFI loader.

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 4 Feb 2020 19:22:53 +0000

From Adrien Destugues <pulkomandy@xxxxxxxxx>:

Adrien Destugues has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/2199 ;)


Change subject: Split bss and data segments in EFI loader.
......................................................................

Split bss and data segments in EFI loader.

We don't need the bss to be stored in the executable, have it separate
and clear it during startup.
---
M src/system/boot/platform/efi/start.cpp
M src/system/ldscripts/x86_64/boot_loader_efi.ld
2 files changed, 15 insertions(+), 6 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/99/2199/1

diff --git a/src/system/boot/platform/efi/start.cpp 
b/src/system/boot/platform/efi/start.cpp
index dc48a55..8733186 100644
--- a/src/system/boot/platform/efi/start.cpp
+++ b/src/system/boot/platform/efi/start.cpp
@@ -32,6 +32,8 @@

 extern void (*__ctor_list)(void);
 extern void (*__ctor_end)(void);
+extern char __bss_start;
+extern char __bss_end;


 const efi_system_table         *kSystemTable;
@@ -256,6 +258,7 @@
        stage2_args args;

        memset(&args, 0, sizeof(stage2_args));
+       memset(&__bss_start, 0, &__bss_end - &__bss_start);

        kImage = image;
        kSystemTable = systemTable;
diff --git a/src/system/ldscripts/x86_64/boot_loader_efi.ld 
b/src/system/ldscripts/x86_64/boot_loader_efi.ld
index 88f4b25..d3cee3d 100644
--- a/src/system/ldscripts/x86_64/boot_loader_efi.ld
+++ b/src/system/ldscripts/x86_64/boot_loader_efi.ld
@@ -41,19 +41,25 @@
    *(.got)
    *(.data*)
    *(.sdata)
-   /* the EFI loader doesn't seem to like a .bss section, so we stick
-      it all into .data: */
+  }
+  .note.gnu.build-id : { *(.note.gnu.build-id) }
+
+  _edata = .;
+  _data_size = . - _etext;
+
+  .bss:
+  {
+   __bss_start = . ;
    *(.sbss)
    *(.scommon)
    *(.dynbss)
    *(.bss)
    *(COMMON)
    *(.rel.local)
-  }
-  .note.gnu.build-id : { *(.note.gnu.build-id) }

-  _edata = .;
-  _data_size = . - _etext;
+   __bss_end = . ;
+  }
+
   . = ALIGN(4096);
   .dynamic  : { *(.dynamic) }
   . = ALIGN(4096);

--
To view, visit https://review.haiku-os.org/c/haiku/+/2199
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I0f2f113b250e1cc1d29563977b022053aee81002
Gerrit-Change-Number: 2199
Gerrit-PatchSet: 1
Gerrit-Owner: Adrien Destugues <pulkomandy@xxxxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: Split bss and data segments in EFI loader. - Gerrit