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 086843858C53 for ; Thu, 14 Apr 2022 11:29:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 086843858C53 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 AQAAf9DxjxCEBVhi+xEjAA--.14788S2; Thu, 14 Apr 2022 19:29:12 +0800 (CST) From: liuzhensong To: binutils@sourceware.org Cc: liuzhensong Subject: [PATCH] objcopy: Add elf header e_flags option in objcopy. Date: Thu, 14 Apr 2022 19:29:06 +0800 Message-Id: <20220414112906.2684102-1-liuzhensong@loongson.cn> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: AQAAf9DxjxCEBVhi+xEjAA--.14788S2 X-Coremail-Antispam: 1UD129KBjvJXoWxWrW5tFWkWF4xGr17Ar47urg_yoW5Xr4Dpa 18JF9xWF1rJFy7AFsxJF15WFWfurWkWFWjyrnxGw1DAas3Zr95Gw1rGasIga1qkFWUZa15 Ja42va47ua17Zr7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkI14x267AKxVWUJVW8JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26ryj6F1UM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26F4j 6r4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oV Cq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0 I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r 4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwCY02Avz4vE-syl42xK 82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGw C20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r1Y6r17MIIYrxkI7VAKI48J MIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r1j6r4UMI IF0xvE42xK8VAvwI8IcIk0rVWrZr1j6s0DMIIF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvE x4A2jsIEc7CjxVAFwI0_Jr0_GrUvcSsGvfC2KfnxnUUI43ZEXa7VUbrMaUUUUUU== X-CM-SenderInfo: holx6xphqv003j6o00pqjv00gofq/ X-Spam-Status: No, score=-13.4 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: Thu, 14 Apr 2022 11:29:17 -0000 Specify flags when copying binary to elf file. This flags will be written to the e_flags of the elf header. usage: objcopy -I binary -O target --alt-elf-eflags=val bin_file elf_file binutils/ * objcopy.c --- binutils/objcopy.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 6fb31c8cac7..ae886a44619 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\ @@ -3496,6 +3503,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; } @@ -5863,6 +5875,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