Add ld.so linker scripts on the remaining platforms.
authormiod <miod@openbsd.org>
Wed, 11 Jan 2023 16:31:46 +0000 (16:31 +0000)
committermiod <miod@openbsd.org>
Wed, 11 Jan 2023 16:31:46 +0000 (16:31 +0000)
libexec/ld.so/m88k/Makefile.inc
libexec/ld.so/m88k/ld.script [new file with mode: 0644]
libexec/ld.so/sh/Makefile.inc
libexec/ld.so/sh/ld.script [new file with mode: 0644]

index e9aea23..16d92da 100644 (file)
@@ -1,6 +1,8 @@
-#      $OpenBSD: Makefile.inc,v 1.3 2019/10/20 03:44:49 guenther Exp $
+#      $OpenBSD: Makefile.inc,v 1.4 2023/01/11 16:31:46 miod Exp $
 
 CFLAGS += -fpic
 SRCS+= memcpy.c
 
+LD_SCRIPT = ${.CURDIR}/${MACHINE_CPU}/ld.script
+
 RELATIVE_RELOC=R_88K_BBASED_32
diff --git a/libexec/ld.so/m88k/ld.script b/libexec/ld.so/m88k/ld.script
new file mode 100644 (file)
index 0000000..84c3015
--- /dev/null
@@ -0,0 +1,65 @@
+PHDRS
+{
+  rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
+  text    PT_LOAD;
+  btext   PT_LOAD FLAGS (0x08000005);
+  data    PT_LOAD;
+  random  PT_OPENBSD_RANDOMIZE;
+  relro   PT_GNU_RELRO;
+  dynamic PT_DYNAMIC;
+  note    PT_NOTE;
+}
+
+SECTIONS
+{
+  . = 0 + SIZEOF_HEADERS;
+  /* RODATA */
+  .gnu.hash : { *(.gnu.hash) } :rodata
+  .dynsym : { *(.dynsym) } :rodata
+  .dynstr : { *(.dynstr) } :rodata
+  .rodata : { *(.rodata .rodata.*) } :rodata
+  .eh_frame : { *(.eh_frame) } :rodata
+
+  /* TEXT */
+  . = ALIGN(0x1000);
+  .boot.text :
+  {
+    boot_text_start = .;
+    . = ALIGN(0x1000);
+    *(.boot.text)
+    boot_text_end = .;
+  } :btext =0xf4005800
+  . = ALIGN(0x1000);
+  .text : { *(.text .text.*) } :text =0xf4005800
+
+  /* RELRO DATA */
+  . = DATA_SEGMENT_ALIGN (0x10000, 0x1000);
+  .openbsd.randomdata : { *(.openbsd.randomdata .openbsd.randomdata.*) }
+    :data :relro :random
+  .data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
+  .dynamic : { *(.dynamic) } :data :relro :dynamic
+  .got : { *(.got.plt) *(.got) } :data :relro
+  . = DATA_SEGMENT_RELRO_END (0, .);
+
+  /* BOOTDATA */
+  . = ALIGN(0x1000);
+  boot_data_start = .;
+  .rela.dyn :
+    {
+      *(.rela.text .rela.text.*)
+      *(.rela.rodata .rela.rodata.*)
+      *(.rela.data .rela.data.*)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.*)
+    } :data
+  .rela.plt : { *(.rela.plt) } :data
+  .note : { *(.note.openbsd.*) } :data :note
+  .hash : { *(.hash) } :data
+  .boot.data : { *(.boot.data .boot.data.*) } :data
+
+  /* DATA */
+  . = ALIGN(0x1000);
+  .data : { *(.data .data.*) } :data
+  .bss : { *(.dynbss) *(.bss .bss.*) *(COMMON) } :data
+  . = DATA_SEGMENT_END (.);
+}
index a1fb482..1a7f913 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: Makefile.inc,v 1.9 2019/10/20 03:44:49 guenther Exp $
+#      $OpenBSD: Makefile.inc,v 1.10 2023/01/11 16:31:46 miod Exp $
 
 CFLAGS += -fpic
 CFLAGS+=-m4-nofpu
@@ -11,4 +11,6 @@ ${MDOBJ}:
        ar x `$(CC) -print-libgcc-file-name` ${MDOBJ}
 OBJS+=${MDOBJ}
 
+LD_SCRIPT = ${.CURDIR}/${MACHINE_CPU}/ld.script
+
 RELATIVE_RELOC=R_SH_RELATIVE
diff --git a/libexec/ld.so/sh/ld.script b/libexec/ld.so/sh/ld.script
new file mode 100644 (file)
index 0000000..1b84e5b
--- /dev/null
@@ -0,0 +1,65 @@
+PHDRS
+{
+       rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
+       text    PT_LOAD;
+       btext   PT_LOAD FLAGS (0x08000005);
+       data    PT_LOAD;
+       random  PT_OPENBSD_RANDOMIZE;
+       relro   PT_GNU_RELRO;
+       dynamic PT_DYNAMIC;
+       note    PT_NOTE;
+}
+
+SECTIONS
+{
+  /* RODATA */
+  . = 0 + SIZEOF_HEADERS;
+  .gnu.hash       : { *(.gnu.hash) } :rodata
+  .dynsym         : { *(.dynsym) } :rodata
+  .dynstr         : { *(.dynstr) } :rodata
+  .rodata         : { *(.rodata .rodata.*) } :rodata
+  .eh_frame       : { *(.eh_frame) } :rodata
+
+  /* TEXT */
+  . = ALIGN (0x1000);
+  .text           : { *(.text .text.*) } :text =0xc3c3c3c3
+  . = ALIGN (0x1000);
+  .boot.text      :
+  {
+    boot_text_start = .;
+    *(.boot.text)
+    boot_text_end = .;
+  } :btext
+
+  /* RELRO DATA */
+  . = DATA_SEGMENT_ALIGN (0x10000, 0x1000);
+  .openbsd.randomdata     : { *(.openbsd.randomdata .openbsd.randomdata.*) }
+    :data :relro :random
+  .data.rel.ro : { *(.data.rel.ro.local*) *(.data.rel.ro*) } :data :relro
+  .dynamic        : { *(.dynamic) } :data :relro :dynamic
+  .got            : { *(.got.plt) *(.got) } :data :relro
+  . = DATA_SEGMENT_RELRO_END (0, .);
+
+  /* BOOTDATA */
+  . = ALIGN (0x1000);
+  boot_data_start = .;
+  .rela.dyn       :
+    {
+      *(.rela.text .rela.text.*)
+      *(.rela.rodata .rela.rodata.*)
+      *(.rela.data .rela.data.*)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.*)
+    } :data
+  .rela.plt       : { *(.rela.plt) } :data
+  .hash           : { *(.hash) } :data
+  .note           : { *(.note.openbsd.* ) } :data :note
+  .boot.data      : { *(.boot.data .boot.data.*) } :data
+  boot_data_end = .;
+
+  /* DATA */
+  . = ALIGN (0x1000);
+  .data           : { *(.data .data.*) } :data
+  .bss            : { *(.dynbss) *(.bss .bss.*) *(COMMON) } :data
+  . = DATA_SEGMENT_END (.);
+}