From: liuzhensong <liuzhensong@loongson.cn>
To: WANG Xuerui <i.swmail@xen0n.name>, binutils@sourceware.org
Subject: Re: [PATCH v2] objcopy: Add elf header e_flags option in objcopy.
Date: Sun, 17 Apr 2022 15:33:44 +0800 [thread overview]
Message-ID: <acc88a13-60ac-bfc0-08eb-9e1987c569c1@loongson.cn> (raw)
In-Reply-To: <dbfa3697-a9e5-c000-d6c4-cfd1f40387db@xen0n.name>
On 2022/4/15 下午6:06, WANG Xuerui wrote:
> Hi,
>
> On 4/15/22 17:41, liuzhensong wrote:
>> 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
>> * doc/binutils.texi:Add the new objcopy option.
>> ---
>> binutils/doc/binutils.texi | 7 +++++++
>> binutils/objcopy.c | 16 ++++++++++++++++
>> 2 files changed, 23 insertions(+)
>>
>> diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi
>> index 2c234c682aa..b36aad05c98 100644
>> --- a/binutils/doc/binutils.texi
>> +++ b/binutils/doc/binutils.texi
>> @@ -1302,6 +1302,7 @@ objcopy [@option{-F}
>> @var{bfdname}|@option{--target=}@var{bfdname}]
>> [@option{--weaken-symbols=}@var{filename}]
>> [@option{--add-symbol}
>> @var{name}=[@var{section}:]@var{value}[,@var{flags}]]
>> [@option{--alt-machine-code=}@var{index}]
>> + [@option{--alt-elf-eflags=}@var{value}]
>> [@option{--prefix-symbols=}@var{string}]
>> [@option{--prefix-sections=}@var{string}]
>> [@option{--prefix-alloc-sections=}@var{string}]
>> @@ -1942,6 +1943,12 @@ being used. For ELF based architectures if
>> the @var{index}
>> alternative does not exist then the value is treated as an absolute
>> number to be stored in the e_machine field of the ELF header.
>> +@item --alt-elf-eflags=@var{value}
>> +If the output file has alternate ELF header e_flags, use the
>> @var{vaule}
>
> Typo; "value".
>
>> +instead of the default one. This is useful in case objcopy a binary to
>> +an ELF to specify the e_flags. The value is treated as an absolute
>> +number to be stored in the e_flags field of the ELF header.
>
> Actually the whole description seems inaccurate (which field is the
> alternate to e_flags? what's e_flags's "default" value?), and the
> English is broken.
>
> By reading the implementation it's clear the value specified here
> would get into any output file that is ELF. So no need to call it
> "alt"; a name like "--elf-eflags" would be enough.
>
> Something like this would be better IMO:
>
> "Meaningful only for ELF output. Use @var{value} as e_flags of the
> output. This is useful for changing the e_flags of an existing
> binary. The @var{value} is treated as an absolute number to be stored
> in the e_flags field of the ELF header."
>
>> +
>> @item --writable-text
>> Mark the output text as writable. This option isn't meaningful for
>> all
>> object file formats.
>> diff --git a/binutils/objcopy.c b/binutils/objcopy.c
>> index 6fb31c8cac7..032caf565d1 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 <file> -W for all symbols listed in
>> <file>\n\
>> --add-symbol <name>=[<section>:]<value>[,<flags>] Add a symbol\n\
>> --alt-machine-code <index> Use the target's <index>'th
>> alternative machine\n\
>> + --alt-elf-eflags=<value> 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,10 @@ copy_object (bfd *ibfd, bfd *obfd, const
>> bfd_arch_info_type *input_arch)
>> }
>> }
>> + if (bfd_get_flavour (obfd) == bfd_target_elf_flavour
>> + && alt_elf_eflags_set)
>> + elf_elfheader (obfd)->e_flags = alt_elf_eflags;
>> +
>> return true;
>> }
>> @@ -5863,6 +5874,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;
Thank you for the review, it looks more appropriate.
I will send a v3 with the changes.
--
liuzhensong
prev parent reply other threads:[~2022-04-17 7:33 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-15 9:41 liuzhensong
2022-04-15 10:06 ` WANG Xuerui
2022-04-17 7:33 ` liuzhensong [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=acc88a13-60ac-bfc0-08eb-9e1987c569c1@loongson.cn \
--to=liuzhensong@loongson.cn \
--cc=binutils@sourceware.org \
--cc=i.swmail@xen0n.name \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).