* with speculative execution behavior of certain processors
*/
for(reg = _kernel_pgdir.pd_regions; reg; reg = reg->reg_next) {
+ u32_t attrs;
+
switch(reg->reg_type) {
case REGION_TEXT:
case REGION_BSS:
case REGION_DATA:
case REGION_RODATA:
case REGION_HEAP:
- dbg_printf("Mapping region %02x at 0x%08x:%08x\n",
- reg->reg_type, reg->reg_base, reg->reg_size);
+ /* make sure PAGE_ATTR_USER is set and PAGE_ATTR_WRITABLE is not set */
+ attrs = (reg->reg_attrs | PAGE_ATTR_USER) & ~PAGE_ATTR_WRITABLE;
+
+ dbg_printf("Mapping region %02x at 0x%08x:%08x (ATTR=%x)\n",
+ reg->reg_type, reg->reg_base, reg->reg_size, attrs);
ret_val = pg_dir_map(dir, reg->reg_base, reg->reg_base,
- reg->reg_size, reg->reg_attrs);
+ reg->reg_size, attrs);
if(ret_val >= 0) {
ret_val = _pg_dir_add_region(dir, reg->reg_base, reg->reg_size,
- reg->reg_type, reg->reg_attrs);
+ reg->reg_type, attrs);
}
break;