summaryrefslogtreecommitdiffstats
path: root/lib/csu
AgeCommit message (Collapse)AuthorFilesLines
2020-10-20Use a trap instruction that unconditionally terminates the process.visa1-2/+2
OK deraadt@
2020-10-19replace ad-hoc illegal instruction with the architecturally defined onenaddy2-4/+4
("permanently undefined") ok deraadt@ kettenis@
2020-10-15crt0 MD _dl_exit() performs syscall to SYS_exit directly, but thenderaadt12-30/+24
some of these functions were returning. That makes the +1word address a fairly strong and easily located gadget. Put a hard-trap instruction after the syscall. This remains a gadget for 'terminal system' calls (such as execve), but hey that's why we have pledge w/o "exec" throughout the tree. Quite surprisingly, hppa's delay-slot load of SYS_exit makes it the safest of the bunch, not that this helps anyone. ok kettenis
2020-10-14use symbolic SYS_exit rather than 1, and skip usingderaadt1-4/+2
the 0x400 %g2 syscall method ok kettenis
2020-10-14use symbolic SYS_exit instead of the value 1deraadt12-31/+24
ok kettenis
2020-06-27Prevent the use of jump tables on powerpc64 as well.kettenis1-2/+3
ok patrick@, drahn@
2020-06-26Fix powerpc64 pie binraries, in register renumbering one line was missed.drahn1-2/+2
2020-06-25disable altivec and vsx as it causes issues in qemu testing.drahn1-1/+5
This probably should be backed out after fully debugged, vector instructions caused problems with debug configuration.
2020-06-25PowerPC64 startup code.drahn1-0/+124
Determine location of toc based on PC relative location and load into %r2
2020-05-19Disable builtins on ppc in order to prevent the compiler from optimizing inmortimer1-2/+2
calls to libc in the process boot code that might not work before things like the GOT are set up. Suggested by deraadt@ ok visa@
2020-03-13Anthony Steinhauser reports that 32-bit arm cpus have the same speculationderaadt1-3/+3
problems as 64-bit models. To resolve the syscall speculation, as a first step "nop; nop" was added after all occurances of the syscall ("swi 0") instruction. Then the kernel was changed to jump over the 2 extra instructions. In this final step, those pair of nops are converted into the speculation-blocking sequence ("dsb nsh; isb"). Don't try to build through these multiple steps, use a snapshot instead. Packages matching the new ABI will be out in a while... ok kettenis
2020-03-11Anthony Steinhauser reports that 32-bit arm cpus have the same speculationderaadt1-1/+3
problems as 64-bit models. For the syscall instruction issue, add nop;nop after swi 0, in preparation for jumping over a speculation barrier here later.
2020-02-18Now that the kernel skips the two instructions immediately followingkettenis1-3/+3
a syscall, replace the double nop with a dsb nsh; isb; sequence which stops the CPU from speculating any further. This fix was suggested by Anthony Steinhauser. ok deraadt@
2020-01-26Insert two nop instructions after each svc #0 instruction in userland.kettenis1-1/+3
The will be replaced by a speculation barrier as soon as we teach the kernel to skip over these two instructions when returning from a system call. ok patrick@, deraadt@
2019-07-01Need to compile rcrt0.o with -fno-jump-tables on powerpc as well.kettenis1-3/+8
ok visa@
2019-06-28Since clang only supports the "secure" PLT ABI for "big" PIC/PIE on powerpc,kettenis1-9/+1
stop building the csu code with -fpie on that platform. ok guenther@, visa@
2019-05-10ld.so boot cleanup support:guenther3-6/+18
- put functions and data which are only used before calling the executable's start function into their own page-aligned segments for unmapping (only done on amd64, arm64, armv7, powerpc, and sparc64 so far) - pass .init_array and .preinit_array functions an addition argument which is a callback to get a structure which includes a function that frees the boot text and data - sometimes delay doing RELRO processing: for a shared-object marked DF_1_INITFIRST do it after the object's .init_array, for the executable do it after the .preinit_array - improve test-ld.so to link against libpthread and trigger its initialization late libc changes to use this will come later ok kettenis@
2019-05-08Call _csu_finish() before {pre,}init_array functions so that in staticguenther1-3/+3
executables the TIB and __progname are set up before they can be used. problem noted by ori@ ok millert@ kettenis@
2019-04-19Work around a limitation of clang integrated assembler on mips64.visa1-1/+4
The assembler does not handle undeclared local symbols properly and generates R_MIPS_CALL16 relocations where it should generate local GOT references. For now, get along with the problem by declaring local symbols where necessary. OK kettenis@ guenther@
2019-04-19Prevent clang from using builtins and jump tables in _dl_boot_bind()visa1-1/+6
on mips64. They need relocation and consequently cannot be used in that function. OK kettenis@
2019-03-23Separate symbol name and type with a comma for consistency andvisa1-2/+2
to make clang happier. No binary change with gas.
2019-02-24Remove -S from install commandskn1-2/+2
As of usr.bin/xinstall/install.c revision 1.68, -S is a no-op and install(1) will always create files safely, thus clean the option usage from the tree. Diff from Lauri Tirkkonen <lotheac at iki dot fi>, thanks.
2019-01-09Use static consistently with definitions of functions that have beenvisa3-8/+8
declared static. OK guenther@
2018-12-21Add support for {preinit,init,fini}_array sections in static binariesguenther3-2/+34
ok kettenis@
2018-11-22Make alpha less special: _dl_boot_bind() is written to completeguenther2-41/+7
relocation of ld.so's GOT without using it, so _reloc_alpha_got() merely made the call to _dl_boot_bind() from asm simpler...while itself being a call that required special handling. diff and muild baking by miod@ ok guenther@
2018-10-06Insert definitions of environ and __progname in MD_CRT0_START again.aoyama1-1/+5
That part is not needed with a PIE toolchain, but until gcc 4 on m88k receives enough fixes to produce as good code as gcc 3, the bits in r1.5 are still required. This fixes miniperl does not work correctly while building perl on m88k. Diff is suggested by Miod Vallat, tested by him and me, ok guenther@
2018-07-24Fix address calculation for _DYNAMIC. We want to address of _DYNAMIC itself,kettenis1-2/+2
not the address of its GOT entry. The current code mixed the high bits of the GOT entry address with the low bits of the true address. This only worked by accident for small binaries where _DYNAMIC and its GOT entry happen to reside on the same page. ok guenther@, mortimer@
2018-06-16Add add PIE support for m88k (requires gcc4 toolchain)guenther1-5/+37
Convert __cerror to hidden visibility. from miod@
2017-08-12Fix dependency generation: pass ${DFLAGS} and -MF explicitlyguenther1-8/+11
problem noted by deraadt@ ok espie@
2017-08-11_dl_printf is no longer referenced by RELOC_{JMPREL,DYN,GOT}; delete the stubguenther9-61/+9
ok kettenis@
2017-07-10remove misc. depend and yacc nits that no longer matter.espie1-4/+1
okay millert@
2017-02-26Our certbegin/certend is always PIC, so remove the non-PIC MD_SECT_CALL_FUNC()kettenis2-30/+2
implementations. ok guenther@
2017-02-26Use a long branch (using movw/movt) to implement MD_SECT_CALL_FUNC.kettenis1-15/+5
Necessary (but perhaps not suffcient) to build large binaries on arm. ok guenther@
2017-02-19Move static variables from .data to .bss by not initializing them to zeroguenther2-6/+6
ok kettenis@
2017-01-29remove unused variableschl1-3/+1
ok krw@ guenther@
2017-01-24Fix passing &_DYNAMIC to _dl_boot_bind; makes -static -pie work.kettenis1-2/+3
2017-01-21Make crtbegin.c and crtbeginS.c consistent on stylistic pointsguenther2-20/+16
ok kettenis@
2017-01-21Pull in declarations for main() and __init() to make clang happy.guenther2-6/+4
Mark __init() as hidden ok kettenis@ deraadt@
2017-01-21Fix misspelling in commentguenther1-2/+2
2017-01-21amd64 can build rcrt0.o with the stack-protectorguenther1-3/+10
ok kettenis@ deraadt@
2017-01-21Declare the symbols that label the .ctors, .dtors, .eh_frame, and .jcrguenther7-39/+95
sections as extern hidden arrays of indefinite size, so that the compiler (well, clang) doesn't believe it knows the exact contents and thus optimize things into infinite loops. Actually set the symbols to be in the sections and insert the leading and trailing values via __asm(). Problem pointed out by patrick@ testing and ok kettenis@
2017-01-19MD_START is now always ___start, so expand and eliminate itguenther3-11/+4
ok phessler@ deraadt@
2017-01-11Add support for AArch64.patrick1-0/+130
2017-01-02Remove the (now unused) code to determine the page size. Also get rid ofkettenis1-10/+1
the extern declaration of __got_{start,end}. ok guenther@
2016-12-24Replace return by break; requested by guenther@kettenis1-2/+2
2016-12-24Remove code that reprotects the GOT based on the __got_start and __got_endkettenis1-11/+1
symbols. Either the PT_LOAD RWX->RX case ot PT_GNU_RELRO should cover this already for anything we care about. And lld, the llvm linker, doesn't emit the __got_start and __got_end symbols and there are good reasons to leave it that way. ok guenther@
2016-12-22Don't make __CTOR_LIST__ and __DTOR_LIST__ const. This makes the .ctors andkettenis1-3/+3
.dtors sections writable just like they are in crtend.o and code generated by compilers. This is necessary to make sure that linkers that respect the ELF spec a bit better (such as lld) correctly concatenate the secttions. ok deraadt@
2016-12-19A couple more unused variables.krw1-3/+2
tweak & ok kettenis@
2016-11-08Use sed -i to post-process .depend. This avoids permission issues causednatano1-8/+2
by the file being created in /tmp. tweaks and ok tb
2016-10-15unify tmp depend generation.espie1-5/+8
- simpler uniform pattern - put the tmpfile in OBJDIR, so that mv doesn't whine about groups when using a separate builduser. okay millert@