From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id AC8AD385840C for ; Sat, 12 Mar 2022 07:46:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org AC8AD385840C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn Received: from 5.5.5 (unknown [10.2.5.5]) by mail.loongson.cn (Coremail) with SMTP id AQAAf9AxeszKTyxi_hEIAA--.4126S2; Sat, 12 Mar 2022 15:46:22 +0800 (CST) From: liuzhensong To: binutils@sourceware.org Cc: liuzhensong Subject: [PATCH] binutils: Add elf header eflag option in objcopy. Date: Sat, 12 Mar 2022 15:46:16 +0800 Message-Id: <20220312074616.3896697-1-liuzhensong@loongson.cn> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: AQAAf9AxeszKTyxi_hEIAA--.4126S2 X-Coremail-Antispam: 1UD129KBjvJXoWxJFWDGw13try8Xw1UKr1Dtrb_yoW5GF48pa 18tF93uF1rXFy7AFsxJF15WFWfurZ7XFWjyrnxJw1kAas3Zr95K3WrKa43Ka1jkF4UZa15 Jay2vFy7ua17Zr7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkS14x267AKxVWUJVW8JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26r1I6r4UM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4j 6F4UM28EF7xvwVC2z280aVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Gr 1j6F4UJwAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv 7VC0I7IYx2IY67AKxVWUAVWUtwAv7VC2z280aVAFwI0_Gr0_Cr1lOx8S6xCaFVCjc4AY6r 1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwCY02Avz4vE-syl 42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJV WUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r1Y6r17MIIYrxkI7VAK I48JMIIF0xvE2Ix0cI8IcVAFwI0_JFI_Gr1lIxAIcVC0I7IYx2IY6xkF7I0E14v26r4j6F 4UMIIF0xvE42xK8VAvwI8IcIk0rVW8JVW3JwCI42IY6I8E87Iv67AKxVW8JVWxJwCI42IY 6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjfUna9aUUUUU X-CM-SenderInfo: holx6xphqv003j6o00pqjv00gofq/ X-Spam-Status: No, score=-13.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 12 Mar 2022 07:46:27 -0000 Specify flags when copying binary to elf file. usage: objcopy -I binary --alt-elf-eflags=val bin elf binutils/ * objcopy.c --- binutils/objcopy.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/binutils/objcopy.c b/binutils/objcopy.c index d53aa5c6000..b03012210b0 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -303,6 +303,10 @@ enum long_section_name_handling This is also the only behaviour for 'strip'. */ static enum long_section_name_handling long_section_names = KEEP; +/* Use alternative elf header e_flags? */ +static bool alt_elf_eflags_set = false; +static unsigned int alt_elf_eflags = 0; + /* 150 isn't special; it's just an arbitrary non-ASCII char value. */ enum command_line_switch { @@ -310,6 +314,7 @@ enum command_line_switch OPTION_ADD_GNU_DEBUGLINK, OPTION_ADD_SYMBOL, OPTION_ALT_MACH_CODE, + OPTION_ALT_ELF_EFLAGS, OPTION_CHANGE_ADDRESSES, OPTION_CHANGE_LEADING_CHAR, OPTION_CHANGE_SECTION_ADDRESS, @@ -427,6 +432,7 @@ static struct option copy_options[] = {"adjust-vma", required_argument, 0, OPTION_CHANGE_ADDRESSES}, {"adjust-warnings", no_argument, 0, OPTION_CHANGE_WARNINGS}, {"alt-machine-code", required_argument, 0, OPTION_ALT_MACH_CODE}, + {"alt-elf-eflags", required_argument, 0, OPTION_ALT_ELF_EFLAGS}, {"binary-architecture", required_argument, 0, 'B'}, {"byte", required_argument, 0, 'b'}, {"change-addresses", required_argument, 0, OPTION_CHANGE_ADDRESSES}, @@ -660,6 +666,7 @@ copy_usage (FILE *stream, int exit_status) --weaken-symbols -W for all symbols listed in \n\ --add-symbol =[
:][,] Add a symbol\n\ --alt-machine-code Use the target's 'th alternative machine\n\ + --alt-elf-eflags= Use the alternative elf header e_flags\n\ --writable-text Mark the output text as writable\n\ --readonly-text Make the output text write protected\n\ --pure Mark the output file as demand paged\n\ @@ -3484,6 +3491,11 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch) } } + if (alt_elf_eflags_set) + { + elf_elfheader (obfd)->e_flags = alt_elf_eflags; + } + return true; } @@ -5851,6 +5863,11 @@ copy_main (int argc, char *argv[]) fatal (_("verilog data width must be at least 1 byte")); break; + case OPTION_ALT_ELF_EFLAGS: + alt_elf_eflags_set = true; + alt_elf_eflags = parse_vma (optarg, "--alt-elf-eflags"); + break; + case 0: /* We've been given a long option. */ break; -- 2.31.1