| ... | ... | @@ -286,6 +286,10 @@ fn createFile(allocator: *Allocator, file: fs.File, options: link.Options) !Elf |
| 286 | 286 | }; |
| 287 | 287 | errdefer self.deinit(); |
| 288 | 288 | |
| 289 | if (options.target.cpu.arch == .spu_2) { |
| 290 | self.base.options.default_entry_addr = 0; |
| 291 | } |
| 292 | |
| 289 | 293 | // Index 0 is always a null symbol. |
| 290 | 294 | try self.local_symbols.append(allocator, .{ |
| 291 | 295 | .st_name = 0, |
| ... | ... | @@ -466,8 +470,8 @@ pub fn populateMissingMetadata(self: *Elf) !void { |
| 466 | 470 | .p_type = elf.PT_LOAD, |
| 467 | 471 | .p_offset = off, |
| 468 | 472 | .p_filesz = file_size, |
| 469 | | .p_vaddr = default_entry_addr, |
| 470 | | .p_paddr = default_entry_addr, |
| 473 | .p_vaddr = self.base.options.default_entry_addr, |
| 474 | .p_paddr = self.base.options.default_entry_addr, |
| 471 | 475 | .p_memsz = file_size, |
| 472 | 476 | .p_align = p_align, |
| 473 | 477 | .p_flags = elf.PF_X | elf.PF_R, |
| ... | ... | @@ -486,7 +490,7 @@ pub fn populateMissingMetadata(self: *Elf) !void { |
| 486 | 490 | // TODO instead of hard coding the vaddr, make a function to find a vaddr to put things at. |
| 487 | 491 | // we'll need to re-use that function anyway, in case the GOT grows and overlaps something |
| 488 | 492 | // else in virtual memory. |
| 489 | | const default_got_addr = if (ptr_size == 2) @as(u32, 0x8000) else 0x4000000; |
| 493 | const default_got_addr = if (self.base.options.target.cpu.arch.ptrBitWidth() == 16) @as(u32, 0x8000) else 0x4000000; |
| 490 | 494 | try self.program_headers.append(self.base.allocator, .{ |
| 491 | 495 | .p_type = elf.PT_LOAD, |
| 492 | 496 | .p_offset = off, |