[PATCH v8 12/19] Merge of Object Attributes v2 during linkage (generic logic)
Matthieu Longo
matthieu.longo@arm.com
Wed Aug 27 15:39:24 GMT 2025
More information about the Binutils mailing list
Wed Aug 27 15:39:24 GMT 2025
- Previous message (by thread): [PATCH v8 12/19] Merge of Object Attributes v2 during linkage (generic logic)
- Next message (by thread): [PATCH v8 12/19] Merge of Object Attributes v2 during linkage (generic logic)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 2025-08-22 10:50, Jan Beulich wrote: > On 15.07.2025 13:39, Matthieu Longo wrote: >> This patch adds all the generic logic to the linker to process OAv2. >> The linker is an "advanced" consumer of OAv2. After parsing, it >> deduplicates them, merge them, detect any compatibility issues, >> and finally translate them to GNU properties. >> >> ** Overall design >> >> The OAv2 processing pipeline follows a map-reduce pattern. Obviously, >> the actual processing in GNU ld is not multi-threaded, and the >> operations are not necessarily executed directly one after another. >> >> * Phase 1, map: successive per-file operations applied on the list of >> compatible input objects. >> 1. Parsing of the OAv2 section's data (also used by objcopy). >> 2. Translation of relevant GNU properties to OAv2. This is required >> for the backward-compatibility with input objects only marked >> using GNU properties. >> 3. Sorting of the subsections and object attributes. Further >> operations rely on the ordering to perform some optimization in >> the processing of the data. >> 4. Deduplication of subsections and object attributes, and detection >> of any conflict between duplicated subsections or tags. >> 5. Translation of relevant OAv2 to GNU properties for a >> forward-compatibility with the GNU properties merge. >> >> * Phase 2, reduce: OAv2 in input objects are merged together. >> 1. Gathering of "frozen" values (=coming from the command-line >> arguments) into a virtual read-only list of subsections and >> attributes. >> 2. Merging of OAv2 from an input file and the frozen input. >> 3. Merging of the results of step 2 together. Since the OAv2 merge >> is commutative and associative, it can be implemented as a reduce. >> However, GNU ld implements it as an accumulate because it does >> not support multithreading. >> Notes: the two merge phases also perform a marking of unsupported/ >> invalid subsections and attributes. This marking can be used for >> debugging, and also more practically to drop unsupported optional >> subsections from the output. >> >> * Phase 3, finalization of the output. >> 1. Pruning of the unsupported/invalid subsections and attributes. > > May a linker legitimately remove anything? (Instead I would have hoped > for some forward compatibility.) > > Jan If a subsection is unknown, the linker does not how to merge it because the merge policy of the subsection is unknown. From there, what to do with the data ? 1. Keeping the data from several files and appending them without understanding of what they mean ? It might lead the linker to create invalid data in the OAv2 section, or at least something that does not make any sense for a more recent linker that should have been able to understand them. 2. a) If a subsection is marked as required, and the linker does not understand it, the linker errors and cannot link the objects. The failure is justified. b) If a subsection is marked as optional, and the linker does not understand it, the subsection is optional so it means that it can safely discard it (while emitting a warning/info message or nothing). So yes, I would say that the linker is legitimate to remove anything from the metadata in the input objects if it is not required. I don't think that forward compatibility is possible here. Matthieu
- Previous message (by thread): [PATCH v8 12/19] Merge of Object Attributes v2 during linkage (generic logic)
- Next message (by thread): [PATCH v8 12/19] Merge of Object Attributes v2 during linkage (generic logic)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list