Register Usage table in x86-64 psABI has

%rbx  callee-saved register; optionally used as base pointer

However, everywhere it uses %r15 to store the GOT address,
including PLT for large model.

It is a typo to mark RBX as GOT base register in Register Usage table.
GCC large model Linux implementation isn't tested nor verified.  The
only real usage is

rdos64.h:#define REAL_PIC_OFFSET_TABLE_REGNUM  R15_REG

which is correct.

We should fix Register Usage table in x86-64 psABI with the enclosed patch.

 Any comments?

-- 
H.J.
---
diff --git a/low-level-sys-info.tex b/low-level-sys-info.tex
index ef901d2..95a3f6f 100644
--- a/low-level-sys-info.tex
+++ b/low-level-sys-info.tex
@@ -572,7 +572,7 @@ bit.}.
 \RAX & temporary register; with variable arguments passes
 information about the number of vector registers used; 1$^{\rm st}$
 return register & No \\
-\RBX & callee-saved register; optionally used as base pointer & Yes \\
+\RBX & callee-saved register & Yes \\
 \RCX & used to pass 4$^{\rm th}$ integer argument to functions & No \\
 \RDX & used to pass 3$^{\rm rd}$ argument to functions; 2$^{\rm nd}$
return register & No \\
 \RSP & stack pointer & Yes \\
@@ -584,7 +584,8 @@ return register & No \\
 \reg{r10} & temporary register, used for passing a function's static
 chain pointer & No \\
 \reg{r11} & temporary register & No\\
-\reg{r12--r15} & callee-saved registers & Yes \\
+\reg{r12--r14} & callee-saved registers & Yes \\
+\reg{r15} & callee-saved register; optionally used as GOT base pointer & Yes \\
 \reg{xmm0}--\reg{xmm1} & used to pass and return floating point
 arguments & No\\
 \reg{xmm2}--\reg{xmm7} & used to pass floating point arguments & No\\

Reply via email to