| ... | @@ -1657,6 +1657,10 @@ static void construct_linker_job_elf(LinkJob *lj) { | ... | @@ -1657,6 +1657,10 @@ static void construct_linker_job_elf(LinkJob *lj) { |
| 1657 | soname = buf_sprintf("lib%s.so.%" ZIG_PRI_usize, buf_ptr(g->root_out_name), g->version_major); | 1657 | soname = buf_sprintf("lib%s.so.%" ZIG_PRI_usize, buf_ptr(g->root_out_name), g->version_major); |
| 1658 | } | 1658 | } |
| 1659 | | 1659 | |
| | 1660 | if (target_requires_pie(g->zig_target) && g->out_type == OutTypeExe) { |
| | 1661 | lj->args.append("-pie"); |
| | 1662 | } |
| | 1663 | |
| 1660 | lj->args.append("-o"); | 1664 | lj->args.append("-o"); |
| 1661 | lj->args.append(buf_ptr(&g->output_file_path)); | 1665 | lj->args.append(buf_ptr(&g->output_file_path)); |
| 1662 | | 1666 | |
| ... | @@ -1664,6 +1668,12 @@ static void construct_linker_job_elf(LinkJob *lj) { | ... | @@ -1664,6 +1668,12 @@ static void construct_linker_job_elf(LinkJob *lj) { |
| 1664 | const char *crt1o; | 1668 | const char *crt1o; |
| 1665 | if (g->zig_target->os == OsNetBSD) { | 1669 | if (g->zig_target->os == OsNetBSD) { |
| 1666 | crt1o = "crt0.o"; | 1670 | crt1o = "crt0.o"; |
| | 1671 | } else if (target_is_android(g->zig_target)) { |
| | 1672 | if (g->have_dynamic_link) { |
| | 1673 | crt1o = "crtbegin_dynamic.o"; |
| | 1674 | } else { |
| | 1675 | crt1o = "crtbegin_static.o"; |
| | 1676 | } |
| 1667 | } else if (!g->have_dynamic_link) { | 1677 | } else if (!g->have_dynamic_link) { |
| 1668 | crt1o = "crt1.o"; | 1678 | crt1o = "crt1.o"; |
| 1669 | } else { | 1679 | } else { |
| ... | @@ -1771,22 +1781,28 @@ static void construct_linker_job_elf(LinkJob *lj) { | ... | @@ -1771,22 +1781,28 @@ static void construct_linker_job_elf(LinkJob *lj) { |
| 1771 | if (g->libc != nullptr) { | 1781 | if (g->libc != nullptr) { |
| 1772 | if (!g->have_dynamic_link) { | 1782 | if (!g->have_dynamic_link) { |
| 1773 | lj->args.append("--start-group"); | 1783 | lj->args.append("--start-group"); |
| 1774 | lj->args.append("-lgcc"); | 1784 | if (!target_is_android(g->zig_target)) { |
| 1775 | lj->args.append("-lgcc_eh"); | 1785 | lj->args.append("-lgcc"); |
| | 1786 | lj->args.append("-lgcc_eh"); |
| | 1787 | } |
| 1776 | lj->args.append("-lc"); | 1788 | lj->args.append("-lc"); |
| 1777 | lj->args.append("-lm"); | 1789 | lj->args.append("-lm"); |
| 1778 | lj->args.append("--end-group"); | 1790 | lj->args.append("--end-group"); |
| 1779 | } else { | 1791 | } else { |
| 1780 | lj->args.append("-lgcc"); | 1792 | if (!target_is_android(g->zig_target)) { |
| 1781 | lj->args.append("--as-needed"); | 1793 | lj->args.append("-lgcc"); |
| 1782 | lj->args.append("-lgcc_s"); | 1794 | lj->args.append("--as-needed"); |
| 1783 | lj->args.append("--no-as-needed"); | 1795 | lj->args.append("-lgcc_s"); |
| | 1796 | lj->args.append("--no-as-needed"); |
| | 1797 | } |
| 1784 | lj->args.append("-lc"); | 1798 | lj->args.append("-lc"); |
| 1785 | lj->args.append("-lm"); | 1799 | lj->args.append("-lm"); |
| 1786 | lj->args.append("-lgcc"); | 1800 | if (!target_is_android(g->zig_target)) { |
| 1787 | lj->args.append("--as-needed"); | 1801 | lj->args.append("-lgcc"); |
| 1788 | lj->args.append("-lgcc_s"); | 1802 | lj->args.append("--as-needed"); |
| 1789 | lj->args.append("--no-as-needed"); | 1803 | lj->args.append("-lgcc_s"); |
| | 1804 | lj->args.append("--no-as-needed"); |
| | 1805 | } |
| 1790 | } | 1806 | } |
| 1791 | | 1807 | |
| 1792 | if (g->zig_target->os == OsFreeBSD) { | 1808 | if (g->zig_target->os == OsFreeBSD) { |
| ... | @@ -1809,8 +1825,12 @@ static void construct_linker_job_elf(LinkJob *lj) { | ... | @@ -1809,8 +1825,12 @@ static void construct_linker_job_elf(LinkJob *lj) { |
| 1809 | } | 1825 | } |
| 1810 | | 1826 | |
| 1811 | // crt end | 1827 | // crt end |
| 1812 | if (lj->link_in_crt && target_libc_needs_crti_crtn(g->zig_target)) { | 1828 | if (lj->link_in_crt) { |
| 1813 | lj->args.append(get_libc_crt_file(g, "crtn.o")); | 1829 | if (target_is_android(g->zig_target)) { |
| | 1830 | lj->args.append(get_libc_crt_file(g, "crtend_android.o")); |
| | 1831 | } else if (target_libc_needs_crti_crtn(g->zig_target)) { |
| | 1832 | lj->args.append(get_libc_crt_file(g, "crtn.o")); |
| | 1833 | } |
| 1814 | } | 1834 | } |
| 1815 | | 1835 | |
| 1816 | if (!g->zig_target->is_native) { | 1836 | if (!g->zig_target->is_native) { |