\documentclass{article} \usepackage{amsmath} \usepackage{algorithm} \usepackage{algpseudocode} \begin{document} \begin{algorithm} \caption{Memory Management with CHERI} \begin{algorithmic}[1] \State \textbf{Define} FILENAME $\gets "/dev/contigmem"$ \State \textbf{Define} $ptr$ \Comment{Pointer to allocated memory} \State \textbf{Define} $MallocCounter$ \Comment{Remaining memory size} \State \textbf{Define} $sizeUsed$ \Comment{Size of used memory} \Function{INITAlloc}{} \State $sz \gets 100000000$ \Comment{Set allocation size} \State $fd \gets \text{open}(FILENAME, O\_RDWR, 0600)$ \If{$fd < 0$} \State \textbf{Handle Error:} \text{exit}(EXIT\_FAILURE) \EndIf \State $offset \gets 0$ \Comment{Offset for seeking} \If{$\text{ftruncate}(fd, sz) < 0$} \State \textbf{Handle Error:} \text{close}(fd), \text{exit}(EXIT\_FAILURE) \EndIf \State $ptr \gets \text{mmap}(NULL, sz, PROT\_READ | PROT\_WRITE, MAP\_SHARED, fd, 0)$ \If{$ptr = \text{MAP\_FAILED}$} \State \textbf{Handle Error:} \text{exit}(EXIT\_FAILURE) \EndIf \State $MallocCounter \gets sz$ \EndFunction \Function{malloc}{sz} \State $sz \gets \text{align\_up}(sz, \text{\_Alignof}(max\_align\_t))$ \Comment{Align the size} \State $MallocCounter \gets MallocCounter - sz$ \State $ptrLink \gets ptr[MallocCounter]$ \Comment{Allocate memory at the current position} \State $ptrLink \gets \text{cheri\_setbounds}(ptrLink, sz)$ \Comment{Set bounds for CHERI} \State \Return $ptrLink$ \Comment{Return the allocated pointer} \EndFunction \Function{FREECHERI}{ptr} \State $len \gets \text{cheri\_getlen}(ptr)$ \Comment{Get the length from pointer bounds} \State \text{munmap}(ptr, len) \Comment{Unmap the memory} \EndFunction \end{algorithmic} \end{algorithm} \end{document}