diff options
| author | ruki <[email protected]> | 2025-12-07 10:24:44 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-12-07 17:15:59 +0800 |
| commit | 00f6b0ba403a86ad542a1fbecc142064aa641f0d (patch) | |
| tree | f4ac6f1a782c5ea6138d3b4e657a8177050dcfa5 | |
| parent | 195bd8faf9c402196abcec370380a84b7fb4653d (diff) | |
fix ld warnings
| -rw-r--r-- | core/src/xmake/utils/bin2macho.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/core/src/xmake/utils/bin2macho.c b/core/src/xmake/utils/bin2macho.c index 08575dc8a..4d69d0656 100644 --- a/core/src/xmake/utils/bin2macho.c +++ b/core/src/xmake/utils/bin2macho.c @@ -52,6 +52,7 @@ #define XM_MACHO_LC_SEGMENT 0x1 #define XM_MACHO_LC_SEGMENT_64 0x19 #define XM_MACHO_LC_SYMTAB 0x2 +#define XM_MACHO_LC_BUILD_VERSION 0x32 #define XM_MACHO_SECT_TYPE_REGULAR 0x0 #define XM_MACHO_SECT_ATTR_SOME_INITS 0x400 @@ -152,6 +153,15 @@ typedef struct __xm_macho_symtab_command_t { tb_uint32_t strsize; } __tb_packed__ xm_macho_symtab_command_t; +typedef struct __xm_macho_build_version_command_t { + tb_uint32_t cmd; + tb_uint32_t cmdsize; + tb_uint32_t platform; + tb_uint32_t minos; + tb_uint32_t sdk; + tb_uint32_t ntools; +} __tb_packed__ xm_macho_build_version_command_t; + typedef struct __xm_macho_nlist_t { tb_uint32_t strx; tb_uint8_t type; @@ -272,8 +282,9 @@ static tb_bool_t xm_utils_bin2macho_dump_64(tb_stream_ref_t istream, tb_uint32_t segment_cmd_size = sizeof(xm_macho_segment_command_64_t); tb_uint32_t section_size = sizeof(xm_macho_section_64_t); tb_uint32_t symtab_cmd_size = sizeof(xm_macho_symtab_command_t); + tb_uint32_t build_version_cmd_size = sizeof(xm_macho_build_version_command_t); tb_uint32_t segment_cmd_total_size = segment_cmd_size + section_size; - tb_uint32_t data_offset = xm_utils_bin2macho_align(header_size + segment_cmd_total_size + symtab_cmd_size, 8); + tb_uint32_t data_offset = xm_utils_bin2macho_align(header_size + segment_cmd_total_size + symtab_cmd_size + build_version_cmd_size, 8); tb_uint32_t data_size = datasize; tb_uint32_t data_end_offset = data_offset + data_size; tb_uint32_t symtab_offset = xm_utils_bin2macho_align(data_end_offset, 8); @@ -294,8 +305,8 @@ static tb_bool_t xm_utils_bin2macho_dump_64(tb_stream_ref_t istream, header.cputype = xm_utils_bin2macho_get_cputype(arch); header.cpusubtype = xm_utils_bin2macho_get_cpusubtype(arch); header.filetype = XM_MACHO_FILE_TYPE_OBJECT; - header.ncmds = 2; // segment + symtab - header.sizeofcmds = segment_cmd_total_size + symtab_cmd_size; + header.ncmds = 3; // segment + symtab + build_version + header.sizeofcmds = segment_cmd_total_size + symtab_cmd_size + build_version_cmd_size; header.flags = 0; if (!tb_stream_bwrit(ostream, (tb_byte_t const *)&header, sizeof(header))) { return tb_false; @@ -348,8 +359,21 @@ static tb_bool_t xm_utils_bin2macho_dump_64(tb_stream_ref_t istream, return tb_false; } + // write build version command + xm_macho_build_version_command_t build_version; + tb_memset(&build_version, 0, sizeof(build_version)); + build_version.cmd = XM_MACHO_LC_BUILD_VERSION; + build_version.cmdsize = build_version_cmd_size; + build_version.platform = 1; // PLATFORM_MACOS + build_version.minos = 0x000a0000; // 10.0.0 + build_version.sdk = 0x000a0000; // 10.0.0 + build_version.ntools = 0; + if (!tb_stream_bwrit(ostream, (tb_byte_t const *)&build_version, sizeof(build_version))) { + return tb_false; + } + // align to 8 bytes - tb_uint32_t padding = data_offset - (header_size + segment_cmd_total_size + symtab_cmd_size); + tb_uint32_t padding = data_offset - (header_size + segment_cmd_total_size + symtab_cmd_size + build_version_cmd_size); if (padding > 0) { tb_byte_t zero = 0; while (padding-- > 0) { |
