On Tue, Aug 15, 2023 at 9:20 AM Chao Li <lic...@loongson.cn> wrote: > > Hi Andrew, > > Yes, you are right, I also think that SMC is a bit flawed in terms of > security, but can we use some security mechanism to protect the SMC, like > encryption and decryption? Sorry, I'm not consider mature enough about SMC > security.
There isn't any. Actual use cases in something like a kernel are heavily vetted and read-protected as soon as possible. > > I can tell you real problem, there are some CSR instructions in LoongArch64 > that can only accept immediate value, for example: `csrrd $a0, 0x1`, the 0x1 > is the selection of CSR register number, it can't use the registers to > select. This operation should be in the MdePkg base library. > > I know that .c or .h files in MdePkg shouldn't depend on a single compiler > feature, so I can't use the GNU AT&T style inline ASM function(AT&T style > inline supports input parameters being immedite value, use "i" option). In > this case, I think using SMC can handle this, that is use register transfer > the CSR registers selection, and dynamically modify CSR instructions during > execution phase with reference to transfer register value, this way is depend > on the .text section or target memory is executable and writable. FYI, poking instructions willy-nilly is unsafe and unreliable (except on x86 due to kludges, but then it's slow). > > The problem of immediate values can only be handled by preprocessing stage or > using SMC, otherwise I can only write a lot of similar functions and use > `switch case` to call them. This method will cause the program size to expand > a lot. > > So, I think I have following choice: > > Choice 1: > > Use AT&T style inline function, and create a file named: CsrOperationGcc.c, > and other future compiler feature-dependent files will be named: > CsrOperationClang.c, CsrOperationXlang.c and so on. If you're going to use inline assembly, just expose them directly? I don't see the problem there, I don't expect loongarch to be picked up by visual studio any time soon. > > > Choice 2: > > Use SMC. > > > Choice 3: > > Write a lot of similar CSR functions. You /could/ use a GAS macro. .macro csr_write csr .global CsrWrite\csr CsrWrite\csr: csrw a0, \csr ret (this is riscv pseudo-asm but I know your arch is similar enough) -- Pedro -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#107767): https://edk2.groups.io/g/devel/message/107767 Mute This Topic: https://groups.io/mt/100751724/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-