Unformatted text preview:

On 64 bit code relocation How we can launch a procedure in 64 bit mode that resides in a page frame at a high address 64 bit virtual address space negative canonical addresses valid addresses 0xFFFFFFFFFFFFFFFF 128 TeraBytes 0xFFFF800000000000 Total number of locations having canonical 64 bit addresses is 248 Bytes 256 TeraBytes positive canonical addresses Invalid address range valid addresses non canonical 64 bit addresses 0x00007FFFFFFFFFFF 128 TeraBytes 0x0000000000000000 The canonical addresses In a 64 bit canonical virtual address the uppermost 16 bits are identical to bit 47 64 bits sign extension 48 bits The number of distinct virtual addresses actually implemented is 248 256 TB Our highcode s demo We have created a demo program which loads and executes a procedure that will reside at a very high location within the processor s 64 bit virtual address space Some aspects of our design were shaped by limitations of our GNU software tools and by our desire to keep the addressing page map tables as simple as possible Two components highdraw b 0xFFFFFFFFC0000000 Noncanonical addresses highcode b virtual address space 0x0000000000010000 Subfields of 64 bit address 1111111111111111 111111111 111111111 000000000 000000000 000000000000 sign extension 16 bits index into page directory pointer table 9 bits index into the page map level4 table 9 bits index into page table 9 bits index into page directory 9 bits offset into page frame 12 bits 4 level page mapping tables page directory pointer tables page map level4 table page directories CR3 page tables page frames Disk partition s layout dev sda4 0 1 127 128 254 255 unused The highdraw b program component goes here The highcode b program component goes here Our cs686ipl b boot loader goes here in boot sector of this disk partition ld handles 32 bit relocations We use a special linker script to relocate symbolic addresses used in highdraw s OUTPUT FORMAT binary SECTIONS 0xFFFFFFFFC0000000 text text 0x90909090 data data 0x00000000 bss bss 0x00000000 assembly commands Assemble the highcode s component as highcode s o highcode o Assemble the highdraw s component as highdraw s o highdraw o Linker commands Link the highcode o component ld highcode o T ldscript o highcode b Assemble the highdraw s component ld highdraw o T hiscript o highdraw b Installation commands Install the highcode b component dd if highcode b of dev sda4 seek 1 Assemble the highdraw s component dd if highdraw b of dev sda4 seek 128 Addition to cs686ipl s We made a small but useful enhancement to our cs686ipl s boot loader program so subsequent program components will not need to repeat the search for the starting Logical Block Address of the disk partition That block number is left in register EBX where the next component can find it It s also written to the ROM BIOS mailbox In class exercise After you have successfully downloaded assembled linked installed and executed the highcode s demo program see if you can modify it so that its highdraw codecomponent will reside at an even higher virtual address namely 0xFFFFFFFFFFE00000 instead of 0xFFFFFFFFC0000000


View Full Document

USF CS 686 - Lecture Notes

Documents in this Course
Load more
Download Lecture Notes
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Lecture Notes and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Lecture Notes and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?