kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

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