| 269 | |
| 270 | #if defined(FREEBSD_BOOT_LOADER) |
| 271 | static vm_offset_t |
| 272 | freebsd_parse_boot_param(struct arm_boot_params *abp) |
| 273 | { |
| 274 | vm_offset_t lastaddr = 0; |
| 275 | void *mdp; |
| 276 | void *kmdp; |
| 277 | #ifdef DDB |
| 278 | vm_offset_t ksym_start; |
| 279 | vm_offset_t ksym_end; |
| 280 | #endif |
| 281 | |
| 282 | /* |
| 283 | * Mask metadata pointer: it is supposed to be on page boundary. If |
| 284 | * the first argument (mdp) doesn't point to a valid address the |
| 285 | * bootloader must have passed us something else than the metadata |
| 286 | * ptr, so we give up. Also give up if we cannot find metadta section |
| 287 | * the loader creates that we get all this data out of. |
| 288 | */ |
| 289 | |
| 290 | if ((mdp = (void *)(abp->abp_r0 & ~PAGE_MASK)) == NULL) |
| 291 | return 0; |
| 292 | preload_metadata = mdp; |
| 293 | kmdp = preload_search_by_type("elf kernel"); |
| 294 | if (kmdp == NULL) |
| 295 | return 0; |
| 296 | |
| 297 | boothowto = MD_FETCH(kmdp, MODINFOMD_HOWTO, int); |
| 298 | loader_envp = MD_FETCH(kmdp, MODINFOMD_ENVP, char *); |
| 299 | init_static_kenv(loader_envp, 0); |
| 300 | lastaddr = MD_FETCH(kmdp, MODINFOMD_KERNEND, vm_offset_t); |
| 301 | #ifdef DDB |
| 302 | ksym_start = MD_FETCH(kmdp, MODINFOMD_SSYM, uintptr_t); |
| 303 | ksym_end = MD_FETCH(kmdp, MODINFOMD_ESYM, uintptr_t); |
| 304 | db_fetch_ksymtab(ksym_start, ksym_end, 0); |
| 305 | #endif |
| 306 | return lastaddr; |
| 307 | } |
| 308 | #endif |
| 309 | |
| 310 | vm_offset_t |
no test coverage detected