aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>2012-03-30 13:38:04 +0000
committerAndreas Krebbel <Andreas.Krebbel@de.ibm.com>2012-03-30 13:38:04 +0000
commita7e28bbe634e0e6d99570554f85d2306b52bb345 (patch)
treef0b7c4036957ed313ec40398556c3038445deda9 /bfd
parentf41345a7583221631e8bcb88e809c319e861a612 (diff)
downloadgdb-a7e28bbe634e0e6d99570554f85d2306b52bb345.zip
gdb-a7e28bbe634e0e6d99570554f85d2306b52bb345.tar.gz
gdb-a7e28bbe634e0e6d99570554f85d2306b52bb345.tar.bz2
2012-03-30 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* elf64-s390.c: Fix several comments regarding PLT entry description. * elf32-s390.c: Likewise.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elf32-s390.c20
-rw-r--r--bfd/elf64-s390.c20
3 files changed, 26 insertions, 20 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index fc84a0c..8bd12f2 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,11 @@
2012-03-30 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+ * elf64-s390.c: Fix several comments regarding PLT entry
+ description.
+ * elf32-s390.c: Likewise.
+
+2012-03-30 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
* elf64-s390.c: Use the section pointer shortcuts in
elf_link_hash_table and remove them from the target specific
variant.
diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c
index f70f9ab..7793d07 100644
--- a/bfd/elf32-s390.c
+++ b/bfd/elf32-s390.c
@@ -509,7 +509,7 @@ elf_s390_is_local_label_name (abfd, name)
The GOT holds the address in the PLT to be executed.
The loader then gets:
24(15) = Pointer to the structure describing the object.
- 28(15) = Offset in symbol table
+ 28(15) = Offset into rela.plt
The loader must then find the module where the function is
and insert the address in the GOT.
@@ -527,7 +527,7 @@ RET1: BASR 1,0 # 2 bytes Return from GOT 1st time
BRC 15,-x # 4 bytes Jump to start of PLT
.word 0 # 2 bytes filler
.long ? # 4 bytes offset in GOT
- .long ? # 4 bytes offset into symbol table
+ .long ? # 4 bytes offset into rela.plt
This was the general case. There are two additional, optimizes PLT
definitions. One for GOT offsets < 4096 and one for GOT offsets < 32768.
@@ -537,10 +537,10 @@ PLT1: L 1,<offset>(12) # 4 bytes Load address from GOT in R1
BCR 15,1 # 2 bytes Jump to address
.word 0,0,0 # 6 bytes filler
RET1: BASR 1,0 # 2 bytes Return from GOT 1st time
- L 1,14(1) # 4 bytes Load offset in symbol table in r1
+ L 1,14(1) # 4 bytes Load offset in rela.plt in r1
BRC 15,-x # 4 bytes Jump to start of PLT
.word 0,0,0 # 6 bytes filler
- .long ? # 4 bytes offset into symbol table
+ .long ? # 4 bytes offset into rela.plt
Second the one for GOT offsets < 32768:
@@ -549,10 +549,10 @@ PLT1: LHI 1,<offset> # 4 bytes Load offset in GOT to r1
BCR 15,1 # 2 bytes Jump to address
.word 0 # 2 bytes filler
RET1: BASR 1,0 # 2 bytes Return from GOT 1st time
- L 1,14(1) # 4 bytes Load offset in symbol table in r1
+ L 1,14(1) # 4 bytes Load offset in rela.plt in r1
BRC 15,-x # 4 bytes Jump to start of PLT
.word 0,0,0 # 6 bytes filler
- .long ? # 4 bytes offset into symbol table
+ .long ? # 4 bytes offset into rela.plt
Total = 32 bytes per PLT entry
@@ -567,7 +567,7 @@ RET1: BASR 1,0 # 2 bytes Return from GOT 1st time
BRC 15,-x # 4 bytes Jump to start of PLT
.word 0 # 2 bytes filler
.long ? # 4 bytes address of GOT entry
- .long ? # 4 bytes offset into symbol table */
+ .long ? # 4 bytes offset into rela.plt */
static const bfd_byte elf_s390_plt_entry[PLT_ENTRY_SIZE] =
{
@@ -629,14 +629,14 @@ static const bfd_byte elf_s390_plt_pic16_entry[PLT_ENTRY_SIZE] =
0x00, 0x00
};
-/* The first PLT entry pushes the offset into the symbol table
+/* The first PLT entry pushes the offset into the rela.plt
from R1 onto the stack at 8(15) and the loader object info
at 12(15), loads the loader address in R1 and jumps to it. */
/* The first entry in the PLT for PIC code:
PLT0:
- ST 1,28(15) # R1 has offset into symbol table
+ ST 1,28(15) # R1 has offset into rela.plt
L 1,4(12) # Get loader ino(object struct address)
ST 1,24(15) # Store address
L 1,8(12) # Entry address of loader in R1
@@ -645,7 +645,7 @@ PLT0:
The first entry in the PLT for static code:
PLT0:
- ST 1,28(15) # R1 has offset into symbol table
+ ST 1,28(15) # R1 has offset into rela.plt
BASR 1,0
L 1,18(0,1) # Get address of GOT
MVC 24(4,15),4(1) # Move loader ino to stack
diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
index c06eae9..0eb9b53 100644
--- a/bfd/elf64-s390.c
+++ b/bfd/elf64-s390.c
@@ -540,18 +540,18 @@ elf_s390_is_local_label_name (abfd, name)
RET1: BASR 1,0 # 2 bytes Return from GOT 1st time
LGF 1,12(1) # 6 bytes Load offset in symbl table in r1
BRCL 15,-x # 6 bytes Jump to start of PLT
- .long ? # 4 bytes offset into symbol table
+ .long ? # 4 bytes offset into .rela.plt
Total = 32 bytes per PLT entry
Fixup at offset 2: relative address to GOT entry
Fixup at offset 22: relative branch to PLT0
- Fixup at offset 28: 32 bit offset into symbol table
+ Fixup at offset 28: 32 bit offset into .rela.plt
- A 32 bit offset into the symbol table is enough. It allows for symbol
- tables up to a size of 2 gigabyte. A single dynamic object (the main
- program, any shared library) is limited to 4GB in size and I want to see
- the program that manages to have a symbol table of more than 2 GB with a
- total size of at max 4 GB. */
+ A 32 bit offset into the symbol table is enough. It allows for
+ .rela.plt sections up to a size of 2 gigabyte. A single dynamic
+ object (the main program, any shared library) is limited to 4GB in
+ size. Having a .rela.plt of 2GB would already make the .plt
+ section bigger than 8GB. */
static const bfd_byte elf_s390x_plt_entry[PLT_ENTRY_SIZE] =
{
@@ -565,8 +565,8 @@ static const bfd_byte elf_s390x_plt_entry[PLT_ENTRY_SIZE] =
};
/* The first PLT entry pushes the offset into the symbol table
- from R1 onto the stack at 8(15) and the loader object info
- at 12(15), loads the loader address in R1 and jumps to it. */
+ from R1 onto the stack at 56(15) and the loader object info
+ at 48(15), loads the loader address in R1 and jumps to it. */
/* The first entry in the PLT:
@@ -3065,7 +3065,7 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd,
bfd_put_32 (output_bfd, - (PLT_FIRST_ENTRY_SIZE +
(PLT_ENTRY_SIZE * plt_index) + 22)/2,
htab->elf.splt->contents + h->plt.offset + 24);
- /* Fixup offset into symbol table */
+ /* Fixup offset into .rela.plt section. */
bfd_put_32 (output_bfd, plt_index * sizeof (Elf64_External_Rela),
htab->elf.splt->contents + h->plt.offset + 28);