Skip to content

Instantly share code, notes, and snippets.

@depressed-pho
Last active February 17, 2022 07:47
Show Gist options
  • Save depressed-pho/a629247b48b3e6178e35a14c62e9d44f to your computer and use it in GitHub Desktop.
Save depressed-pho/a629247b48b3e6178e35a14c62e9d44f to your computer and use it in GitHub Desktop.
NetBSD: hinted mmap(2) without MAP_FIXED gives up too early
% uname -a
NetBSD yukari.cielonegro.org 9.2 NetBSD 9.2 (GENERIC) #1: Wed Nov 24 12:01:38 JS
T 2021 [email protected]:/home/pho/sysbuild/amd64/obj/usr/src/sys/arch/
amd64/compile/GENERIC amd64
% ./a.out
page size: 4096 octets
length: 4096000 octets
mmap #0 succeeded: got 0x40000000
mmap #1 succeeded: got 0x3fc18000
mmap #2 succeeded: got 0x3f830000
mmap #3 succeeded: got 0x3f448000
mmap #4 succeeded: got 0x3f060000
mmap #5 succeeded: got 0x3ec78000
mmap #6 succeeded: got 0x3e890000
mmap #7 succeeded: got 0x3e4a8000
mmap #8 succeeded: got 0x3e0c0000
mmap #9 succeeded: got 0x3dcd8000
mmap #10 succeeded: got 0x3d8f0000
mmap #11 succeeded: got 0x3d508000
mmap #12 succeeded: got 0x3d120000
mmap #13 succeeded: got 0x3cd38000
mmap #14 succeeded: got 0x3c950000
mmap #15 succeeded: got 0x3c568000
mmap #16 succeeded: got 0x3c180000
mmap #17 succeeded: got 0x3bd98000
mmap #18 succeeded: got 0x3b9b0000
mmap #19 succeeded: got 0x3b5c8000
mmap #20 succeeded: got 0x3b1e0000
mmap #21 succeeded: got 0x3adf8000
mmap #22 succeeded: got 0x3aa10000
mmap #23 succeeded: got 0x3a628000
mmap #24 succeeded: got 0x3a240000
mmap #25 succeeded: got 0x39e58000
mmap #26 succeeded: got 0x39a70000
mmap #27 succeeded: got 0x39688000
mmap #28 succeeded: got 0x392a0000
mmap #29 succeeded: got 0x38eb8000
mmap #30 succeeded: got 0x38ad0000
mmap #31 succeeded: got 0x386e8000
mmap #32 succeeded: got 0x38300000
mmap #33 succeeded: got 0x37f18000
mmap #34 succeeded: got 0x37b30000
mmap #35 succeeded: got 0x37748000
mmap #36 succeeded: got 0x37360000
mmap #37 succeeded: got 0x36f78000
mmap #38 succeeded: got 0x36b90000
mmap #39 succeeded: got 0x367a8000
mmap #40 succeeded: got 0x363c0000
mmap #41 succeeded: got 0x35fd8000
mmap #42 succeeded: got 0x35bf0000
mmap #43 succeeded: got 0x35808000
mmap #44 succeeded: got 0x35420000
mmap #45 succeeded: got 0x35038000
mmap #46 succeeded: got 0x34c50000
mmap #47 succeeded: got 0x34868000
mmap #48 succeeded: got 0x34480000
mmap #49 succeeded: got 0x34098000
mmap #50 succeeded: got 0x33cb0000
mmap #51 succeeded: got 0x338c8000
mmap #52 succeeded: got 0x334e0000
mmap #53 succeeded: got 0x330f8000
mmap #54 succeeded: got 0x32d10000
mmap #55 succeeded: got 0x32928000
mmap #56 succeeded: got 0x32540000
mmap #57 succeeded: got 0x32158000
mmap #58 succeeded: got 0x31d70000
mmap #59 succeeded: got 0x31988000
mmap #60 succeeded: got 0x315a0000
mmap #61 succeeded: got 0x311b8000
mmap #62 succeeded: got 0x30dd0000
mmap #63 succeeded: got 0x309e8000
mmap #64 succeeded: got 0x30600000
mmap #65 succeeded: got 0x30218000
mmap #66 succeeded: got 0x2fe30000
mmap #67 succeeded: got 0x2fa48000
mmap #68 succeeded: got 0x2f660000
mmap #69 succeeded: got 0x2f278000
mmap #70 succeeded: got 0x2ee90000
mmap #71 succeeded: got 0x2eaa8000
mmap #72 succeeded: got 0x2e6c0000
mmap #73 succeeded: got 0x2e2d8000
mmap #74 succeeded: got 0x2def0000
mmap #75 succeeded: got 0x2db08000
mmap #76 succeeded: got 0x2d720000
mmap #77 succeeded: got 0x2d338000
mmap #78 succeeded: got 0x2cf50000
mmap #79 succeeded: got 0x2cb68000
mmap #80 succeeded: got 0x2c780000
mmap #81 succeeded: got 0x2c398000
mmap #82 succeeded: got 0x2bfb0000
mmap #83 succeeded: got 0x2bbc8000
mmap #84 succeeded: got 0x2b7e0000
mmap #85 succeeded: got 0x2b3f8000
mmap #86 succeeded: got 0x2b010000
mmap #87 succeeded: got 0x2ac28000
mmap #88 succeeded: got 0x2a840000
mmap #89 succeeded: got 0x2a458000
mmap #90 succeeded: got 0x2a070000
mmap #91 succeeded: got 0x29c88000
mmap #92 succeeded: got 0x298a0000
mmap #93 succeeded: got 0x294b8000
mmap #94 succeeded: got 0x290d0000
mmap #95 succeeded: got 0x28ce8000
mmap #96 succeeded: got 0x28900000
mmap #97 succeeded: got 0x28518000
mmap #98 succeeded: got 0x28130000
mmap #99 succeeded: got 0x27d48000
mmap #100 succeeded: got 0x27960000
mmap #101 succeeded: got 0x27578000
mmap #102 succeeded: got 0x27190000
mmap #103 succeeded: got 0x26da8000
mmap #104 succeeded: got 0x269c0000
mmap #105 succeeded: got 0x265d8000
mmap #106 succeeded: got 0x261f0000
mmap #107 succeeded: got 0x25e08000
mmap #108 succeeded: got 0x25a20000
mmap #109 succeeded: got 0x25638000
mmap #110 succeeded: got 0x25250000
mmap #111 succeeded: got 0x24e68000
mmap #112 succeeded: got 0x24a80000
mmap #113 succeeded: got 0x24698000
mmap #114 succeeded: got 0x242b0000
mmap #115 succeeded: got 0x23ec8000
mmap #116 succeeded: got 0x23ae0000
mmap #117 succeeded: got 0x236f8000
mmap #118 succeeded: got 0x23310000
mmap #119 succeeded: got 0x22f28000
mmap #120 succeeded: got 0x22b40000
mmap #121 succeeded: got 0x22758000
mmap #122 succeeded: got 0x22370000
mmap #123 succeeded: got 0x21f88000
mmap #124 succeeded: got 0x21ba0000
mmap #125 succeeded: got 0x217b8000
mmap #126 succeeded: got 0x213d0000
mmap #127 succeeded: got 0x20fe8000
mmap #128 succeeded: got 0x20c00000
mmap #129 succeeded: got 0x20818000
mmap #130 succeeded: got 0x20430000
mmap #131 succeeded: got 0x20048000
mmap #132 succeeded: got 0x1fc60000
mmap #133 succeeded: got 0x1f878000
mmap #134 succeeded: got 0x1f490000
mmap #135 succeeded: got 0x1f0a8000
mmap #136 succeeded: got 0x1ecc0000
mmap #137 succeeded: got 0x1e8d8000
mmap #138 succeeded: got 0x1e4f0000
mmap #139 succeeded: got 0x1e108000
mmap #140 succeeded: got 0x1dd20000
mmap #141 succeeded: got 0x1d938000
mmap #142 succeeded: got 0x1d550000
mmap #143 succeeded: got 0x1d168000
mmap #144 succeeded: got 0x1cd80000
mmap #145 succeeded: got 0x1c998000
mmap #146 succeeded: got 0x1c5b0000
mmap #147 succeeded: got 0x1c1c8000
mmap #148 succeeded: got 0x1bde0000
mmap #149 succeeded: got 0x1b9f8000
mmap #150 succeeded: got 0x1b610000
mmap #151 succeeded: got 0x1b228000
mmap #152 succeeded: got 0x1ae40000
mmap #153 succeeded: got 0x1aa58000
mmap #154 succeeded: got 0x1a670000
mmap #155 succeeded: got 0x1a288000
mmap #156 succeeded: got 0x19ea0000
mmap #157 succeeded: got 0x19ab8000
mmap #158 succeeded: got 0x196d0000
mmap #159 succeeded: got 0x192e8000
mmap #160 succeeded: got 0x18f00000
mmap #161 succeeded: got 0x18b18000
mmap #162 succeeded: got 0x18730000
mmap #163 succeeded: got 0x18348000
mmap #164 succeeded: got 0x17f60000
mmap #165 succeeded: got 0x17b78000
mmap #166 succeeded: got 0x17790000
mmap #167 succeeded: got 0x173a8000
mmap #168 succeeded: got 0x16fc0000
mmap #169 succeeded: got 0x16bd8000
mmap #170 succeeded: got 0x167f0000
mmap #171 succeeded: got 0x16408000
mmap #172 succeeded: got 0x16020000
mmap #173 succeeded: got 0x15c38000
mmap #174 succeeded: got 0x15850000
mmap #175 succeeded: got 0x15468000
mmap #176 succeeded: got 0x15080000
mmap #177 succeeded: got 0x14c98000
mmap #178 succeeded: got 0x148b0000
mmap #179 succeeded: got 0x144c8000
mmap #180 succeeded: got 0x140e0000
mmap #181 succeeded: got 0x13cf8000
mmap #182 succeeded: got 0x13910000
mmap #183 succeeded: got 0x13528000
mmap #184 succeeded: got 0x13140000
mmap #185 succeeded: got 0x12d58000
mmap #186 succeeded: got 0x12970000
mmap #187 succeeded: got 0x12588000
mmap #188 succeeded: got 0x121a0000
mmap #189 succeeded: got 0x11db8000
mmap #190 succeeded: got 0x119d0000
mmap #191 succeeded: got 0x115e8000
mmap #192 succeeded: got 0x11200000
mmap #193 succeeded: got 0x10e18000
mmap #194 succeeded: got 0x10a30000
mmap #195 succeeded: got 0x10648000
mmap #196 succeeded: got 0x10260000
mmap #197 succeeded: got 0xfe78000
mmap #198 succeeded: got 0xfa90000
mmap #199 succeeded: got 0xf6a8000
mmap #200 succeeded: got 0xf2c0000
mmap #201 succeeded: got 0xeed8000
mmap #202 succeeded: got 0xeaf0000
mmap #203 succeeded: got 0xe708000
mmap #204 succeeded: got 0xe320000
mmap #205 succeeded: got 0xdf38000
mmap #206 succeeded: got 0xdb50000
mmap #207 succeeded: got 0xd768000
mmap #208 succeeded: got 0xd380000
mmap #209 succeeded: got 0xcf98000
mmap #210 succeeded: got 0xcbb0000
mmap #211 succeeded: got 0xc7c8000
mmap #212 succeeded: got 0xc3e0000
mmap #213 succeeded: got 0xbff8000
mmap #214 succeeded: got 0xbc10000
mmap #215 succeeded: got 0xb828000
mmap #216 succeeded: got 0xb440000
mmap #217 succeeded: got 0xb058000
mmap #218 succeeded: got 0xac70000
mmap #219 succeeded: got 0xa888000
mmap #220 succeeded: got 0xa4a0000
mmap #221 succeeded: got 0xa0b8000
mmap #222 succeeded: got 0x9cd0000
mmap #223 succeeded: got 0x98e8000
mmap #224 succeeded: got 0x9500000
mmap #225 succeeded: got 0x9118000
mmap #226 succeeded: got 0x8d30000
mmap #227 succeeded: got 0x8948000
mmap #228 succeeded: got 0x8560000
mmap #229 succeeded: got 0x8178000
mmap #230 succeeded: got 0x7d90000
mmap #231 succeeded: got 0x79a8000
mmap #232 succeeded: got 0x75c0000
mmap #233 succeeded: got 0x71d8000
mmap #234 succeeded: got 0x6df0000
mmap #235 succeeded: got 0x6a08000
mmap #236 succeeded: got 0x6620000
mmap #237 succeeded: got 0x6238000
mmap #238 succeeded: got 0x5e50000
mmap #239 succeeded: got 0x5a68000
mmap #240 succeeded: got 0x5680000
mmap #241 succeeded: got 0x5298000
mmap #242 succeeded: got 0x4eb0000
mmap #243 succeeded: got 0x4ac8000
mmap #244 succeeded: got 0x46e0000
mmap #245 succeeded: got 0x42f8000
mmap #246 succeeded: got 0x3f10000
mmap #247 succeeded: got 0x3b28000
mmap #248 succeeded: got 0x3740000
mmap #249 succeeded: got 0x3358000
mmap #250 succeeded: got 0x2f70000
mmap #251 succeeded: got 0x2b88000
mmap #252 succeeded: got 0x27a0000
mmap #253 succeeded: got 0x23b8000
mmap #254 succeeded: got 0x1fd0000
mmap #255 succeeded: got 0x1be8000
mmap #256 succeeded: got 0x1800000
mmap #257 succeeded: got 0x1418000
mmap #258 succeeded: got 0x1030000
mmap #259 succeeded: got 0xc48000
mmap #260 succeeded: got 0x860000
mmap #261 failed: Cannot allocate memory
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
#include <unistd.h>
static const int max_iterations = 1000;
static void* address_hint = (void*)0x40000000; /* Changing this to NULL causes the code to succeed */
int main() {
const long page_size = sysconf(_SC_PAGESIZE);
printf("page size: %ld octets\n", page_size);
const long length = page_size * 1000;
printf("length: %ld octets\n", length);
for (int i = 0; i < max_iterations; i++) {
const void* ret = mmap(address_hint, length, PROT_READ|PROT_WRITE, MAP_ANON, -1, 0);
if (ret == MAP_FAILED) {
printf("mmap #%d failed: %s\n", i, strerror(errno));
return 1;
}
else {
printf("mmap #%d succeeded: got %p\n", i, ret);
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment