From patchwork Tue Sep 8 11:33:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Le Moal X-Patchwork-Id: 1359679 Return-Path: X-Original-To: incoming-buildroot@patchwork.ozlabs.org Delivered-To: patchwork-incoming-buildroot@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=busybox.net (client-ip=140.211.166.137; helo=fraxinus.osuosl.org; envelope-from=buildroot-bounces@busybox.net; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=jqWJAu6m; dkim-atps=neutral Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Bm31y2nP6z9sSP for ; Tue, 8 Sep 2020 21:33:42 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 25B5285ABB; Tue, 8 Sep 2020 11:33:40 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id DQywgSM8EVT4; Tue, 8 Sep 2020 11:33:38 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by fraxinus.osuosl.org (Postfix) with ESMTP id 124EF85775; Tue, 8 Sep 2020 11:33:38 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by ash.osuosl.org (Postfix) with ESMTP id DC6691BF82B for ; Tue, 8 Sep 2020 11:33:36 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id D45B886887 for ; Tue, 8 Sep 2020 11:33:36 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5dgVbomn3-xu for ; Tue, 8 Sep 2020 11:33:34 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from esa5.hgst.iphmx.com (esa5.hgst.iphmx.com [216.71.153.144]) by whitealder.osuosl.org (Postfix) with ESMTPS id E22248687B for ; Tue, 8 Sep 2020 11:33:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1599564815; x=1631100815; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=IL3bViK0Rer5W2ia9aBL1A5nAX4yMBnrUpE7S1VyxN4=; b=jqWJAu6mKXIJoSZV4ZUNiFuKaUa/iEtwEAkbztlRApbnLvBw2wPANMPQ k1IXoRIb5aKhitwzv8EL33dqP+6KseSR9/HR8MQ9XX6Z1dA5TlxNyycky kf8FJ7mAUL17rr9yyavZfCU1Qr+Brw50PDY6C869CwCiz6dFA7HPFIbHn +Za3nhn4AEAqeHbNCzYMMdB1765AL6VJO7bGrDACjzQI+pvUv9LKZZsPs dkq8B7uT1szaFJMmrAax8hLo4YknZADRw9WLvzxV+v4ykT5rwmtMlF9zh /rutT6RsYzZcY1S0laT35NtnhZEwXpKWdqrcNnvGa8sHrojfF9sEnIF9d w==; IronPort-SDR: 2jxXXR/u6xUQ+J8WT9tLQU7aqy/5Dtg4JoC4aqEiU2Pbpwgx4rbI0jrRJUTarncex4OJL04DbF 7bK/hBNmIfNZpEQ4pI5q2B+dCqSSyBfC/6DR8zX5DnFFovoFi1TKOLniPgMfB2D1ojF/5acHN+ MPoJoUGa3a7vpu9LIW/2uVdWgjcmIbxSdNHv/nU4QVKdahsG5x2B+we5ChZhO/RlUqwWfCQPrw 2+Y7AxiQ6RPIXnLf/soz9SQRbqgyxB9teNj+PwkwVbMk9dhxplptuxVSZy1SZuIsgGOQ7R8l3r BcQ= X-IronPort-AV: E=Sophos;i="5.76,405,1592841600"; d="scan'208";a="146809708" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 08 Sep 2020 19:33:34 +0800 IronPort-SDR: wvueSBD/LOP1gvEUyDNwsFNkozXzhcS9UeIfKU7d1XCheO1yECU5vg8MYFbCDPIA1SlS9oZMLD 84VYMa1Tdp3A== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Sep 2020 04:20:00 -0700 IronPort-SDR: fez4HBjscnMqf3fv09rwA62+KeRHVmFN2ffve+ichHnXwRVTWSG8KRdScdxLe869gzzjgGJfDb VB/m7zUauKlQ== WDCIronportException: Internal Received: from cnf002038.ad.shared (HELO localhost.hgst.com) ([10.84.70.94]) by uls-op-cesaip02.wdc.com with ESMTP; 08 Sep 2020 04:33:32 -0700 From: Damien Le Moal To: buildroot@buildroot.org Date: Tue, 8 Sep 2020 20:33:21 +0900 Message-Id: <20200908113324.1022230-4-damien.lemoal@wdc.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200908113324.1022230-1-damien.lemoal@wdc.com> References: <20200908113324.1022230-1-damien.lemoal@wdc.com> MIME-Version: 1.0 Subject: [Buildroot] [PATCH v2 3/6] package/elf2flt: add RISC-V support X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Carlos Eduardo , Alistair Francis , Drew Fustini , Thomas Petazzoni , Romain Naour , Christoph Hellwig , Thomas De Schampheleire Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" From: Christoph Hellwig Enable selecting elf2flt for RISC-V no MMU builds ad add support for it. Signed-off-by: Christoph Hellwig Signed-off-by: Damien Le Moal --- .../0002-elf2flt-add-riscv-support.patch | 302 ++++++++++++++++++ package/elf2flt/Config.in.host | 2 +- 2 files changed, 303 insertions(+), 1 deletion(-) create mode 100644 package/elf2flt/0002-elf2flt-add-riscv-support.patch diff --git a/package/elf2flt/0002-elf2flt-add-riscv-support.patch b/package/elf2flt/0002-elf2flt-add-riscv-support.patch new file mode 100644 index 0000000000..2f3ce5ac69 --- /dev/null +++ b/package/elf2flt/0002-elf2flt-add-riscv-support.patch @@ -0,0 +1,302 @@ +From 9a1c84590f31897e681a8142481c73456a7eedcf Mon Sep 17 00:00:00 2001 +From: Christoph Hellwig +Date: Mon, 10 Jun 2019 09:21:57 +0200 +Subject: elf2flt: add riscv support + +We need a new linker script - riscv has a global_pointer and is +very picky about some section ordering. + +Signed-off-by: Christoph Hellwig +--- + Makefile.in | 4 +- + elf2flt.c | 15 ++- + riscv64-elf2flt.ld | 222 +++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 239 insertions(+), 2 deletions(-) + create mode 100644 riscv64-elf2flt.ld + +diff --git a/Makefile.in b/Makefile.in +index 52b3347..3b0b604 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -43,7 +43,9 @@ endif + LDFILE= elf2flt.ld + ifeq ($(strip $(CPU)),e1) + SRC_LDFILE= $(srcdir)/$(CPU)-elf2flt.ld +-else ++else ifeq ($(strip $(CPU)),riscv64) ++SRC_LDFILE= riscv64-elf2flt.ld ++else + SRC_LDFILE= elf2flt.ld + endif + +diff --git a/elf2flt.c b/elf2flt.c +index 67f720a..81c9456 100644 +--- a/elf2flt.c ++++ b/elf2flt.c +@@ -80,6 +80,8 @@ const char *elf2flt_progname; + #include + #elif defined(TARGET_xtensa) + #include ++#elif defined(TARGET_riscv64) ++#include + #endif + + #if defined(__MINGW32__) +@@ -122,6 +124,8 @@ const char *elf2flt_progname; + #define ARCH "nios2" + #elif defined(TARGET_xtensa) + #define ARCH "xtensa" ++#elif defined(TARGET_riscv64) ++#define ARCH "riscv64" + #else + #error "Don't know how to support your CPU architecture??" + #endif +@@ -507,7 +511,16 @@ output_relocs ( + them. */ + continue; + } +-#endif /* USE_V850_RELOCS */ ++#endif /* TARGET_v850 */ ++ ++#if defined(TARGET_riscv64) ++ switch ((*p)->howto->type) { ++ case R_RISCV_ADD32: ++ case R_RISCV_SUB32: ++ case R_RISCV_32_PCREL: ++ continue; ++ } ++#endif + + q = *p; + if (q->sym_ptr_ptr && *q->sym_ptr_ptr) { +diff --git a/riscv64-elf2flt.ld b/riscv64-elf2flt.ld +new file mode 100644 +index 0000000..89ac2e8 +--- /dev/null ++++ b/riscv64-elf2flt.ld +@@ -0,0 +1,222 @@ ++ ++ENTRY (_start) ++ ++SECTIONS { ++ ++ .text 0x0 : { ++ . = . + 4; ++ . = ALIGN(0x4) ; ++ _stext = . ; ++ *(.literal .text) ++ *(.literal.* .text.*) ++ *(.gnu.warning) ++ *(.stub) ++ *(.gnu.linkonce.literal.*) ++ *(.gnu.linkonce.t*) ++ *(.glue_7t) ++ *(.glue_7) ++ *(.jcr) ++ *(.init.literal) ++ KEEP (*(.init)) ++ *(.fini.literal) ++ KEEP (*(.fini)) ++ ++W_RODAT *(.rodata) ++W_RODAT *(.rodata1) ++W_RODAT *(.rodata.*) ++W_RODAT *(.gnu.linkonce.r*) ++ ++ /* .ARM.extab name sections containing exception unwinding information */ ++ *(.ARM.extab* .gnu.linkonce.armextab.*) ++ /* This is special code area at the end of the normal ++ text section. It contains a small lookup table at ++ the start followed by the code pointed to by entries ++ in the lookup table. */ ++ . = ALIGN (4) ; ++ PROVIDE(__ctbp = .); ++ *(.call_table_data) ++ *(.call_table_text) ++ } ++ ++ /* .ARM.exidx name sections containing index entries for section unwinding */ ++ /* .ARM.exidx is sorted, so has to go in its own output section. */ ++ __exidx_start = .; ++ .ARM.exidx : ++ { ++ *(.ARM.exidx* .gnu.linkonce.armexidx.*) ++ } ++ __exidx_end = .; ++ ++ . = ALIGN(0x20) ; ++ _etext = . ; ++ ++ .data : { ++ . = ALIGN(0x4) ; ++ _sdata = . ; ++ __data_start = . ; ++ data_start = . ; ++ *(.got) ++ *(.igot) ++ *(.got.plt) ++ *(.igot.plt) ++ FILL(0) ; ++ . = ALIGN(0x20) ; ++ LONG(-1) ++ . = ALIGN(0x20) ; ++ ++ __global_pointer$ = . + 0x800; ++ ++ *(.data) ++ *(.data1) ++ *(.data.*) ++ *(.gnu.linkonce.d*) ++R_RODAT *(.rodata) ++R_RODAT *(.rodata1) ++R_RODAT *(.rodata.*) ++R_RODAT *(.gnu.linkonce.r*) ++ ++ /* Microblaze has .sdata and .sbss (small bss). They must ++ be contiguous, so please don't move any of this. JW */ ++ _ssrw = . ; ++ *(.srodata) ++ *(.srodata.*) ++ *(.sdata) ++ *(.sdata.*) ++ *(.sbss) /* Don't move this! */ ++ *(.gnu.linkonce.sb*) ++ _essrw = . ; ++ ++ _ssrw_size = _essrw - _ssrw; ++ PROVIDE(_SDA_BASE_ = _ssrw + (_ssrw_size / 2)); ++ ++ *(.gnu.linkonce.s.*) ++ *(__libc_atexit) ++ *(__libc_subinit) ++ *(__libc_subfreeres) ++ ++ /* microblaze-specific read-only small data area ++ and associated locating symbols */ ++ _ssro = . ; ++ *(.sdata2) ++ _essro = . ; ++ _ssro_size = _essro - _ssro; ++ PROVIDE(_SDA2_BASE_ = _ssro + (_ssro_size / 2)); ++ ++ . = ALIGN(4) ; ++TOR: __CTOR_LIST__ = .; ++TOR: LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) ++SINGLE_LINK: /* gcc uses crtbegin.o to find the start of ++SINGLE_LINK: the constructors, so we make sure it is ++SINGLE_LINK: first. Because this is a wildcard, it ++SINGLE_LINK: doesn't matter if the user does not ++SINGLE_LINK: actually link against crtbegin.o; the ++SINGLE_LINK: linker won't look for a file to match a ++SINGLE_LINK: wildcard. The wildcard also means that it ++SINGLE_LINK: doesn't matter which directory crtbegin.o ++SINGLE_LINK: is in. */ ++SINGLE_LINK: KEEP (*crtbegin*.o(.ctors)) ++SINGLE_LINK: /* We don't want to include the .ctor section from ++SINGLE_LINK: from the crtend.o file until after the sorted ctors. ++SINGLE_LINK: The .ctor section from the crtend file contains the ++SINGLE_LINK: end of ctors marker and it must be last */ ++SINGLE_LINK: KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) ++SINGLE_LINK: KEEP (*(SORT(.ctors.*))) ++ KEEP (*(.ctors)) ++TOR: LONG(0) ++TOR: __CTOR_END__ = .; ++TOR: __DTOR_LIST__ = .; ++TOR: LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) ++SINGLE_LINK: KEEP (*crtbegin*.o(.dtors)) ++SINGLE_LINK: KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) ++SINGLE_LINK: KEEP (*(SORT(.dtors.*))) ++ KEEP (*(.dtors)) ++TOR: LONG(0) ++TOR: __DTOR_END__ = .; ++ ++ PROVIDE (__preinit_array_start = .); ++ KEEP (*(.preinit_array)) ++ PROVIDE (__preinit_array_end = .); ++ ++ PROVIDE (__init_array_start = .); ++ KEEP (*(SORT(.init_array.*))) ++ KEEP (*(.init_array)) ++ PROVIDE (__init_array_end = .); ++ ++ PROVIDE (__fini_array_start = .); ++ KEEP (*(.fini_array)) ++ KEEP (*(SORT(.fini_array.*))) ++ PROVIDE (__fini_array_end = .); ++ } ++ ++ .note.ABI-tag : { *(.note.ABI-tag) } ++ .eh_frame_hdr : { *(.eh_frame_hdr) } ++ .eh_frame : { KEEP(*(.eh_frame)) } ++ .gcc_except_table : { ++ KEEP(*(.gcc_except_table)) ++ KEEP(*(.gcc_except_table.*)) ++ } ++ ++ . = ALIGN(0x10) ; ++ _edata = . ; ++ ++ .bss : { ++ . = ALIGN(0x4) ; ++ _sbss = ALIGN(0x4) ; ++ __bss_start = . ; ++ *(.dynsbss) ++ *(.sbss) ++ *(.sbss.*) ++ *(.scommon) ++ *(.dynbss) ++ *(.bss) ++ *(.bss.*) ++ *(.bss*) ++ *(.gnu.linkonce.b*) ++ *(COMMON) ++ . = ALIGN(0x10) ; ++ _ebss = . ; ++ _end = . ; ++ end = . ; ++ } ++ ++ .stack : { ++ . = ALIGN(0x4); ++ _stack_start = .; ++ } ++ ++ .junk 0 : { *(.rel*) *(.rela*) } ++ /DISCARD/ : { *(.note.GNU-stack) } ++ /* Stabs debugging sections. */ ++ .stab 0 : { *(.stab) } ++ .stabstr 0 : { *(.stabstr) } ++ .stab.excl 0 : { *(.stab.excl) } ++ .stab.exclstr 0 : { *(.stab.exclstr) } ++ .stab.index 0 : { *(.stab.index) } ++ .stab.indexstr 0 : { *(.stab.indexstr) } ++ .comment 0 : { *(.comment) } ++ /* DWARF debug sections. ++ Symbols in the DWARF debugging sections are relative to the beginning ++ of the section so we begin them at 0. */ ++ /* DWARF 1 */ ++ .debug 0 : { *(.debug) } ++ .line 0 : { *(.line) } ++ /* GNU DWARF 1 extensions */ ++ .debug_srcinfo 0 : { *(.debug_srcinfo) } ++ .debug_sfnames 0 : { *(.debug_sfnames) } ++ /* DWARF 1.1 and DWARF 2 */ ++ .debug_aranges 0 : { *(.debug_aranges) } ++ .debug_pubnames 0 : { *(.debug_pubnames) } ++ /* DWARF 2 */ ++ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } ++ .debug_abbrev 0 : { *(.debug_abbrev) } ++ .debug_line 0 : { *(.debug_line) } ++ .debug_frame 0 : { *(.debug_frame) } ++ .debug_str 0 : { *(.debug_str) } ++ .debug_loc 0 : { *(.debug_loc) } ++ .debug_macinfo 0 : { *(.debug_macinfo) } ++ /* SGI/MIPS DWARF 2 extensions */ ++ .debug_weaknames 0 : { *(.debug_weaknames) } ++ .debug_funcnames 0 : { *(.debug_funcnames) } ++ .debug_typenames 0 : { *(.debug_typenames) } ++ .debug_varnames 0 : { *(.debug_varnames) } ++} +-- +2.20.1 + diff --git a/package/elf2flt/Config.in.host b/package/elf2flt/Config.in.host index d6685a7ff6..2010526e04 100644 --- a/package/elf2flt/Config.in.host +++ b/package/elf2flt/Config.in.host @@ -1,6 +1,6 @@ config BR2_PACKAGE_HOST_ELF2FLT bool "Enable elf2flt support?" - depends on BR2_arm || BR2_sh || BR2_sparc || BR2_xtensa + depends on BR2_arm || BR2_sh || BR2_sparc || BR2_xtensa || BR2_riscv depends on !BR2_USE_MMU help uCLinux uses a Binary Flat format commonly known as BFLT. It