| ... | @@ -119,12 +119,9 @@ pub fn getThunk(self: Atom, macho_file: *MachO) *Thunk { | ... | @@ -119,12 +119,9 @@ pub fn getThunk(self: Atom, macho_file: *MachO) *Thunk { |
| 119 | | 119 | |
| 120 | pub fn initOutputSection(sect: macho.section_64, macho_file: *MachO) !u8 { | 120 | pub fn initOutputSection(sect: macho.section_64, macho_file: *MachO) !u8 { |
| 121 | const segname, const sectname, const flags = blk: { | 121 | const segname, const sectname, const flags = blk: { |
| 122 | const segname = sect.segName(); | | |
| 123 | const sectname = sect.sectName(); | | |
| 124 | | | |
| 125 | if (sect.isCode()) break :blk .{ | 122 | if (sect.isCode()) break :blk .{ |
| 126 | "__TEXT", | 123 | "__TEXT", |
| 127 | sectname, | 124 | "__text", |
| 128 | macho.S_REGULAR | macho.S_ATTR_PURE_INSTRUCTIONS | macho.S_ATTR_SOME_INSTRUCTIONS, | 125 | macho.S_REGULAR | macho.S_ATTR_PURE_INSTRUCTIONS | macho.S_ATTR_SOME_INSTRUCTIONS, |
| 129 | }; | 126 | }; |
| 130 | | 127 | |
| ... | @@ -135,32 +132,36 @@ pub fn initOutputSection(sect: macho.section_64, macho_file: *MachO) !u8 { | ... | @@ -135,32 +132,36 @@ pub fn initOutputSection(sect: macho.section_64, macho_file: *MachO) !u8 { |
| 135 | => break :blk .{ "__TEXT", "__const", macho.S_REGULAR }, | 132 | => break :blk .{ "__TEXT", "__const", macho.S_REGULAR }, |
| 136 | | 133 | |
| 137 | macho.S_CSTRING_LITERALS => { | 134 | macho.S_CSTRING_LITERALS => { |
| 138 | if (mem.startsWith(u8, sectname, "__objc")) break :blk .{ | 135 | if (mem.startsWith(u8, sect.sectName(), "__objc")) break :blk .{ |
| 139 | segname, sectname, macho.S_REGULAR, | 136 | sect.segName(), sect.sectName(), macho.S_REGULAR, |
| 140 | }; | 137 | }; |
| 141 | break :blk .{ "__TEXT", "__cstring", macho.S_CSTRING_LITERALS }; | 138 | break :blk .{ "__TEXT", "__cstring", macho.S_CSTRING_LITERALS }; |
| 142 | }, | 139 | }, |
| 143 | | 140 | |
| 144 | macho.S_MOD_INIT_FUNC_POINTERS, | 141 | macho.S_MOD_INIT_FUNC_POINTERS, |
| 145 | macho.S_MOD_TERM_FUNC_POINTERS, | 142 | macho.S_MOD_TERM_FUNC_POINTERS, |
| 146 | macho.S_LITERAL_POINTERS, | 143 | => break :blk .{ "__DATA_CONST", sect.sectName(), sect.flags }, |
| 147 | => break :blk .{ "__DATA_CONST", sectname, sect.flags }, | | |
| 148 | | 144 | |
| | 145 | macho.S_LITERAL_POINTERS, |
| 149 | macho.S_ZEROFILL, | 146 | macho.S_ZEROFILL, |
| 150 | macho.S_GB_ZEROFILL, | 147 | macho.S_GB_ZEROFILL, |
| 151 | macho.S_THREAD_LOCAL_VARIABLES, | 148 | macho.S_THREAD_LOCAL_VARIABLES, |
| 152 | macho.S_THREAD_LOCAL_VARIABLE_POINTERS, | 149 | macho.S_THREAD_LOCAL_VARIABLE_POINTERS, |
| 153 | macho.S_THREAD_LOCAL_REGULAR, | 150 | macho.S_THREAD_LOCAL_REGULAR, |
| 154 | macho.S_THREAD_LOCAL_ZEROFILL, | 151 | macho.S_THREAD_LOCAL_ZEROFILL, |
| 155 | => break :blk .{ "__DATA", sectname, sect.flags }, | 152 | => break :blk .{ sect.segName(), sect.sectName(), sect.flags }, |
| 156 | | 153 | |
| 157 | // TODO: do we need this check here? | 154 | macho.S_COALESCED => break :blk .{ |
| 158 | macho.S_COALESCED => break :blk .{ segname, sectname, macho.S_REGULAR }, | 155 | sect.segName(), |
| | 156 | sect.sectName(), |
| | 157 | macho.S_REGULAR, |
| | 158 | }, |
| 159 | | 159 | |
| 160 | macho.S_REGULAR => { | 160 | macho.S_REGULAR => { |
| | 161 | const segname = sect.segName(); |
| | 162 | const sectname = sect.sectName(); |
| 161 | if (mem.eql(u8, segname, "__DATA")) { | 163 | if (mem.eql(u8, segname, "__DATA")) { |
| 162 | if (mem.eql(u8, sectname, "__const") or | 164 | if (mem.eql(u8, sectname, "__cfstring") or |
| 163 | mem.eql(u8, sectname, "__cfstring") or | | |
| 164 | mem.eql(u8, sectname, "__objc_classlist") or | 165 | mem.eql(u8, sectname, "__objc_classlist") or |
| 165 | mem.eql(u8, sectname, "__objc_imageinfo")) break :blk .{ | 166 | mem.eql(u8, sectname, "__objc_imageinfo")) break :blk .{ |
| 166 | "__DATA_CONST", | 167 | "__DATA_CONST", |
| ... | @@ -171,7 +172,7 @@ pub fn initOutputSection(sect: macho.section_64, macho_file: *MachO) !u8 { | ... | @@ -171,7 +172,7 @@ pub fn initOutputSection(sect: macho.section_64, macho_file: *MachO) !u8 { |
| 171 | break :blk .{ segname, sectname, sect.flags }; | 172 | break :blk .{ segname, sectname, sect.flags }; |
| 172 | }, | 173 | }, |
| 173 | | 174 | |
| 174 | else => break :blk .{ segname, sectname, sect.flags }, | 175 | else => break :blk .{ sect.segName(), sect.sectName(), sect.flags }, |
| 175 | } | 176 | } |
| 176 | }; | 177 | }; |
| 177 | const osec = macho_file.getSectionByName(segname, sectname) orelse try macho_file.addSection( | 178 | const osec = macho_file.getSectionByName(segname, sectname) orelse try macho_file.addSection( |