|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 1/3] xen: Introduce a header to store common linker scripts content
Hi Jan,
On 21.03.2022 11:23, Jan Beulich wrote:
> Note: please properly quote your replies. As you'll see what you said
> in reply to my remarks is not properly separated from my remarks, and
> hence hard to read.
>
Sorry about that. I had some issues with my e-mail client and had to use the
non-default one.
> On 21.03.2022 11:14, Michal Orzel wrote:
>> On 21.03.2022 09:21, Michal Orzel wrote:
>>> --- /dev/null
>>> +++ b/xen/include/xen/xen_lds.h
>>> @@ -0,0 +1,114 @@
>>> +#ifndef __XEN_LDS_H__
>>> +#define __XEN_LDS_H__
>>> +
>>> +/*
>>> + * Common macros to be used in architecture specific linker scripts.
>>> + */
>>> +
>>> +/* Macros to declare debug sections. */
>>> +#ifdef EFI
>>> +/*
>>> + * Use the NOLOAD directive, despite currently ignored by (at least) GNU ld
>>> + * for PE output, in order to record that we'd prefer these sections to not
>>> + * be loaded into memory.
>>> + */
>>> +#define DECL_DEBUG(x, a) #x ALIGN(a) (NOLOAD) : { *(x) }
>>> +#define DECL_DEBUG2(x, y, a) #x ALIGN(a) (NOLOAD) : { *(x) *(y) }
>>> +#else
>>> +#define DECL_DEBUG(x, a) #x 0 : { *(x) }
>>> +#define DECL_DEBUG2(x, y, a) #x 0 : { *(x) *(y) }
>>> +#endif
>>> +
>>> +/* DWARF debug sections. */
>>> +#define DWARF_DEBUG_SECTIONS \
>>> + DECL_DEBUG(.debug_abbrev, 1) \
>>> + DECL_DEBUG2(.debug_info, .gnu.linkonce.wi.*, 1) \
>>> + DECL_DEBUG(.debug_types, 1) \
>>> + DECL_DEBUG(.debug_str, 1) \
>>> + DECL_DEBUG2(.debug_line, .debug_line.*, 1) \
>>> + DECL_DEBUG(.debug_line_str, 1) \
>>> + DECL_DEBUG(.debug_names, 4) \
>>> + DECL_DEBUG(.debug_frame, 4) \
>>> + DECL_DEBUG(.debug_loc, 1) \
>>> + DECL_DEBUG(.debug_loclists, 4) \
>>> + DECL_DEBUG(.debug_macinfo, 1) \
>>> + DECL_DEBUG(.debug_macro, 1) \
>>> + DECL_DEBUG(.debug_ranges, 8) \
>>> + DECL_DEBUG(.debug_rnglists, 4) \
>>> + DECL_DEBUG(.debug_addr, 8) \
>>> + DECL_DEBUG(.debug_aranges, 1) \
>>> + DECL_DEBUG(.debug_pubnames, 1) \
>>> + DECL_DEBUG(.debug_pubtypes, 1)
>>> +
>>> +/*
>>> + * Stabs debug sections.
>>> + *
>>> + * LLVM ld also wants .symtab, .strtab, and .shstrtab placed. These look to
>>> + * be benign to GNU ld, so we can have them here unconditionally.
>>> + */
>>> +#define STABS_DEBUG_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) } \
>>> + .symtab 0 : { *(.symtab) } \
>>> + .strtab 0 : { *(.strtab) } \
>>> + .shstrtab 0 : { *(.shstrtab) }
>>
>> Please don't add non-Stabs sections to this macro.
>>
>> Ok, I will add a new macro storing the last 4 sections called
>> ELF_DETAILS_SECTIONS,
>> to be coherent with what Linux does (ELF_DETAILS).
>>
>>> +#ifdef EFI
>>> +#define DISCARD_EFI_SECTIONS \
>>> + *(.comment) \
>>> + *(.comment.*) \
>>> + *(.note.*)
>>> +#else
>>> +#define DISCARD_EFI_SECTIONS
>>> +#endif
>>> +
>>> +/* Sections to be discarded. */
>>> +#define DISCARD_SECTIONS \
>>> + /DISCARD/ : { \
>>> + *(.text.exit) \
>>> + *(.exit.text) \
>>> + *(.exit.data) \
>>> + *(.exitcall.exit) \
>>> + *(.discard) \
>>> + *(.discard.*) \
>>> + *(.eh_frame) \
>>> + *(.dtors) \
>>> + *(.dtors.*) \
>>> + *(.fini_array) \
>>> + *(.fini_array.*) \
>>> + DISCARD_EFI_SECTIONS \
>>> + }
>>> +
>>> +#define CTORS_SECTION \
>>> + . = ALIGN(8); \
>>> + __ctors_start = .; \
>>> + *(SORT_BY_INIT_PRIORITY(.init_array.*)) \
>>> + *(SORT_BY_INIT_PRIORITY(.ctors.*)) \
>>> + *(.init_array) \
>>> + *(.ctors) \
>>> + __ctors_end = .;
>>> +
>>> +#define VPCI_SECTION \
>>> + . = ALIGN(POINTER_ALIGN); \
>>> + __start_vpci_array = .; \
>>> + *(SORT(.data.vpci.*)) \
>>> + __end_vpci_array = .;
>>> +
>>> +#define HYPFS_SECTION \
>>> + . = ALIGN(8); \
>>> + __paramhypfs_start = .; \
>>> + *(.data.paramhypfs) \
>>> + __paramhypfs_end = .;
>>> +
>>> +#define LOCK_PROFILE_SECTION \
>>> + . = ALIGN(POINTER_ALIGN); \
>>> + __lock_profile_start = .; \
>>> + *(.lockprofile.data) \
>>> + __lock_profile_end = .;
>>> +
>>> +#endif /* __XEN_LDS_H__ */
>>
>> I'm not sure _SECTION is a good suffix to use in the four names above:
>> These aren't individual sections in the output, and for CTORS_SECTION
>> it's also not even a single input section.
>>
>> How about _ENTRY suffix?
>> Otherwise we can do different suffixes depending on the content.
>> LOCK_PROFILE_DATA, HYPFS_PARAM, VPCI_ARRAY
>
> I'd prefer the latter.
>
Ok.
>> As to CTORS_SECTION - I'm unconvinced of generalizing this without
>> first getting it right.
>>
>> I will get rid of CTORS_SECTIONS then.
>>
>> Overall I think it would be better to introduce this header along
>> with actually using the macros. That way one can check within the
>> patch that what you move / replace actually matches on both sides
>> without needing to cross patch boundaries. If you wanted to introduce
>> (and then include right away) an empty header first, that would be an
>> acceptable intermediate approach afaic.
>>
>> I just wanted to split this into arch specific patches because maintainers
>> are different.
>> I do not understand your second solution with empty header.
>> Do you mean that the first patch shall create an empty header (with just an
>> intro comment)
>> and include it in arch specific linker scripts?
>
> Yes, I view this as one possible option.
>
>> Anyway, I can merge these 3 patches into 1 if you want.
>
> Well, at least part of the Arm changes can likely remain separate.
> But where you abstract things by introducing a macro in the header,
> it would be better if the original (supposedly functionally identical)
> construct(s) was (were) also replaced at the same time.
>
Hmm, I think I would go with the empty header solution.
So in v2 I would do the following:
-first patch introducing empty header and including it in linker scripts
-second patch making use of common macros in x86 and arm linker scripts
> Jan
>
Cheers,
Michal
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |