link_flags.h (4168B)
1 #ifndef KIT_DRIVER_LINK_FLAGS_H 2 #define KIT_DRIVER_LINK_FLAGS_H 3 4 #include <kit/link.h> 5 #include <stddef.h> 6 #include <stdint.h> 7 8 #include "driver.h" 9 10 typedef struct DriverLinkFlags { 11 DriverEnv* env; 12 const char* tool; 13 14 const char* entry; 15 const char* linker_script; 16 uint16_t pe_subsystem; /* KitPeSubsystem */ 17 const char* soname; 18 const char* interp_path; 19 const char** rpaths; 20 uint32_t nrpaths; 21 uint32_t cap_rpaths; 22 int new_dtags; /* 1=DT_RUNPATH (default), 0=DT_RPATH */ 23 int gc_sections; 24 int strip_debug; 25 int allow_undefined; 26 int text_base_set; 27 uint64_t text_base; 28 const char* map_path; 29 const char* symbols_path; 30 uint8_t symbols_format; /* KitLinkSymbolsFormat */ 31 const char* cref_path; /* --cref FILE: cross-reference table */ 32 int print_memory_usage; /* --print-memory-usage */ 33 uint8_t orphan_handling; /* KitLinkOrphanHandling */ 34 int fatal_warnings; /* --fatal-warnings */ 35 36 /* --defsym NAME=EXPR. owned name/alias strings live in owned_strings. */ 37 KitLinkDefsym* defsyms; 38 uint32_t ndefsyms; 39 uint32_t cap_defsyms; 40 /* --section-start / -Tdata / -Tbss section address overrides. */ 41 KitLinkSectionStart* section_starts; 42 uint32_t nsection_starts; 43 uint32_t cap_section_starts; 44 45 uint8_t build_id_mode; /* KitBuildIdMode */ 46 uint8_t* build_id_bytes; 47 uint32_t build_id_len; 48 size_t build_id_size; 49 50 char** owned_strings; 51 size_t* owned_string_sizes; 52 uint32_t nowned_strings; 53 uint32_t cap_owned_strings; 54 } DriverLinkFlags; 55 56 int driver_link_flags_init(DriverLinkFlags* lf, DriverEnv* env, 57 const char* tool, uint32_t initial_cap); 58 void driver_link_flags_fini(DriverLinkFlags* lf); 59 60 int driver_link_flags_record_wl(DriverLinkFlags* lf, const char* arg); 61 int driver_link_flags_record_build_id(DriverLinkFlags* lf, const char* val); 62 int driver_link_flags_record_pe_subsystem(DriverLinkFlags* lf, const char* val, 63 size_t n); 64 int driver_link_flags_record_z(DriverLinkFlags* lf, const char* val, size_t n); 65 int driver_link_flags_record_map(DriverLinkFlags* lf, const char* val, 66 size_t n); 67 int driver_link_flags_record_symbols(DriverLinkFlags* lf, const char* val, 68 size_t n); 69 int driver_link_flags_record_symbols_format(DriverLinkFlags* lf, 70 const char* val, size_t n); 71 int driver_link_flags_record_text_base(DriverLinkFlags* lf, const char* val); 72 int driver_link_flags_record_entry(DriverLinkFlags* lf, const char* val, 73 size_t n); 74 int driver_link_flags_record_script(DriverLinkFlags* lf, const char* val, 75 size_t n); 76 /* --defsym NAME=EXPR (literal hex/dec or alias-symbol form). */ 77 int driver_link_flags_record_defsym(DriverLinkFlags* lf, const char* val, 78 size_t n); 79 /* --section-start=.name=ADDR; also -Tdata/-Tbss via secname=".data"/".bss". */ 80 int driver_link_flags_record_section_start(DriverLinkFlags* lf, const char* val, 81 size_t n); 82 int driver_link_flags_record_section_addr(DriverLinkFlags* lf, 83 const char* secname, 84 const char* addr); 85 int driver_link_flags_record_orphan_handling(DriverLinkFlags* lf, 86 const char* val, size_t n); 87 int driver_link_flags_record_cref(DriverLinkFlags* lf, const char* val, 88 size_t n); 89 90 int driver_link_flags_fill_options(const DriverLinkFlags* lf, 91 KitTargetSpec target, int explicit_pie, 92 int shared, int relocatable, 93 uint8_t output_kind, 94 const KitLinkScript* script, 95 KitLinkSessionOptions* lopts, 96 KitSlice** rpath_slices_out); 97 void driver_link_flags_free_rpath_slices(const DriverLinkFlags* lf, 98 KitSlice* rpath_slices); 99 100 #endif