Re:Show HN: Running TempleOS in user space without virtualiz...
by 1fishe2fishe on Friday April 12, 2024 @08:27PM
(#40019126)
That's one way to do it, dealing with linkers was really not my thing so I just get the mapped memory list [1] and set it as the start pivot then stack pages on top of it [2]. Thankfully the brk heap isn't intrusive enough to climb up into the pages I allocated :) (this is actually why Linux' MAP_32BIT mmap starts from 0x40000000 [3], but I didn't like how high it was and made it dynamic)
[1]: https://github.com/1fishe2fishe/EXODUS/blob/90f70386b8ac6bd0...
[2]: https://github.com/1fishe2fishe/EXODUS/blob/90f70386b8ac6bd0...
[3]: https://github.com/torvalds/linux/blob/8f2c057754b25075aa3da...
Re:Show HN: Running TempleOS in user space without virtualiz...
by xmlparser on Friday April 12, 2024 @11:46PM
(#40020316)
> Thankfully the brk heap isn't intrusive enough to climb up into the pages I allocated :)
That seems about right[1], but the MAP_FIXED_NOREPLACE flag has been a thing since Linux 4.17. What about using that?
Re:Show HN: Running TempleOS in user space without virtualiz...
by 1fishe2fishe on Friday April 12, 2024 @11:53PM
(#40020352)
Thanks for the information, I wasn't aware of that! Seems like it's not available on FreeBSD though ;( I want to support as many OS'es as possible, but I'll still add a comment on that for future reference.
Re:Show HN: Running TempleOS in user space without virtualiz...
by xyproto on Saturday April 13, 2024 @03:21AM
(#40021206)
Could it be enabled with a define or other compile-time mechanism for Linux?
Re:Show HN: Running TempleOS in user space without virtualiz...
by 1fishe2fishe on Saturday April 13, 2024 @05:07AM
(#40021667)
Yeah, I could just use that flag on Linux and let the kernel do more work but I'm afraid I might have to add more logic for looping for a failed mmap only for linux, and more ifdefs usually mean I'm doing something wrong. I'd rather roll with my current strategy (finding a safe pivot and keep bumping without checking anything)
I bookmarked their Mac workaround around here: https://github.com/wine-mirror/wine/blob/b2a099b3ceec6fef05c... which involves rearranging the zero page and creating a big WINE_RESERVE section.
On Linux it appears they use a -Ttext linker flag to reposition the code location, but I haven't read it too carefully: https://github.com/wine-mirror/wine/blob/b2a099b3ceec6fef05c...